// @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.' }, ], }, ], }, }, );