eslint.config.mjs 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161
  1. import typescriptEslint from '@typescript-eslint/eslint-plugin';
  2. import globals from 'globals';
  3. import tsParser from '@typescript-eslint/parser';
  4. import path from 'node:path';
  5. import {fileURLToPath} from 'node:url';
  6. import js from '@eslint/js';
  7. import {FlatCompat} from '@eslint/eslintrc';
  8. const __filename = fileURLToPath(import.meta.url);
  9. const __dirname = path.dirname(__filename);
  10. const compat = new FlatCompat({
  11. baseDirectory: __dirname,
  12. recommendedConfig: js.configs.recommended,
  13. allConfig: js.configs.all
  14. });
  15. export default [{
  16. ignores: [
  17. 'src/vendor/**/*',
  18. 'src/solid/**/*',
  19. 'src/opus-recorder/**/*',
  20. 'public/**/*'
  21. ]
  22. }, ...compat.extends(), {
  23. plugins: {
  24. '@typescript-eslint': typescriptEslint
  25. },
  26. languageOptions: {
  27. globals: {
  28. ...globals.browser
  29. },
  30. parser: tsParser,
  31. ecmaVersion: 'latest',
  32. sourceType: 'module',
  33. parserOptions: {
  34. project: ['./tsconfig.json']
  35. }
  36. },
  37. rules: {
  38. 'max-len': 'off',
  39. 'keyword-spacing': ['error', {
  40. after: true,
  41. overrides: {
  42. if: {
  43. before: true,
  44. after: false
  45. },
  46. else: {
  47. before: true
  48. },
  49. catch: {
  50. before: true,
  51. after: false
  52. },
  53. for: {
  54. after: false
  55. },
  56. while: {
  57. after: false
  58. },
  59. switch: {
  60. after: false
  61. }
  62. }
  63. }],
  64. 'linebreak-style': ['error', 'unix'],
  65. 'eol-last': 'error',
  66. 'indent': ['error', 2, {
  67. CallExpression: {
  68. arguments: 1
  69. },
  70. FunctionDeclaration: {
  71. body: 1,
  72. parameters: 1
  73. },
  74. FunctionExpression: {
  75. body: 1,
  76. parameters: 1
  77. },
  78. MemberExpression: 0,
  79. ObjectExpression: 1,
  80. SwitchCase: 1,
  81. ignoredNodes: ['ConditionalExpression']
  82. }],
  83. 'space-before-function-paren': ['error', 'never'],
  84. 'prefer-promise-reject-errors': 'off',
  85. 'curly': 'off',
  86. 'comma-dangle': ['error', 'never'],
  87. 'comma-spacing': 'error',
  88. 'comma-style': 'error',
  89. 'quote-props': ['error', 'consistent'],
  90. 'quotes': ['error', 'single', {
  91. allowTemplateLiterals: true
  92. }],
  93. 'space-before-blocks': ['error', 'always'],
  94. 'spaced-comment': ['error', 'always'],
  95. 'prefer-spread': 'off',
  96. 'prefer-const': ['error', {
  97. destructuring: 'all'
  98. }],
  99. 'object-curly-spacing': ['error', 'never'],
  100. 'array-bracket-spacing': ['error', 'never'],
  101. 'switch-colon-spacing': 'error',
  102. 'operator-linebreak': ['error', 'after'],
  103. 'padded-blocks': ['error', 'never'],
  104. 'no-useless-call': 'error',
  105. 'no-trailing-spaces': 'error',
  106. 'no-mixed-spaces-and-tabs': 'error',
  107. 'no-multiple-empty-lines': ['error', {
  108. max: 2
  109. }],
  110. 'no-tabs': 'error',
  111. 'no-multi-str': 'error',
  112. 'no-new-wrappers': 'error',
  113. 'no-irregular-whitespace': ['error', {
  114. skipStrings: true,
  115. skipComments: true,
  116. skipRegExps: true,
  117. skipTemplates: true
  118. }],
  119. 'no-unexpected-multiline': 'error',
  120. 'no-return-await': 'error',
  121. '@typescript-eslint/await-thenable': 'error'
  122. }
  123. }, {
  124. files: ['**/*.ts', '**/*.tsx'],
  125. languageOptions: {
  126. ecmaVersion: 5,
  127. sourceType: 'script',
  128. parserOptions: {
  129. project: ['./tsconfig.json']
  130. }
  131. }
  132. }];