| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071 |
- // @ts-check
- import js from '@eslint/js';
- import globals from 'globals';
- import tseslint from 'typescript-eslint';
- const noMathRandom = {
- 'no-restricted-properties': [
- 'error',
- { object: 'Math', property: 'random', message: 'Use the seeded RNG from shared/rng.ts.' },
- ],
- };
- export default tseslint.config(
- { ignores: ['out/**', 'dist/**', 'node_modules/**'] },
- js.configs.recommended,
- ...tseslint.configs.recommended,
- {
- languageOptions: { globals: { ...globals.node } },
- rules: {
- '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
- },
- },
- {
- files: ['src/renderer/**/*.ts'],
- languageOptions: { globals: { ...globals.browser } },
- },
- {
- files: ['src/shared/**/*.ts'],
- rules: {
- ...noMathRandom,
- 'no-restricted-imports': [
- 'error',
- {
- patterns: [
- { group: ['pixi.js', 'electron', 'planck', 'ws', 'msgpackr', 'pngjs'], message: 'shared/ depends only on itself.' },
- { group: ['fs', 'node:*', 'path'], message: 'shared/ must not use Node APIs.' },
- { group: ['**/server/**', '**/renderer/**', '**/main/**', '**/preload/**'], message: 'shared/ depends only on itself.' },
- ],
- },
- ],
- },
- },
- {
- files: ['src/server/**/*.ts'],
- rules: {
- ...noMathRandom,
- 'no-restricted-imports': [
- 'error',
- {
- patterns: [
- { group: ['electron', 'pixi.js'], message: 'server/ must run in plain Node.' },
- { group: ['**/renderer/**', '**/main/**', '**/preload/**'], message: 'server/ depends only on shared/ and Node.' },
- ],
- },
- ],
- },
- },
- {
- files: ['src/renderer/**/*.ts'],
- rules: {
- 'no-restricted-imports': [
- 'error',
- {
- patterns: [
- { group: ['**/server/**', '**/main/**', 'planck', 'electron'], message: 'renderer/ depends only on shared/ and Pixi.' },
- ],
- },
- ],
- },
- },
- );
|