|
import globals from "globals"; |
|
import ts_plugin from "@typescript-eslint/eslint-plugin"; |
|
import js_plugin from "@eslint/js"; |
|
import jsdoc from "eslint-plugin-jsdoc"; |
|
|
|
import typescriptParser from "@typescript-eslint/parser"; |
|
import sveltePlugin from "eslint-plugin-svelte"; |
|
import svelteParser from "svelte-eslint-parser"; |
|
|
|
const ts_rules_disabled = Object.fromEntries( |
|
Object.keys(ts_plugin.rules).map((rule) => [ |
|
`@typescript-eslint/${rule}`, |
|
"off" |
|
]) |
|
); |
|
const js_rules_disabled = Object.fromEntries( |
|
Object.keys(js_plugin.configs.all.rules).map((rule) => [rule, "off"]) |
|
); |
|
|
|
const jsdoc_rules_disabled = Object.fromEntries( |
|
Object.keys(jsdoc.configs.recommended.rules).map((rule) => [ |
|
`jsdoc/${rule}`, |
|
"off" |
|
]) |
|
); |
|
|
|
const js_rules = { |
|
...js_rules_disabled, |
|
"no-console": ["error", { allow: ["warn", "error", "debug", "info"] }], |
|
"no-constant-condition": "error", |
|
"no-dupe-args": "error", |
|
"no-extra-boolean-cast": "error", |
|
"no-unexpected-multiline": "error", |
|
"no-unreachable": "error", |
|
"array-callback-return": "error", |
|
complexity: "error", |
|
"no-else-return": "error", |
|
"no-useless-return": "error", |
|
"no-undef": "error" |
|
}; |
|
|
|
const ts_rules = { |
|
...ts_rules_disabled, |
|
"@typescript-eslint/adjacent-overload-signatures": "error", |
|
"@typescript-eslint/explicit-function-return-type": [ |
|
"error", |
|
{ allowExpressions: true } |
|
], |
|
"@typescript-eslint/consistent-type-exports": "error", |
|
"@typescript-eslint/ban-types": "error", |
|
"@typescript-eslint/array-type": "error", |
|
"@typescript-eslint/no-inferrable-types": "error" |
|
}; |
|
|
|
const jsdoc_rules = { |
|
...jsdoc_rules_disabled, |
|
"jsdoc/require-param-description": "error", |
|
"jsdoc/require-returns-description": "error" |
|
}; |
|
|
|
const { browser, es2021, node } = globals; |
|
|
|
export default [ |
|
{ |
|
ignores: [ |
|
"**/.svelte-kit/**/*", |
|
"**/node_modules/**", |
|
"**/dist/**", |
|
"**/.config/*", |
|
"**/*.spec.ts", |
|
"**/*.test.ts", |
|
"**/*.node-test.ts", |
|
"js/spa/test/**/*", |
|
"**/*vite.config.ts", |
|
"**/_website/**/*", |
|
"**/app/**/*", |
|
"**/_spaces-test/**/*", |
|
"**/preview/test/**/*", |
|
"**/component-test/**/*", |
|
"**/js/wasm/src/webworker/**/*" |
|
] |
|
}, |
|
{ |
|
files: ["**/*.js", "**/*.cjs"], |
|
languageOptions: { |
|
globals: { |
|
...browser, |
|
...es2021, |
|
...node |
|
} |
|
}, |
|
|
|
plugins: { |
|
"eslint:recommended": js_plugin, |
|
jsdoc |
|
}, |
|
rules: { ...js_rules, ...jsdoc_rules } |
|
}, |
|
|
|
{ |
|
files: ["**/*.ts"], |
|
languageOptions: { |
|
parser: typescriptParser, |
|
parserOptions: { |
|
project: "./tsconfig.json", |
|
extraFileExtensions: [".svelte"] |
|
}, |
|
globals: { |
|
...browser, |
|
...es2021, |
|
...node |
|
} |
|
}, |
|
|
|
plugins: { |
|
"@typescript-eslint": ts_plugin, |
|
"eslint:recommended": js_plugin, |
|
jsdoc |
|
}, |
|
rules: { |
|
...ts_rules, |
|
...js_rules, |
|
...jsdoc_rules, |
|
"no-undef": "off" |
|
} |
|
}, |
|
{ |
|
files: ["**/client/js/**"], |
|
languageOptions: { |
|
parserOptions: { |
|
project: "./client/js/tsconfig.json" |
|
} |
|
} |
|
}, |
|
{ |
|
files: ["**/*.svelte"], |
|
languageOptions: { |
|
parser: svelteParser, |
|
parserOptions: { |
|
parser: typescriptParser, |
|
project: "./tsconfig.json", |
|
extraFileExtensions: [".svelte"] |
|
}, |
|
globals: { |
|
...browser, |
|
...es2021 |
|
} |
|
}, |
|
plugins: { |
|
svelte: sveltePlugin, |
|
"@typescript-eslint": ts_plugin, |
|
"eslint:recommended": js_plugin, |
|
jsdoc |
|
}, |
|
rules: { |
|
...ts_rules, |
|
...js_rules, |
|
...jsdoc_rules, |
|
...sveltePlugin.configs.recommended.rules, |
|
"svelte/no-at-html-tags": "off", |
|
"no-undef": "off" |
|
} |
|
} |
|
]; |
|
|