eslint.config.mjs 2.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100
  1. import path from "node:path";
  2. import { fileURLToPath } from "node:url";
  3. import typescriptEslint from "@typescript-eslint/eslint-plugin";
  4. import storybookEslint from "eslint-plugin-storybook";
  5. import globals from "globals";
  6. import tsParser from "@typescript-eslint/parser";
  7. import js from "@eslint/js";
  8. import { FlatCompat } from "@eslint/eslintrc";
  9. const __filename = fileURLToPath(import.meta.url);
  10. const __dirname = path.dirname(__filename);
  11. const compat = new FlatCompat({
  12. baseDirectory: __dirname,
  13. recommendedConfig: js.configs.recommended,
  14. allConfig: js.configs.all,
  15. });
  16. export default [{
  17. ignores: ["**/*.min.*", "**/*.user.js", "**/*.map", "dist/**/*", "**/test.ts"],
  18. }, ...compat.extends(
  19. "eslint:recommended",
  20. "plugin:storybook/recommended",
  21. "plugin:@typescript-eslint/recommended",
  22. ), {
  23. plugins: {
  24. "@typescript-eslint": typescriptEslint,
  25. "storybook": storybookEslint,
  26. },
  27. languageOptions: {
  28. globals: {
  29. ...globals.browser,
  30. ...globals.node,
  31. Atomics: "readonly",
  32. SharedArrayBuffer: "readonly",
  33. GM: "readonly",
  34. unsafeWindow: "writable",
  35. },
  36. parser: tsParser,
  37. ecmaVersion: "latest",
  38. sourceType: "module",
  39. },
  40. rules: {
  41. "no-unreachable": "off",
  42. quotes: ["error", "double"],
  43. semi: ["error", "always"],
  44. "eol-last": ["error", "always"],
  45. "no-async-promise-executor": "off",
  46. "no-cond-assign": "off",
  47. indent: ["error", 2, {
  48. ignoredNodes: ["VariableDeclaration[declarations.length=0]"],
  49. }],
  50. "@typescript-eslint/no-non-null-assertion": "off",
  51. "@typescript-eslint/no-unused-vars": ["warn", {
  52. vars: "local",
  53. ignoreRestSiblings: true,
  54. args: "after-used",
  55. argsIgnorePattern: "^_",
  56. }],
  57. "no-unused-vars": "off",
  58. "@typescript-eslint/ban-ts-comment": "off",
  59. "@typescript-eslint/ban-types": ["error", {
  60. types: {
  61. "{}": false,
  62. },
  63. extendDefaults: true,
  64. }],
  65. "@typescript-eslint/no-explicit-any": "off",
  66. "@typescript-eslint/no-unused-expressions": ["error", {
  67. allowShortCircuit: true,
  68. allowTernary: true,
  69. allowTaggedTemplates: true,
  70. }],
  71. "comma-dangle": ["error", "only-multiline"],
  72. "no-misleading-character-class": "off",
  73. },
  74. }, {
  75. files: ["**/*.js", "**/*.mjs", "**/*.cjs"],
  76. rules: {
  77. "@typescript-eslint/no-var-requires": "off",
  78. quotes: ["error", "double"],
  79. semi: ["error", "always"],
  80. "eol-last": ["error", "always"],
  81. "no-async-promise-executor": "off",
  82. indent: ["error", 2, {
  83. ignoredNodes: ["VariableDeclaration[declarations.length=0]"],
  84. }],
  85. "no-unused-vars": ["warn", {
  86. vars: "local",
  87. ignoreRestSiblings: true,
  88. args: "after-used",
  89. argsIgnorePattern: "^_",
  90. }],
  91. "comma-dangle": ["error", "only-multiline"],
  92. },
  93. }];