eslint.config.mjs 2.0 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071
  1. // @ts-check
  2. import js from '@eslint/js';
  3. import globals from 'globals';
  4. import tseslint from 'typescript-eslint';
  5. const noMathRandom = {
  6. 'no-restricted-properties': [
  7. 'error',
  8. { object: 'Math', property: 'random', message: 'Use the seeded RNG from shared/rng.ts.' },
  9. ],
  10. };
  11. export default tseslint.config(
  12. { ignores: ['out/**', 'dist/**', 'node_modules/**'] },
  13. js.configs.recommended,
  14. ...tseslint.configs.recommended,
  15. {
  16. languageOptions: { globals: { ...globals.node } },
  17. rules: {
  18. '@typescript-eslint/no-unused-vars': ['error', { argsIgnorePattern: '^_' }],
  19. },
  20. },
  21. {
  22. files: ['src/renderer/**/*.ts'],
  23. languageOptions: { globals: { ...globals.browser } },
  24. },
  25. {
  26. files: ['src/shared/**/*.ts'],
  27. rules: {
  28. ...noMathRandom,
  29. 'no-restricted-imports': [
  30. 'error',
  31. {
  32. patterns: [
  33. { group: ['pixi.js', 'electron', 'planck', 'ws', 'msgpackr', 'pngjs'], message: 'shared/ depends only on itself.' },
  34. { group: ['fs', 'node:*', 'path'], message: 'shared/ must not use Node APIs.' },
  35. { group: ['**/server/**', '**/renderer/**', '**/main/**', '**/preload/**'], message: 'shared/ depends only on itself.' },
  36. ],
  37. },
  38. ],
  39. },
  40. },
  41. {
  42. files: ['src/server/**/*.ts'],
  43. rules: {
  44. ...noMathRandom,
  45. 'no-restricted-imports': [
  46. 'error',
  47. {
  48. patterns: [
  49. { group: ['electron', 'pixi.js'], message: 'server/ must run in plain Node.' },
  50. { group: ['**/renderer/**', '**/main/**', '**/preload/**'], message: 'server/ depends only on shared/ and Node.' },
  51. ],
  52. },
  53. ],
  54. },
  55. },
  56. {
  57. files: ['src/renderer/**/*.ts'],
  58. rules: {
  59. 'no-restricted-imports': [
  60. 'error',
  61. {
  62. patterns: [
  63. { group: ['**/server/**', '**/main/**', 'planck', 'electron'], message: 'renderer/ depends only on shared/ and Pixi.' },
  64. ],
  65. },
  66. ],
  67. },
  68. },
  69. );