From 807ebd873b6f6fcd217ba1038ffb75f0a926d3c1 Mon Sep 17 00:00:00 2001 From: Anders Nilsson Date: Thu, 28 Nov 2024 10:15:53 +0100 Subject: [PATCH] feat: expose single configs as named exports (#218) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-authored-by: Egill Sveinbjörnsson Co-authored-by: Christofer Splittorff --- .changeset/strong-paws-laugh.md | 5 + .github/workflows/ci.yml | 8 +- .github/workflows/update-eslint-configs.yaml | 27 + .vscode/settings.json | 10 +- package.json | 3 +- packages/eslint-config/.prettierignore | 1 + packages/eslint-config/README.md | 68 +- packages/eslint-config/eslint.config.js | 11 +- packages/eslint-config/package.json | 3 +- packages/eslint-config/src/configs/cjs.js | 55 +- packages/eslint-config/src/configs/esm.js | 54 +- packages/eslint-config/src/configs/jest.js | 25 +- .../eslint-config/src/configs/playwright.js | 19 +- packages/eslint-config/src/configs/react.js | 56 +- .../eslint-config/src/configs/recommended.js | 32 +- .../eslint-config/src/configs/rules/index.js | 19 - .../src/configs/rules/testing-library.js | 74 - packages/eslint-config/src/configs/svelte.js | 68 +- packages/eslint-config/src/configs/vitest.js | 36 +- packages/eslint-config/src/index.d.ts | 22 +- packages/eslint-config/src/index.js | 10 +- packages/eslint-config/src/types/index.ts | 4 +- .../src/utils/__tests__/compose.test.ts | 25 + .../src/utils/__tests__/merge.test.ts | 14 + packages/eslint-config/src/utils/compose.js | 13 +- packages/eslint-config/src/utils/merge.js | 5 +- .../eslint-config/test/generate-configs.js | 67 + .../test/generated/cjs-final-config.js | 1794 ++++++ .../test/generated/esm-final-config.js | 1778 ++++++ .../test/generated/jest-final-config.js | 88 + .../test/generated/playwright-final-config.js | 103 + .../test/generated/react-final-config.js | 5155 +++++++++++++++++ .../generated/recommended-final-config.js | 3900 +++++++++++++ .../test/generated/svelte-final-config.js | 3954 +++++++++++++ .../test/generated/vitest-final-config.js | 60 + packages/eslint-config/test/update-configs.sh | 17 + packages/eslint-config/test/verify-configs.sh | 16 + test/test-react-svelte/src/ReactComponent.tsx | 2 + test/test-react/src/ReactComponent.tsx | 2 + turbo.json | 3 + 40 files changed, 17324 insertions(+), 282 deletions(-) create mode 100644 .changeset/strong-paws-laugh.md create mode 100644 .github/workflows/update-eslint-configs.yaml create mode 100644 packages/eslint-config/.prettierignore delete mode 100644 packages/eslint-config/src/configs/rules/index.js delete mode 100644 packages/eslint-config/src/configs/rules/testing-library.js create mode 100644 packages/eslint-config/test/generate-configs.js create mode 100644 packages/eslint-config/test/generated/cjs-final-config.js create mode 100644 packages/eslint-config/test/generated/esm-final-config.js create mode 100644 packages/eslint-config/test/generated/jest-final-config.js create mode 100644 packages/eslint-config/test/generated/playwright-final-config.js create mode 100644 packages/eslint-config/test/generated/react-final-config.js create mode 100644 packages/eslint-config/test/generated/recommended-final-config.js create mode 100644 packages/eslint-config/test/generated/svelte-final-config.js create mode 100644 packages/eslint-config/test/generated/vitest-final-config.js create mode 100755 packages/eslint-config/test/update-configs.sh create mode 100755 packages/eslint-config/test/verify-configs.sh diff --git a/.changeset/strong-paws-laugh.md b/.changeset/strong-paws-laugh.md new file mode 100644 index 0000000..dd4a257 --- /dev/null +++ b/.changeset/strong-paws-laugh.md @@ -0,0 +1,5 @@ +--- +"@qlik/eslint-config": minor +--- + +Exposing single configs as named exports. Can be import as `import { recommendedJS, recommendedTS } from "@qlik/eslint-config"` diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 46f2831..273d83a 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -18,23 +18,17 @@ jobs: - uses: actions/checkout@v4 with: fetch-depth: 0 ## Needed for Changesets to find `main` branch - ## https://github.com/changesets/changesets/issues/517 - name: Create git reference to main branch (for Changesets) if: ${{ github.event.pull_request.title != 'Version Packages' }} run: git pull --force --no-tags origin main:main - - uses: pnpm/action-setup@v3 - - uses: actions/setup-node@v4 with: node-version: 20 cache: pnpm - - run: pnpm install - - run: pnpm exec changeset status --since=main - - run: pnpm format:check - - run: pnpm lint + - run: pnpm test diff --git a/.github/workflows/update-eslint-configs.yaml b/.github/workflows/update-eslint-configs.yaml new file mode 100644 index 0000000..e8f5dd7 --- /dev/null +++ b/.github/workflows/update-eslint-configs.yaml @@ -0,0 +1,27 @@ +name: Update ESLint Test Configs + +on: + workflow_dispatch: + +jobs: + update-configs: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + + - name: Git Config + run: | + git config user.name "github-action" + git config user.email "github-action@noreply.github.com" + + - uses: pnpm/action-setup@v3 + + - uses: actions/setup-node@v4 + with: + node-version: 20 + cache: pnpm + + - run: pnpm install + + - name: Update Configs + run: ./packages/eslint-config/test/update-configs.sh diff --git a/.vscode/settings.json b/.vscode/settings.json index e7f22e4..01858f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,11 @@ { - "eslint.workingDirectories": ["test/test-react-svelte", "test/test-react", "test/test-base"] + "eslint.workingDirectories": [ + "packages/browserslist-config", + "packages/eslint-config", + "packages/prettier-config", + "packages/tsconfig", + "test/test-react-svelte", + "test/test-react", + "test/test-base" + ] } diff --git a/package.json b/package.json index 060db36..c13cf56 100644 --- a/package.json +++ b/package.json @@ -10,7 +10,8 @@ "format:write": "turbo run format:write", "lint": "turbo run lint", "prepare-release": "changeset", - "publish-packages": "changeset publish" + "publish-packages": "changeset publish", + "test": "turbo run test" }, "prettier": "@qlik/prettier-config", "devDependencies": { diff --git a/packages/eslint-config/.prettierignore b/packages/eslint-config/.prettierignore new file mode 100644 index 0000000..633c8d0 --- /dev/null +++ b/packages/eslint-config/.prettierignore @@ -0,0 +1 @@ +test/generated diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md index 42911f0..1fcfcc8 100644 --- a/packages/eslint-config/README.md +++ b/packages/eslint-config/README.md @@ -37,13 +37,17 @@ export default qlik.compose( ### v1 notable changes -- Updates [`@typescript-eslint/typescript-eslint`](https://github.com/typescript-eslint/typescript-eslint) to v8, this brings a few new rules. See article for v8 -- Moves from [`eslint-plugin-import`](https://github.com/import-js/eslint-plugin-import) to [`eslint-plugin-import-x`](https://github.com/un-ts/eslint-plugin-import-x). If you reference any of the `import/` rules you'll need to replace `import/` with `import-x/`. +- Updates [`@typescript-eslint/typescript-eslint`](https://github.com/typescript-eslint/typescript-eslint) to v8, this brings +a few new rules. See article for v8 +- Moves from [`eslint-plugin-import`](https://github.com/import-js/eslint-plugin-import) to [`eslint-plugin-import-x`](https://github.com/un-ts/eslint-plugin-import-x). +If you reference any of the `import/` rules you'll need to replace `import/` with `import-x/`. - Some stylistic rules have been disabled (for example `function` vs arrow functions) ## Usage -These configs works on both TypeScript and JavaSript out of the box. (as long as the file endings are any of `.js, .jsx, .mjs, .cjs, .ts, .tsx, .cts, .mts`) +The default exports configs works on both TypeScript and JavaSript out of the box. (as long as the file endings are any of `.js, .jsx, .mjs, .cjs, .ts, .tsx, .cts, .mts`). +The configs are eslint flat config arrays populated with configs that has appropriate file endings attached to them. Designed +to diminish the amount of configuration needed in an `eslint.config.js` file. To get started, create `eslint.config.js` (if your package json has `"type": "module"`), otherwise create `eslint.config.mjs`. If you are not building your project with TypeScript (using Webpack or Vite for example), then tell TypeScript to include @@ -137,7 +141,61 @@ export default qlik.compose( ); ``` -A config can be extended if needed. For example if the default file patterns needs to be altered. +## Using the named exports configs + +The different configs are also accessible through named imports. These configs can be used in specific scenarios where more +control of the configs are needed. The `extend` property can be used to apply a config on certain file patterns. + +Example only use javascript rules with react + +```js +import qlik, { recommendedJS, reactJS } from "@qlik/eslint-config"; + +export default qlik.compose( + reactJS +) +``` + +with typescript support + +```js +import qlik, { recommendedJS, reactJS } from "@qlik/eslint-config"; + +export default qlik.compose( + reactJS, + reactTS +) +``` + +This is equal to: + +```js +import qlik from "@qlik/eslint-config"; + +export default qlik.compose( + ...qlik.configs.react +) +``` + +The single configs can be useful together with the `extend` property. Below shows an example of a config +that wants to use lint rules for node environment on a part of the code base. + +```js +import qlik, { esmJS } from "@qlik/eslint-config"; + +export default qlik.compose( + // apply recommended config to all files + ...qlik.configs.recommended, + // set node esm config on .js files inside the tools folder + { + files: ["tools/**/*.js"], + extend: [esmJS], + }, +) + +``` + +Example of changing the default file patterns on the vitest config. ```js // @ts-check @@ -148,7 +206,7 @@ export default qlik.compose( { // adds vitest lint rules on the specified files with an altered rule files: ['**/my_tests_are_here/*.spec.ts'] - extends [qlik.configs.vitest], + extend: [qlik.configs.vitest], rules: { "vitest/max-nested-describe": [ "error", diff --git a/packages/eslint-config/eslint.config.js b/packages/eslint-config/eslint.config.js index a36cee3..23cc8ee 100644 --- a/packages/eslint-config/eslint.config.js +++ b/packages/eslint-config/eslint.config.js @@ -1,4 +1,13 @@ import eslint from "@eslint/js"; +import vitestPlugin from "@vitest/eslint-plugin"; import tseslint from "typescript-eslint"; -export default tseslint.config(eslint.configs.recommended, ...tseslint.configs.recommended); +export default tseslint.config( + eslint.configs.recommended, + ...tseslint.configs.recommended, + // test files + { + files: ["**/__tests__/**/*.{js,jsx,ts,tsx}"], + ...vitestPlugin.configs.recommended, + }, +); diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index 2e99569..9d20c6a 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -18,7 +18,8 @@ "check-types": "tsc --noEmit", "format:check": "prettier --check '**' --ignore-unknown", "format:write": "prettier --write '**' --ignore-unknown", - "lint": "eslint ." + "lint": "eslint .", + "test": "vitest run && ./test/verify-configs.sh" }, "prettier": "@qlik/prettier-config", "dependencies": { diff --git a/packages/eslint-config/src/configs/cjs.js b/packages/eslint-config/src/configs/cjs.js index 7d97cb8..90b3681 100644 --- a/packages/eslint-config/src/configs/cjs.js +++ b/packages/eslint-config/src/configs/cjs.js @@ -2,47 +2,54 @@ import globals from "globals"; import { mergeConfigs } from "../utils/config.js"; import { recommendedJS, recommendedTS } from "./recommended.js"; -import rules from "./rules/index.js"; +import nodeRules from "./rules/node.js"; /** * @satisfies {import("../types/index.js").ESLintFlatConfig['rules']} */ const cjsRules = { + ...nodeRules, // modify rules for node commonjs here }; /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const cjsJS = mergeConfigs(recommendedJS, { - name: "node-cjs-js", - files: ["**/*.{js,cjs}"], - languageOptions: { - globals: globals.node, - sourceType: "commonjs", +const cjsJS = mergeConfigs( + // base it on the recommended javascript config + recommendedJS, + // add qlik's recommended node commonjs config for javascript + { + name: "node-cjs-js", + files: ["**/*.{js,cjs}"], + languageOptions: { + globals: globals.node, + sourceType: "commonjs", + }, + rules: cjsRules, }, - rules: { - ...rules.nodeRules, - ...cjsRules, - }, -}); +); /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const cjsTS = mergeConfigs(recommendedTS, { - name: "node-cjs-ts", - files: ["**/*.{ts,cts}"], - languageOptions: { - globals: globals.node, - sourceType: "commonjs", - }, - rules: { - ...rules.nodeRules, - ...cjsRules, - // modify ts specific rules for node here +const cjsTS = mergeConfigs( + // base it on the recommended typescript config + recommendedTS, + // add qlik's recommended node commonjs config for typescript + { + name: "node-cjs-ts", + files: ["**/*.{ts,cts}"], + languageOptions: { + globals: globals.node, + sourceType: "commonjs", + }, + rules: { + ...cjsRules, + // modify ts specific rules for node here + }, }, -}); +); export default [cjsJS, cjsTS]; export { cjsJS, cjsTS }; diff --git a/packages/eslint-config/src/configs/esm.js b/packages/eslint-config/src/configs/esm.js index fa86958..e700399 100644 --- a/packages/eslint-config/src/configs/esm.js +++ b/packages/eslint-config/src/configs/esm.js @@ -2,45 +2,55 @@ import globals from "globals"; import { mergeConfigs } from "../utils/config.js"; import { recommendedJS, recommendedTS } from "./recommended.js"; +import nodeRules from "./rules/node.js"; /** * @satisfies {import("../types/index.js").ESLintFlatConfig["rules"]} */ const nodeEsmRules = { - // modify rules for node esm here + ...nodeRules, "import-x/extensions": ["error", "ignorePackages"], + // modify rules for node esm here }; /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const esmJS = mergeConfigs(recommendedJS, { - name: "node-esm-js", - files: ["**/*.{js,mjs}"], - languageOptions: { - globals: globals.node, - sourceType: "module", +const esmJS = mergeConfigs( + // base it on the recommended javascript config + recommendedJS, + // add qlik's recommended node esm config for javascript + { + name: "node-esm-js", + files: ["**/*.{js,mjs}"], + languageOptions: { + globals: globals.node, + sourceType: "module", + }, + rules: nodeEsmRules, }, - rules: { - ...nodeEsmRules, - }, -}); +); /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const esmTS = mergeConfigs(recommendedTS, { - name: "node-esm-ts", - files: ["**/*.{ts,mts}"], - languageOptions: { - globals: globals.node, - sourceType: "module", - }, - rules: { - ...nodeEsmRules, - // modify ts specific rules for node esm here +const esmTS = mergeConfigs( + // base it on the recommended typescript config + recommendedTS, + // add qlik's recommended node esm config for typescript + { + name: "node-esm-ts", + files: ["**/*.{ts,mts}"], + languageOptions: { + globals: globals.node, + sourceType: "module", + }, + rules: { + ...nodeEsmRules, + // modify typescript specific rules for node esm here if needed + }, }, -}); +); export default [esmJS, esmTS]; export { esmJS, esmTS }; diff --git a/packages/eslint-config/src/configs/jest.js b/packages/eslint-config/src/configs/jest.js index e824062..0d5a5da 100644 --- a/packages/eslint-config/src/configs/jest.js +++ b/packages/eslint-config/src/configs/jest.js @@ -2,23 +2,26 @@ import jestPlugin from "eslint-plugin-jest"; import testingLibraryPlugin from "eslint-plugin-testing-library"; import { mergeConfigs } from "../utils/config.js"; -import rules from "./rules/index.js"; /** * @type {import("../types/index.js").ESLintFlatConfig} * config for jest https://github.com/jest-community/eslint-plugin-jest */ -const jest = mergeConfigs(jestPlugin.configs["flat/recommended"], { - name: "jest-js", - files: ["**/__test__/**/*.{js,jsx,ts,tsx}", "**/__tests__/**/*.{js,jsx,ts,tsx}"], - plugins: { - "testing-library": testingLibraryPlugin, +const jest = mergeConfigs( + // base it on the recommended jest config + jestPlugin.configs["flat/recommended"], + // add testing-library plugin recommended config for react + testingLibraryPlugin.configs["flat/react"], + // add qlik's recommended jest config + { + name: "jest", + files: ["**/__test__/**/*.{js,jsx,ts,tsx}", "**/__tests__/**/*.{js,jsx,ts,tsx}"], + rules: { + // ...testingLibraryRules, + // modify rules from eslint-plugin-jest here + }, }, - rules: { - ...rules.testingLibraryRules, - // modify rules from eslint-plugin-jest here - }, -}); +); export default [jest]; export { jest }; diff --git a/packages/eslint-config/src/configs/playwright.js b/packages/eslint-config/src/configs/playwright.js index a90ccda..68cdeef 100644 --- a/packages/eslint-config/src/configs/playwright.js +++ b/packages/eslint-config/src/configs/playwright.js @@ -6,14 +6,19 @@ import { mergeConfigs } from "../utils/config.js"; * @type {import("../types/index.js").ESLintFlatConfig} * config for Playwright https://github.com/playwright-community/eslint-plugin-playwright */ -const playwright = mergeConfigs(playwrightEslint.configs["flat/recommended"], { - name: "playwright", - files: ["tests/**", "test/**"], - rules: { - ...playwrightEslint.configs["flat/recommended"].rules, - // modify rules from eslint-plugin-playwright here +const playwright = mergeConfigs( + // base it on the recommended config + playwrightEslint.configs["flat/recommended"], + // add qlik's recommended playwright config + { + name: "playwright", + files: ["tests/**", "test/**"], + rules: { + ...playwrightEslint.configs["flat/recommended"].rules, + // modify rules from eslint-plugin-playwright here + }, }, -}); +); export default [playwright]; export { playwright }; diff --git a/packages/eslint-config/src/configs/react.js b/packages/eslint-config/src/configs/react.js index aedd6be..c710b71 100644 --- a/packages/eslint-config/src/configs/react.js +++ b/packages/eslint-config/src/configs/react.js @@ -6,7 +6,9 @@ import eslintPluginReact from "eslint-plugin-react"; import reactHooks from "eslint-plugin-react-hooks"; import { mergeConfigs } from "../utils/config.js"; import { recommendedJS, recommendedTS } from "./recommended.js"; -import rules from "./rules/index.js"; +import reactA11yRules from "./rules/react-a11y.js"; +import reactHooksRules from "./rules/react-hooks.js"; +import reactRules from "./rules/react.js"; /** @type {any} */ const reactPlugin = eslintPluginReact; @@ -14,7 +16,7 @@ const reactPlugin = eslintPluginReact; /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const reactConfig = { +const reactBaseConfig = { languageOptions: { parserOptions: { ecmaFeatures: { @@ -36,40 +38,54 @@ const reactConfig = { rules: { // react plugin ...reactPlugin.configs.flat.recommended.rules, - ...rules.reactRules, + ...reactRules, // jsx-a11y plugin ...jsxA11y.flatConfigs.recommended.rules, - ...rules.reactA11yRules, + ...reactA11yRules, ...react.configs.recommended.rules, // react-hooks plugin ...reactHooks.configs.recommended.rules, - ...rules.reactHooksRules, + ...reactHooksRules, }, }; /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const reactJS = mergeConfigs(reactConfig, { - name: "react-js", - files: ["**/*.js", "**/*.jsx"], - rules: { - // turn on/off or modify js rules necessary for react - "react/jsx-filename-extension": [2, { extensions: [".js", ".jsx"] }], +const reactJS = mergeConfigs( + // base it on the recommended javascript config + recommendedJS, + // add the base react config + reactBaseConfig, + // add qlik's recommended react config for javascript + { + name: "react-js", + files: ["**/*.js", "**/*.jsx"], + rules: { + // turn on/off or modify js rules necessary for react + "react/jsx-filename-extension": [2, { extensions: [".js", ".jsx"] }], + }, }, -}); +); /** * @type {import("../types/index.js").ESLintFlatConfig} */ -const reactTS = mergeConfigs(reactConfig, { - name: "react-ts", - files: ["**/*.ts", "**/*.tsx"], - rules: { - // turn on/off or modify js/ts rules necessary for react - "react/jsx-filename-extension": [2, { extensions: [".js", ".jsx", ".ts", ".tsx"] }], +const reactTS = mergeConfigs( + // base it on the recommended typescript config + recommendedTS, + // add the base react config + reactBaseConfig, + // add qlik's recommended react config for typescript + { + name: "react-ts", + files: ["**/*.ts", "**/*.tsx"], + rules: { + // turn on/off or modify js/ts rules necessary for react + "react/jsx-filename-extension": [2, { extensions: [".js", ".jsx", ".ts", ".tsx"] }], + }, }, -}); +); -export default [recommendedJS, reactTS, recommendedTS, reactTS]; +export default [reactJS, reactTS]; export { reactJS, reactTS }; diff --git a/packages/eslint-config/src/configs/recommended.js b/packages/eslint-config/src/configs/recommended.js index 7ad6626..537c0ae 100644 --- a/packages/eslint-config/src/configs/recommended.js +++ b/packages/eslint-config/src/configs/recommended.js @@ -5,9 +5,15 @@ import eslintPluginImportX from "eslint-plugin-import-x"; import globals from "globals"; import tsconfig from "typescript-eslint"; import { mergeConfigs } from "../utils/config.js"; -import rules from "./rules/index.js"; +import eslintCoreRules from "./rules/eslint-core.js"; +import importXRules from "./rules/import-x.js"; +import typescriptRules from "./rules/typescript.js"; const baseConfig = mergeConfigs( + // basic js config + js.configs.recommended, + // import-x plugin config + eslintPluginImportX.flatConfigs.recommended, { languageOptions: { globals: globals.browser, @@ -17,13 +23,10 @@ const baseConfig = mergeConfigs( ecmaVersion: "latest", sourceType: "module", }, - }, - js.configs.recommended, - eslintPluginImportX.flatConfigs.recommended, - { rules: { - ...rules.importXRules, - ...rules.eslintCoreRules, + // add our recommended rules + ...eslintCoreRules, + ...importXRules, }, }, ); @@ -35,6 +38,7 @@ const recommendedJS = mergeConfigs( baseConfig, // tsconfig.configs.base sets eslint parser to use the typescript parser to parse .js files - handles all modern syntax tsconfig.configs.base, + // add qlik's recommended javascript config { name: "recommended-js", files: ["**/*.js", "**/*.mjs", "**/*.cjs"], @@ -45,8 +49,15 @@ const recommendedJS = mergeConfigs( * @type {import("../types/index.js").ESLintFlatConfig} */ const recommendedTS = mergeConfigs( + // base it on base config baseConfig, + // add recommended typescript config + ...tsconfig.configs.recommended, + // add import-x recommended typescript config + eslintPluginImportX.flatConfigs.typescript, + // add qlik's recommended typescript config { + name: "recommended-ts", files: ["**/*.ts", "**/*.tsx", "**/*.mts", "**/*.cts", "**/*.d.ts"], languageOptions: { parserOptions: { @@ -54,12 +65,7 @@ const recommendedTS = mergeConfigs( projectService: true, }, }, - }, - ...tsconfig.configs.recommended, - eslintPluginImportX.flatConfigs.typescript, - { - name: "recommended-ts", - rules: rules.typescriptRules, + rules: typescriptRules, }, ); diff --git a/packages/eslint-config/src/configs/rules/index.js b/packages/eslint-config/src/configs/rules/index.js deleted file mode 100644 index cd241b7..0000000 --- a/packages/eslint-config/src/configs/rules/index.js +++ /dev/null @@ -1,19 +0,0 @@ -import eslintCoreRules from "./eslint-core.js"; -import importXRules from "./import-x.js"; -import nodeRules from "./node.js"; -import reactA11yRules from "./react-a11y.js"; -import reactHooksRules from "./react-hooks.js"; -import reactRules from "./react.js"; -import testingLibraryRules from "./testing-library.js"; -import typescriptRules from "./typescript.js"; - -export default { - eslintCoreRules, - importXRules, - nodeRules, - reactRules, - reactA11yRules, - reactHooksRules, - testingLibraryRules, - typescriptRules, -}; diff --git a/packages/eslint-config/src/configs/rules/testing-library.js b/packages/eslint-config/src/configs/rules/testing-library.js deleted file mode 100644 index fa476d3..0000000 --- a/packages/eslint-config/src/configs/rules/testing-library.js +++ /dev/null @@ -1,74 +0,0 @@ -// @ts-check - -/** - * @satisfies {import("../../types/index.js").ESLintFlatConfig["rules"]} - */ -const rules = { - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/await-async-events.md - "testing-library/await-async-events": ["error", { eventModule: "userEvent" }], - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/await-async-queries.md - "testing-library/await-async-queries": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/await-async-utils.md - "testing-library/await-async-utils": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-await-sync-events.md - "testing-library/no-await-sync-events": ["error", { eventModules: ["fire-event"] }], - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-await-sync-queries.md - "testing-library/no-await-sync-queries": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-container.md - "testing-library/no-container": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-debugging-utils.md - "testing-library/no-debugging-utils": "warn", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-dom-import.md - "testing-library/no-dom-import": ["error", "react"], - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-global-regexp-flag-in-query.md - "testing-library/no-global-regexp-flag-in-query": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-manual-cleanup.md - "testing-library/no-manual-cleanup": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-node-access.md - "testing-library/no-node-access": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-promise-in-fire-event.md - "testing-library/no-promise-in-fire-event": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-render-in-lifecycle.md - "testing-library/no-render-in-lifecycle": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-unnecessary-act.md - "testing-library/no-unnecessary-act": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-wait-for-multiple-assertions.md - "testing-library/no-wait-for-multiple-assertions": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-wait-for-side-effects.md - "testing-library/no-wait-for-side-effects": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/no-wait-for-snapshot.md - "testing-library/no-wait-for-snapshot": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-find-by.md - "testing-library/prefer-find-by": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-presence-queries.md - "testing-library/prefer-presence-queries": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-query-by-disappearance.md - "testing-library/prefer-query-by-disappearance": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/prefer-screen-queries.md - "testing-library/prefer-screen-queries": "error", - - // https://github.com/testing-library/eslint-plugin-testing-library/blob/main/docs/rules/render-result-naming-convention.md - "testing-library/render-result-naming-convention": "error", -}; - -export default rules; diff --git a/packages/eslint-config/src/configs/svelte.js b/packages/eslint-config/src/configs/svelte.js index b8a362d..ce3633e 100644 --- a/packages/eslint-config/src/configs/svelte.js +++ b/packages/eslint-config/src/configs/svelte.js @@ -4,45 +4,51 @@ import svelteParser from "svelte-eslint-parser"; import tsEslint from "typescript-eslint"; import { mergeConfigs } from "../utils/config.js"; import { recommendedJS, recommendedTS } from "./recommended.js"; -import rules from "./rules/svelte.js"; +import svelteRules from "./rules/svelte.js"; /** * @type {import("../types/index.js").ESLintFlatConfig} * config for Svelte https://github.com/sveltejs/eslint-plugin-svelte */ -const svelte = mergeConfigs(...eslintPluginSvelte.configs["flat/recommended"], { - name: "svelte", - files: ["**/*.svelte"], - languageOptions: { - parser: svelteParser, - parserOptions: { - parser: tsEslint.parser, - extraFileExtensions: [".svelte"], +const svelteSvelte = mergeConfigs( + // base it on svelte plugin recommended config + ...eslintPluginSvelte.configs["flat/recommended"], + // add qlik's recommended svelte config + { + name: "svelte", + files: ["**/*.svelte"], + languageOptions: { + parser: svelteParser, + parserOptions: { + parser: tsEslint.parser, + extraFileExtensions: [".svelte"], + }, }, - }, - rules: { - ...rules, - // modify rules from eslint-plugin-svelte here + rules: { + ...svelteRules, + // modify rules from eslint-plugin-svelte here - // Conflicting rules - // https://github.com/sveltejs/eslint-plugin-svelte3/blob/master/OTHER_PLUGINS.md - "import-x/first": "off", - "import-x/no-duplicates": "off", - "import-x/no-mutable-exports": "off", - "import-x/no-unresolved": "off", - "import-x/prefer-default-export": "off", - "import-x/extensions": "off", + // Conflicting rules + // https://github.com/sveltejs/eslint-plugin-svelte3/blob/master/OTHER_PLUGINS.md + "import-x/first": "off", + "import-x/no-duplicates": "off", + "import-x/no-mutable-exports": "off", + "import-x/no-unresolved": "off", + "import-x/prefer-default-export": "off", + "import-x/extensions": "off", - "@typescript-eslint/no-unsafe-call": "off", - "@typescript-eslint/no-unsafe-return": "off", - "@typescript-eslint/no-unsafe-argument": "off", - "@typescript-eslint/no-unsafe-assignment": "off", - "@typescript-eslint/no-unsafe-member-access": "off", + // Issues with TypeScript rules + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-return": "off", + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-member-access": "off", - // Issues with function types that define parameters - "no-unused-vars": "off", + // Issues with function types that define parameters + "no-unused-vars": "off", + }, }, -}); +); -export default [recommendedJS, recommendedTS, svelte]; -export { svelte }; +export default [recommendedJS, recommendedTS, svelteSvelte]; +export { svelteSvelte as svelte }; diff --git a/packages/eslint-config/src/configs/vitest.js b/packages/eslint-config/src/configs/vitest.js index ac6ba0c..883d467 100644 --- a/packages/eslint-config/src/configs/vitest.js +++ b/packages/eslint-config/src/configs/vitest.js @@ -1,36 +1,26 @@ // @ts-check import vitestPlugin from "@vitest/eslint-plugin"; -// @ts-expect-error no types yet import testingLibraryPlugin from "eslint-plugin-testing-library"; import { mergeConfigs } from "../utils/config.js"; -import rules from "./rules/index.js"; - -/** - * @satisfies {import("../types/index.js").ESLintFlatConfig["rules"]} - */ -const vitestCommon = {}; /** * @type {import("../types/index.js").ESLintFlatConfig} * config for jest https://github.com/jest-community/eslint-plugin-jest */ -const vitest = mergeConfigs(vitestCommon, { - name: "vitest-js", - plugins: { - vitest: vitestPlugin, - "testing-library": testingLibraryPlugin, - }, - - files: ["**/__test__/**/*.{js,jsx,ts,tsx}", "**/__tests__/**/*.{js,jsx,ts,tsx}"], - - rules: { - // modify rules from eslint-plugin-vitest here - ...vitestPlugin.configs.recommended.rules, // you can also use vitest.configs.all.rules to enable all rules - ...rules.testingLibraryRules, - "no-magic-numbers": "off", - "@typescript-eslint/no-magic-numbers": "off", +const vitest = mergeConfigs( + // base it on the recommended vitest config + vitestPlugin.configs.recommended, + // add testing-library plugin recommended config for react + testingLibraryPlugin.configs["flat/react"], + // add qlik's recommended vitest config + { + name: "vitest", + files: ["**/__test__/**/*.{js,jsx,ts,tsx}", "**/__tests__/**/*.{js,jsx,ts,tsx}"], + rules: { + // modify rules from eslint-plugin-vitest here + }, }, -}); +); export default [vitest]; export { vitest }; diff --git a/packages/eslint-config/src/index.d.ts b/packages/eslint-config/src/index.d.ts index 54de5cc..e9a1c0c 100644 --- a/packages/eslint-config/src/index.d.ts +++ b/packages/eslint-config/src/index.d.ts @@ -1,4 +1,12 @@ -export default qlikEslintConfig; +import cjs, { cjsJS, cjsTS } from "./configs/cjs.js"; +import esm, { esmJS, esmTS } from "./configs/esm.js"; +import jest from "./configs/jest.js"; +import playwright from "./configs/playwright.js"; +import react, { reactJS, reactTS } from "./configs/react.js"; +import recommended, { recommendedJS, recommendedTS } from "./configs/recommended.js"; +import svelte from "./configs/svelte.js"; +import vitest from "./configs/vitest.js"; +import compose from "./utils/compose.js"; declare namespace qlikEslintConfig { export namespace configs { @@ -13,12 +21,6 @@ declare namespace qlikEslintConfig { } export { compose }; } -import cjs from "./configs/cjs.js"; -import esm from "./configs/esm.js"; -import jest from "./configs/jest.js"; -import playwright from "./configs/playwright.js"; -import react from "./configs/react.js"; -import recommended from "./configs/recommended.js"; -import svelte from "./configs/svelte.js"; -import vitest from "./configs/vitest.js"; -import compose from "./utils/compose.js"; + +export default qlikEslintConfig; +export { cjsJS, cjsTS, esmJS, esmTS, reactJS, reactTS, recommendedJS, recommendedTS }; diff --git a/packages/eslint-config/src/index.js b/packages/eslint-config/src/index.js index 456a15b..ee548f1 100644 --- a/packages/eslint-config/src/index.js +++ b/packages/eslint-config/src/index.js @@ -1,10 +1,10 @@ // Import ESLint configuration modules -import cjs from "./configs/cjs.js"; -import esm from "./configs/esm.js"; +import cjs, { cjsJS, cjsTS } from "./configs/cjs.js"; +import esm, { esmJS, esmTS } from "./configs/esm.js"; import jest from "./configs/jest.js"; import playwright from "./configs/playwright.js"; -import react from "./configs/react.js"; -import recommended from "./configs/recommended.js"; +import react, { reactJS, reactTS } from "./configs/react.js"; +import recommended, { recommendedJS, recommendedTS } from "./configs/recommended.js"; import svelte from "./configs/svelte.js"; import vitest from "./configs/vitest.js"; import compose from "./utils/compose.js"; @@ -27,3 +27,5 @@ const qlikEslintConfig = { }; export default qlikEslintConfig; + +export { cjsJS, cjsTS, esmJS, esmTS, reactJS, reactTS, recommendedJS, recommendedTS }; diff --git a/packages/eslint-config/src/types/index.ts b/packages/eslint-config/src/types/index.ts index 3e2a95e..c0430e0 100644 --- a/packages/eslint-config/src/types/index.ts +++ b/packages/eslint-config/src/types/index.ts @@ -44,9 +44,9 @@ interface ESLintFlatConfigWithExtend extends ESLintFlatConfig { extend?: ESLintFlatConfig[]; } -export type QlikEslintConfig = { +type QlikEslintConfig = { configs: Record; compose: (...configs: ESLintFlatConfigWithExtend[]) => ESLintFlatConfig[]; }; -export type { ESLintFlatConfig, ESLintFlatConfigWithExtend, ESLintLanguageOptions, ESLintPlugin }; +export type { ESLintFlatConfig, ESLintFlatConfigWithExtend, ESLintLanguageOptions, ESLintPlugin, QlikEslintConfig }; diff --git a/packages/eslint-config/src/utils/__tests__/compose.test.ts b/packages/eslint-config/src/utils/__tests__/compose.test.ts index e08a0d3..fe52a3b 100644 --- a/packages/eslint-config/src/utils/__tests__/compose.test.ts +++ b/packages/eslint-config/src/utils/__tests__/compose.test.ts @@ -29,6 +29,31 @@ describe("compose function", () => { ]); }); + it("should merge configs and overwrite files correctly", () => { + const baseConfig1: ESLintFlatConfig = { files: ["*.ts"], rules: { "no-console": "error" } }; + const baseConfig2: ESLintFlatConfig = { files: ["*.tsx"], rules: { "no-undef": "error", "no-var": "error" } }; + + const config = [baseConfig1, baseConfig2]; + + const result = compose({ + extend: [...config], + rules: { "no-debugger": "warn" }, + files: ["*.js"], + }); + + expect(result).toEqual([ + { files: ["*.js"], rules: { "no-console": "error" } }, + { + files: ["*.js"], + rules: { + "no-undef": "error", + "no-var": "error", + }, + }, + { files: ["*.js"], rules: { "no-debugger": "warn" } }, + ]); + }); + it("should handle multiple extends on an otherwise empty config", () => { const baseConfig1: ESLintFlatConfig = { rules: { "no-console": "error" } }; const baseConfig2: ESLintFlatConfig = { rules: { "no-debugger": "warn" } }; diff --git a/packages/eslint-config/src/utils/__tests__/merge.test.ts b/packages/eslint-config/src/utils/__tests__/merge.test.ts index b07fbc7..9929ce9 100644 --- a/packages/eslint-config/src/utils/__tests__/merge.test.ts +++ b/packages/eslint-config/src/utils/__tests__/merge.test.ts @@ -60,4 +60,18 @@ describe("merge function", () => { rules: { a: ["warn", { changed: { b: "bar" } }], b: "off" }, }); }); + + it("should handle merging with empty objects", () => { + const obj1 = { a: 1, b: { c: 2, d: [1, 2] } }; + const obj2 = {}; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: 1, b: { c: 2, d: [1, 2] } }); + }); + + it("should handle merging with keys that should be overridden", () => { + const obj1 = { a: 1, b: 2, files: ["*.js"], globals: ["BrowserGlobal1"] }; + const obj2 = { a: 3, c: 4, files: ["*.ts"], globals: ["NodeGlobal1"] }; + const result = merge(obj1, obj2); + expect(result).toEqual({ a: 3, b: 2, c: 4, files: ["*.ts"], globals: ["NodeGlobal1"] }); + }); }); diff --git a/packages/eslint-config/src/utils/compose.js b/packages/eslint-config/src/utils/compose.js index 806631c..3e5bc5e 100644 --- a/packages/eslint-config/src/utils/compose.js +++ b/packages/eslint-config/src/utils/compose.js @@ -7,17 +7,20 @@ * * @example * ```js - * import eslint from '@eslint/js'; - * import tseslint from 'typescript-eslint'; + * import qlik from "@qlik/eslint-config"; * * export default qlik.compose( - * eslint.configs.recommended, - * ...tseslint.configs.recommended, + * ...qlik.configs.react, + * ...qlik.configs.vitest, * { * rules: { - * '@typescript-eslint/array-type': 'error', + * // Override rules if needed * }, * }, + * // In its own object so it's global + * { + * ignores: ["dist", "node_modules", "script"], + * }, * ); * ``` */ diff --git a/packages/eslint-config/src/utils/merge.js b/packages/eslint-config/src/utils/merge.js index 8a12c83..c0ec64c 100644 --- a/packages/eslint-config/src/utils/merge.js +++ b/packages/eslint-config/src/utils/merge.js @@ -1,5 +1,6 @@ // these ones will only do shallow merge, but the merge function will do deep merge const noNeedToDeepMerge = ["plugins", "rules", "parser"]; +const overWrite = ["files", "globals"]; /** * @@ -14,7 +15,9 @@ export const merge = (obj1, obj2) => { } const merged = { ...obj1 }; Object.keys(obj2).forEach((key) => { - if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) { + if (overWrite.includes(key)) { + merged[key] = obj2[key]; + } else if (Array.isArray(obj1[key]) && Array.isArray(obj2[key])) { merged[key] = [...new Set([...obj1[key], ...obj2[key]])]; } else if (noNeedToDeepMerge.includes(key)) { merged[key] = { ...obj1[key], ...obj2[key] }; diff --git a/packages/eslint-config/test/generate-configs.js b/packages/eslint-config/test/generate-configs.js new file mode 100644 index 0000000..873e652 --- /dev/null +++ b/packages/eslint-config/test/generate-configs.js @@ -0,0 +1,67 @@ +import fs from "node:fs/promises"; +import path from "node:path"; +import { fileURLToPath } from "node:url"; +import qlik from "../src/index.js"; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + +/** + * @param {import("../src/types/index.js").ESLintFlatConfig[]} obj + * @param { number } space + */ +function JSONstringifyOrder(obj, space) { + const allKeys = new Set(); + JSON.stringify(obj, (key, value) => (allKeys.add(key), value)); + return JSON.stringify(obj, Array.from(allKeys).sort(), space); +} + +/** + * Parses a config object array, except for the "plugins" key. + * @param {import("../src/types/index.js").ESLintFlatConfig[]} configArray - The configuration object to parse. + * @returns {string} The parsed configuration object. + */ +function parseConfig(configArray) { + const final = + configArray.map((config) => { + if (config.plugins) { + Object.keys(config.plugins).forEach((key) => { + if (config.plugins) { + // @ts-expect-error - intentional to not include plugins in the output + config.plugins[key] = `${key}-plugin`; + } + if (config.languageOptions?.parser) { + // @ts-expect-error - intentional to not include parser in the output + config.languageOptions.parser = `${config.name || "unknown"}-parser`; + } + }); + } + return config; + }) || []; + // stringitfy with 2 spaces indentation with object keys sorted + return JSONstringifyOrder(final, 2); +} + +// cjs +const cjsConfig = path.resolve(__dirname, "generated/cjs-final-config.js"); +await fs.writeFile(cjsConfig, `export default ${parseConfig(qlik.configs.cjs)}`); +// esm +const esmConfig = path.resolve(__dirname, "generated/esm-final-config.js"); +await fs.writeFile(esmConfig, `export default ${parseConfig(qlik.configs.esm)}`); +// recommended +const recommendedConfig = path.resolve(__dirname, "generated/recommended-final-config.js"); +await fs.writeFile(recommendedConfig, `export default ${parseConfig(qlik.configs.recommended)}`); +// react +const reactConfig = path.resolve(__dirname, "generated/react-final-config.js"); +await fs.writeFile(reactConfig, `export default ${parseConfig(qlik.configs.react)}`); +// svelte +const svelteConfig = path.resolve(__dirname, "generated/svelte-final-config.js"); +await fs.writeFile(svelteConfig, `export default ${parseConfig(qlik.configs.svelte)}`); +// vitest +const vitestConfig = path.resolve(__dirname, "generated/vitest-final-config.js"); +await fs.writeFile(vitestConfig, `export default ${parseConfig(qlik.configs.vitest)}`); +// jest +const jestConfig = path.resolve(__dirname, "generated/jest-final-config.js"); +await fs.writeFile(jestConfig, `export default ${parseConfig(qlik.configs.jest)}`); +// playwright +const playwrightConfig = path.resolve(__dirname, "generated/playwright-final-config.js"); +await fs.writeFile(playwrightConfig, `export default ${parseConfig(qlik.configs.playwright)}`); diff --git a/packages/eslint-config/test/generated/cjs-final-config.js b/packages/eslint-config/test/generated/cjs-final-config.js new file mode 100644 index 0000000..a97f5cd --- /dev/null +++ b/packages/eslint-config/test/generated/cjs-final-config.js @@ -0,0 +1,1794 @@ +export default [ + { + "files": [ + "**/*.{js,cjs}" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AbortController": false, + "AbortSignal": false, + "Blob": false, + "BroadcastChannel": false, + "Buffer": false, + "ByteLengthQueuingStrategy": false, + "CloseEvent": false, + "CompressionStream": false, + "CountQueuingStrategy": false, + "Crypto": false, + "CryptoKey": false, + "CustomEvent": false, + "DOMException": false, + "DecompressionStream": false, + "Event": false, + "EventTarget": false, + "File": false, + "FormData": false, + "Headers": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "Navigator": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformanceResourceTiming": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "Request": false, + "Response": false, + "SubtleCrypto": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "URL": false, + "URLSearchParams": false, + "WebAssembly": false, + "WebSocket": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "__dirname": false, + "__filename": false, + "atob": false, + "btoa": false, + "clearImmediate": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "crypto": false, + "exports": true, + "fetch": false, + "global": false, + "module": false, + "navigator": false, + "performance": false, + "process": false, + "queueMicrotask": false, + "require": false, + "setImmediate": false, + "setInterval": false, + "setTimeout": false, + "structuredClone": false + }, + "parser": "@qlik/eslint-config/node-cjs-js-parser", + "parserOptions": { + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "commonjs" + }, + "name": "@qlik/eslint-config/node-cjs-js", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": [ + "error", + { + "ignoreDestructuring": false, + "properties": "never" + } + ], + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "consistent-return": "error", + "constructor-super": "error", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "error", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": [ + "error", + { + "allowImplicit": true + } + ], + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "error", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "off", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "error", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "error", + "no-shadow": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-undef": "error", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "error", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": false + } + ], + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + "args": "after-used", + "ignoreRestSiblings": true, + "vars": "all" + } + ], + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": true + } + ], + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + } + }, + { + "files": [ + "**/*.{ts,cts}" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AbortController": false, + "AbortSignal": false, + "Blob": false, + "BroadcastChannel": false, + "Buffer": false, + "ByteLengthQueuingStrategy": false, + "CloseEvent": false, + "CompressionStream": false, + "CountQueuingStrategy": false, + "Crypto": false, + "CryptoKey": false, + "CustomEvent": false, + "DOMException": false, + "DecompressionStream": false, + "Event": false, + "EventTarget": false, + "File": false, + "FormData": false, + "Headers": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "Navigator": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformanceResourceTiming": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "Request": false, + "Response": false, + "SubtleCrypto": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "URL": false, + "URLSearchParams": false, + "WebAssembly": false, + "WebSocket": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "__dirname": false, + "__filename": false, + "atob": false, + "btoa": false, + "clearImmediate": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "crypto": false, + "exports": true, + "fetch": false, + "global": false, + "module": false, + "navigator": false, + "performance": false, + "process": false, + "queueMicrotask": false, + "require": false, + "setImmediate": false, + "setInterval": false, + "setTimeout": false, + "structuredClone": false + }, + "parser": "@qlik/eslint-config/node-cjs-ts-parser", + "parserOptions": { + "parser": { + "meta": { + "name": "typescript-eslint/parser", + "version": "8.16.0" + }, + "version": "8.16.0" + }, + "projectService": true, + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "commonjs" + }, + "name": "@qlik/eslint-config/node-cjs-ts", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/default-param-last": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": [ + "error", + { + "format": [ + "camelCase", + "PascalCase", + "UPPER_CASE" + ], + "selector": "variable" + }, + { + "format": [ + "camelCase", + "PascalCase" + ], + "selector": "function" + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeLike" + } + ], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": [ + "error", + { + "ignoreIIFE": true + } + ], + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-loop-func": "error", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": [ + "error", + { + "checksConditionals": false + } + ], + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "@typescript-eslint/no-restricted-types": [ + "error", + {} + ], + "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-parameter-property-assignment": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-enum-initializers": "error", + "@typescript-eslint/prefer-for-of": "off", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/return-await": "error", + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": "off", + "class-methods-use-this": "off", + "consistent-return": "error", + "constructor-super": "off", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "off", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": "off", + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "off", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "off", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "off", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "off", + "no-const-assign": "off", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "off", + "no-dupe-class-members": "off", + "no-dupe-else-if": "error", + "no-dupe-keys": "off", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "off", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "off", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "off", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "off", + "no-new-symbol": "off", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "off", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "off", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-return-await": "off", + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "off", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "off", + "no-throw-literal": "error", + "no-undef": "off", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "off", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "off", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "off", + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "off", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + }, + "settings": { + "import-x/extensions": [ + ".ts", + ".tsx", + ".cts", + ".mts", + ".js", + ".jsx", + ".cjs", + ".mjs" + ], + "import-x/external-module-folders": [ + "node_modules", + "node_modules/@types" + ], + "import-x/parsers": { + "@typescript-eslint/parser": [ + ".ts", + ".tsx", + ".cts", + ".mts" + ] + }, + "import-x/resolver": { + "typescript": true + } + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/esm-final-config.js b/packages/eslint-config/test/generated/esm-final-config.js new file mode 100644 index 0000000..0e7f244 --- /dev/null +++ b/packages/eslint-config/test/generated/esm-final-config.js @@ -0,0 +1,1778 @@ +export default [ + { + "files": [ + "**/*.{js,mjs}" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AbortController": false, + "AbortSignal": false, + "Blob": false, + "BroadcastChannel": false, + "Buffer": false, + "ByteLengthQueuingStrategy": false, + "CloseEvent": false, + "CompressionStream": false, + "CountQueuingStrategy": false, + "Crypto": false, + "CryptoKey": false, + "CustomEvent": false, + "DOMException": false, + "DecompressionStream": false, + "Event": false, + "EventTarget": false, + "File": false, + "FormData": false, + "Headers": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "Navigator": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformanceResourceTiming": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "Request": false, + "Response": false, + "SubtleCrypto": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "URL": false, + "URLSearchParams": false, + "WebAssembly": false, + "WebSocket": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "__dirname": false, + "__filename": false, + "atob": false, + "btoa": false, + "clearImmediate": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "crypto": false, + "exports": true, + "fetch": false, + "global": false, + "module": false, + "navigator": false, + "performance": false, + "process": false, + "queueMicrotask": false, + "require": false, + "setImmediate": false, + "setInterval": false, + "setTimeout": false, + "structuredClone": false + }, + "parser": "@qlik/eslint-config/node-esm-js-parser", + "parserOptions": { + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/node-esm-js", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": [ + "error", + { + "ignoreDestructuring": false, + "properties": "never" + } + ], + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "consistent-return": "error", + "constructor-super": "error", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "error", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": [ + "error", + { + "allowImplicit": true + } + ], + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages" + ], + "import-x/named": "error", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "off", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "error", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "error", + "no-shadow": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-undef": "error", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "error", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": false + } + ], + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + "args": "after-used", + "ignoreRestSiblings": true, + "vars": "all" + } + ], + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": true + } + ], + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + } + }, + { + "files": [ + "**/*.{ts,mts}" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AbortController": false, + "AbortSignal": false, + "Blob": false, + "BroadcastChannel": false, + "Buffer": false, + "ByteLengthQueuingStrategy": false, + "CloseEvent": false, + "CompressionStream": false, + "CountQueuingStrategy": false, + "Crypto": false, + "CryptoKey": false, + "CustomEvent": false, + "DOMException": false, + "DecompressionStream": false, + "Event": false, + "EventTarget": false, + "File": false, + "FormData": false, + "Headers": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "Navigator": false, + "Performance": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformanceResourceTiming": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "Request": false, + "Response": false, + "SubtleCrypto": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "URL": false, + "URLSearchParams": false, + "WebAssembly": false, + "WebSocket": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "__dirname": false, + "__filename": false, + "atob": false, + "btoa": false, + "clearImmediate": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "crypto": false, + "exports": true, + "fetch": false, + "global": false, + "module": false, + "navigator": false, + "performance": false, + "process": false, + "queueMicrotask": false, + "require": false, + "setImmediate": false, + "setInterval": false, + "setTimeout": false, + "structuredClone": false + }, + "parser": "@qlik/eslint-config/node-esm-ts-parser", + "parserOptions": { + "parser": { + "meta": { + "name": "typescript-eslint/parser", + "version": "8.16.0" + }, + "version": "8.16.0" + }, + "projectService": true, + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/node-esm-ts", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/default-param-last": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": [ + "error", + { + "format": [ + "camelCase", + "PascalCase", + "UPPER_CASE" + ], + "selector": "variable" + }, + { + "format": [ + "camelCase", + "PascalCase" + ], + "selector": "function" + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeLike" + } + ], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": [ + "error", + { + "ignoreIIFE": true + } + ], + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-loop-func": "error", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": [ + "error", + { + "checksConditionals": false + } + ], + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "@typescript-eslint/no-restricted-types": [ + "error", + {} + ], + "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-parameter-property-assignment": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-enum-initializers": "error", + "@typescript-eslint/prefer-for-of": "off", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/return-await": "error", + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": "off", + "class-methods-use-this": "off", + "consistent-return": "error", + "constructor-super": "off", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "off", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": "off", + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages" + ], + "import-x/named": "off", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "off", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "off", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "off", + "no-const-assign": "off", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "off", + "no-dupe-class-members": "off", + "no-dupe-else-if": "error", + "no-dupe-keys": "off", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "off", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "off", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "off", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "off", + "no-new-symbol": "off", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "off", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "off", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-return-await": "off", + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "off", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "off", + "no-throw-literal": "error", + "no-undef": "off", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "off", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "off", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "off", + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "off", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + }, + "settings": { + "import-x/extensions": [ + ".ts", + ".tsx", + ".cts", + ".mts", + ".js", + ".jsx", + ".cjs", + ".mjs" + ], + "import-x/external-module-folders": [ + "node_modules", + "node_modules/@types" + ], + "import-x/parsers": { + "@typescript-eslint/parser": [ + ".ts", + ".tsx", + ".cts", + ".mts" + ] + }, + "import-x/resolver": { + "typescript": true + } + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/jest-final-config.js b/packages/eslint-config/test/generated/jest-final-config.js new file mode 100644 index 0000000..8640736 --- /dev/null +++ b/packages/eslint-config/test/generated/jest-final-config.js @@ -0,0 +1,88 @@ +export default [ + { + "files": [ + "**/__test__/**/*.{js,jsx,ts,tsx}", + "**/__tests__/**/*.{js,jsx,ts,tsx}" + ], + "languageOptions": { + "globals": { + "afterAll": false, + "afterEach": false, + "beforeAll": false, + "beforeEach": false, + "describe": false, + "expect": false, + "fit": false, + "it": false, + "jest": false, + "test": false, + "xdescribe": false, + "xit": false, + "xtest": false + } + }, + "name": "@qlik/eslint-config/jest", + "plugins": { + "jest": "jest-plugin", + "testing-library": "testing-library-plugin" + }, + "rules": { + "jest/expect-expect": "warn", + "jest/no-alias-methods": "error", + "jest/no-commented-out-tests": "warn", + "jest/no-conditional-expect": "error", + "jest/no-deprecated-functions": "error", + "jest/no-disabled-tests": "warn", + "jest/no-done-callback": "error", + "jest/no-export": "error", + "jest/no-focused-tests": "error", + "jest/no-identical-title": "error", + "jest/no-interpolation-in-snapshots": "error", + "jest/no-jasmine-globals": "error", + "jest/no-mocks-import": "error", + "jest/no-standalone-expect": "error", + "jest/no-test-prefixes": "error", + "jest/valid-describe-callback": "error", + "jest/valid-expect": "error", + "jest/valid-expect-in-promise": "error", + "jest/valid-title": "error", + "testing-library/await-async-events": [ + "error", + { + "eventModule": "userEvent" + } + ], + "testing-library/await-async-queries": "error", + "testing-library/await-async-utils": "error", + "testing-library/no-await-sync-events": [ + "error", + { + "eventModules": [ + "fire-event" + ] + } + ], + "testing-library/no-await-sync-queries": "error", + "testing-library/no-container": "error", + "testing-library/no-debugging-utils": "warn", + "testing-library/no-dom-import": [ + "error", + "react" + ], + "testing-library/no-global-regexp-flag-in-query": "error", + "testing-library/no-manual-cleanup": "error", + "testing-library/no-node-access": "error", + "testing-library/no-promise-in-fire-event": "error", + "testing-library/no-render-in-lifecycle": "error", + "testing-library/no-unnecessary-act": "error", + "testing-library/no-wait-for-multiple-assertions": "error", + "testing-library/no-wait-for-side-effects": "error", + "testing-library/no-wait-for-snapshot": "error", + "testing-library/prefer-find-by": "error", + "testing-library/prefer-presence-queries": "error", + "testing-library/prefer-query-by-disappearance": "error", + "testing-library/prefer-screen-queries": "error", + "testing-library/render-result-naming-convention": "error" + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/playwright-final-config.js b/packages/eslint-config/test/generated/playwright-final-config.js new file mode 100644 index 0000000..ffdc96b --- /dev/null +++ b/packages/eslint-config/test/generated/playwright-final-config.js @@ -0,0 +1,103 @@ +export default [ + { + "files": [ + "tests/**", + "test/**" + ], + "languageOptions": { + "globals": { + "AbortController": false, + "AbortSignal": false, + "Blob": false, + "BroadcastChannel": false, + "ByteLengthQueuingStrategy": false, + "CompressionStream": false, + "CountQueuingStrategy": false, + "Crypto": false, + "CryptoKey": false, + "CustomEvent": false, + "DOMException": false, + "DecompressionStream": false, + "Event": false, + "EventTarget": false, + "File": false, + "FormData": false, + "Headers": false, + "Intl": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "PerformanceEntry": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformanceResourceTiming": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "Request": false, + "Response": false, + "SubtleCrypto": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "URL": false, + "URLSearchParams": false, + "WebAssembly": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "atob": false, + "btoa": false, + "clearInterval": false, + "clearTimeout": false, + "console": false, + "crypto": false, + "fetch": false, + "performance": false, + "queueMicrotask": false, + "setInterval": false, + "setTimeout": false, + "structuredClone": false + } + }, + "name": "@qlik/eslint-config/playwright", + "plugins": { + "playwright": "playwright-plugin" + }, + "rules": { + "no-empty-pattern": "off", + "playwright/expect-expect": "warn", + "playwright/max-nested-describe": "warn", + "playwright/missing-playwright-await": "error", + "playwright/no-conditional-expect": "warn", + "playwright/no-conditional-in-test": "warn", + "playwright/no-element-handle": "warn", + "playwright/no-eval": "warn", + "playwright/no-focused-test": "error", + "playwright/no-force-option": "warn", + "playwright/no-nested-step": "warn", + "playwright/no-networkidle": "error", + "playwright/no-page-pause": "warn", + "playwright/no-skipped-test": "warn", + "playwright/no-standalone-expect": "error", + "playwright/no-unsafe-references": "error", + "playwright/no-useless-await": "warn", + "playwright/no-useless-not": "warn", + "playwright/no-wait-for-selector": "warn", + "playwright/no-wait-for-timeout": "warn", + "playwright/prefer-web-first-assertions": "error", + "playwright/valid-describe-callback": "error", + "playwright/valid-expect": "error", + "playwright/valid-expect-in-promise": "error", + "playwright/valid-title": "error" + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/react-final-config.js b/packages/eslint-config/test/generated/react-final-config.js new file mode 100644 index 0000000..d7f27f5 --- /dev/null +++ b/packages/eslint-config/test/generated/react-final-config.js @@ -0,0 +1,5155 @@ +export default [ + { + "files": [ + "**/*.js", + "**/*.jsx" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AI": false, + "AITextSession": false, + "AbortController": false, + "AbortSignal": false, + "AbsoluteOrientationSensor": false, + "AbstractRange": false, + "Accelerometer": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffect": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioData": false, + "AudioDecoder": false, + "AudioDestinationNode": false, + "AudioEncoder": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioParamMap": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioSinkInfo": false, + "AudioWorklet": false, + "AudioWorkletGlobalScope": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "AuthenticatorAssertionResponse": false, + "AuthenticatorAttestationResponse": false, + "AuthenticatorResponse": false, + "BackgroundFetchManager": false, + "BackgroundFetchRecord": false, + "BackgroundFetchRegistration": false, + "BarProp": false, + "BarcodeDetector": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "Bluetooth": false, + "BluetoothCharacteristicProperties": false, + "BluetoothDevice": false, + "BluetoothRemoteGATTCharacteristic": false, + "BluetoothRemoteGATTDescriptor": false, + "BluetoothRemoteGATTServer": false, + "BluetoothRemoteGATTService": false, + "BluetoothUUID": false, + "BroadcastChannel": false, + "BrowserCaptureMediaStreamTrack": false, + "ByteLengthQueuingStrategy": false, + "CDATASection": false, + "CSS": false, + "CSSAnimation": false, + "CSSConditionRule": false, + "CSSContainerRule": false, + "CSSCounterStyleRule": false, + "CSSFontFaceRule": false, + "CSSFontFeatureValuesRule": false, + "CSSFontPaletteValuesRule": false, + "CSSGroupingRule": false, + "CSSImageValue": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSKeywordValue": false, + "CSSLayerBlockRule": false, + "CSSLayerStatementRule": false, + "CSSMathClamp": false, + "CSSMathInvert": false, + "CSSMathMax": false, + "CSSMathMin": false, + "CSSMathNegate": false, + "CSSMathProduct": false, + "CSSMathSum": false, + "CSSMathValue": false, + "CSSMatrixComponent": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSNestedDeclarations": false, + "CSSNumericArray": false, + "CSSNumericValue": false, + "CSSPageDescriptors": false, + "CSSPageRule": false, + "CSSPerspective": false, + "CSSPositionTryDescriptors": false, + "CSSPositionTryRule": false, + "CSSPositionValue": false, + "CSSPropertyRule": false, + "CSSRotate": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSScale": false, + "CSSScopeRule": false, + "CSSSkew": false, + "CSSSkewX": false, + "CSSSkewY": false, + "CSSStartingStyleRule": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSStyleValue": false, + "CSSSupportsRule": false, + "CSSTransformComponent": false, + "CSSTransformValue": false, + "CSSTransition": false, + "CSSTranslate": false, + "CSSUnitValue": false, + "CSSUnparsedValue": false, + "CSSVariableReferenceValue": false, + "CSSViewTransitionRule": false, + "Cache": false, + "CacheStorage": false, + "CanvasCaptureMediaStream": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "CaptureController": false, + "CaretPosition": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "ChapterInformation": false, + "CharacterBoundsUpdateEvent": false, + "CharacterData": false, + "Clipboard": false, + "ClipboardEvent": false, + "ClipboardItem": false, + "CloseEvent": false, + "CloseWatcher": false, + "Comment": false, + "CompositionEvent": false, + "CompressionStream": false, + "ConstantSourceNode": false, + "ContentVisibilityAutoStateChangeEvent": false, + "ConvolverNode": false, + "CookieChangeEvent": false, + "CookieDeprecationLabel": false, + "CookieStore": false, + "CookieStoreManager": false, + "CountQueuingStrategy": false, + "Credential": false, + "CredentialsContainer": false, + "CropTarget": false, + "Crypto": false, + "CryptoKey": false, + "CustomElementRegistry": false, + "CustomEvent": false, + "CustomStateSet": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectList": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "DecompressionStream": false, + "DelayNode": false, + "DelegatedInkTrailPresenter": false, + "DeviceMotionEvent": false, + "DeviceMotionEventAcceleration": false, + "DeviceMotionEventRotationRate": false, + "DeviceOrientationEvent": false, + "Document": false, + "DocumentFragment": false, + "DocumentPictureInPicture": false, + "DocumentPictureInPictureEvent": false, + "DocumentTimeline": false, + "DocumentType": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "EditContext": false, + "Element": false, + "ElementInternals": false, + "EncodedAudioChunk": false, + "EncodedVideoChunk": false, + "ErrorEvent": false, + "Event": false, + "EventCounts": false, + "EventSource": false, + "EventTarget": false, + "External": false, + "EyeDropper": false, + "FeaturePolicy": false, + "FederatedCredential": false, + "Fence": false, + "FencedFrameConfig": false, + "FetchLaterResult": false, + "File": false, + "FileList": false, + "FileReader": false, + "FileSystem": false, + "FileSystemDirectoryEntry": false, + "FileSystemDirectoryHandle": false, + "FileSystemDirectoryReader": false, + "FileSystemEntry": false, + "FileSystemFileEntry": false, + "FileSystemFileHandle": false, + "FileSystemHandle": false, + "FileSystemWritableFileStream": false, + "Float16Array": false, + "FocusEvent": false, + "FontData": false, + "FontFace": false, + "FontFaceSet": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "FormDataEvent": false, + "FragmentDirective": false, + "GPU": false, + "GPUAdapter": false, + "GPUAdapterInfo": false, + "GPUBindGroup": false, + "GPUBindGroupLayout": false, + "GPUBuffer": false, + "GPUBufferUsage": false, + "GPUCanvasContext": false, + "GPUColorWrite": false, + "GPUCommandBuffer": false, + "GPUCommandEncoder": false, + "GPUCompilationInfo": false, + "GPUCompilationMessage": false, + "GPUComputePassEncoder": false, + "GPUComputePipeline": false, + "GPUDevice": false, + "GPUDeviceLostInfo": false, + "GPUError": false, + "GPUExternalTexture": false, + "GPUInternalError": false, + "GPUMapMode": false, + "GPUOutOfMemoryError": false, + "GPUPipelineError": false, + "GPUPipelineLayout": false, + "GPUQuerySet": false, + "GPUQueue": false, + "GPURenderBundle": false, + "GPURenderBundleEncoder": false, + "GPURenderPassEncoder": false, + "GPURenderPipeline": false, + "GPUSampler": false, + "GPUShaderModule": false, + "GPUShaderStage": false, + "GPUSupportedFeatures": false, + "GPUSupportedLimits": false, + "GPUTexture": false, + "GPUTextureUsage": false, + "GPUTextureView": false, + "GPUUncapturedErrorEvent": false, + "GPUValidationError": false, + "GainNode": false, + "Gamepad": false, + "GamepadAxisMoveEvent": false, + "GamepadButton": false, + "GamepadButtonEvent": false, + "GamepadEvent": false, + "GamepadHapticActuator": false, + "GamepadPose": false, + "Geolocation": false, + "GeolocationCoordinates": false, + "GeolocationPosition": false, + "GeolocationPositionError": false, + "GravitySensor": false, + "Gyroscope": false, + "HID": false, + "HIDConnectionEvent": false, + "HIDDevice": false, + "HIDInputReportEvent": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBRElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLDListElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFencedFrameElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHRElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLIElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLOListElement": false, + "HTMLObjectElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "HashChangeEvent": false, + "Headers": false, + "Highlight": false, + "HighlightRegistry": false, + "History": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IIRFilterNode": false, + "IdentityCredential": false, + "IdentityCredentialError": false, + "IdentityProvider": false, + "IdleDeadline": false, + "IdleDetector": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "ImageDecoder": false, + "ImageTrack": false, + "ImageTrackList": false, + "Ink": false, + "InputDeviceCapabilities": false, + "InputDeviceInfo": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Keyboard": false, + "KeyboardEvent": false, + "KeyboardLayoutMap": false, + "KeyframeEffect": false, + "LargestContentfulPaint": false, + "LaunchParams": false, + "LaunchQueue": false, + "LayoutShift": false, + "LayoutShiftAttribution": false, + "LinearAccelerationSensor": false, + "Location": false, + "Lock": false, + "LockManager": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MathMLElement": false, + "MediaCapabilities": false, + "MediaCapabilitiesInfo": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaKeys": false, + "MediaList": false, + "MediaMetadata": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaRecorderErrorEvent": false, + "MediaSession": false, + "MediaSource": false, + "MediaSourceHandle": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackAudioSourceNode": false, + "MediaStreamTrackAudioStats": false, + "MediaStreamTrackEvent": false, + "MediaStreamTrackGenerator": false, + "MediaStreamTrackProcessor": false, + "MediaStreamTrackVideoStats": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MimeType": false, + "MimeTypeArray": false, + "ModelGenericSession": false, + "ModelManager": false, + "MouseEvent": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "NamedNodeMap": false, + "NavigateEvent": false, + "Navigation": false, + "NavigationActivation": false, + "NavigationCurrentEntryChangeEvent": false, + "NavigationDestination": false, + "NavigationHistoryEntry": false, + "NavigationPreloadManager": false, + "NavigationTransition": false, + "Navigator": false, + "NavigatorLogin": false, + "NavigatorManagedData": false, + "NavigatorUAData": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "NotRestoredReasonDetails": false, + "NotRestoredReasons": false, + "Notification": false, + "NotifyPaintEvent": false, + "OTPCredential": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "OffscreenCanvas": false, + "OffscreenCanvasRenderingContext2D": false, + "Option": false, + "OrientationSensor": false, + "OscillatorNode": false, + "OverconstrainedError": false, + "PERSISTENT": false, + "PageRevealEvent": false, + "PageSwapEvent": false, + "PageTransitionEvent": false, + "PannerNode": false, + "PasswordCredential": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentManager": false, + "PaymentMethodChangeEvent": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "Performance": false, + "PerformanceElementTiming": false, + "PerformanceEntry": false, + "PerformanceEventTiming": false, + "PerformanceLongAnimationFrameTiming": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceScriptTiming": false, + "PerformanceServerTiming": false, + "PerformanceTiming": false, + "PeriodicSyncManager": false, + "PeriodicWave": false, + "PermissionStatus": false, + "Permissions": false, + "PictureInPictureEvent": false, + "PictureInPictureWindow": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "PressureObserver": false, + "PressureRecord": false, + "ProcessingInstruction": false, + "Profiler": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "ProtectedAudience": false, + "PublicKeyCredential": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "RTCCertificate": false, + "RTCDTMFSender": false, + "RTCDTMFToneChangeEvent": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCEncodedAudioFrame": false, + "RTCEncodedVideoFrame": false, + "RTCError": false, + "RTCErrorEvent": false, + "RTCIceCandidate": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceErrorEvent": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpReceiver": false, + "RTCRtpScriptTransform": false, + "RTCRtpSender": false, + "RTCRtpTransceiver": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "RadioNodeList": false, + "Range": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "RelativeOrientationSensor": false, + "RemotePlayback": false, + "ReportingObserver": false, + "Request": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "ResizeObserverSize": false, + "Response": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLineElement": false, + "SVGLinearGradientElement": false, + "SVGMPathElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGSVGElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTSpanElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "Scheduler": false, + "Scheduling": false, + "Screen": false, + "ScreenDetailed": false, + "ScreenDetails": false, + "ScreenOrientation": false, + "ScriptProcessorNode": false, + "ScrollTimeline": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "Sensor": false, + "SensorErrorEvent": false, + "Serial": false, + "SerialPort": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "ShadowRoot": false, + "SharedStorage": false, + "SharedStorageWorklet": false, + "SharedWorker": false, + "SnapEvent": false, + "SourceBuffer": false, + "SourceBufferList": false, + "SpeechSynthesis": false, + "SpeechSynthesisErrorEvent": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "SpeechSynthesisVoice": false, + "StaticRange": false, + "StereoPannerNode": false, + "Storage": false, + "StorageBucket": false, + "StorageBucketManager": false, + "StorageEvent": false, + "StorageManager": false, + "StylePropertyMap": false, + "StylePropertyMapReadOnly": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubmitEvent": false, + "SubtleCrypto": false, + "SyncManager": false, + "TEMPORARY": false, + "TaskAttributionTiming": false, + "TaskController": false, + "TaskPriorityChangeEvent": false, + "TaskSignal": false, + "Text": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TextEvent": false, + "TextFormat": false, + "TextFormatUpdateEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TextUpdateEvent": false, + "TimeEvent": false, + "TimeRanges": false, + "ToggleEvent": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "TransitionEvent": false, + "TreeWalker": false, + "TrustedHTML": false, + "TrustedScript": false, + "TrustedScriptURL": false, + "TrustedTypePolicy": false, + "TrustedTypePolicyFactory": false, + "UIEvent": false, + "URL": false, + "URLPattern": false, + "URLSearchParams": false, + "USB": false, + "USBAlternateInterface": false, + "USBConfiguration": false, + "USBConnectionEvent": false, + "USBDevice": false, + "USBEndpoint": false, + "USBInTransferResult": false, + "USBInterface": false, + "USBIsochronousInTransferPacket": false, + "USBIsochronousInTransferResult": false, + "USBIsochronousOutTransferPacket": false, + "USBIsochronousOutTransferResult": false, + "USBOutTransferResult": false, + "UserActivation": false, + "VTTCue": false, + "VTTRegion": false, + "ValidityState": false, + "VideoColorSpace": false, + "VideoDecoder": false, + "VideoEncoder": false, + "VideoFrame": false, + "VideoPlaybackQuality": false, + "ViewTimeline": false, + "ViewTransition": false, + "ViewTransitionTypeSet": false, + "VirtualKeyboard": false, + "VirtualKeyboardGeometryChangeEvent": false, + "VisibilityStateEntry": false, + "VisualViewport": false, + "WGSLLanguageFeatures": false, + "WakeLock": false, + "WakeLockSentinel": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLObject": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WebSocketError": false, + "WebSocketStream": false, + "WebTransport": false, + "WebTransportBidirectionalStream": false, + "WebTransportDatagramDuplexStream": false, + "WebTransportError": false, + "WebTransportReceiveStream": false, + "WebTransportSendStream": false, + "WheelEvent": false, + "Window": false, + "WindowControlsOverlay": false, + "WindowControlsOverlayGeometryChangeEvent": false, + "Worker": false, + "Worklet": false, + "WorkletGlobalScope": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XRAnchor": false, + "XRAnchorSet": false, + "XRBoundedReferenceSpace": false, + "XRCPUDepthInformation": false, + "XRCamera": false, + "XRDOMOverlayState": false, + "XRDepthInformation": false, + "XRFrame": false, + "XRHitTestResult": false, + "XRHitTestSource": false, + "XRInputSource": false, + "XRInputSourceArray": false, + "XRInputSourceEvent": false, + "XRInputSourcesChangeEvent": false, + "XRLayer": false, + "XRLightEstimate": false, + "XRLightProbe": false, + "XRPose": false, + "XRRay": false, + "XRReferenceSpace": false, + "XRReferenceSpaceEvent": false, + "XRRenderState": false, + "XRRigidTransform": false, + "XRSession": false, + "XRSessionEvent": false, + "XRSpace": false, + "XRSystem": false, + "XRTransientInputHitTestResult": false, + "XRTransientInputHitTestSource": false, + "XRView": false, + "XRViewerPose": false, + "XRViewport": false, + "XRWebGLBinding": false, + "XRWebGLDepthInformation": false, + "XRWebGLLayer": false, + "XSLTProcessor": false, + "addEventListener": false, + "ai": false, + "alert": false, + "atob": false, + "blur": false, + "btoa": false, + "caches": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "close": false, + "closed": false, + "confirm": false, + "console": false, + "cookieStore": false, + "createImageBitmap": false, + "credentialless": false, + "crossOriginIsolated": false, + "crypto": false, + "currentFrame": false, + "currentTime": false, + "customElements": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "documentPictureInPicture": false, + "event": false, + "external": false, + "fence": false, + "fetch": false, + "fetchLater": false, + "find": false, + "focus": false, + "frameElement": false, + "frames": false, + "getComputedStyle": false, + "getScreenDetails": false, + "getSelection": false, + "history": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "isSecureContext": false, + "launchQueue": false, + "length": false, + "localStorage": false, + "location": true, + "locationbar": false, + "matchMedia": false, + "menubar": false, + "model": false, + "moveBy": false, + "moveTo": false, + "name": false, + "navigation": false, + "navigator": false, + "offscreenBuffering": false, + "onabort": true, + "onafterprint": true, + "onanimationcancel": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinput": true, + "onbeforeinstallprompt": true, + "onbeforematch": true, + "onbeforeprint": true, + "onbeforetoggle": true, + "onbeforeunload": true, + "onbeforexrselect": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontentvisibilityautostatechange": true, + "oncontextlost": true, + "oncontextmenu": true, + "oncontextrestored": true, + "oncopy": true, + "oncuechange": true, + "oncut": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "onformdata": true, + "ongamepadconnected": true, + "ongamepaddisconnected": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpagereveal": true, + "onpageshow": true, + "onpageswap": true, + "onpaste": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerrawupdate": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onscrollend": true, + "onscrollsnapchange": true, + "onscrollsnapchanging": true, + "onsearch": true, + "onsecuritypolicyviolation": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onselectionchange": true, + "onselectstart": true, + "onslotchange": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitioncancel": true, + "ontransitionend": true, + "ontransitionrun": true, + "ontransitionstart": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "opener": false, + "origin": false, + "originAgentCluster": false, + "outerHeight": false, + "outerWidth": false, + "pageXOffset": false, + "pageYOffset": false, + "parent": false, + "performance": false, + "personalbar": false, + "postMessage": false, + "print": false, + "prompt": false, + "queryLocalFonts": false, + "queueMicrotask": false, + "registerProcessor": false, + "removeEventListener": false, + "reportError": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "resizeTo": false, + "sampleRate": false, + "scheduler": false, + "screen": false, + "screenLeft": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "scroll": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "scrollbars": false, + "self": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "sharedStorage": false, + "showDirectoryPicker": false, + "showOpenFilePicker": false, + "showSaveFilePicker": false, + "speechSynthesis": false, + "status": false, + "statusbar": false, + "stop": false, + "structuredClone": false, + "styleMedia": false, + "toolbar": false, + "top": false, + "trustedTypes": false, + "visualViewport": false, + "window": false + }, + "parser": "@qlik/eslint-config/react-js-parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "jsxPragma": null, + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/react-js", + "plugins": { + "@eslint-react": "@eslint-react-plugin", + "@eslint-react/debug": "@eslint-react/debug-plugin", + "@eslint-react/dom": "@eslint-react/dom-plugin", + "@eslint-react/hooks-extra": "@eslint-react/hooks-extra-plugin", + "@eslint-react/naming-convention": "@eslint-react/naming-convention-plugin", + "@eslint-react/web-api": "@eslint-react/web-api-plugin", + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin", + "jsx-a11y": "jsx-a11y-plugin", + "react": "react-plugin", + "react-hooks": "react-hooks-plugin" + }, + "rules": { + "@eslint-react/dom/no-children-in-void-dom-elements": "warn", + "@eslint-react/dom/no-dangerously-set-innerhtml": "warn", + "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error", + "@eslint-react/dom/no-find-dom-node": "error", + "@eslint-react/dom/no-missing-button-type": "warn", + "@eslint-react/dom/no-missing-iframe-sandbox": "warn", + "@eslint-react/dom/no-namespace": "error", + "@eslint-react/dom/no-render-return-value": "error", + "@eslint-react/dom/no-script-url": "warn", + "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn", + "@eslint-react/dom/no-unsafe-target-blank": "warn", + "@eslint-react/ensure-forward-ref-using-ref": "warn", + "@eslint-react/hooks-extra/no-direct-set-state-in-use-effect": "warn", + "@eslint-react/hooks-extra/no-redundant-custom-hook": "warn", + "@eslint-react/hooks-extra/prefer-use-state-lazy-initialization": "warn", + "@eslint-react/jsx-no-duplicate-props": "warn", + "@eslint-react/jsx-uses-vars": "warn", + "@eslint-react/no-access-state-in-setstate": "error", + "@eslint-react/no-array-index-key": "warn", + "@eslint-react/no-children-count": "warn", + "@eslint-react/no-children-for-each": "warn", + "@eslint-react/no-children-map": "warn", + "@eslint-react/no-children-only": "warn", + "@eslint-react/no-children-to-array": "warn", + "@eslint-react/no-clone-element": "warn", + "@eslint-react/no-comment-textnodes": "warn", + "@eslint-react/no-component-will-mount": "error", + "@eslint-react/no-component-will-receive-props": "error", + "@eslint-react/no-component-will-update": "error", + "@eslint-react/no-create-ref": "error", + "@eslint-react/no-default-props": "error", + "@eslint-react/no-direct-mutation-state": "error", + "@eslint-react/no-duplicate-key": "error", + "@eslint-react/no-missing-key": "error", + "@eslint-react/no-nested-components": "error", + "@eslint-react/no-prop-types": "error", + "@eslint-react/no-redundant-should-component-update": "error", + "@eslint-react/no-set-state-in-component-did-mount": "warn", + "@eslint-react/no-set-state-in-component-did-update": "warn", + "@eslint-react/no-set-state-in-component-will-update": "warn", + "@eslint-react/no-string-refs": "error", + "@eslint-react/no-unsafe-component-will-mount": "warn", + "@eslint-react/no-unsafe-component-will-receive-props": "warn", + "@eslint-react/no-unsafe-component-will-update": "warn", + "@eslint-react/no-unstable-context-value": "warn", + "@eslint-react/no-unstable-default-props": "warn", + "@eslint-react/no-unused-class-component-members": "warn", + "@eslint-react/no-unused-state": "warn", + "@eslint-react/web-api/no-leaked-event-listener": "warn", + "@eslint-react/web-api/no-leaked-interval": "warn", + "@eslint-react/web-api/no-leaked-resize-observer": "warn", + "@eslint-react/web-api/no-leaked-timeout": "warn", + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": [ + "error", + { + "ignoreDestructuring": false, + "properties": "never" + } + ], + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [ + "render", + "getInitialState", + "getDefaultProps", + "getChildContext", + "componentWillMount", + "UNSAFE_componentWillMount", + "componentDidMount", + "componentWillReceiveProps", + "UNSAFE_componentWillReceiveProps", + "shouldComponentUpdate", + "componentWillUpdate", + "UNSAFE_componentWillUpdate", + "componentDidUpdate", + "componentWillUnmount", + "componentDidCatch", + "getSnapshotBeforeUpdate" + ] + } + ], + "consistent-return": "error", + "constructor-super": "error", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "error", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": [ + "error", + { + "allowImplicit": true + } + ], + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "error", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "jsx-a11y/alt-text": [ + "error", + { + "area": [], + "elements": [ + "img", + "object", + "area", + "input[type=\"image\"]" + ], + "img": [], + "input[type=\"image\"]": [], + "object": [] + } + ], + "jsx-a11y/anchor-ambiguous-text": "off", + "jsx-a11y/anchor-has-content": [ + "error", + { + "components": [] + } + ], + "jsx-a11y/anchor-is-valid": [ + "error", + { + "aspects": [ + "noHref", + "invalidHref", + "preferButton" + ], + "components": [ + "Link" + ], + "specialLink": [ + "to" + ] + } + ], + "jsx-a11y/aria-activedescendant-has-tabindex": "error", + "jsx-a11y/aria-props": "error", + "jsx-a11y/aria-proptypes": "error", + "jsx-a11y/aria-role": [ + "error", + { + "ignoreNonDOM": false + } + ], + "jsx-a11y/aria-unsupported-elements": "error", + "jsx-a11y/autocomplete-valid": "error", + "jsx-a11y/click-events-have-key-events": "error", + "jsx-a11y/control-has-associated-label": [ + "error", + { + "controlComponents": [], + "depth": 5, + "ignoreElements": [ + "audio", + "canvas", + "embed", + "input", + "textarea", + "tr", + "video" + ], + "ignoreRoles": [ + "grid", + "listbox", + "menu", + "menubar", + "radiogroup", + "row", + "tablist", + "toolbar", + "tree", + "treegrid" + ], + "labelAttributes": [ + "label" + ] + } + ], + "jsx-a11y/heading-has-content": [ + "error", + { + "components": [ + "" + ] + } + ], + "jsx-a11y/html-has-lang": "error", + "jsx-a11y/iframe-has-title": "error", + "jsx-a11y/img-redundant-alt": "error", + "jsx-a11y/interactive-supports-focus": "error", + "jsx-a11y/label-has-associated-control": [ + "error", + { + "assert": "both", + "controlComponents": [], + "depth": 25, + "labelAttributes": [], + "labelComponents": [] + } + ], + "jsx-a11y/label-has-for": "off", + "jsx-a11y/lang": "error", + "jsx-a11y/media-has-caption": [ + "error", + { + "audio": [], + "track": [], + "video": [] + } + ], + "jsx-a11y/mouse-events-have-key-events": "error", + "jsx-a11y/no-access-key": "error", + "jsx-a11y/no-autofocus": [ + "error", + { + "ignoreNonDOM": true + } + ], + "jsx-a11y/no-distracting-elements": [ + "error", + { + "elements": [ + "marquee", + "blink" + ] + } + ], + "jsx-a11y/no-interactive-element-to-noninteractive-role": [ + "error", + { + "tr": [ + "none", + "presentation" + ] + } + ], + "jsx-a11y/no-noninteractive-element-interactions": [ + "error", + { + "handlers": [ + "onClick", + "onMouseDown", + "onMouseUp", + "onKeyPress", + "onKeyDown", + "onKeyUp" + ] + } + ], + "jsx-a11y/no-noninteractive-element-to-interactive-role": [ + "error", + { + "li": [ + "menuitem", + "option", + "row", + "tab", + "treeitem" + ], + "ol": [ + "listbox", + "menu", + "menubar", + "radiogroup", + "tablist", + "tree", + "treegrid" + ], + "table": [ + "grid" + ], + "td": [ + "gridcell" + ], + "ul": [ + "listbox", + "menu", + "menubar", + "radiogroup", + "tablist", + "tree", + "treegrid" + ] + } + ], + "jsx-a11y/no-noninteractive-tabindex": [ + "error", + { + "allowExpressionValues": true, + "roles": [ + "tabpanel" + ], + "tags": [] + } + ], + "jsx-a11y/no-redundant-roles": [ + "error", + { + "nav": [ + "navigation" + ] + } + ], + "jsx-a11y/no-static-element-interactions": [ + "error", + { + "handlers": [ + "onClick", + "onMouseDown", + "onMouseUp", + "onKeyPress", + "onKeyDown", + "onKeyUp" + ] + } + ], + "jsx-a11y/role-has-required-aria-props": "error", + "jsx-a11y/role-supports-aria-props": "error", + "jsx-a11y/scope": "error", + "jsx-a11y/tabindex-no-positive": "error", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "warn", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "error", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "error", + "no-shadow": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-undef": "error", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "error", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": false + } + ], + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + "args": "after-used", + "ignoreRestSiblings": true, + "vars": "all" + } + ], + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": true + } + ], + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "react-hooks/exhaustive-deps": "error", + "react-hooks/rules-of-hooks": "error", + "react/button-has-type": [ + "error", + { + "button": true, + "reset": false, + "submit": true + } + ], + "react/default-props-match-prop-types": [ + "error", + { + "allowRequiredDefaults": false + } + ], + "react/destructuring-assignment": [ + "error", + "always" + ], + "react/display-name": 2, + "react/forbid-foreign-prop-types": [ + "warn", + { + "allowInPropTypes": true + } + ], + "react/forbid-prop-types": [ + "error", + { + "checkChildContextTypes": true, + "checkContextTypes": true, + "forbid": [ + "any", + "array", + "object" + ] + } + ], + "react/forward-ref-uses-ref": "error", + "react/function-component-definition": "off", + "react/hook-use-state": "error", + "react/jsx-boolean-value": [ + "error", + "never", + { + "always": [] + } + ], + "react/jsx-closing-bracket-location": [ + "error", + "line-aligned" + ], + "react/jsx-closing-tag-location": "error", + "react/jsx-curly-brace-presence": [ + "error", + { + "children": "never", + "props": "never" + } + ], + "react/jsx-curly-newline": [ + "error", + { + "multiline": "consistent", + "singleline": "consistent" + } + ], + "react/jsx-curly-spacing": [ + "error", + "never", + { + "allowMultiline": true + } + ], + "react/jsx-equals-spacing": "off", + "react/jsx-filename-extension": [ + 2, + { + "extensions": [ + ".js", + ".jsx" + ] + } + ], + "react/jsx-first-prop-new-line": [ + "error", + "multiline-multiprop" + ], + "react/jsx-fragments": [ + "error", + "syntax" + ], + "react/jsx-indent": "off", + "react/jsx-indent-props": [ + "error", + 2 + ], + "react/jsx-key": 2, + "react/jsx-max-props-per-line": [ + "error", + { + "maximum": 1, + "when": "multiline" + } + ], + "react/jsx-no-bind": [ + "error", + { + "allowArrowFunctions": true, + "allowBind": false, + "allowFunctions": false, + "ignoreDOMComponents": true, + "ignoreRefs": true + } + ], + "react/jsx-no-comment-textnodes": "error", + "react/jsx-no-constructed-context-values": "error", + "react/jsx-no-duplicate-props": [ + "error", + { + "ignoreCase": true + } + ], + "react/jsx-no-leaked-render": "error", + "react/jsx-no-script-url": [ + "error", + [ + { + "name": "Link", + "props": [ + "to" + ] + } + ] + ], + "react/jsx-no-target-blank": [ + "error", + { + "enforceDynamicLinks": "always" + } + ], + "react/jsx-no-undef": "error", + "react/jsx-no-useless-fragment": "error", + "react/jsx-one-expression-per-line": "off", + "react/jsx-pascal-case": [ + "error", + { + "allowAllCaps": true, + "ignore": [] + } + ], + "react/jsx-props-no-multi-spaces": "error", + "react/jsx-props-no-spread-multi": "error", + "react/jsx-props-no-spreading": [ + "off", + { + "custom": "enforce", + "exceptions": [], + "explicitSpread": "ignore", + "html": "enforce" + } + ], + "react/jsx-tag-spacing": [ + "error", + { + "afterOpening": "never", + "beforeClosing": "never", + "beforeSelfClosing": "always", + "closingSlash": "never" + } + ], + "react/jsx-uses-react": "off", + "react/jsx-uses-vars": "error", + "react/jsx-wrap-multilines": [ + "error", + { + "arrow": "parens-new-line", + "assignment": "parens-new-line", + "condition": "parens-new-line", + "declaration": "parens-new-line", + "logical": "parens-new-line", + "prop": "ignore", + "return": "parens-new-line" + } + ], + "react/no-access-state-in-setstate": "error", + "react/no-array-index-key": "error", + "react/no-arrow-function-lifecycle": "error", + "react/no-children-prop": "error", + "react/no-danger": "warn", + "react/no-danger-with-children": "error", + "react/no-deprecated": [ + "error" + ], + "react/no-did-update-set-state": "error", + "react/no-direct-mutation-state": 2, + "react/no-find-dom-node": "error", + "react/no-invalid-html-attribute": "error", + "react/no-is-mounted": "error", + "react/no-namespace": "error", + "react/no-object-type-as-default-prop": "error", + "react/no-redundant-should-component-update": "error", + "react/no-render-return-value": "error", + "react/no-string-refs": "error", + "react/no-this-in-sfc": "error", + "react/no-typos": "error", + "react/no-unescaped-entities": "error", + "react/no-unknown-property": "error", + "react/no-unsafe": 0, + "react/no-unstable-nested-components": "error", + "react/no-unused-class-component-methods": "error", + "react/no-unused-prop-types": [ + "error", + { + "customValidators": [], + "skipShapeProps": true + } + ], + "react/no-unused-state": "error", + "react/no-will-update-set-state": "error", + "react/prefer-es6-class": [ + "error", + "always" + ], + "react/prefer-exact-props": "error", + "react/prefer-stateless-function": [ + "error", + { + "ignorePureComponents": true + } + ], + "react/prop-types": [ + "error", + { + "customValidators": [], + "ignore": [], + "skipUndeclared": false + } + ], + "react/react-in-jsx-scope": "off", + "react/require-default-props": "off", + "react/require-render-return": "error", + "react/self-closing-comp": "error", + "react/sort-comp": [ + "error", + { + "groups": { + "lifecycle": [ + "displayName", + "propTypes", + "contextTypes", + "childContextTypes", + "mixins", + "statics", + "defaultProps", + "constructor", + "getDefaultProps", + "getInitialState", + "state", + "getChildContext", + "getDerivedStateFromProps", + "componentWillMount", + "UNSAFE_componentWillMount", + "componentDidMount", + "componentWillReceiveProps", + "UNSAFE_componentWillReceiveProps", + "shouldComponentUpdate", + "componentWillUpdate", + "UNSAFE_componentWillUpdate", + "getSnapshotBeforeUpdate", + "componentDidUpdate", + "componentDidCatch", + "componentWillUnmount" + ], + "rendering": [ + "/^render.+$/", + "render" + ] + }, + "order": [ + "static-variables", + "static-methods", + "instance-variables", + "lifecycle", + "/^handle.+$/", + "/^on.+$/", + "getters", + "setters", + "/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/", + "instance-methods", + "everything-else", + "rendering" + ] + } + ], + "react/state-in-constructor": [ + "error", + "never" + ], + "react/static-property-placement": "error", + "react/style-prop-object": "error", + "react/void-dom-elements-no-children": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + }, + "settings": { + "react": { + "version": "detect" + }, + "react-x": { + "additionalComponents": [ + { + "as": "a", + "attributes": [ + { + "as": "href", + "name": "to" + } + ], + "name": "Link" + } + ] + } + } + }, + { + "files": [ + "**/*.ts", + "**/*.tsx" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AI": false, + "AITextSession": false, + "AbortController": false, + "AbortSignal": false, + "AbsoluteOrientationSensor": false, + "AbstractRange": false, + "Accelerometer": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffect": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioData": false, + "AudioDecoder": false, + "AudioDestinationNode": false, + "AudioEncoder": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioParamMap": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioSinkInfo": false, + "AudioWorklet": false, + "AudioWorkletGlobalScope": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "AuthenticatorAssertionResponse": false, + "AuthenticatorAttestationResponse": false, + "AuthenticatorResponse": false, + "BackgroundFetchManager": false, + "BackgroundFetchRecord": false, + "BackgroundFetchRegistration": false, + "BarProp": false, + "BarcodeDetector": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "Bluetooth": false, + "BluetoothCharacteristicProperties": false, + "BluetoothDevice": false, + "BluetoothRemoteGATTCharacteristic": false, + "BluetoothRemoteGATTDescriptor": false, + "BluetoothRemoteGATTServer": false, + "BluetoothRemoteGATTService": false, + "BluetoothUUID": false, + "BroadcastChannel": false, + "BrowserCaptureMediaStreamTrack": false, + "ByteLengthQueuingStrategy": false, + "CDATASection": false, + "CSS": false, + "CSSAnimation": false, + "CSSConditionRule": false, + "CSSContainerRule": false, + "CSSCounterStyleRule": false, + "CSSFontFaceRule": false, + "CSSFontFeatureValuesRule": false, + "CSSFontPaletteValuesRule": false, + "CSSGroupingRule": false, + "CSSImageValue": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSKeywordValue": false, + "CSSLayerBlockRule": false, + "CSSLayerStatementRule": false, + "CSSMathClamp": false, + "CSSMathInvert": false, + "CSSMathMax": false, + "CSSMathMin": false, + "CSSMathNegate": false, + "CSSMathProduct": false, + "CSSMathSum": false, + "CSSMathValue": false, + "CSSMatrixComponent": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSNestedDeclarations": false, + "CSSNumericArray": false, + "CSSNumericValue": false, + "CSSPageDescriptors": false, + "CSSPageRule": false, + "CSSPerspective": false, + "CSSPositionTryDescriptors": false, + "CSSPositionTryRule": false, + "CSSPositionValue": false, + "CSSPropertyRule": false, + "CSSRotate": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSScale": false, + "CSSScopeRule": false, + "CSSSkew": false, + "CSSSkewX": false, + "CSSSkewY": false, + "CSSStartingStyleRule": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSStyleValue": false, + "CSSSupportsRule": false, + "CSSTransformComponent": false, + "CSSTransformValue": false, + "CSSTransition": false, + "CSSTranslate": false, + "CSSUnitValue": false, + "CSSUnparsedValue": false, + "CSSVariableReferenceValue": false, + "CSSViewTransitionRule": false, + "Cache": false, + "CacheStorage": false, + "CanvasCaptureMediaStream": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "CaptureController": false, + "CaretPosition": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "ChapterInformation": false, + "CharacterBoundsUpdateEvent": false, + "CharacterData": false, + "Clipboard": false, + "ClipboardEvent": false, + "ClipboardItem": false, + "CloseEvent": false, + "CloseWatcher": false, + "Comment": false, + "CompositionEvent": false, + "CompressionStream": false, + "ConstantSourceNode": false, + "ContentVisibilityAutoStateChangeEvent": false, + "ConvolverNode": false, + "CookieChangeEvent": false, + "CookieDeprecationLabel": false, + "CookieStore": false, + "CookieStoreManager": false, + "CountQueuingStrategy": false, + "Credential": false, + "CredentialsContainer": false, + "CropTarget": false, + "Crypto": false, + "CryptoKey": false, + "CustomElementRegistry": false, + "CustomEvent": false, + "CustomStateSet": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectList": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "DecompressionStream": false, + "DelayNode": false, + "DelegatedInkTrailPresenter": false, + "DeviceMotionEvent": false, + "DeviceMotionEventAcceleration": false, + "DeviceMotionEventRotationRate": false, + "DeviceOrientationEvent": false, + "Document": false, + "DocumentFragment": false, + "DocumentPictureInPicture": false, + "DocumentPictureInPictureEvent": false, + "DocumentTimeline": false, + "DocumentType": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "EditContext": false, + "Element": false, + "ElementInternals": false, + "EncodedAudioChunk": false, + "EncodedVideoChunk": false, + "ErrorEvent": false, + "Event": false, + "EventCounts": false, + "EventSource": false, + "EventTarget": false, + "External": false, + "EyeDropper": false, + "FeaturePolicy": false, + "FederatedCredential": false, + "Fence": false, + "FencedFrameConfig": false, + "FetchLaterResult": false, + "File": false, + "FileList": false, + "FileReader": false, + "FileSystem": false, + "FileSystemDirectoryEntry": false, + "FileSystemDirectoryHandle": false, + "FileSystemDirectoryReader": false, + "FileSystemEntry": false, + "FileSystemFileEntry": false, + "FileSystemFileHandle": false, + "FileSystemHandle": false, + "FileSystemWritableFileStream": false, + "Float16Array": false, + "FocusEvent": false, + "FontData": false, + "FontFace": false, + "FontFaceSet": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "FormDataEvent": false, + "FragmentDirective": false, + "GPU": false, + "GPUAdapter": false, + "GPUAdapterInfo": false, + "GPUBindGroup": false, + "GPUBindGroupLayout": false, + "GPUBuffer": false, + "GPUBufferUsage": false, + "GPUCanvasContext": false, + "GPUColorWrite": false, + "GPUCommandBuffer": false, + "GPUCommandEncoder": false, + "GPUCompilationInfo": false, + "GPUCompilationMessage": false, + "GPUComputePassEncoder": false, + "GPUComputePipeline": false, + "GPUDevice": false, + "GPUDeviceLostInfo": false, + "GPUError": false, + "GPUExternalTexture": false, + "GPUInternalError": false, + "GPUMapMode": false, + "GPUOutOfMemoryError": false, + "GPUPipelineError": false, + "GPUPipelineLayout": false, + "GPUQuerySet": false, + "GPUQueue": false, + "GPURenderBundle": false, + "GPURenderBundleEncoder": false, + "GPURenderPassEncoder": false, + "GPURenderPipeline": false, + "GPUSampler": false, + "GPUShaderModule": false, + "GPUShaderStage": false, + "GPUSupportedFeatures": false, + "GPUSupportedLimits": false, + "GPUTexture": false, + "GPUTextureUsage": false, + "GPUTextureView": false, + "GPUUncapturedErrorEvent": false, + "GPUValidationError": false, + "GainNode": false, + "Gamepad": false, + "GamepadAxisMoveEvent": false, + "GamepadButton": false, + "GamepadButtonEvent": false, + "GamepadEvent": false, + "GamepadHapticActuator": false, + "GamepadPose": false, + "Geolocation": false, + "GeolocationCoordinates": false, + "GeolocationPosition": false, + "GeolocationPositionError": false, + "GravitySensor": false, + "Gyroscope": false, + "HID": false, + "HIDConnectionEvent": false, + "HIDDevice": false, + "HIDInputReportEvent": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBRElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLDListElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFencedFrameElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHRElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLIElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLOListElement": false, + "HTMLObjectElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "HashChangeEvent": false, + "Headers": false, + "Highlight": false, + "HighlightRegistry": false, + "History": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IIRFilterNode": false, + "IdentityCredential": false, + "IdentityCredentialError": false, + "IdentityProvider": false, + "IdleDeadline": false, + "IdleDetector": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "ImageDecoder": false, + "ImageTrack": false, + "ImageTrackList": false, + "Ink": false, + "InputDeviceCapabilities": false, + "InputDeviceInfo": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Keyboard": false, + "KeyboardEvent": false, + "KeyboardLayoutMap": false, + "KeyframeEffect": false, + "LargestContentfulPaint": false, + "LaunchParams": false, + "LaunchQueue": false, + "LayoutShift": false, + "LayoutShiftAttribution": false, + "LinearAccelerationSensor": false, + "Location": false, + "Lock": false, + "LockManager": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MathMLElement": false, + "MediaCapabilities": false, + "MediaCapabilitiesInfo": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaKeys": false, + "MediaList": false, + "MediaMetadata": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaRecorderErrorEvent": false, + "MediaSession": false, + "MediaSource": false, + "MediaSourceHandle": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackAudioSourceNode": false, + "MediaStreamTrackAudioStats": false, + "MediaStreamTrackEvent": false, + "MediaStreamTrackGenerator": false, + "MediaStreamTrackProcessor": false, + "MediaStreamTrackVideoStats": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MimeType": false, + "MimeTypeArray": false, + "ModelGenericSession": false, + "ModelManager": false, + "MouseEvent": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "NamedNodeMap": false, + "NavigateEvent": false, + "Navigation": false, + "NavigationActivation": false, + "NavigationCurrentEntryChangeEvent": false, + "NavigationDestination": false, + "NavigationHistoryEntry": false, + "NavigationPreloadManager": false, + "NavigationTransition": false, + "Navigator": false, + "NavigatorLogin": false, + "NavigatorManagedData": false, + "NavigatorUAData": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "NotRestoredReasonDetails": false, + "NotRestoredReasons": false, + "Notification": false, + "NotifyPaintEvent": false, + "OTPCredential": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "OffscreenCanvas": false, + "OffscreenCanvasRenderingContext2D": false, + "Option": false, + "OrientationSensor": false, + "OscillatorNode": false, + "OverconstrainedError": false, + "PERSISTENT": false, + "PageRevealEvent": false, + "PageSwapEvent": false, + "PageTransitionEvent": false, + "PannerNode": false, + "PasswordCredential": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentManager": false, + "PaymentMethodChangeEvent": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "Performance": false, + "PerformanceElementTiming": false, + "PerformanceEntry": false, + "PerformanceEventTiming": false, + "PerformanceLongAnimationFrameTiming": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceScriptTiming": false, + "PerformanceServerTiming": false, + "PerformanceTiming": false, + "PeriodicSyncManager": false, + "PeriodicWave": false, + "PermissionStatus": false, + "Permissions": false, + "PictureInPictureEvent": false, + "PictureInPictureWindow": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "PressureObserver": false, + "PressureRecord": false, + "ProcessingInstruction": false, + "Profiler": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "ProtectedAudience": false, + "PublicKeyCredential": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "RTCCertificate": false, + "RTCDTMFSender": false, + "RTCDTMFToneChangeEvent": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCEncodedAudioFrame": false, + "RTCEncodedVideoFrame": false, + "RTCError": false, + "RTCErrorEvent": false, + "RTCIceCandidate": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceErrorEvent": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpReceiver": false, + "RTCRtpScriptTransform": false, + "RTCRtpSender": false, + "RTCRtpTransceiver": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "RadioNodeList": false, + "Range": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "RelativeOrientationSensor": false, + "RemotePlayback": false, + "ReportingObserver": false, + "Request": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "ResizeObserverSize": false, + "Response": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLineElement": false, + "SVGLinearGradientElement": false, + "SVGMPathElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGSVGElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTSpanElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "Scheduler": false, + "Scheduling": false, + "Screen": false, + "ScreenDetailed": false, + "ScreenDetails": false, + "ScreenOrientation": false, + "ScriptProcessorNode": false, + "ScrollTimeline": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "Sensor": false, + "SensorErrorEvent": false, + "Serial": false, + "SerialPort": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "ShadowRoot": false, + "SharedStorage": false, + "SharedStorageWorklet": false, + "SharedWorker": false, + "SnapEvent": false, + "SourceBuffer": false, + "SourceBufferList": false, + "SpeechSynthesis": false, + "SpeechSynthesisErrorEvent": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "SpeechSynthesisVoice": false, + "StaticRange": false, + "StereoPannerNode": false, + "Storage": false, + "StorageBucket": false, + "StorageBucketManager": false, + "StorageEvent": false, + "StorageManager": false, + "StylePropertyMap": false, + "StylePropertyMapReadOnly": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubmitEvent": false, + "SubtleCrypto": false, + "SyncManager": false, + "TEMPORARY": false, + "TaskAttributionTiming": false, + "TaskController": false, + "TaskPriorityChangeEvent": false, + "TaskSignal": false, + "Text": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TextEvent": false, + "TextFormat": false, + "TextFormatUpdateEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TextUpdateEvent": false, + "TimeEvent": false, + "TimeRanges": false, + "ToggleEvent": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "TransitionEvent": false, + "TreeWalker": false, + "TrustedHTML": false, + "TrustedScript": false, + "TrustedScriptURL": false, + "TrustedTypePolicy": false, + "TrustedTypePolicyFactory": false, + "UIEvent": false, + "URL": false, + "URLPattern": false, + "URLSearchParams": false, + "USB": false, + "USBAlternateInterface": false, + "USBConfiguration": false, + "USBConnectionEvent": false, + "USBDevice": false, + "USBEndpoint": false, + "USBInTransferResult": false, + "USBInterface": false, + "USBIsochronousInTransferPacket": false, + "USBIsochronousInTransferResult": false, + "USBIsochronousOutTransferPacket": false, + "USBIsochronousOutTransferResult": false, + "USBOutTransferResult": false, + "UserActivation": false, + "VTTCue": false, + "VTTRegion": false, + "ValidityState": false, + "VideoColorSpace": false, + "VideoDecoder": false, + "VideoEncoder": false, + "VideoFrame": false, + "VideoPlaybackQuality": false, + "ViewTimeline": false, + "ViewTransition": false, + "ViewTransitionTypeSet": false, + "VirtualKeyboard": false, + "VirtualKeyboardGeometryChangeEvent": false, + "VisibilityStateEntry": false, + "VisualViewport": false, + "WGSLLanguageFeatures": false, + "WakeLock": false, + "WakeLockSentinel": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLObject": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WebSocketError": false, + "WebSocketStream": false, + "WebTransport": false, + "WebTransportBidirectionalStream": false, + "WebTransportDatagramDuplexStream": false, + "WebTransportError": false, + "WebTransportReceiveStream": false, + "WebTransportSendStream": false, + "WheelEvent": false, + "Window": false, + "WindowControlsOverlay": false, + "WindowControlsOverlayGeometryChangeEvent": false, + "Worker": false, + "Worklet": false, + "WorkletGlobalScope": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XRAnchor": false, + "XRAnchorSet": false, + "XRBoundedReferenceSpace": false, + "XRCPUDepthInformation": false, + "XRCamera": false, + "XRDOMOverlayState": false, + "XRDepthInformation": false, + "XRFrame": false, + "XRHitTestResult": false, + "XRHitTestSource": false, + "XRInputSource": false, + "XRInputSourceArray": false, + "XRInputSourceEvent": false, + "XRInputSourcesChangeEvent": false, + "XRLayer": false, + "XRLightEstimate": false, + "XRLightProbe": false, + "XRPose": false, + "XRRay": false, + "XRReferenceSpace": false, + "XRReferenceSpaceEvent": false, + "XRRenderState": false, + "XRRigidTransform": false, + "XRSession": false, + "XRSessionEvent": false, + "XRSpace": false, + "XRSystem": false, + "XRTransientInputHitTestResult": false, + "XRTransientInputHitTestSource": false, + "XRView": false, + "XRViewerPose": false, + "XRViewport": false, + "XRWebGLBinding": false, + "XRWebGLDepthInformation": false, + "XRWebGLLayer": false, + "XSLTProcessor": false, + "addEventListener": false, + "ai": false, + "alert": false, + "atob": false, + "blur": false, + "btoa": false, + "caches": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "close": false, + "closed": false, + "confirm": false, + "console": false, + "cookieStore": false, + "createImageBitmap": false, + "credentialless": false, + "crossOriginIsolated": false, + "crypto": false, + "currentFrame": false, + "currentTime": false, + "customElements": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "documentPictureInPicture": false, + "event": false, + "external": false, + "fence": false, + "fetch": false, + "fetchLater": false, + "find": false, + "focus": false, + "frameElement": false, + "frames": false, + "getComputedStyle": false, + "getScreenDetails": false, + "getSelection": false, + "history": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "isSecureContext": false, + "launchQueue": false, + "length": false, + "localStorage": false, + "location": true, + "locationbar": false, + "matchMedia": false, + "menubar": false, + "model": false, + "moveBy": false, + "moveTo": false, + "name": false, + "navigation": false, + "navigator": false, + "offscreenBuffering": false, + "onabort": true, + "onafterprint": true, + "onanimationcancel": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinput": true, + "onbeforeinstallprompt": true, + "onbeforematch": true, + "onbeforeprint": true, + "onbeforetoggle": true, + "onbeforeunload": true, + "onbeforexrselect": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontentvisibilityautostatechange": true, + "oncontextlost": true, + "oncontextmenu": true, + "oncontextrestored": true, + "oncopy": true, + "oncuechange": true, + "oncut": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "onformdata": true, + "ongamepadconnected": true, + "ongamepaddisconnected": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpagereveal": true, + "onpageshow": true, + "onpageswap": true, + "onpaste": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerrawupdate": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onscrollend": true, + "onscrollsnapchange": true, + "onscrollsnapchanging": true, + "onsearch": true, + "onsecuritypolicyviolation": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onselectionchange": true, + "onselectstart": true, + "onslotchange": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitioncancel": true, + "ontransitionend": true, + "ontransitionrun": true, + "ontransitionstart": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "opener": false, + "origin": false, + "originAgentCluster": false, + "outerHeight": false, + "outerWidth": false, + "pageXOffset": false, + "pageYOffset": false, + "parent": false, + "performance": false, + "personalbar": false, + "postMessage": false, + "print": false, + "prompt": false, + "queryLocalFonts": false, + "queueMicrotask": false, + "registerProcessor": false, + "removeEventListener": false, + "reportError": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "resizeTo": false, + "sampleRate": false, + "scheduler": false, + "screen": false, + "screenLeft": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "scroll": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "scrollbars": false, + "self": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "sharedStorage": false, + "showDirectoryPicker": false, + "showOpenFilePicker": false, + "showSaveFilePicker": false, + "speechSynthesis": false, + "status": false, + "statusbar": false, + "stop": false, + "structuredClone": false, + "styleMedia": false, + "toolbar": false, + "top": false, + "trustedTypes": false, + "visualViewport": false, + "window": false + }, + "parser": "@qlik/eslint-config/react-ts-parser", + "parserOptions": { + "ecmaFeatures": { + "jsx": true + }, + "jsxPragma": null, + "parser": { + "meta": { + "name": "typescript-eslint/parser", + "version": "8.16.0" + }, + "version": "8.16.0" + }, + "projectService": true, + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/react-ts", + "plugins": { + "@eslint-react": "@eslint-react-plugin", + "@eslint-react/debug": "@eslint-react/debug-plugin", + "@eslint-react/dom": "@eslint-react/dom-plugin", + "@eslint-react/hooks-extra": "@eslint-react/hooks-extra-plugin", + "@eslint-react/naming-convention": "@eslint-react/naming-convention-plugin", + "@eslint-react/web-api": "@eslint-react/web-api-plugin", + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin", + "jsx-a11y": "jsx-a11y-plugin", + "react": "react-plugin", + "react-hooks": "react-hooks-plugin" + }, + "rules": { + "@eslint-react/dom/no-children-in-void-dom-elements": "warn", + "@eslint-react/dom/no-dangerously-set-innerhtml": "warn", + "@eslint-react/dom/no-dangerously-set-innerhtml-with-children": "error", + "@eslint-react/dom/no-find-dom-node": "error", + "@eslint-react/dom/no-missing-button-type": "warn", + "@eslint-react/dom/no-missing-iframe-sandbox": "warn", + "@eslint-react/dom/no-namespace": "error", + "@eslint-react/dom/no-render-return-value": "error", + "@eslint-react/dom/no-script-url": "warn", + "@eslint-react/dom/no-unsafe-iframe-sandbox": "warn", + "@eslint-react/dom/no-unsafe-target-blank": "warn", + "@eslint-react/ensure-forward-ref-using-ref": "warn", + "@eslint-react/hooks-extra/no-direct-set-state-in-use-effect": "warn", + "@eslint-react/hooks-extra/no-redundant-custom-hook": "warn", + "@eslint-react/hooks-extra/prefer-use-state-lazy-initialization": "warn", + "@eslint-react/jsx-no-duplicate-props": "warn", + "@eslint-react/jsx-uses-vars": "warn", + "@eslint-react/no-access-state-in-setstate": "error", + "@eslint-react/no-array-index-key": "warn", + "@eslint-react/no-children-count": "warn", + "@eslint-react/no-children-for-each": "warn", + "@eslint-react/no-children-map": "warn", + "@eslint-react/no-children-only": "warn", + "@eslint-react/no-children-to-array": "warn", + "@eslint-react/no-clone-element": "warn", + "@eslint-react/no-comment-textnodes": "warn", + "@eslint-react/no-component-will-mount": "error", + "@eslint-react/no-component-will-receive-props": "error", + "@eslint-react/no-component-will-update": "error", + "@eslint-react/no-create-ref": "error", + "@eslint-react/no-default-props": "error", + "@eslint-react/no-direct-mutation-state": "error", + "@eslint-react/no-duplicate-key": "error", + "@eslint-react/no-missing-key": "error", + "@eslint-react/no-nested-components": "error", + "@eslint-react/no-prop-types": "error", + "@eslint-react/no-redundant-should-component-update": "error", + "@eslint-react/no-set-state-in-component-did-mount": "warn", + "@eslint-react/no-set-state-in-component-did-update": "warn", + "@eslint-react/no-set-state-in-component-will-update": "warn", + "@eslint-react/no-string-refs": "error", + "@eslint-react/no-unsafe-component-will-mount": "warn", + "@eslint-react/no-unsafe-component-will-receive-props": "warn", + "@eslint-react/no-unsafe-component-will-update": "warn", + "@eslint-react/no-unstable-context-value": "warn", + "@eslint-react/no-unstable-default-props": "warn", + "@eslint-react/no-unused-class-component-members": "warn", + "@eslint-react/no-unused-state": "warn", + "@eslint-react/web-api/no-leaked-event-listener": "warn", + "@eslint-react/web-api/no-leaked-interval": "warn", + "@eslint-react/web-api/no-leaked-resize-observer": "warn", + "@eslint-react/web-api/no-leaked-timeout": "warn", + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/default-param-last": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": [ + "error", + { + "format": [ + "camelCase", + "PascalCase", + "UPPER_CASE" + ], + "selector": "variable" + }, + { + "format": [ + "camelCase", + "PascalCase" + ], + "selector": "function" + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeLike" + } + ], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": [ + "error", + { + "ignoreIIFE": true + } + ], + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-loop-func": "error", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": [ + "error", + { + "checksConditionals": false + } + ], + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "@typescript-eslint/no-restricted-types": [ + "error", + {} + ], + "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-parameter-property-assignment": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-enum-initializers": "error", + "@typescript-eslint/prefer-for-of": "off", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/return-await": "error", + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": "off", + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [ + "render", + "getInitialState", + "getDefaultProps", + "getChildContext", + "componentWillMount", + "UNSAFE_componentWillMount", + "componentDidMount", + "componentWillReceiveProps", + "UNSAFE_componentWillReceiveProps", + "shouldComponentUpdate", + "componentWillUpdate", + "UNSAFE_componentWillUpdate", + "componentDidUpdate", + "componentWillUnmount", + "componentDidCatch", + "getSnapshotBeforeUpdate" + ] + } + ], + "consistent-return": "error", + "constructor-super": "off", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "off", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": "off", + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "off", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "jsx-a11y/alt-text": [ + "error", + { + "area": [], + "elements": [ + "img", + "object", + "area", + "input[type=\"image\"]" + ], + "img": [], + "input[type=\"image\"]": [], + "object": [] + } + ], + "jsx-a11y/anchor-ambiguous-text": "off", + "jsx-a11y/anchor-has-content": [ + "error", + { + "components": [] + } + ], + "jsx-a11y/anchor-is-valid": [ + "error", + { + "aspects": [ + "noHref", + "invalidHref", + "preferButton" + ], + "components": [ + "Link" + ], + "specialLink": [ + "to" + ] + } + ], + "jsx-a11y/aria-activedescendant-has-tabindex": "error", + "jsx-a11y/aria-props": "error", + "jsx-a11y/aria-proptypes": "error", + "jsx-a11y/aria-role": [ + "error", + { + "ignoreNonDOM": false + } + ], + "jsx-a11y/aria-unsupported-elements": "error", + "jsx-a11y/autocomplete-valid": "error", + "jsx-a11y/click-events-have-key-events": "error", + "jsx-a11y/control-has-associated-label": [ + "error", + { + "controlComponents": [], + "depth": 5, + "ignoreElements": [ + "audio", + "canvas", + "embed", + "input", + "textarea", + "tr", + "video" + ], + "ignoreRoles": [ + "grid", + "listbox", + "menu", + "menubar", + "radiogroup", + "row", + "tablist", + "toolbar", + "tree", + "treegrid" + ], + "labelAttributes": [ + "label" + ] + } + ], + "jsx-a11y/heading-has-content": [ + "error", + { + "components": [ + "" + ] + } + ], + "jsx-a11y/html-has-lang": "error", + "jsx-a11y/iframe-has-title": "error", + "jsx-a11y/img-redundant-alt": "error", + "jsx-a11y/interactive-supports-focus": "error", + "jsx-a11y/label-has-associated-control": [ + "error", + { + "assert": "both", + "controlComponents": [], + "depth": 25, + "labelAttributes": [], + "labelComponents": [] + } + ], + "jsx-a11y/label-has-for": "off", + "jsx-a11y/lang": "error", + "jsx-a11y/media-has-caption": [ + "error", + { + "audio": [], + "track": [], + "video": [] + } + ], + "jsx-a11y/mouse-events-have-key-events": "error", + "jsx-a11y/no-access-key": "error", + "jsx-a11y/no-autofocus": [ + "error", + { + "ignoreNonDOM": true + } + ], + "jsx-a11y/no-distracting-elements": [ + "error", + { + "elements": [ + "marquee", + "blink" + ] + } + ], + "jsx-a11y/no-interactive-element-to-noninteractive-role": [ + "error", + { + "tr": [ + "none", + "presentation" + ] + } + ], + "jsx-a11y/no-noninteractive-element-interactions": [ + "error", + { + "handlers": [ + "onClick", + "onMouseDown", + "onMouseUp", + "onKeyPress", + "onKeyDown", + "onKeyUp" + ] + } + ], + "jsx-a11y/no-noninteractive-element-to-interactive-role": [ + "error", + { + "li": [ + "menuitem", + "option", + "row", + "tab", + "treeitem" + ], + "ol": [ + "listbox", + "menu", + "menubar", + "radiogroup", + "tablist", + "tree", + "treegrid" + ], + "table": [ + "grid" + ], + "td": [ + "gridcell" + ], + "ul": [ + "listbox", + "menu", + "menubar", + "radiogroup", + "tablist", + "tree", + "treegrid" + ] + } + ], + "jsx-a11y/no-noninteractive-tabindex": [ + "error", + { + "allowExpressionValues": true, + "roles": [ + "tabpanel" + ], + "tags": [] + } + ], + "jsx-a11y/no-redundant-roles": [ + "error", + { + "nav": [ + "navigation" + ] + } + ], + "jsx-a11y/no-static-element-interactions": [ + "error", + { + "handlers": [ + "onClick", + "onMouseDown", + "onMouseUp", + "onKeyPress", + "onKeyDown", + "onKeyUp" + ] + } + ], + "jsx-a11y/role-has-required-aria-props": "error", + "jsx-a11y/role-supports-aria-props": "error", + "jsx-a11y/scope": "error", + "jsx-a11y/tabindex-no-positive": "error", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "off", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "off", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "warn", + "no-const-assign": "off", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "off", + "no-dupe-class-members": "off", + "no-dupe-else-if": "error", + "no-dupe-keys": "off", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "off", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "off", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "off", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "off", + "no-new-symbol": "off", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "off", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "off", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-return-await": "off", + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "off", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "off", + "no-throw-literal": "error", + "no-undef": "off", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "off", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "off", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "off", + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "off", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "react-hooks/exhaustive-deps": "error", + "react-hooks/rules-of-hooks": "error", + "react/button-has-type": [ + "error", + { + "button": true, + "reset": false, + "submit": true + } + ], + "react/default-props-match-prop-types": [ + "error", + { + "allowRequiredDefaults": false + } + ], + "react/destructuring-assignment": [ + "error", + "always" + ], + "react/display-name": 2, + "react/forbid-foreign-prop-types": [ + "warn", + { + "allowInPropTypes": true + } + ], + "react/forbid-prop-types": [ + "error", + { + "checkChildContextTypes": true, + "checkContextTypes": true, + "forbid": [ + "any", + "array", + "object" + ] + } + ], + "react/forward-ref-uses-ref": "error", + "react/function-component-definition": "off", + "react/hook-use-state": "error", + "react/jsx-boolean-value": [ + "error", + "never", + { + "always": [] + } + ], + "react/jsx-closing-bracket-location": [ + "error", + "line-aligned" + ], + "react/jsx-closing-tag-location": "error", + "react/jsx-curly-brace-presence": [ + "error", + { + "children": "never", + "props": "never" + } + ], + "react/jsx-curly-newline": [ + "error", + { + "multiline": "consistent", + "singleline": "consistent" + } + ], + "react/jsx-curly-spacing": [ + "error", + "never", + { + "allowMultiline": true + } + ], + "react/jsx-equals-spacing": "off", + "react/jsx-filename-extension": [ + 2, + { + "extensions": [ + ".js", + ".jsx", + ".ts", + ".tsx" + ] + } + ], + "react/jsx-first-prop-new-line": [ + "error", + "multiline-multiprop" + ], + "react/jsx-fragments": [ + "error", + "syntax" + ], + "react/jsx-indent": "off", + "react/jsx-indent-props": [ + "error", + 2 + ], + "react/jsx-key": 2, + "react/jsx-max-props-per-line": [ + "error", + { + "maximum": 1, + "when": "multiline" + } + ], + "react/jsx-no-bind": [ + "error", + { + "allowArrowFunctions": true, + "allowBind": false, + "allowFunctions": false, + "ignoreDOMComponents": true, + "ignoreRefs": true + } + ], + "react/jsx-no-comment-textnodes": "error", + "react/jsx-no-constructed-context-values": "error", + "react/jsx-no-duplicate-props": [ + "error", + { + "ignoreCase": true + } + ], + "react/jsx-no-leaked-render": "error", + "react/jsx-no-script-url": [ + "error", + [ + { + "name": "Link", + "props": [ + "to" + ] + } + ] + ], + "react/jsx-no-target-blank": [ + "error", + { + "enforceDynamicLinks": "always" + } + ], + "react/jsx-no-undef": "error", + "react/jsx-no-useless-fragment": "error", + "react/jsx-one-expression-per-line": "off", + "react/jsx-pascal-case": [ + "error", + { + "allowAllCaps": true, + "ignore": [] + } + ], + "react/jsx-props-no-multi-spaces": "error", + "react/jsx-props-no-spread-multi": "error", + "react/jsx-props-no-spreading": [ + "off", + { + "custom": "enforce", + "exceptions": [], + "explicitSpread": "ignore", + "html": "enforce" + } + ], + "react/jsx-tag-spacing": [ + "error", + { + "afterOpening": "never", + "beforeClosing": "never", + "beforeSelfClosing": "always", + "closingSlash": "never" + } + ], + "react/jsx-uses-react": "off", + "react/jsx-uses-vars": "error", + "react/jsx-wrap-multilines": [ + "error", + { + "arrow": "parens-new-line", + "assignment": "parens-new-line", + "condition": "parens-new-line", + "declaration": "parens-new-line", + "logical": "parens-new-line", + "prop": "ignore", + "return": "parens-new-line" + } + ], + "react/no-access-state-in-setstate": "error", + "react/no-array-index-key": "error", + "react/no-arrow-function-lifecycle": "error", + "react/no-children-prop": "error", + "react/no-danger": "warn", + "react/no-danger-with-children": "error", + "react/no-deprecated": [ + "error" + ], + "react/no-did-update-set-state": "error", + "react/no-direct-mutation-state": 2, + "react/no-find-dom-node": "error", + "react/no-invalid-html-attribute": "error", + "react/no-is-mounted": "error", + "react/no-namespace": "error", + "react/no-object-type-as-default-prop": "error", + "react/no-redundant-should-component-update": "error", + "react/no-render-return-value": "error", + "react/no-string-refs": "error", + "react/no-this-in-sfc": "error", + "react/no-typos": "error", + "react/no-unescaped-entities": "error", + "react/no-unknown-property": "error", + "react/no-unsafe": 0, + "react/no-unstable-nested-components": "error", + "react/no-unused-class-component-methods": "error", + "react/no-unused-prop-types": [ + "error", + { + "customValidators": [], + "skipShapeProps": true + } + ], + "react/no-unused-state": "error", + "react/no-will-update-set-state": "error", + "react/prefer-es6-class": [ + "error", + "always" + ], + "react/prefer-exact-props": "error", + "react/prefer-stateless-function": [ + "error", + { + "ignorePureComponents": true + } + ], + "react/prop-types": [ + "error", + { + "customValidators": [], + "ignore": [], + "skipUndeclared": false + } + ], + "react/react-in-jsx-scope": "off", + "react/require-default-props": "off", + "react/require-render-return": "error", + "react/self-closing-comp": "error", + "react/sort-comp": [ + "error", + { + "groups": { + "lifecycle": [ + "displayName", + "propTypes", + "contextTypes", + "childContextTypes", + "mixins", + "statics", + "defaultProps", + "constructor", + "getDefaultProps", + "getInitialState", + "state", + "getChildContext", + "getDerivedStateFromProps", + "componentWillMount", + "UNSAFE_componentWillMount", + "componentDidMount", + "componentWillReceiveProps", + "UNSAFE_componentWillReceiveProps", + "shouldComponentUpdate", + "componentWillUpdate", + "UNSAFE_componentWillUpdate", + "getSnapshotBeforeUpdate", + "componentDidUpdate", + "componentDidCatch", + "componentWillUnmount" + ], + "rendering": [ + "/^render.+$/", + "render" + ] + }, + "order": [ + "static-variables", + "static-methods", + "instance-variables", + "lifecycle", + "/^handle.+$/", + "/^on.+$/", + "getters", + "setters", + "/^(get|set)(?!(InitialState$|DefaultProps$|ChildContext$)).+$/", + "instance-methods", + "everything-else", + "rendering" + ] + } + ], + "react/state-in-constructor": [ + "error", + "never" + ], + "react/static-property-placement": "error", + "react/style-prop-object": "error", + "react/void-dom-elements-no-children": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + }, + "settings": { + "import-x/extensions": [ + ".ts", + ".tsx", + ".cts", + ".mts", + ".js", + ".jsx", + ".cjs", + ".mjs" + ], + "import-x/external-module-folders": [ + "node_modules", + "node_modules/@types" + ], + "import-x/parsers": { + "@typescript-eslint/parser": [ + ".ts", + ".tsx", + ".cts", + ".mts" + ] + }, + "import-x/resolver": { + "typescript": true + }, + "react": { + "version": "detect" + }, + "react-x": { + "additionalComponents": [ + { + "as": "a", + "attributes": [ + { + "as": "href", + "name": "to" + } + ], + "name": "Link" + } + ] + } + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/recommended-final-config.js b/packages/eslint-config/test/generated/recommended-final-config.js new file mode 100644 index 0000000..835507d --- /dev/null +++ b/packages/eslint-config/test/generated/recommended-final-config.js @@ -0,0 +1,3900 @@ +export default [ + { + "files": [ + "**/*.js", + "**/*.mjs", + "**/*.cjs" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AI": false, + "AITextSession": false, + "AbortController": false, + "AbortSignal": false, + "AbsoluteOrientationSensor": false, + "AbstractRange": false, + "Accelerometer": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffect": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioData": false, + "AudioDecoder": false, + "AudioDestinationNode": false, + "AudioEncoder": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioParamMap": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioSinkInfo": false, + "AudioWorklet": false, + "AudioWorkletGlobalScope": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "AuthenticatorAssertionResponse": false, + "AuthenticatorAttestationResponse": false, + "AuthenticatorResponse": false, + "BackgroundFetchManager": false, + "BackgroundFetchRecord": false, + "BackgroundFetchRegistration": false, + "BarProp": false, + "BarcodeDetector": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "Bluetooth": false, + "BluetoothCharacteristicProperties": false, + "BluetoothDevice": false, + "BluetoothRemoteGATTCharacteristic": false, + "BluetoothRemoteGATTDescriptor": false, + "BluetoothRemoteGATTServer": false, + "BluetoothRemoteGATTService": false, + "BluetoothUUID": false, + "BroadcastChannel": false, + "BrowserCaptureMediaStreamTrack": false, + "ByteLengthQueuingStrategy": false, + "CDATASection": false, + "CSS": false, + "CSSAnimation": false, + "CSSConditionRule": false, + "CSSContainerRule": false, + "CSSCounterStyleRule": false, + "CSSFontFaceRule": false, + "CSSFontFeatureValuesRule": false, + "CSSFontPaletteValuesRule": false, + "CSSGroupingRule": false, + "CSSImageValue": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSKeywordValue": false, + "CSSLayerBlockRule": false, + "CSSLayerStatementRule": false, + "CSSMathClamp": false, + "CSSMathInvert": false, + "CSSMathMax": false, + "CSSMathMin": false, + "CSSMathNegate": false, + "CSSMathProduct": false, + "CSSMathSum": false, + "CSSMathValue": false, + "CSSMatrixComponent": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSNestedDeclarations": false, + "CSSNumericArray": false, + "CSSNumericValue": false, + "CSSPageDescriptors": false, + "CSSPageRule": false, + "CSSPerspective": false, + "CSSPositionTryDescriptors": false, + "CSSPositionTryRule": false, + "CSSPositionValue": false, + "CSSPropertyRule": false, + "CSSRotate": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSScale": false, + "CSSScopeRule": false, + "CSSSkew": false, + "CSSSkewX": false, + "CSSSkewY": false, + "CSSStartingStyleRule": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSStyleValue": false, + "CSSSupportsRule": false, + "CSSTransformComponent": false, + "CSSTransformValue": false, + "CSSTransition": false, + "CSSTranslate": false, + "CSSUnitValue": false, + "CSSUnparsedValue": false, + "CSSVariableReferenceValue": false, + "CSSViewTransitionRule": false, + "Cache": false, + "CacheStorage": false, + "CanvasCaptureMediaStream": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "CaptureController": false, + "CaretPosition": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "ChapterInformation": false, + "CharacterBoundsUpdateEvent": false, + "CharacterData": false, + "Clipboard": false, + "ClipboardEvent": false, + "ClipboardItem": false, + "CloseEvent": false, + "CloseWatcher": false, + "Comment": false, + "CompositionEvent": false, + "CompressionStream": false, + "ConstantSourceNode": false, + "ContentVisibilityAutoStateChangeEvent": false, + "ConvolverNode": false, + "CookieChangeEvent": false, + "CookieDeprecationLabel": false, + "CookieStore": false, + "CookieStoreManager": false, + "CountQueuingStrategy": false, + "Credential": false, + "CredentialsContainer": false, + "CropTarget": false, + "Crypto": false, + "CryptoKey": false, + "CustomElementRegistry": false, + "CustomEvent": false, + "CustomStateSet": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectList": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "DecompressionStream": false, + "DelayNode": false, + "DelegatedInkTrailPresenter": false, + "DeviceMotionEvent": false, + "DeviceMotionEventAcceleration": false, + "DeviceMotionEventRotationRate": false, + "DeviceOrientationEvent": false, + "Document": false, + "DocumentFragment": false, + "DocumentPictureInPicture": false, + "DocumentPictureInPictureEvent": false, + "DocumentTimeline": false, + "DocumentType": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "EditContext": false, + "Element": false, + "ElementInternals": false, + "EncodedAudioChunk": false, + "EncodedVideoChunk": false, + "ErrorEvent": false, + "Event": false, + "EventCounts": false, + "EventSource": false, + "EventTarget": false, + "External": false, + "EyeDropper": false, + "FeaturePolicy": false, + "FederatedCredential": false, + "Fence": false, + "FencedFrameConfig": false, + "FetchLaterResult": false, + "File": false, + "FileList": false, + "FileReader": false, + "FileSystem": false, + "FileSystemDirectoryEntry": false, + "FileSystemDirectoryHandle": false, + "FileSystemDirectoryReader": false, + "FileSystemEntry": false, + "FileSystemFileEntry": false, + "FileSystemFileHandle": false, + "FileSystemHandle": false, + "FileSystemWritableFileStream": false, + "Float16Array": false, + "FocusEvent": false, + "FontData": false, + "FontFace": false, + "FontFaceSet": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "FormDataEvent": false, + "FragmentDirective": false, + "GPU": false, + "GPUAdapter": false, + "GPUAdapterInfo": false, + "GPUBindGroup": false, + "GPUBindGroupLayout": false, + "GPUBuffer": false, + "GPUBufferUsage": false, + "GPUCanvasContext": false, + "GPUColorWrite": false, + "GPUCommandBuffer": false, + "GPUCommandEncoder": false, + "GPUCompilationInfo": false, + "GPUCompilationMessage": false, + "GPUComputePassEncoder": false, + "GPUComputePipeline": false, + "GPUDevice": false, + "GPUDeviceLostInfo": false, + "GPUError": false, + "GPUExternalTexture": false, + "GPUInternalError": false, + "GPUMapMode": false, + "GPUOutOfMemoryError": false, + "GPUPipelineError": false, + "GPUPipelineLayout": false, + "GPUQuerySet": false, + "GPUQueue": false, + "GPURenderBundle": false, + "GPURenderBundleEncoder": false, + "GPURenderPassEncoder": false, + "GPURenderPipeline": false, + "GPUSampler": false, + "GPUShaderModule": false, + "GPUShaderStage": false, + "GPUSupportedFeatures": false, + "GPUSupportedLimits": false, + "GPUTexture": false, + "GPUTextureUsage": false, + "GPUTextureView": false, + "GPUUncapturedErrorEvent": false, + "GPUValidationError": false, + "GainNode": false, + "Gamepad": false, + "GamepadAxisMoveEvent": false, + "GamepadButton": false, + "GamepadButtonEvent": false, + "GamepadEvent": false, + "GamepadHapticActuator": false, + "GamepadPose": false, + "Geolocation": false, + "GeolocationCoordinates": false, + "GeolocationPosition": false, + "GeolocationPositionError": false, + "GravitySensor": false, + "Gyroscope": false, + "HID": false, + "HIDConnectionEvent": false, + "HIDDevice": false, + "HIDInputReportEvent": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBRElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLDListElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFencedFrameElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHRElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLIElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLOListElement": false, + "HTMLObjectElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "HashChangeEvent": false, + "Headers": false, + "Highlight": false, + "HighlightRegistry": false, + "History": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IIRFilterNode": false, + "IdentityCredential": false, + "IdentityCredentialError": false, + "IdentityProvider": false, + "IdleDeadline": false, + "IdleDetector": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "ImageDecoder": false, + "ImageTrack": false, + "ImageTrackList": false, + "Ink": false, + "InputDeviceCapabilities": false, + "InputDeviceInfo": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Keyboard": false, + "KeyboardEvent": false, + "KeyboardLayoutMap": false, + "KeyframeEffect": false, + "LargestContentfulPaint": false, + "LaunchParams": false, + "LaunchQueue": false, + "LayoutShift": false, + "LayoutShiftAttribution": false, + "LinearAccelerationSensor": false, + "Location": false, + "Lock": false, + "LockManager": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MathMLElement": false, + "MediaCapabilities": false, + "MediaCapabilitiesInfo": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaKeys": false, + "MediaList": false, + "MediaMetadata": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaRecorderErrorEvent": false, + "MediaSession": false, + "MediaSource": false, + "MediaSourceHandle": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackAudioSourceNode": false, + "MediaStreamTrackAudioStats": false, + "MediaStreamTrackEvent": false, + "MediaStreamTrackGenerator": false, + "MediaStreamTrackProcessor": false, + "MediaStreamTrackVideoStats": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MimeType": false, + "MimeTypeArray": false, + "ModelGenericSession": false, + "ModelManager": false, + "MouseEvent": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "NamedNodeMap": false, + "NavigateEvent": false, + "Navigation": false, + "NavigationActivation": false, + "NavigationCurrentEntryChangeEvent": false, + "NavigationDestination": false, + "NavigationHistoryEntry": false, + "NavigationPreloadManager": false, + "NavigationTransition": false, + "Navigator": false, + "NavigatorLogin": false, + "NavigatorManagedData": false, + "NavigatorUAData": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "NotRestoredReasonDetails": false, + "NotRestoredReasons": false, + "Notification": false, + "NotifyPaintEvent": false, + "OTPCredential": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "OffscreenCanvas": false, + "OffscreenCanvasRenderingContext2D": false, + "Option": false, + "OrientationSensor": false, + "OscillatorNode": false, + "OverconstrainedError": false, + "PERSISTENT": false, + "PageRevealEvent": false, + "PageSwapEvent": false, + "PageTransitionEvent": false, + "PannerNode": false, + "PasswordCredential": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentManager": false, + "PaymentMethodChangeEvent": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "Performance": false, + "PerformanceElementTiming": false, + "PerformanceEntry": false, + "PerformanceEventTiming": false, + "PerformanceLongAnimationFrameTiming": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceScriptTiming": false, + "PerformanceServerTiming": false, + "PerformanceTiming": false, + "PeriodicSyncManager": false, + "PeriodicWave": false, + "PermissionStatus": false, + "Permissions": false, + "PictureInPictureEvent": false, + "PictureInPictureWindow": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "PressureObserver": false, + "PressureRecord": false, + "ProcessingInstruction": false, + "Profiler": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "ProtectedAudience": false, + "PublicKeyCredential": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "RTCCertificate": false, + "RTCDTMFSender": false, + "RTCDTMFToneChangeEvent": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCEncodedAudioFrame": false, + "RTCEncodedVideoFrame": false, + "RTCError": false, + "RTCErrorEvent": false, + "RTCIceCandidate": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceErrorEvent": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpReceiver": false, + "RTCRtpScriptTransform": false, + "RTCRtpSender": false, + "RTCRtpTransceiver": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "RadioNodeList": false, + "Range": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "RelativeOrientationSensor": false, + "RemotePlayback": false, + "ReportingObserver": false, + "Request": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "ResizeObserverSize": false, + "Response": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLineElement": false, + "SVGLinearGradientElement": false, + "SVGMPathElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGSVGElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTSpanElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "Scheduler": false, + "Scheduling": false, + "Screen": false, + "ScreenDetailed": false, + "ScreenDetails": false, + "ScreenOrientation": false, + "ScriptProcessorNode": false, + "ScrollTimeline": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "Sensor": false, + "SensorErrorEvent": false, + "Serial": false, + "SerialPort": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "ShadowRoot": false, + "SharedStorage": false, + "SharedStorageWorklet": false, + "SharedWorker": false, + "SnapEvent": false, + "SourceBuffer": false, + "SourceBufferList": false, + "SpeechSynthesis": false, + "SpeechSynthesisErrorEvent": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "SpeechSynthesisVoice": false, + "StaticRange": false, + "StereoPannerNode": false, + "Storage": false, + "StorageBucket": false, + "StorageBucketManager": false, + "StorageEvent": false, + "StorageManager": false, + "StylePropertyMap": false, + "StylePropertyMapReadOnly": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubmitEvent": false, + "SubtleCrypto": false, + "SyncManager": false, + "TEMPORARY": false, + "TaskAttributionTiming": false, + "TaskController": false, + "TaskPriorityChangeEvent": false, + "TaskSignal": false, + "Text": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TextEvent": false, + "TextFormat": false, + "TextFormatUpdateEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TextUpdateEvent": false, + "TimeEvent": false, + "TimeRanges": false, + "ToggleEvent": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "TransitionEvent": false, + "TreeWalker": false, + "TrustedHTML": false, + "TrustedScript": false, + "TrustedScriptURL": false, + "TrustedTypePolicy": false, + "TrustedTypePolicyFactory": false, + "UIEvent": false, + "URL": false, + "URLPattern": false, + "URLSearchParams": false, + "USB": false, + "USBAlternateInterface": false, + "USBConfiguration": false, + "USBConnectionEvent": false, + "USBDevice": false, + "USBEndpoint": false, + "USBInTransferResult": false, + "USBInterface": false, + "USBIsochronousInTransferPacket": false, + "USBIsochronousInTransferResult": false, + "USBIsochronousOutTransferPacket": false, + "USBIsochronousOutTransferResult": false, + "USBOutTransferResult": false, + "UserActivation": false, + "VTTCue": false, + "VTTRegion": false, + "ValidityState": false, + "VideoColorSpace": false, + "VideoDecoder": false, + "VideoEncoder": false, + "VideoFrame": false, + "VideoPlaybackQuality": false, + "ViewTimeline": false, + "ViewTransition": false, + "ViewTransitionTypeSet": false, + "VirtualKeyboard": false, + "VirtualKeyboardGeometryChangeEvent": false, + "VisibilityStateEntry": false, + "VisualViewport": false, + "WGSLLanguageFeatures": false, + "WakeLock": false, + "WakeLockSentinel": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLObject": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WebSocketError": false, + "WebSocketStream": false, + "WebTransport": false, + "WebTransportBidirectionalStream": false, + "WebTransportDatagramDuplexStream": false, + "WebTransportError": false, + "WebTransportReceiveStream": false, + "WebTransportSendStream": false, + "WheelEvent": false, + "Window": false, + "WindowControlsOverlay": false, + "WindowControlsOverlayGeometryChangeEvent": false, + "Worker": false, + "Worklet": false, + "WorkletGlobalScope": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XRAnchor": false, + "XRAnchorSet": false, + "XRBoundedReferenceSpace": false, + "XRCPUDepthInformation": false, + "XRCamera": false, + "XRDOMOverlayState": false, + "XRDepthInformation": false, + "XRFrame": false, + "XRHitTestResult": false, + "XRHitTestSource": false, + "XRInputSource": false, + "XRInputSourceArray": false, + "XRInputSourceEvent": false, + "XRInputSourcesChangeEvent": false, + "XRLayer": false, + "XRLightEstimate": false, + "XRLightProbe": false, + "XRPose": false, + "XRRay": false, + "XRReferenceSpace": false, + "XRReferenceSpaceEvent": false, + "XRRenderState": false, + "XRRigidTransform": false, + "XRSession": false, + "XRSessionEvent": false, + "XRSpace": false, + "XRSystem": false, + "XRTransientInputHitTestResult": false, + "XRTransientInputHitTestSource": false, + "XRView": false, + "XRViewerPose": false, + "XRViewport": false, + "XRWebGLBinding": false, + "XRWebGLDepthInformation": false, + "XRWebGLLayer": false, + "XSLTProcessor": false, + "addEventListener": false, + "ai": false, + "alert": false, + "atob": false, + "blur": false, + "btoa": false, + "caches": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "close": false, + "closed": false, + "confirm": false, + "console": false, + "cookieStore": false, + "createImageBitmap": false, + "credentialless": false, + "crossOriginIsolated": false, + "crypto": false, + "currentFrame": false, + "currentTime": false, + "customElements": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "documentPictureInPicture": false, + "event": false, + "external": false, + "fence": false, + "fetch": false, + "fetchLater": false, + "find": false, + "focus": false, + "frameElement": false, + "frames": false, + "getComputedStyle": false, + "getScreenDetails": false, + "getSelection": false, + "history": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "isSecureContext": false, + "launchQueue": false, + "length": false, + "localStorage": false, + "location": true, + "locationbar": false, + "matchMedia": false, + "menubar": false, + "model": false, + "moveBy": false, + "moveTo": false, + "name": false, + "navigation": false, + "navigator": false, + "offscreenBuffering": false, + "onabort": true, + "onafterprint": true, + "onanimationcancel": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinput": true, + "onbeforeinstallprompt": true, + "onbeforematch": true, + "onbeforeprint": true, + "onbeforetoggle": true, + "onbeforeunload": true, + "onbeforexrselect": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontentvisibilityautostatechange": true, + "oncontextlost": true, + "oncontextmenu": true, + "oncontextrestored": true, + "oncopy": true, + "oncuechange": true, + "oncut": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "onformdata": true, + "ongamepadconnected": true, + "ongamepaddisconnected": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpagereveal": true, + "onpageshow": true, + "onpageswap": true, + "onpaste": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerrawupdate": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onscrollend": true, + "onscrollsnapchange": true, + "onscrollsnapchanging": true, + "onsearch": true, + "onsecuritypolicyviolation": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onselectionchange": true, + "onselectstart": true, + "onslotchange": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitioncancel": true, + "ontransitionend": true, + "ontransitionrun": true, + "ontransitionstart": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "opener": false, + "origin": false, + "originAgentCluster": false, + "outerHeight": false, + "outerWidth": false, + "pageXOffset": false, + "pageYOffset": false, + "parent": false, + "performance": false, + "personalbar": false, + "postMessage": false, + "print": false, + "prompt": false, + "queryLocalFonts": false, + "queueMicrotask": false, + "registerProcessor": false, + "removeEventListener": false, + "reportError": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "resizeTo": false, + "sampleRate": false, + "scheduler": false, + "screen": false, + "screenLeft": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "scroll": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "scrollbars": false, + "self": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "sharedStorage": false, + "showDirectoryPicker": false, + "showOpenFilePicker": false, + "showSaveFilePicker": false, + "speechSynthesis": false, + "status": false, + "statusbar": false, + "stop": false, + "structuredClone": false, + "styleMedia": false, + "toolbar": false, + "top": false, + "trustedTypes": false, + "visualViewport": false, + "window": false + }, + "parser": "@qlik/eslint-config/recommended-js-parser", + "parserOptions": { + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/recommended-js", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": [ + "error", + { + "ignoreDestructuring": false, + "properties": "never" + } + ], + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "consistent-return": "error", + "constructor-super": "error", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "error", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": [ + "error", + { + "allowImplicit": true + } + ], + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "error", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "warn", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "error", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "error", + "no-shadow": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-undef": "error", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "error", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": false + } + ], + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + "args": "after-used", + "ignoreRestSiblings": true, + "vars": "all" + } + ], + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": true + } + ], + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + } + }, + { + "files": [ + "**/*.ts", + "**/*.tsx", + "**/*.mts", + "**/*.cts", + "**/*.d.ts" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AI": false, + "AITextSession": false, + "AbortController": false, + "AbortSignal": false, + "AbsoluteOrientationSensor": false, + "AbstractRange": false, + "Accelerometer": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffect": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioData": false, + "AudioDecoder": false, + "AudioDestinationNode": false, + "AudioEncoder": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioParamMap": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioSinkInfo": false, + "AudioWorklet": false, + "AudioWorkletGlobalScope": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "AuthenticatorAssertionResponse": false, + "AuthenticatorAttestationResponse": false, + "AuthenticatorResponse": false, + "BackgroundFetchManager": false, + "BackgroundFetchRecord": false, + "BackgroundFetchRegistration": false, + "BarProp": false, + "BarcodeDetector": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "Bluetooth": false, + "BluetoothCharacteristicProperties": false, + "BluetoothDevice": false, + "BluetoothRemoteGATTCharacteristic": false, + "BluetoothRemoteGATTDescriptor": false, + "BluetoothRemoteGATTServer": false, + "BluetoothRemoteGATTService": false, + "BluetoothUUID": false, + "BroadcastChannel": false, + "BrowserCaptureMediaStreamTrack": false, + "ByteLengthQueuingStrategy": false, + "CDATASection": false, + "CSS": false, + "CSSAnimation": false, + "CSSConditionRule": false, + "CSSContainerRule": false, + "CSSCounterStyleRule": false, + "CSSFontFaceRule": false, + "CSSFontFeatureValuesRule": false, + "CSSFontPaletteValuesRule": false, + "CSSGroupingRule": false, + "CSSImageValue": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSKeywordValue": false, + "CSSLayerBlockRule": false, + "CSSLayerStatementRule": false, + "CSSMathClamp": false, + "CSSMathInvert": false, + "CSSMathMax": false, + "CSSMathMin": false, + "CSSMathNegate": false, + "CSSMathProduct": false, + "CSSMathSum": false, + "CSSMathValue": false, + "CSSMatrixComponent": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSNestedDeclarations": false, + "CSSNumericArray": false, + "CSSNumericValue": false, + "CSSPageDescriptors": false, + "CSSPageRule": false, + "CSSPerspective": false, + "CSSPositionTryDescriptors": false, + "CSSPositionTryRule": false, + "CSSPositionValue": false, + "CSSPropertyRule": false, + "CSSRotate": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSScale": false, + "CSSScopeRule": false, + "CSSSkew": false, + "CSSSkewX": false, + "CSSSkewY": false, + "CSSStartingStyleRule": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSStyleValue": false, + "CSSSupportsRule": false, + "CSSTransformComponent": false, + "CSSTransformValue": false, + "CSSTransition": false, + "CSSTranslate": false, + "CSSUnitValue": false, + "CSSUnparsedValue": false, + "CSSVariableReferenceValue": false, + "CSSViewTransitionRule": false, + "Cache": false, + "CacheStorage": false, + "CanvasCaptureMediaStream": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "CaptureController": false, + "CaretPosition": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "ChapterInformation": false, + "CharacterBoundsUpdateEvent": false, + "CharacterData": false, + "Clipboard": false, + "ClipboardEvent": false, + "ClipboardItem": false, + "CloseEvent": false, + "CloseWatcher": false, + "Comment": false, + "CompositionEvent": false, + "CompressionStream": false, + "ConstantSourceNode": false, + "ContentVisibilityAutoStateChangeEvent": false, + "ConvolverNode": false, + "CookieChangeEvent": false, + "CookieDeprecationLabel": false, + "CookieStore": false, + "CookieStoreManager": false, + "CountQueuingStrategy": false, + "Credential": false, + "CredentialsContainer": false, + "CropTarget": false, + "Crypto": false, + "CryptoKey": false, + "CustomElementRegistry": false, + "CustomEvent": false, + "CustomStateSet": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectList": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "DecompressionStream": false, + "DelayNode": false, + "DelegatedInkTrailPresenter": false, + "DeviceMotionEvent": false, + "DeviceMotionEventAcceleration": false, + "DeviceMotionEventRotationRate": false, + "DeviceOrientationEvent": false, + "Document": false, + "DocumentFragment": false, + "DocumentPictureInPicture": false, + "DocumentPictureInPictureEvent": false, + "DocumentTimeline": false, + "DocumentType": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "EditContext": false, + "Element": false, + "ElementInternals": false, + "EncodedAudioChunk": false, + "EncodedVideoChunk": false, + "ErrorEvent": false, + "Event": false, + "EventCounts": false, + "EventSource": false, + "EventTarget": false, + "External": false, + "EyeDropper": false, + "FeaturePolicy": false, + "FederatedCredential": false, + "Fence": false, + "FencedFrameConfig": false, + "FetchLaterResult": false, + "File": false, + "FileList": false, + "FileReader": false, + "FileSystem": false, + "FileSystemDirectoryEntry": false, + "FileSystemDirectoryHandle": false, + "FileSystemDirectoryReader": false, + "FileSystemEntry": false, + "FileSystemFileEntry": false, + "FileSystemFileHandle": false, + "FileSystemHandle": false, + "FileSystemWritableFileStream": false, + "Float16Array": false, + "FocusEvent": false, + "FontData": false, + "FontFace": false, + "FontFaceSet": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "FormDataEvent": false, + "FragmentDirective": false, + "GPU": false, + "GPUAdapter": false, + "GPUAdapterInfo": false, + "GPUBindGroup": false, + "GPUBindGroupLayout": false, + "GPUBuffer": false, + "GPUBufferUsage": false, + "GPUCanvasContext": false, + "GPUColorWrite": false, + "GPUCommandBuffer": false, + "GPUCommandEncoder": false, + "GPUCompilationInfo": false, + "GPUCompilationMessage": false, + "GPUComputePassEncoder": false, + "GPUComputePipeline": false, + "GPUDevice": false, + "GPUDeviceLostInfo": false, + "GPUError": false, + "GPUExternalTexture": false, + "GPUInternalError": false, + "GPUMapMode": false, + "GPUOutOfMemoryError": false, + "GPUPipelineError": false, + "GPUPipelineLayout": false, + "GPUQuerySet": false, + "GPUQueue": false, + "GPURenderBundle": false, + "GPURenderBundleEncoder": false, + "GPURenderPassEncoder": false, + "GPURenderPipeline": false, + "GPUSampler": false, + "GPUShaderModule": false, + "GPUShaderStage": false, + "GPUSupportedFeatures": false, + "GPUSupportedLimits": false, + "GPUTexture": false, + "GPUTextureUsage": false, + "GPUTextureView": false, + "GPUUncapturedErrorEvent": false, + "GPUValidationError": false, + "GainNode": false, + "Gamepad": false, + "GamepadAxisMoveEvent": false, + "GamepadButton": false, + "GamepadButtonEvent": false, + "GamepadEvent": false, + "GamepadHapticActuator": false, + "GamepadPose": false, + "Geolocation": false, + "GeolocationCoordinates": false, + "GeolocationPosition": false, + "GeolocationPositionError": false, + "GravitySensor": false, + "Gyroscope": false, + "HID": false, + "HIDConnectionEvent": false, + "HIDDevice": false, + "HIDInputReportEvent": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBRElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLDListElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFencedFrameElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHRElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLIElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLOListElement": false, + "HTMLObjectElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "HashChangeEvent": false, + "Headers": false, + "Highlight": false, + "HighlightRegistry": false, + "History": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IIRFilterNode": false, + "IdentityCredential": false, + "IdentityCredentialError": false, + "IdentityProvider": false, + "IdleDeadline": false, + "IdleDetector": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "ImageDecoder": false, + "ImageTrack": false, + "ImageTrackList": false, + "Ink": false, + "InputDeviceCapabilities": false, + "InputDeviceInfo": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Keyboard": false, + "KeyboardEvent": false, + "KeyboardLayoutMap": false, + "KeyframeEffect": false, + "LargestContentfulPaint": false, + "LaunchParams": false, + "LaunchQueue": false, + "LayoutShift": false, + "LayoutShiftAttribution": false, + "LinearAccelerationSensor": false, + "Location": false, + "Lock": false, + "LockManager": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MathMLElement": false, + "MediaCapabilities": false, + "MediaCapabilitiesInfo": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaKeys": false, + "MediaList": false, + "MediaMetadata": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaRecorderErrorEvent": false, + "MediaSession": false, + "MediaSource": false, + "MediaSourceHandle": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackAudioSourceNode": false, + "MediaStreamTrackAudioStats": false, + "MediaStreamTrackEvent": false, + "MediaStreamTrackGenerator": false, + "MediaStreamTrackProcessor": false, + "MediaStreamTrackVideoStats": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MimeType": false, + "MimeTypeArray": false, + "ModelGenericSession": false, + "ModelManager": false, + "MouseEvent": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "NamedNodeMap": false, + "NavigateEvent": false, + "Navigation": false, + "NavigationActivation": false, + "NavigationCurrentEntryChangeEvent": false, + "NavigationDestination": false, + "NavigationHistoryEntry": false, + "NavigationPreloadManager": false, + "NavigationTransition": false, + "Navigator": false, + "NavigatorLogin": false, + "NavigatorManagedData": false, + "NavigatorUAData": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "NotRestoredReasonDetails": false, + "NotRestoredReasons": false, + "Notification": false, + "NotifyPaintEvent": false, + "OTPCredential": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "OffscreenCanvas": false, + "OffscreenCanvasRenderingContext2D": false, + "Option": false, + "OrientationSensor": false, + "OscillatorNode": false, + "OverconstrainedError": false, + "PERSISTENT": false, + "PageRevealEvent": false, + "PageSwapEvent": false, + "PageTransitionEvent": false, + "PannerNode": false, + "PasswordCredential": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentManager": false, + "PaymentMethodChangeEvent": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "Performance": false, + "PerformanceElementTiming": false, + "PerformanceEntry": false, + "PerformanceEventTiming": false, + "PerformanceLongAnimationFrameTiming": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceScriptTiming": false, + "PerformanceServerTiming": false, + "PerformanceTiming": false, + "PeriodicSyncManager": false, + "PeriodicWave": false, + "PermissionStatus": false, + "Permissions": false, + "PictureInPictureEvent": false, + "PictureInPictureWindow": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "PressureObserver": false, + "PressureRecord": false, + "ProcessingInstruction": false, + "Profiler": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "ProtectedAudience": false, + "PublicKeyCredential": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "RTCCertificate": false, + "RTCDTMFSender": false, + "RTCDTMFToneChangeEvent": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCEncodedAudioFrame": false, + "RTCEncodedVideoFrame": false, + "RTCError": false, + "RTCErrorEvent": false, + "RTCIceCandidate": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceErrorEvent": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpReceiver": false, + "RTCRtpScriptTransform": false, + "RTCRtpSender": false, + "RTCRtpTransceiver": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "RadioNodeList": false, + "Range": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "RelativeOrientationSensor": false, + "RemotePlayback": false, + "ReportingObserver": false, + "Request": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "ResizeObserverSize": false, + "Response": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLineElement": false, + "SVGLinearGradientElement": false, + "SVGMPathElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGSVGElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTSpanElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "Scheduler": false, + "Scheduling": false, + "Screen": false, + "ScreenDetailed": false, + "ScreenDetails": false, + "ScreenOrientation": false, + "ScriptProcessorNode": false, + "ScrollTimeline": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "Sensor": false, + "SensorErrorEvent": false, + "Serial": false, + "SerialPort": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "ShadowRoot": false, + "SharedStorage": false, + "SharedStorageWorklet": false, + "SharedWorker": false, + "SnapEvent": false, + "SourceBuffer": false, + "SourceBufferList": false, + "SpeechSynthesis": false, + "SpeechSynthesisErrorEvent": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "SpeechSynthesisVoice": false, + "StaticRange": false, + "StereoPannerNode": false, + "Storage": false, + "StorageBucket": false, + "StorageBucketManager": false, + "StorageEvent": false, + "StorageManager": false, + "StylePropertyMap": false, + "StylePropertyMapReadOnly": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubmitEvent": false, + "SubtleCrypto": false, + "SyncManager": false, + "TEMPORARY": false, + "TaskAttributionTiming": false, + "TaskController": false, + "TaskPriorityChangeEvent": false, + "TaskSignal": false, + "Text": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TextEvent": false, + "TextFormat": false, + "TextFormatUpdateEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TextUpdateEvent": false, + "TimeEvent": false, + "TimeRanges": false, + "ToggleEvent": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "TransitionEvent": false, + "TreeWalker": false, + "TrustedHTML": false, + "TrustedScript": false, + "TrustedScriptURL": false, + "TrustedTypePolicy": false, + "TrustedTypePolicyFactory": false, + "UIEvent": false, + "URL": false, + "URLPattern": false, + "URLSearchParams": false, + "USB": false, + "USBAlternateInterface": false, + "USBConfiguration": false, + "USBConnectionEvent": false, + "USBDevice": false, + "USBEndpoint": false, + "USBInTransferResult": false, + "USBInterface": false, + "USBIsochronousInTransferPacket": false, + "USBIsochronousInTransferResult": false, + "USBIsochronousOutTransferPacket": false, + "USBIsochronousOutTransferResult": false, + "USBOutTransferResult": false, + "UserActivation": false, + "VTTCue": false, + "VTTRegion": false, + "ValidityState": false, + "VideoColorSpace": false, + "VideoDecoder": false, + "VideoEncoder": false, + "VideoFrame": false, + "VideoPlaybackQuality": false, + "ViewTimeline": false, + "ViewTransition": false, + "ViewTransitionTypeSet": false, + "VirtualKeyboard": false, + "VirtualKeyboardGeometryChangeEvent": false, + "VisibilityStateEntry": false, + "VisualViewport": false, + "WGSLLanguageFeatures": false, + "WakeLock": false, + "WakeLockSentinel": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLObject": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WebSocketError": false, + "WebSocketStream": false, + "WebTransport": false, + "WebTransportBidirectionalStream": false, + "WebTransportDatagramDuplexStream": false, + "WebTransportError": false, + "WebTransportReceiveStream": false, + "WebTransportSendStream": false, + "WheelEvent": false, + "Window": false, + "WindowControlsOverlay": false, + "WindowControlsOverlayGeometryChangeEvent": false, + "Worker": false, + "Worklet": false, + "WorkletGlobalScope": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XRAnchor": false, + "XRAnchorSet": false, + "XRBoundedReferenceSpace": false, + "XRCPUDepthInformation": false, + "XRCamera": false, + "XRDOMOverlayState": false, + "XRDepthInformation": false, + "XRFrame": false, + "XRHitTestResult": false, + "XRHitTestSource": false, + "XRInputSource": false, + "XRInputSourceArray": false, + "XRInputSourceEvent": false, + "XRInputSourcesChangeEvent": false, + "XRLayer": false, + "XRLightEstimate": false, + "XRLightProbe": false, + "XRPose": false, + "XRRay": false, + "XRReferenceSpace": false, + "XRReferenceSpaceEvent": false, + "XRRenderState": false, + "XRRigidTransform": false, + "XRSession": false, + "XRSessionEvent": false, + "XRSpace": false, + "XRSystem": false, + "XRTransientInputHitTestResult": false, + "XRTransientInputHitTestSource": false, + "XRView": false, + "XRViewerPose": false, + "XRViewport": false, + "XRWebGLBinding": false, + "XRWebGLDepthInformation": false, + "XRWebGLLayer": false, + "XSLTProcessor": false, + "addEventListener": false, + "ai": false, + "alert": false, + "atob": false, + "blur": false, + "btoa": false, + "caches": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "close": false, + "closed": false, + "confirm": false, + "console": false, + "cookieStore": false, + "createImageBitmap": false, + "credentialless": false, + "crossOriginIsolated": false, + "crypto": false, + "currentFrame": false, + "currentTime": false, + "customElements": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "documentPictureInPicture": false, + "event": false, + "external": false, + "fence": false, + "fetch": false, + "fetchLater": false, + "find": false, + "focus": false, + "frameElement": false, + "frames": false, + "getComputedStyle": false, + "getScreenDetails": false, + "getSelection": false, + "history": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "isSecureContext": false, + "launchQueue": false, + "length": false, + "localStorage": false, + "location": true, + "locationbar": false, + "matchMedia": false, + "menubar": false, + "model": false, + "moveBy": false, + "moveTo": false, + "name": false, + "navigation": false, + "navigator": false, + "offscreenBuffering": false, + "onabort": true, + "onafterprint": true, + "onanimationcancel": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinput": true, + "onbeforeinstallprompt": true, + "onbeforematch": true, + "onbeforeprint": true, + "onbeforetoggle": true, + "onbeforeunload": true, + "onbeforexrselect": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontentvisibilityautostatechange": true, + "oncontextlost": true, + "oncontextmenu": true, + "oncontextrestored": true, + "oncopy": true, + "oncuechange": true, + "oncut": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "onformdata": true, + "ongamepadconnected": true, + "ongamepaddisconnected": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpagereveal": true, + "onpageshow": true, + "onpageswap": true, + "onpaste": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerrawupdate": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onscrollend": true, + "onscrollsnapchange": true, + "onscrollsnapchanging": true, + "onsearch": true, + "onsecuritypolicyviolation": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onselectionchange": true, + "onselectstart": true, + "onslotchange": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitioncancel": true, + "ontransitionend": true, + "ontransitionrun": true, + "ontransitionstart": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "opener": false, + "origin": false, + "originAgentCluster": false, + "outerHeight": false, + "outerWidth": false, + "pageXOffset": false, + "pageYOffset": false, + "parent": false, + "performance": false, + "personalbar": false, + "postMessage": false, + "print": false, + "prompt": false, + "queryLocalFonts": false, + "queueMicrotask": false, + "registerProcessor": false, + "removeEventListener": false, + "reportError": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "resizeTo": false, + "sampleRate": false, + "scheduler": false, + "screen": false, + "screenLeft": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "scroll": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "scrollbars": false, + "self": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "sharedStorage": false, + "showDirectoryPicker": false, + "showOpenFilePicker": false, + "showSaveFilePicker": false, + "speechSynthesis": false, + "status": false, + "statusbar": false, + "stop": false, + "structuredClone": false, + "styleMedia": false, + "toolbar": false, + "top": false, + "trustedTypes": false, + "visualViewport": false, + "window": false + }, + "parser": "@qlik/eslint-config/recommended-ts-parser", + "parserOptions": { + "parser": { + "meta": { + "name": "typescript-eslint/parser", + "version": "8.16.0" + }, + "version": "8.16.0" + }, + "projectService": true, + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/recommended-ts", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/default-param-last": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": [ + "error", + { + "format": [ + "camelCase", + "PascalCase", + "UPPER_CASE" + ], + "selector": "variable" + }, + { + "format": [ + "camelCase", + "PascalCase" + ], + "selector": "function" + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeLike" + } + ], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": [ + "error", + { + "ignoreIIFE": true + } + ], + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-loop-func": "error", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": [ + "error", + { + "checksConditionals": false + } + ], + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "@typescript-eslint/no-restricted-types": [ + "error", + {} + ], + "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-parameter-property-assignment": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-enum-initializers": "error", + "@typescript-eslint/prefer-for-of": "off", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/return-await": "error", + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": "off", + "class-methods-use-this": "off", + "consistent-return": "error", + "constructor-super": "off", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "off", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": "off", + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "off", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "off", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "off", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "warn", + "no-const-assign": "off", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "off", + "no-dupe-class-members": "off", + "no-dupe-else-if": "error", + "no-dupe-keys": "off", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "off", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "off", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "off", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "off", + "no-new-symbol": "off", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "off", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "off", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-return-await": "off", + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "off", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "off", + "no-throw-literal": "error", + "no-undef": "off", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "off", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "off", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "off", + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "off", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + }, + "settings": { + "import-x/extensions": [ + ".ts", + ".tsx", + ".cts", + ".mts", + ".js", + ".jsx", + ".cjs", + ".mjs" + ], + "import-x/external-module-folders": [ + "node_modules", + "node_modules/@types" + ], + "import-x/parsers": { + "@typescript-eslint/parser": [ + ".ts", + ".tsx", + ".cts", + ".mts" + ] + }, + "import-x/resolver": { + "typescript": true + } + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/svelte-final-config.js b/packages/eslint-config/test/generated/svelte-final-config.js new file mode 100644 index 0000000..b4f7a3b --- /dev/null +++ b/packages/eslint-config/test/generated/svelte-final-config.js @@ -0,0 +1,3954 @@ +export default [ + { + "files": [ + "**/*.js", + "**/*.mjs", + "**/*.cjs" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AI": false, + "AITextSession": false, + "AbortController": false, + "AbortSignal": false, + "AbsoluteOrientationSensor": false, + "AbstractRange": false, + "Accelerometer": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffect": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioData": false, + "AudioDecoder": false, + "AudioDestinationNode": false, + "AudioEncoder": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioParamMap": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioSinkInfo": false, + "AudioWorklet": false, + "AudioWorkletGlobalScope": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "AuthenticatorAssertionResponse": false, + "AuthenticatorAttestationResponse": false, + "AuthenticatorResponse": false, + "BackgroundFetchManager": false, + "BackgroundFetchRecord": false, + "BackgroundFetchRegistration": false, + "BarProp": false, + "BarcodeDetector": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "Bluetooth": false, + "BluetoothCharacteristicProperties": false, + "BluetoothDevice": false, + "BluetoothRemoteGATTCharacteristic": false, + "BluetoothRemoteGATTDescriptor": false, + "BluetoothRemoteGATTServer": false, + "BluetoothRemoteGATTService": false, + "BluetoothUUID": false, + "BroadcastChannel": false, + "BrowserCaptureMediaStreamTrack": false, + "ByteLengthQueuingStrategy": false, + "CDATASection": false, + "CSS": false, + "CSSAnimation": false, + "CSSConditionRule": false, + "CSSContainerRule": false, + "CSSCounterStyleRule": false, + "CSSFontFaceRule": false, + "CSSFontFeatureValuesRule": false, + "CSSFontPaletteValuesRule": false, + "CSSGroupingRule": false, + "CSSImageValue": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSKeywordValue": false, + "CSSLayerBlockRule": false, + "CSSLayerStatementRule": false, + "CSSMathClamp": false, + "CSSMathInvert": false, + "CSSMathMax": false, + "CSSMathMin": false, + "CSSMathNegate": false, + "CSSMathProduct": false, + "CSSMathSum": false, + "CSSMathValue": false, + "CSSMatrixComponent": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSNestedDeclarations": false, + "CSSNumericArray": false, + "CSSNumericValue": false, + "CSSPageDescriptors": false, + "CSSPageRule": false, + "CSSPerspective": false, + "CSSPositionTryDescriptors": false, + "CSSPositionTryRule": false, + "CSSPositionValue": false, + "CSSPropertyRule": false, + "CSSRotate": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSScale": false, + "CSSScopeRule": false, + "CSSSkew": false, + "CSSSkewX": false, + "CSSSkewY": false, + "CSSStartingStyleRule": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSStyleValue": false, + "CSSSupportsRule": false, + "CSSTransformComponent": false, + "CSSTransformValue": false, + "CSSTransition": false, + "CSSTranslate": false, + "CSSUnitValue": false, + "CSSUnparsedValue": false, + "CSSVariableReferenceValue": false, + "CSSViewTransitionRule": false, + "Cache": false, + "CacheStorage": false, + "CanvasCaptureMediaStream": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "CaptureController": false, + "CaretPosition": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "ChapterInformation": false, + "CharacterBoundsUpdateEvent": false, + "CharacterData": false, + "Clipboard": false, + "ClipboardEvent": false, + "ClipboardItem": false, + "CloseEvent": false, + "CloseWatcher": false, + "Comment": false, + "CompositionEvent": false, + "CompressionStream": false, + "ConstantSourceNode": false, + "ContentVisibilityAutoStateChangeEvent": false, + "ConvolverNode": false, + "CookieChangeEvent": false, + "CookieDeprecationLabel": false, + "CookieStore": false, + "CookieStoreManager": false, + "CountQueuingStrategy": false, + "Credential": false, + "CredentialsContainer": false, + "CropTarget": false, + "Crypto": false, + "CryptoKey": false, + "CustomElementRegistry": false, + "CustomEvent": false, + "CustomStateSet": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectList": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "DecompressionStream": false, + "DelayNode": false, + "DelegatedInkTrailPresenter": false, + "DeviceMotionEvent": false, + "DeviceMotionEventAcceleration": false, + "DeviceMotionEventRotationRate": false, + "DeviceOrientationEvent": false, + "Document": false, + "DocumentFragment": false, + "DocumentPictureInPicture": false, + "DocumentPictureInPictureEvent": false, + "DocumentTimeline": false, + "DocumentType": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "EditContext": false, + "Element": false, + "ElementInternals": false, + "EncodedAudioChunk": false, + "EncodedVideoChunk": false, + "ErrorEvent": false, + "Event": false, + "EventCounts": false, + "EventSource": false, + "EventTarget": false, + "External": false, + "EyeDropper": false, + "FeaturePolicy": false, + "FederatedCredential": false, + "Fence": false, + "FencedFrameConfig": false, + "FetchLaterResult": false, + "File": false, + "FileList": false, + "FileReader": false, + "FileSystem": false, + "FileSystemDirectoryEntry": false, + "FileSystemDirectoryHandle": false, + "FileSystemDirectoryReader": false, + "FileSystemEntry": false, + "FileSystemFileEntry": false, + "FileSystemFileHandle": false, + "FileSystemHandle": false, + "FileSystemWritableFileStream": false, + "Float16Array": false, + "FocusEvent": false, + "FontData": false, + "FontFace": false, + "FontFaceSet": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "FormDataEvent": false, + "FragmentDirective": false, + "GPU": false, + "GPUAdapter": false, + "GPUAdapterInfo": false, + "GPUBindGroup": false, + "GPUBindGroupLayout": false, + "GPUBuffer": false, + "GPUBufferUsage": false, + "GPUCanvasContext": false, + "GPUColorWrite": false, + "GPUCommandBuffer": false, + "GPUCommandEncoder": false, + "GPUCompilationInfo": false, + "GPUCompilationMessage": false, + "GPUComputePassEncoder": false, + "GPUComputePipeline": false, + "GPUDevice": false, + "GPUDeviceLostInfo": false, + "GPUError": false, + "GPUExternalTexture": false, + "GPUInternalError": false, + "GPUMapMode": false, + "GPUOutOfMemoryError": false, + "GPUPipelineError": false, + "GPUPipelineLayout": false, + "GPUQuerySet": false, + "GPUQueue": false, + "GPURenderBundle": false, + "GPURenderBundleEncoder": false, + "GPURenderPassEncoder": false, + "GPURenderPipeline": false, + "GPUSampler": false, + "GPUShaderModule": false, + "GPUShaderStage": false, + "GPUSupportedFeatures": false, + "GPUSupportedLimits": false, + "GPUTexture": false, + "GPUTextureUsage": false, + "GPUTextureView": false, + "GPUUncapturedErrorEvent": false, + "GPUValidationError": false, + "GainNode": false, + "Gamepad": false, + "GamepadAxisMoveEvent": false, + "GamepadButton": false, + "GamepadButtonEvent": false, + "GamepadEvent": false, + "GamepadHapticActuator": false, + "GamepadPose": false, + "Geolocation": false, + "GeolocationCoordinates": false, + "GeolocationPosition": false, + "GeolocationPositionError": false, + "GravitySensor": false, + "Gyroscope": false, + "HID": false, + "HIDConnectionEvent": false, + "HIDDevice": false, + "HIDInputReportEvent": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBRElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLDListElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFencedFrameElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHRElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLIElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLOListElement": false, + "HTMLObjectElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "HashChangeEvent": false, + "Headers": false, + "Highlight": false, + "HighlightRegistry": false, + "History": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IIRFilterNode": false, + "IdentityCredential": false, + "IdentityCredentialError": false, + "IdentityProvider": false, + "IdleDeadline": false, + "IdleDetector": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "ImageDecoder": false, + "ImageTrack": false, + "ImageTrackList": false, + "Ink": false, + "InputDeviceCapabilities": false, + "InputDeviceInfo": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Keyboard": false, + "KeyboardEvent": false, + "KeyboardLayoutMap": false, + "KeyframeEffect": false, + "LargestContentfulPaint": false, + "LaunchParams": false, + "LaunchQueue": false, + "LayoutShift": false, + "LayoutShiftAttribution": false, + "LinearAccelerationSensor": false, + "Location": false, + "Lock": false, + "LockManager": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MathMLElement": false, + "MediaCapabilities": false, + "MediaCapabilitiesInfo": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaKeys": false, + "MediaList": false, + "MediaMetadata": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaRecorderErrorEvent": false, + "MediaSession": false, + "MediaSource": false, + "MediaSourceHandle": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackAudioSourceNode": false, + "MediaStreamTrackAudioStats": false, + "MediaStreamTrackEvent": false, + "MediaStreamTrackGenerator": false, + "MediaStreamTrackProcessor": false, + "MediaStreamTrackVideoStats": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MimeType": false, + "MimeTypeArray": false, + "ModelGenericSession": false, + "ModelManager": false, + "MouseEvent": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "NamedNodeMap": false, + "NavigateEvent": false, + "Navigation": false, + "NavigationActivation": false, + "NavigationCurrentEntryChangeEvent": false, + "NavigationDestination": false, + "NavigationHistoryEntry": false, + "NavigationPreloadManager": false, + "NavigationTransition": false, + "Navigator": false, + "NavigatorLogin": false, + "NavigatorManagedData": false, + "NavigatorUAData": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "NotRestoredReasonDetails": false, + "NotRestoredReasons": false, + "Notification": false, + "NotifyPaintEvent": false, + "OTPCredential": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "OffscreenCanvas": false, + "OffscreenCanvasRenderingContext2D": false, + "Option": false, + "OrientationSensor": false, + "OscillatorNode": false, + "OverconstrainedError": false, + "PERSISTENT": false, + "PageRevealEvent": false, + "PageSwapEvent": false, + "PageTransitionEvent": false, + "PannerNode": false, + "PasswordCredential": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentManager": false, + "PaymentMethodChangeEvent": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "Performance": false, + "PerformanceElementTiming": false, + "PerformanceEntry": false, + "PerformanceEventTiming": false, + "PerformanceLongAnimationFrameTiming": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceScriptTiming": false, + "PerformanceServerTiming": false, + "PerformanceTiming": false, + "PeriodicSyncManager": false, + "PeriodicWave": false, + "PermissionStatus": false, + "Permissions": false, + "PictureInPictureEvent": false, + "PictureInPictureWindow": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "PressureObserver": false, + "PressureRecord": false, + "ProcessingInstruction": false, + "Profiler": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "ProtectedAudience": false, + "PublicKeyCredential": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "RTCCertificate": false, + "RTCDTMFSender": false, + "RTCDTMFToneChangeEvent": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCEncodedAudioFrame": false, + "RTCEncodedVideoFrame": false, + "RTCError": false, + "RTCErrorEvent": false, + "RTCIceCandidate": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceErrorEvent": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpReceiver": false, + "RTCRtpScriptTransform": false, + "RTCRtpSender": false, + "RTCRtpTransceiver": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "RadioNodeList": false, + "Range": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "RelativeOrientationSensor": false, + "RemotePlayback": false, + "ReportingObserver": false, + "Request": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "ResizeObserverSize": false, + "Response": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLineElement": false, + "SVGLinearGradientElement": false, + "SVGMPathElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGSVGElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTSpanElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "Scheduler": false, + "Scheduling": false, + "Screen": false, + "ScreenDetailed": false, + "ScreenDetails": false, + "ScreenOrientation": false, + "ScriptProcessorNode": false, + "ScrollTimeline": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "Sensor": false, + "SensorErrorEvent": false, + "Serial": false, + "SerialPort": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "ShadowRoot": false, + "SharedStorage": false, + "SharedStorageWorklet": false, + "SharedWorker": false, + "SnapEvent": false, + "SourceBuffer": false, + "SourceBufferList": false, + "SpeechSynthesis": false, + "SpeechSynthesisErrorEvent": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "SpeechSynthesisVoice": false, + "StaticRange": false, + "StereoPannerNode": false, + "Storage": false, + "StorageBucket": false, + "StorageBucketManager": false, + "StorageEvent": false, + "StorageManager": false, + "StylePropertyMap": false, + "StylePropertyMapReadOnly": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubmitEvent": false, + "SubtleCrypto": false, + "SyncManager": false, + "TEMPORARY": false, + "TaskAttributionTiming": false, + "TaskController": false, + "TaskPriorityChangeEvent": false, + "TaskSignal": false, + "Text": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TextEvent": false, + "TextFormat": false, + "TextFormatUpdateEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TextUpdateEvent": false, + "TimeEvent": false, + "TimeRanges": false, + "ToggleEvent": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "TransitionEvent": false, + "TreeWalker": false, + "TrustedHTML": false, + "TrustedScript": false, + "TrustedScriptURL": false, + "TrustedTypePolicy": false, + "TrustedTypePolicyFactory": false, + "UIEvent": false, + "URL": false, + "URLPattern": false, + "URLSearchParams": false, + "USB": false, + "USBAlternateInterface": false, + "USBConfiguration": false, + "USBConnectionEvent": false, + "USBDevice": false, + "USBEndpoint": false, + "USBInTransferResult": false, + "USBInterface": false, + "USBIsochronousInTransferPacket": false, + "USBIsochronousInTransferResult": false, + "USBIsochronousOutTransferPacket": false, + "USBIsochronousOutTransferResult": false, + "USBOutTransferResult": false, + "UserActivation": false, + "VTTCue": false, + "VTTRegion": false, + "ValidityState": false, + "VideoColorSpace": false, + "VideoDecoder": false, + "VideoEncoder": false, + "VideoFrame": false, + "VideoPlaybackQuality": false, + "ViewTimeline": false, + "ViewTransition": false, + "ViewTransitionTypeSet": false, + "VirtualKeyboard": false, + "VirtualKeyboardGeometryChangeEvent": false, + "VisibilityStateEntry": false, + "VisualViewport": false, + "WGSLLanguageFeatures": false, + "WakeLock": false, + "WakeLockSentinel": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLObject": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WebSocketError": false, + "WebSocketStream": false, + "WebTransport": false, + "WebTransportBidirectionalStream": false, + "WebTransportDatagramDuplexStream": false, + "WebTransportError": false, + "WebTransportReceiveStream": false, + "WebTransportSendStream": false, + "WheelEvent": false, + "Window": false, + "WindowControlsOverlay": false, + "WindowControlsOverlayGeometryChangeEvent": false, + "Worker": false, + "Worklet": false, + "WorkletGlobalScope": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XRAnchor": false, + "XRAnchorSet": false, + "XRBoundedReferenceSpace": false, + "XRCPUDepthInformation": false, + "XRCamera": false, + "XRDOMOverlayState": false, + "XRDepthInformation": false, + "XRFrame": false, + "XRHitTestResult": false, + "XRHitTestSource": false, + "XRInputSource": false, + "XRInputSourceArray": false, + "XRInputSourceEvent": false, + "XRInputSourcesChangeEvent": false, + "XRLayer": false, + "XRLightEstimate": false, + "XRLightProbe": false, + "XRPose": false, + "XRRay": false, + "XRReferenceSpace": false, + "XRReferenceSpaceEvent": false, + "XRRenderState": false, + "XRRigidTransform": false, + "XRSession": false, + "XRSessionEvent": false, + "XRSpace": false, + "XRSystem": false, + "XRTransientInputHitTestResult": false, + "XRTransientInputHitTestSource": false, + "XRView": false, + "XRViewerPose": false, + "XRViewport": false, + "XRWebGLBinding": false, + "XRWebGLDepthInformation": false, + "XRWebGLLayer": false, + "XSLTProcessor": false, + "addEventListener": false, + "ai": false, + "alert": false, + "atob": false, + "blur": false, + "btoa": false, + "caches": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "close": false, + "closed": false, + "confirm": false, + "console": false, + "cookieStore": false, + "createImageBitmap": false, + "credentialless": false, + "crossOriginIsolated": false, + "crypto": false, + "currentFrame": false, + "currentTime": false, + "customElements": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "documentPictureInPicture": false, + "event": false, + "external": false, + "fence": false, + "fetch": false, + "fetchLater": false, + "find": false, + "focus": false, + "frameElement": false, + "frames": false, + "getComputedStyle": false, + "getScreenDetails": false, + "getSelection": false, + "history": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "isSecureContext": false, + "launchQueue": false, + "length": false, + "localStorage": false, + "location": true, + "locationbar": false, + "matchMedia": false, + "menubar": false, + "model": false, + "moveBy": false, + "moveTo": false, + "name": false, + "navigation": false, + "navigator": false, + "offscreenBuffering": false, + "onabort": true, + "onafterprint": true, + "onanimationcancel": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinput": true, + "onbeforeinstallprompt": true, + "onbeforematch": true, + "onbeforeprint": true, + "onbeforetoggle": true, + "onbeforeunload": true, + "onbeforexrselect": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontentvisibilityautostatechange": true, + "oncontextlost": true, + "oncontextmenu": true, + "oncontextrestored": true, + "oncopy": true, + "oncuechange": true, + "oncut": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "onformdata": true, + "ongamepadconnected": true, + "ongamepaddisconnected": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpagereveal": true, + "onpageshow": true, + "onpageswap": true, + "onpaste": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerrawupdate": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onscrollend": true, + "onscrollsnapchange": true, + "onscrollsnapchanging": true, + "onsearch": true, + "onsecuritypolicyviolation": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onselectionchange": true, + "onselectstart": true, + "onslotchange": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitioncancel": true, + "ontransitionend": true, + "ontransitionrun": true, + "ontransitionstart": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "opener": false, + "origin": false, + "originAgentCluster": false, + "outerHeight": false, + "outerWidth": false, + "pageXOffset": false, + "pageYOffset": false, + "parent": false, + "performance": false, + "personalbar": false, + "postMessage": false, + "print": false, + "prompt": false, + "queryLocalFonts": false, + "queueMicrotask": false, + "registerProcessor": false, + "removeEventListener": false, + "reportError": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "resizeTo": false, + "sampleRate": false, + "scheduler": false, + "screen": false, + "screenLeft": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "scroll": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "scrollbars": false, + "self": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "sharedStorage": false, + "showDirectoryPicker": false, + "showOpenFilePicker": false, + "showSaveFilePicker": false, + "speechSynthesis": false, + "status": false, + "statusbar": false, + "stop": false, + "structuredClone": false, + "styleMedia": false, + "toolbar": false, + "top": false, + "trustedTypes": false, + "visualViewport": false, + "window": false + }, + "parser": "@qlik/eslint-config/recommended-js-parser", + "parserOptions": { + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/recommended-js", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": [ + "error", + { + "ignoreDestructuring": false, + "properties": "never" + } + ], + "class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "consistent-return": "error", + "constructor-super": "error", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "error", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": [ + "error", + { + "allowImplicit": true + } + ], + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "error", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "error", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "error", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "warn", + "no-const-assign": "error", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "error", + "no-dupe-class-members": "error", + "no-dupe-else-if": "error", + "no-dupe-keys": "error", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "error", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "error", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "error", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "error", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "error", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "error", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "error", + "no-shadow": "error", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "error", + "no-throw-literal": "error", + "no-undef": "error", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "error", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "error", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": [ + "error", + { + "allowShortCircuit": false, + "allowTaggedTemplates": false, + "allowTernary": false + } + ], + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": [ + "error", + { + "args": "after-used", + "ignoreRestSiblings": true, + "vars": "all" + } + ], + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "error", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": [ + "error", + { + "destructuring": "any", + "ignoreReadBeforeAssign": true + } + ], + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + } + }, + { + "files": [ + "**/*.ts", + "**/*.tsx", + "**/*.mts", + "**/*.cts", + "**/*.d.ts" + ], + "languageOptions": { + "ecmaVersion": "latest", + "globals": { + "AI": false, + "AITextSession": false, + "AbortController": false, + "AbortSignal": false, + "AbsoluteOrientationSensor": false, + "AbstractRange": false, + "Accelerometer": false, + "AnalyserNode": false, + "Animation": false, + "AnimationEffect": false, + "AnimationEvent": false, + "AnimationPlaybackEvent": false, + "AnimationTimeline": false, + "Attr": false, + "Audio": false, + "AudioBuffer": false, + "AudioBufferSourceNode": false, + "AudioContext": false, + "AudioData": false, + "AudioDecoder": false, + "AudioDestinationNode": false, + "AudioEncoder": false, + "AudioListener": false, + "AudioNode": false, + "AudioParam": false, + "AudioParamMap": false, + "AudioProcessingEvent": false, + "AudioScheduledSourceNode": false, + "AudioSinkInfo": false, + "AudioWorklet": false, + "AudioWorkletGlobalScope": false, + "AudioWorkletNode": false, + "AudioWorkletProcessor": false, + "AuthenticatorAssertionResponse": false, + "AuthenticatorAttestationResponse": false, + "AuthenticatorResponse": false, + "BackgroundFetchManager": false, + "BackgroundFetchRecord": false, + "BackgroundFetchRegistration": false, + "BarProp": false, + "BarcodeDetector": false, + "BaseAudioContext": false, + "BatteryManager": false, + "BeforeUnloadEvent": false, + "BiquadFilterNode": false, + "Blob": false, + "BlobEvent": false, + "Bluetooth": false, + "BluetoothCharacteristicProperties": false, + "BluetoothDevice": false, + "BluetoothRemoteGATTCharacteristic": false, + "BluetoothRemoteGATTDescriptor": false, + "BluetoothRemoteGATTServer": false, + "BluetoothRemoteGATTService": false, + "BluetoothUUID": false, + "BroadcastChannel": false, + "BrowserCaptureMediaStreamTrack": false, + "ByteLengthQueuingStrategy": false, + "CDATASection": false, + "CSS": false, + "CSSAnimation": false, + "CSSConditionRule": false, + "CSSContainerRule": false, + "CSSCounterStyleRule": false, + "CSSFontFaceRule": false, + "CSSFontFeatureValuesRule": false, + "CSSFontPaletteValuesRule": false, + "CSSGroupingRule": false, + "CSSImageValue": false, + "CSSImportRule": false, + "CSSKeyframeRule": false, + "CSSKeyframesRule": false, + "CSSKeywordValue": false, + "CSSLayerBlockRule": false, + "CSSLayerStatementRule": false, + "CSSMathClamp": false, + "CSSMathInvert": false, + "CSSMathMax": false, + "CSSMathMin": false, + "CSSMathNegate": false, + "CSSMathProduct": false, + "CSSMathSum": false, + "CSSMathValue": false, + "CSSMatrixComponent": false, + "CSSMediaRule": false, + "CSSNamespaceRule": false, + "CSSNestedDeclarations": false, + "CSSNumericArray": false, + "CSSNumericValue": false, + "CSSPageDescriptors": false, + "CSSPageRule": false, + "CSSPerspective": false, + "CSSPositionTryDescriptors": false, + "CSSPositionTryRule": false, + "CSSPositionValue": false, + "CSSPropertyRule": false, + "CSSRotate": false, + "CSSRule": false, + "CSSRuleList": false, + "CSSScale": false, + "CSSScopeRule": false, + "CSSSkew": false, + "CSSSkewX": false, + "CSSSkewY": false, + "CSSStartingStyleRule": false, + "CSSStyleDeclaration": false, + "CSSStyleRule": false, + "CSSStyleSheet": false, + "CSSStyleValue": false, + "CSSSupportsRule": false, + "CSSTransformComponent": false, + "CSSTransformValue": false, + "CSSTransition": false, + "CSSTranslate": false, + "CSSUnitValue": false, + "CSSUnparsedValue": false, + "CSSVariableReferenceValue": false, + "CSSViewTransitionRule": false, + "Cache": false, + "CacheStorage": false, + "CanvasCaptureMediaStream": false, + "CanvasCaptureMediaStreamTrack": false, + "CanvasGradient": false, + "CanvasPattern": false, + "CanvasRenderingContext2D": false, + "CaptureController": false, + "CaretPosition": false, + "ChannelMergerNode": false, + "ChannelSplitterNode": false, + "ChapterInformation": false, + "CharacterBoundsUpdateEvent": false, + "CharacterData": false, + "Clipboard": false, + "ClipboardEvent": false, + "ClipboardItem": false, + "CloseEvent": false, + "CloseWatcher": false, + "Comment": false, + "CompositionEvent": false, + "CompressionStream": false, + "ConstantSourceNode": false, + "ContentVisibilityAutoStateChangeEvent": false, + "ConvolverNode": false, + "CookieChangeEvent": false, + "CookieDeprecationLabel": false, + "CookieStore": false, + "CookieStoreManager": false, + "CountQueuingStrategy": false, + "Credential": false, + "CredentialsContainer": false, + "CropTarget": false, + "Crypto": false, + "CryptoKey": false, + "CustomElementRegistry": false, + "CustomEvent": false, + "CustomStateSet": false, + "DOMError": false, + "DOMException": false, + "DOMImplementation": false, + "DOMMatrix": false, + "DOMMatrixReadOnly": false, + "DOMParser": false, + "DOMPoint": false, + "DOMPointReadOnly": false, + "DOMQuad": false, + "DOMRect": false, + "DOMRectList": false, + "DOMRectReadOnly": false, + "DOMStringList": false, + "DOMStringMap": false, + "DOMTokenList": false, + "DataTransfer": false, + "DataTransferItem": false, + "DataTransferItemList": false, + "DecompressionStream": false, + "DelayNode": false, + "DelegatedInkTrailPresenter": false, + "DeviceMotionEvent": false, + "DeviceMotionEventAcceleration": false, + "DeviceMotionEventRotationRate": false, + "DeviceOrientationEvent": false, + "Document": false, + "DocumentFragment": false, + "DocumentPictureInPicture": false, + "DocumentPictureInPictureEvent": false, + "DocumentTimeline": false, + "DocumentType": false, + "DragEvent": false, + "DynamicsCompressorNode": false, + "EditContext": false, + "Element": false, + "ElementInternals": false, + "EncodedAudioChunk": false, + "EncodedVideoChunk": false, + "ErrorEvent": false, + "Event": false, + "EventCounts": false, + "EventSource": false, + "EventTarget": false, + "External": false, + "EyeDropper": false, + "FeaturePolicy": false, + "FederatedCredential": false, + "Fence": false, + "FencedFrameConfig": false, + "FetchLaterResult": false, + "File": false, + "FileList": false, + "FileReader": false, + "FileSystem": false, + "FileSystemDirectoryEntry": false, + "FileSystemDirectoryHandle": false, + "FileSystemDirectoryReader": false, + "FileSystemEntry": false, + "FileSystemFileEntry": false, + "FileSystemFileHandle": false, + "FileSystemHandle": false, + "FileSystemWritableFileStream": false, + "Float16Array": false, + "FocusEvent": false, + "FontData": false, + "FontFace": false, + "FontFaceSet": false, + "FontFaceSetLoadEvent": false, + "FormData": false, + "FormDataEvent": false, + "FragmentDirective": false, + "GPU": false, + "GPUAdapter": false, + "GPUAdapterInfo": false, + "GPUBindGroup": false, + "GPUBindGroupLayout": false, + "GPUBuffer": false, + "GPUBufferUsage": false, + "GPUCanvasContext": false, + "GPUColorWrite": false, + "GPUCommandBuffer": false, + "GPUCommandEncoder": false, + "GPUCompilationInfo": false, + "GPUCompilationMessage": false, + "GPUComputePassEncoder": false, + "GPUComputePipeline": false, + "GPUDevice": false, + "GPUDeviceLostInfo": false, + "GPUError": false, + "GPUExternalTexture": false, + "GPUInternalError": false, + "GPUMapMode": false, + "GPUOutOfMemoryError": false, + "GPUPipelineError": false, + "GPUPipelineLayout": false, + "GPUQuerySet": false, + "GPUQueue": false, + "GPURenderBundle": false, + "GPURenderBundleEncoder": false, + "GPURenderPassEncoder": false, + "GPURenderPipeline": false, + "GPUSampler": false, + "GPUShaderModule": false, + "GPUShaderStage": false, + "GPUSupportedFeatures": false, + "GPUSupportedLimits": false, + "GPUTexture": false, + "GPUTextureUsage": false, + "GPUTextureView": false, + "GPUUncapturedErrorEvent": false, + "GPUValidationError": false, + "GainNode": false, + "Gamepad": false, + "GamepadAxisMoveEvent": false, + "GamepadButton": false, + "GamepadButtonEvent": false, + "GamepadEvent": false, + "GamepadHapticActuator": false, + "GamepadPose": false, + "Geolocation": false, + "GeolocationCoordinates": false, + "GeolocationPosition": false, + "GeolocationPositionError": false, + "GravitySensor": false, + "Gyroscope": false, + "HID": false, + "HIDConnectionEvent": false, + "HIDDevice": false, + "HIDInputReportEvent": false, + "HTMLAllCollection": false, + "HTMLAnchorElement": false, + "HTMLAreaElement": false, + "HTMLAudioElement": false, + "HTMLBRElement": false, + "HTMLBaseElement": false, + "HTMLBodyElement": false, + "HTMLButtonElement": false, + "HTMLCanvasElement": false, + "HTMLCollection": false, + "HTMLDListElement": false, + "HTMLDataElement": false, + "HTMLDataListElement": false, + "HTMLDetailsElement": false, + "HTMLDialogElement": false, + "HTMLDirectoryElement": false, + "HTMLDivElement": false, + "HTMLDocument": false, + "HTMLElement": false, + "HTMLEmbedElement": false, + "HTMLFencedFrameElement": false, + "HTMLFieldSetElement": false, + "HTMLFontElement": false, + "HTMLFormControlsCollection": false, + "HTMLFormElement": false, + "HTMLFrameElement": false, + "HTMLFrameSetElement": false, + "HTMLHRElement": false, + "HTMLHeadElement": false, + "HTMLHeadingElement": false, + "HTMLHtmlElement": false, + "HTMLIFrameElement": false, + "HTMLImageElement": false, + "HTMLInputElement": false, + "HTMLLIElement": false, + "HTMLLabelElement": false, + "HTMLLegendElement": false, + "HTMLLinkElement": false, + "HTMLMapElement": false, + "HTMLMarqueeElement": false, + "HTMLMediaElement": false, + "HTMLMenuElement": false, + "HTMLMetaElement": false, + "HTMLMeterElement": false, + "HTMLModElement": false, + "HTMLOListElement": false, + "HTMLObjectElement": false, + "HTMLOptGroupElement": false, + "HTMLOptionElement": false, + "HTMLOptionsCollection": false, + "HTMLOutputElement": false, + "HTMLParagraphElement": false, + "HTMLParamElement": false, + "HTMLPictureElement": false, + "HTMLPreElement": false, + "HTMLProgressElement": false, + "HTMLQuoteElement": false, + "HTMLScriptElement": false, + "HTMLSelectElement": false, + "HTMLSlotElement": false, + "HTMLSourceElement": false, + "HTMLSpanElement": false, + "HTMLStyleElement": false, + "HTMLTableCaptionElement": false, + "HTMLTableCellElement": false, + "HTMLTableColElement": false, + "HTMLTableElement": false, + "HTMLTableRowElement": false, + "HTMLTableSectionElement": false, + "HTMLTemplateElement": false, + "HTMLTextAreaElement": false, + "HTMLTimeElement": false, + "HTMLTitleElement": false, + "HTMLTrackElement": false, + "HTMLUListElement": false, + "HTMLUnknownElement": false, + "HTMLVideoElement": false, + "HashChangeEvent": false, + "Headers": false, + "Highlight": false, + "HighlightRegistry": false, + "History": false, + "IDBCursor": false, + "IDBCursorWithValue": false, + "IDBDatabase": false, + "IDBFactory": false, + "IDBIndex": false, + "IDBKeyRange": false, + "IDBObjectStore": false, + "IDBOpenDBRequest": false, + "IDBRequest": false, + "IDBTransaction": false, + "IDBVersionChangeEvent": false, + "IIRFilterNode": false, + "IdentityCredential": false, + "IdentityCredentialError": false, + "IdentityProvider": false, + "IdleDeadline": false, + "IdleDetector": false, + "Image": false, + "ImageBitmap": false, + "ImageBitmapRenderingContext": false, + "ImageCapture": false, + "ImageData": false, + "ImageDecoder": false, + "ImageTrack": false, + "ImageTrackList": false, + "Ink": false, + "InputDeviceCapabilities": false, + "InputDeviceInfo": false, + "InputEvent": false, + "IntersectionObserver": false, + "IntersectionObserverEntry": false, + "Keyboard": false, + "KeyboardEvent": false, + "KeyboardLayoutMap": false, + "KeyframeEffect": false, + "LargestContentfulPaint": false, + "LaunchParams": false, + "LaunchQueue": false, + "LayoutShift": false, + "LayoutShiftAttribution": false, + "LinearAccelerationSensor": false, + "Location": false, + "Lock": false, + "LockManager": false, + "MIDIAccess": false, + "MIDIConnectionEvent": false, + "MIDIInput": false, + "MIDIInputMap": false, + "MIDIMessageEvent": false, + "MIDIOutput": false, + "MIDIOutputMap": false, + "MIDIPort": false, + "MathMLElement": false, + "MediaCapabilities": false, + "MediaCapabilitiesInfo": false, + "MediaDeviceInfo": false, + "MediaDevices": false, + "MediaElementAudioSourceNode": false, + "MediaEncryptedEvent": false, + "MediaError": false, + "MediaKeyError": false, + "MediaKeyMessageEvent": false, + "MediaKeySession": false, + "MediaKeyStatusMap": false, + "MediaKeySystemAccess": false, + "MediaKeys": false, + "MediaList": false, + "MediaMetadata": false, + "MediaQueryList": false, + "MediaQueryListEvent": false, + "MediaRecorder": false, + "MediaRecorderErrorEvent": false, + "MediaSession": false, + "MediaSource": false, + "MediaSourceHandle": false, + "MediaStream": false, + "MediaStreamAudioDestinationNode": false, + "MediaStreamAudioSourceNode": false, + "MediaStreamEvent": false, + "MediaStreamTrack": false, + "MediaStreamTrackAudioSourceNode": false, + "MediaStreamTrackAudioStats": false, + "MediaStreamTrackEvent": false, + "MediaStreamTrackGenerator": false, + "MediaStreamTrackProcessor": false, + "MediaStreamTrackVideoStats": false, + "MessageChannel": false, + "MessageEvent": false, + "MessagePort": false, + "MimeType": false, + "MimeTypeArray": false, + "ModelGenericSession": false, + "ModelManager": false, + "MouseEvent": false, + "MutationEvent": false, + "MutationObserver": false, + "MutationRecord": false, + "NamedNodeMap": false, + "NavigateEvent": false, + "Navigation": false, + "NavigationActivation": false, + "NavigationCurrentEntryChangeEvent": false, + "NavigationDestination": false, + "NavigationHistoryEntry": false, + "NavigationPreloadManager": false, + "NavigationTransition": false, + "Navigator": false, + "NavigatorLogin": false, + "NavigatorManagedData": false, + "NavigatorUAData": false, + "NetworkInformation": false, + "Node": false, + "NodeFilter": false, + "NodeIterator": false, + "NodeList": false, + "NotRestoredReasonDetails": false, + "NotRestoredReasons": false, + "Notification": false, + "NotifyPaintEvent": false, + "OTPCredential": false, + "OfflineAudioCompletionEvent": false, + "OfflineAudioContext": false, + "OffscreenCanvas": false, + "OffscreenCanvasRenderingContext2D": false, + "Option": false, + "OrientationSensor": false, + "OscillatorNode": false, + "OverconstrainedError": false, + "PERSISTENT": false, + "PageRevealEvent": false, + "PageSwapEvent": false, + "PageTransitionEvent": false, + "PannerNode": false, + "PasswordCredential": false, + "Path2D": false, + "PaymentAddress": false, + "PaymentManager": false, + "PaymentMethodChangeEvent": false, + "PaymentRequest": false, + "PaymentRequestUpdateEvent": false, + "PaymentResponse": false, + "Performance": false, + "PerformanceElementTiming": false, + "PerformanceEntry": false, + "PerformanceEventTiming": false, + "PerformanceLongAnimationFrameTiming": false, + "PerformanceLongTaskTiming": false, + "PerformanceMark": false, + "PerformanceMeasure": false, + "PerformanceNavigation": false, + "PerformanceNavigationTiming": false, + "PerformanceObserver": false, + "PerformanceObserverEntryList": false, + "PerformancePaintTiming": false, + "PerformanceResourceTiming": false, + "PerformanceScriptTiming": false, + "PerformanceServerTiming": false, + "PerformanceTiming": false, + "PeriodicSyncManager": false, + "PeriodicWave": false, + "PermissionStatus": false, + "Permissions": false, + "PictureInPictureEvent": false, + "PictureInPictureWindow": false, + "Plugin": false, + "PluginArray": false, + "PointerEvent": false, + "PopStateEvent": false, + "Presentation": false, + "PresentationAvailability": false, + "PresentationConnection": false, + "PresentationConnectionAvailableEvent": false, + "PresentationConnectionCloseEvent": false, + "PresentationConnectionList": false, + "PresentationReceiver": false, + "PresentationRequest": false, + "PressureObserver": false, + "PressureRecord": false, + "ProcessingInstruction": false, + "Profiler": false, + "ProgressEvent": false, + "PromiseRejectionEvent": false, + "ProtectedAudience": false, + "PublicKeyCredential": false, + "PushManager": false, + "PushSubscription": false, + "PushSubscriptionOptions": false, + "RTCCertificate": false, + "RTCDTMFSender": false, + "RTCDTMFToneChangeEvent": false, + "RTCDataChannel": false, + "RTCDataChannelEvent": false, + "RTCDtlsTransport": false, + "RTCEncodedAudioFrame": false, + "RTCEncodedVideoFrame": false, + "RTCError": false, + "RTCErrorEvent": false, + "RTCIceCandidate": false, + "RTCIceTransport": false, + "RTCPeerConnection": false, + "RTCPeerConnectionIceErrorEvent": false, + "RTCPeerConnectionIceEvent": false, + "RTCRtpReceiver": false, + "RTCRtpScriptTransform": false, + "RTCRtpSender": false, + "RTCRtpTransceiver": false, + "RTCSctpTransport": false, + "RTCSessionDescription": false, + "RTCStatsReport": false, + "RTCTrackEvent": false, + "RadioNodeList": false, + "Range": false, + "ReadableByteStreamController": false, + "ReadableStream": false, + "ReadableStreamBYOBReader": false, + "ReadableStreamBYOBRequest": false, + "ReadableStreamDefaultController": false, + "ReadableStreamDefaultReader": false, + "RelativeOrientationSensor": false, + "RemotePlayback": false, + "ReportingObserver": false, + "Request": false, + "ResizeObserver": false, + "ResizeObserverEntry": false, + "ResizeObserverSize": false, + "Response": false, + "SVGAElement": false, + "SVGAngle": false, + "SVGAnimateElement": false, + "SVGAnimateMotionElement": false, + "SVGAnimateTransformElement": false, + "SVGAnimatedAngle": false, + "SVGAnimatedBoolean": false, + "SVGAnimatedEnumeration": false, + "SVGAnimatedInteger": false, + "SVGAnimatedLength": false, + "SVGAnimatedLengthList": false, + "SVGAnimatedNumber": false, + "SVGAnimatedNumberList": false, + "SVGAnimatedPreserveAspectRatio": false, + "SVGAnimatedRect": false, + "SVGAnimatedString": false, + "SVGAnimatedTransformList": false, + "SVGAnimationElement": false, + "SVGCircleElement": false, + "SVGClipPathElement": false, + "SVGComponentTransferFunctionElement": false, + "SVGDefsElement": false, + "SVGDescElement": false, + "SVGElement": false, + "SVGEllipseElement": false, + "SVGFEBlendElement": false, + "SVGFEColorMatrixElement": false, + "SVGFEComponentTransferElement": false, + "SVGFECompositeElement": false, + "SVGFEConvolveMatrixElement": false, + "SVGFEDiffuseLightingElement": false, + "SVGFEDisplacementMapElement": false, + "SVGFEDistantLightElement": false, + "SVGFEDropShadowElement": false, + "SVGFEFloodElement": false, + "SVGFEFuncAElement": false, + "SVGFEFuncBElement": false, + "SVGFEFuncGElement": false, + "SVGFEFuncRElement": false, + "SVGFEGaussianBlurElement": false, + "SVGFEImageElement": false, + "SVGFEMergeElement": false, + "SVGFEMergeNodeElement": false, + "SVGFEMorphologyElement": false, + "SVGFEOffsetElement": false, + "SVGFEPointLightElement": false, + "SVGFESpecularLightingElement": false, + "SVGFESpotLightElement": false, + "SVGFETileElement": false, + "SVGFETurbulenceElement": false, + "SVGFilterElement": false, + "SVGForeignObjectElement": false, + "SVGGElement": false, + "SVGGeometryElement": false, + "SVGGradientElement": false, + "SVGGraphicsElement": false, + "SVGImageElement": false, + "SVGLength": false, + "SVGLengthList": false, + "SVGLineElement": false, + "SVGLinearGradientElement": false, + "SVGMPathElement": false, + "SVGMarkerElement": false, + "SVGMaskElement": false, + "SVGMatrix": false, + "SVGMetadataElement": false, + "SVGNumber": false, + "SVGNumberList": false, + "SVGPathElement": false, + "SVGPatternElement": false, + "SVGPoint": false, + "SVGPointList": false, + "SVGPolygonElement": false, + "SVGPolylineElement": false, + "SVGPreserveAspectRatio": false, + "SVGRadialGradientElement": false, + "SVGRect": false, + "SVGRectElement": false, + "SVGSVGElement": false, + "SVGScriptElement": false, + "SVGSetElement": false, + "SVGStopElement": false, + "SVGStringList": false, + "SVGStyleElement": false, + "SVGSwitchElement": false, + "SVGSymbolElement": false, + "SVGTSpanElement": false, + "SVGTextContentElement": false, + "SVGTextElement": false, + "SVGTextPathElement": false, + "SVGTextPositioningElement": false, + "SVGTitleElement": false, + "SVGTransform": false, + "SVGTransformList": false, + "SVGUnitTypes": false, + "SVGUseElement": false, + "SVGViewElement": false, + "Scheduler": false, + "Scheduling": false, + "Screen": false, + "ScreenDetailed": false, + "ScreenDetails": false, + "ScreenOrientation": false, + "ScriptProcessorNode": false, + "ScrollTimeline": false, + "SecurityPolicyViolationEvent": false, + "Selection": false, + "Sensor": false, + "SensorErrorEvent": false, + "Serial": false, + "SerialPort": false, + "ServiceWorker": false, + "ServiceWorkerContainer": false, + "ServiceWorkerRegistration": false, + "ShadowRoot": false, + "SharedStorage": false, + "SharedStorageWorklet": false, + "SharedWorker": false, + "SnapEvent": false, + "SourceBuffer": false, + "SourceBufferList": false, + "SpeechSynthesis": false, + "SpeechSynthesisErrorEvent": false, + "SpeechSynthesisEvent": false, + "SpeechSynthesisUtterance": false, + "SpeechSynthesisVoice": false, + "StaticRange": false, + "StereoPannerNode": false, + "Storage": false, + "StorageBucket": false, + "StorageBucketManager": false, + "StorageEvent": false, + "StorageManager": false, + "StylePropertyMap": false, + "StylePropertyMapReadOnly": false, + "StyleSheet": false, + "StyleSheetList": false, + "SubmitEvent": false, + "SubtleCrypto": false, + "SyncManager": false, + "TEMPORARY": false, + "TaskAttributionTiming": false, + "TaskController": false, + "TaskPriorityChangeEvent": false, + "TaskSignal": false, + "Text": false, + "TextDecoder": false, + "TextDecoderStream": false, + "TextEncoder": false, + "TextEncoderStream": false, + "TextEvent": false, + "TextFormat": false, + "TextFormatUpdateEvent": false, + "TextMetrics": false, + "TextTrack": false, + "TextTrackCue": false, + "TextTrackCueList": false, + "TextTrackList": false, + "TextUpdateEvent": false, + "TimeEvent": false, + "TimeRanges": false, + "ToggleEvent": false, + "Touch": false, + "TouchEvent": false, + "TouchList": false, + "TrackEvent": false, + "TransformStream": false, + "TransformStreamDefaultController": false, + "TransitionEvent": false, + "TreeWalker": false, + "TrustedHTML": false, + "TrustedScript": false, + "TrustedScriptURL": false, + "TrustedTypePolicy": false, + "TrustedTypePolicyFactory": false, + "UIEvent": false, + "URL": false, + "URLPattern": false, + "URLSearchParams": false, + "USB": false, + "USBAlternateInterface": false, + "USBConfiguration": false, + "USBConnectionEvent": false, + "USBDevice": false, + "USBEndpoint": false, + "USBInTransferResult": false, + "USBInterface": false, + "USBIsochronousInTransferPacket": false, + "USBIsochronousInTransferResult": false, + "USBIsochronousOutTransferPacket": false, + "USBIsochronousOutTransferResult": false, + "USBOutTransferResult": false, + "UserActivation": false, + "VTTCue": false, + "VTTRegion": false, + "ValidityState": false, + "VideoColorSpace": false, + "VideoDecoder": false, + "VideoEncoder": false, + "VideoFrame": false, + "VideoPlaybackQuality": false, + "ViewTimeline": false, + "ViewTransition": false, + "ViewTransitionTypeSet": false, + "VirtualKeyboard": false, + "VirtualKeyboardGeometryChangeEvent": false, + "VisibilityStateEntry": false, + "VisualViewport": false, + "WGSLLanguageFeatures": false, + "WakeLock": false, + "WakeLockSentinel": false, + "WaveShaperNode": false, + "WebAssembly": false, + "WebGL2RenderingContext": false, + "WebGLActiveInfo": false, + "WebGLBuffer": false, + "WebGLContextEvent": false, + "WebGLFramebuffer": false, + "WebGLObject": false, + "WebGLProgram": false, + "WebGLQuery": false, + "WebGLRenderbuffer": false, + "WebGLRenderingContext": false, + "WebGLSampler": false, + "WebGLShader": false, + "WebGLShaderPrecisionFormat": false, + "WebGLSync": false, + "WebGLTexture": false, + "WebGLTransformFeedback": false, + "WebGLUniformLocation": false, + "WebGLVertexArrayObject": false, + "WebSocket": false, + "WebSocketError": false, + "WebSocketStream": false, + "WebTransport": false, + "WebTransportBidirectionalStream": false, + "WebTransportDatagramDuplexStream": false, + "WebTransportError": false, + "WebTransportReceiveStream": false, + "WebTransportSendStream": false, + "WheelEvent": false, + "Window": false, + "WindowControlsOverlay": false, + "WindowControlsOverlayGeometryChangeEvent": false, + "Worker": false, + "Worklet": false, + "WorkletGlobalScope": false, + "WritableStream": false, + "WritableStreamDefaultController": false, + "WritableStreamDefaultWriter": false, + "XMLDocument": false, + "XMLHttpRequest": false, + "XMLHttpRequestEventTarget": false, + "XMLHttpRequestUpload": false, + "XMLSerializer": false, + "XPathEvaluator": false, + "XPathExpression": false, + "XPathResult": false, + "XRAnchor": false, + "XRAnchorSet": false, + "XRBoundedReferenceSpace": false, + "XRCPUDepthInformation": false, + "XRCamera": false, + "XRDOMOverlayState": false, + "XRDepthInformation": false, + "XRFrame": false, + "XRHitTestResult": false, + "XRHitTestSource": false, + "XRInputSource": false, + "XRInputSourceArray": false, + "XRInputSourceEvent": false, + "XRInputSourcesChangeEvent": false, + "XRLayer": false, + "XRLightEstimate": false, + "XRLightProbe": false, + "XRPose": false, + "XRRay": false, + "XRReferenceSpace": false, + "XRReferenceSpaceEvent": false, + "XRRenderState": false, + "XRRigidTransform": false, + "XRSession": false, + "XRSessionEvent": false, + "XRSpace": false, + "XRSystem": false, + "XRTransientInputHitTestResult": false, + "XRTransientInputHitTestSource": false, + "XRView": false, + "XRViewerPose": false, + "XRViewport": false, + "XRWebGLBinding": false, + "XRWebGLDepthInformation": false, + "XRWebGLLayer": false, + "XSLTProcessor": false, + "addEventListener": false, + "ai": false, + "alert": false, + "atob": false, + "blur": false, + "btoa": false, + "caches": false, + "cancelAnimationFrame": false, + "cancelIdleCallback": false, + "clearInterval": false, + "clearTimeout": false, + "clientInformation": false, + "close": false, + "closed": false, + "confirm": false, + "console": false, + "cookieStore": false, + "createImageBitmap": false, + "credentialless": false, + "crossOriginIsolated": false, + "crypto": false, + "currentFrame": false, + "currentTime": false, + "customElements": false, + "devicePixelRatio": false, + "dispatchEvent": false, + "document": false, + "documentPictureInPicture": false, + "event": false, + "external": false, + "fence": false, + "fetch": false, + "fetchLater": false, + "find": false, + "focus": false, + "frameElement": false, + "frames": false, + "getComputedStyle": false, + "getScreenDetails": false, + "getSelection": false, + "history": false, + "indexedDB": false, + "innerHeight": false, + "innerWidth": false, + "isSecureContext": false, + "launchQueue": false, + "length": false, + "localStorage": false, + "location": true, + "locationbar": false, + "matchMedia": false, + "menubar": false, + "model": false, + "moveBy": false, + "moveTo": false, + "name": false, + "navigation": false, + "navigator": false, + "offscreenBuffering": false, + "onabort": true, + "onafterprint": true, + "onanimationcancel": true, + "onanimationend": true, + "onanimationiteration": true, + "onanimationstart": true, + "onappinstalled": true, + "onauxclick": true, + "onbeforeinput": true, + "onbeforeinstallprompt": true, + "onbeforematch": true, + "onbeforeprint": true, + "onbeforetoggle": true, + "onbeforeunload": true, + "onbeforexrselect": true, + "onblur": true, + "oncancel": true, + "oncanplay": true, + "oncanplaythrough": true, + "onchange": true, + "onclick": true, + "onclose": true, + "oncontentvisibilityautostatechange": true, + "oncontextlost": true, + "oncontextmenu": true, + "oncontextrestored": true, + "oncopy": true, + "oncuechange": true, + "oncut": true, + "ondblclick": true, + "ondevicemotion": true, + "ondeviceorientation": true, + "ondeviceorientationabsolute": true, + "ondrag": true, + "ondragend": true, + "ondragenter": true, + "ondragleave": true, + "ondragover": true, + "ondragstart": true, + "ondrop": true, + "ondurationchange": true, + "onemptied": true, + "onended": true, + "onerror": true, + "onfocus": true, + "onformdata": true, + "ongamepadconnected": true, + "ongamepaddisconnected": true, + "ongotpointercapture": true, + "onhashchange": true, + "oninput": true, + "oninvalid": true, + "onkeydown": true, + "onkeypress": true, + "onkeyup": true, + "onlanguagechange": true, + "onload": true, + "onloadeddata": true, + "onloadedmetadata": true, + "onloadstart": true, + "onlostpointercapture": true, + "onmessage": true, + "onmessageerror": true, + "onmousedown": true, + "onmouseenter": true, + "onmouseleave": true, + "onmousemove": true, + "onmouseout": true, + "onmouseover": true, + "onmouseup": true, + "onmousewheel": true, + "onoffline": true, + "ononline": true, + "onpagehide": true, + "onpagereveal": true, + "onpageshow": true, + "onpageswap": true, + "onpaste": true, + "onpause": true, + "onplay": true, + "onplaying": true, + "onpointercancel": true, + "onpointerdown": true, + "onpointerenter": true, + "onpointerleave": true, + "onpointermove": true, + "onpointerout": true, + "onpointerover": true, + "onpointerrawupdate": true, + "onpointerup": true, + "onpopstate": true, + "onprogress": true, + "onratechange": true, + "onrejectionhandled": true, + "onreset": true, + "onresize": true, + "onscroll": true, + "onscrollend": true, + "onscrollsnapchange": true, + "onscrollsnapchanging": true, + "onsearch": true, + "onsecuritypolicyviolation": true, + "onseeked": true, + "onseeking": true, + "onselect": true, + "onselectionchange": true, + "onselectstart": true, + "onslotchange": true, + "onstalled": true, + "onstorage": true, + "onsubmit": true, + "onsuspend": true, + "ontimeupdate": true, + "ontoggle": true, + "ontransitioncancel": true, + "ontransitionend": true, + "ontransitionrun": true, + "ontransitionstart": true, + "onunhandledrejection": true, + "onunload": true, + "onvolumechange": true, + "onwaiting": true, + "onwheel": true, + "open": false, + "opener": false, + "origin": false, + "originAgentCluster": false, + "outerHeight": false, + "outerWidth": false, + "pageXOffset": false, + "pageYOffset": false, + "parent": false, + "performance": false, + "personalbar": false, + "postMessage": false, + "print": false, + "prompt": false, + "queryLocalFonts": false, + "queueMicrotask": false, + "registerProcessor": false, + "removeEventListener": false, + "reportError": false, + "requestAnimationFrame": false, + "requestIdleCallback": false, + "resizeBy": false, + "resizeTo": false, + "sampleRate": false, + "scheduler": false, + "screen": false, + "screenLeft": false, + "screenTop": false, + "screenX": false, + "screenY": false, + "scroll": false, + "scrollBy": false, + "scrollTo": false, + "scrollX": false, + "scrollY": false, + "scrollbars": false, + "self": false, + "sessionStorage": false, + "setInterval": false, + "setTimeout": false, + "sharedStorage": false, + "showDirectoryPicker": false, + "showOpenFilePicker": false, + "showSaveFilePicker": false, + "speechSynthesis": false, + "status": false, + "statusbar": false, + "stop": false, + "structuredClone": false, + "styleMedia": false, + "toolbar": false, + "top": false, + "trustedTypes": false, + "visualViewport": false, + "window": false + }, + "parser": "@qlik/eslint-config/recommended-ts-parser", + "parserOptions": { + "parser": { + "meta": { + "name": "typescript-eslint/parser", + "version": "8.16.0" + }, + "version": "8.16.0" + }, + "projectService": true, + "warnOnUnsupportedTypeScriptVersion": false + }, + "sourceType": "module" + }, + "name": "@qlik/eslint-config/recommended-ts", + "plugins": { + "@typescript-eslint": "@typescript-eslint-plugin", + "import-x": "import-x-plugin" + }, + "rules": { + "@typescript-eslint/ban-ts-comment": "error", + "@typescript-eslint/class-methods-use-this": [ + "warn", + { + "exceptMethods": [] + } + ], + "@typescript-eslint/consistent-type-exports": "error", + "@typescript-eslint/consistent-type-imports": "error", + "@typescript-eslint/default-param-last": "error", + "@typescript-eslint/explicit-module-boundary-types": "off", + "@typescript-eslint/method-signature-style": "error", + "@typescript-eslint/naming-convention": [ + "error", + { + "format": [ + "camelCase", + "PascalCase", + "UPPER_CASE" + ], + "selector": "variable" + }, + { + "format": [ + "camelCase", + "PascalCase" + ], + "selector": "function" + }, + { + "format": [ + "PascalCase" + ], + "selector": "typeLike" + } + ], + "@typescript-eslint/no-array-constructor": "error", + "@typescript-eslint/no-confusing-void-expression": "error", + "@typescript-eslint/no-duplicate-enum-values": "error", + "@typescript-eslint/no-dynamic-delete": "error", + "@typescript-eslint/no-empty-object-type": "error", + "@typescript-eslint/no-explicit-any": "error", + "@typescript-eslint/no-extra-non-null-assertion": "error", + "@typescript-eslint/no-extraneous-class": "error", + "@typescript-eslint/no-floating-promises": [ + "error", + { + "ignoreIIFE": true + } + ], + "@typescript-eslint/no-import-type-side-effects": "error", + "@typescript-eslint/no-invalid-void-type": "error", + "@typescript-eslint/no-loop-func": "error", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-meaningless-void-operator": "error", + "@typescript-eslint/no-misused-new": "error", + "@typescript-eslint/no-misused-promises": [ + "error", + { + "checksConditionals": false + } + ], + "@typescript-eslint/no-mixed-enums": "error", + "@typescript-eslint/no-namespace": "error", + "@typescript-eslint/no-non-null-asserted-nullish-coalescing": "error", + "@typescript-eslint/no-non-null-asserted-optional-chain": "error", + "@typescript-eslint/no-non-null-assertion": "error", + "@typescript-eslint/no-redeclare": "error", + "@typescript-eslint/no-require-imports": "error", + "@typescript-eslint/no-restricted-imports": [ + "off", + { + "paths": [], + "patterns": [] + } + ], + "@typescript-eslint/no-restricted-types": [ + "error", + {} + ], + "@typescript-eslint/no-shadow": "error", + "@typescript-eslint/no-this-alias": "error", + "@typescript-eslint/no-unnecessary-boolean-literal-compare": "error", + "@typescript-eslint/no-unnecessary-condition": "error", + "@typescript-eslint/no-unnecessary-parameter-property-assignment": "error", + "@typescript-eslint/no-unnecessary-qualifier": "error", + "@typescript-eslint/no-unnecessary-template-expression": "error", + "@typescript-eslint/no-unnecessary-type-arguments": "error", + "@typescript-eslint/no-unnecessary-type-constraint": "error", + "@typescript-eslint/no-unnecessary-type-parameters": "off", + "@typescript-eslint/no-unsafe-declaration-merging": "error", + "@typescript-eslint/no-unsafe-function-type": "error", + "@typescript-eslint/no-unused-expressions": "error", + "@typescript-eslint/no-unused-vars": "error", + "@typescript-eslint/no-useless-constructor": "error", + "@typescript-eslint/no-useless-empty-export": "error", + "@typescript-eslint/no-wrapper-object-types": "error", + "@typescript-eslint/prefer-as-const": "error", + "@typescript-eslint/prefer-enum-initializers": "error", + "@typescript-eslint/prefer-for-of": "off", + "@typescript-eslint/prefer-literal-enum-member": "error", + "@typescript-eslint/prefer-namespace-keyword": "error", + "@typescript-eslint/prefer-reduce-type-parameter": "error", + "@typescript-eslint/prefer-return-this-type": "error", + "@typescript-eslint/require-array-sort-compare": "error", + "@typescript-eslint/return-await": "error", + "@typescript-eslint/strict-boolean-expressions": "off", + "@typescript-eslint/switch-exhaustiveness-check": "error", + "@typescript-eslint/triple-slash-reference": "error", + "@typescript-eslint/unified-signatures": "error", + "@typescript-eslint/use-unknown-in-catch-callback-variable": "error", + "array-callback-return": [ + "error", + { + "allowImplicit": true + } + ], + "arrow-body-style": "off", + "block-scoped-var": "error", + "camelcase": "off", + "class-methods-use-this": "off", + "consistent-return": "error", + "constructor-super": "off", + "curly": [ + "error", + "multi-line" + ], + "default-case": [ + "error", + { + "commentPattern": "^no default$" + } + ], + "default-case-last": "error", + "default-param-last": "off", + "eqeqeq": [ + "error", + "always", + { + "null": "ignore" + } + ], + "for-direction": "error", + "func-names": "warn", + "getter-return": "off", + "grouped-accessor-pairs": "error", + "import-x/consistent-type-specifier-style": "off", + "import-x/default": "error", + "import-x/export": "error", + "import-x/extensions": [ + "error", + "ignorePackages", + { + "js": "never", + "jsx": "never", + "mjs": "never", + "mts": "never", + "ts": "never", + "tsx": "never" + } + ], + "import-x/named": "off", + "import-x/namespace": "error", + "import-x/newline-after-import": "error", + "import-x/no-absolute-path": "error", + "import-x/no-amd": "error", + "import-x/no-cycle": [ + "error", + { + "maxDepth": "∞" + } + ], + "import-x/no-deprecated": "warn", + "import-x/no-duplicates": "error", + "import-x/no-dynamic-require": "error", + "import-x/no-empty-named-blocks": "off", + "import-x/no-extraneous-dependencies": [ + "off", + { + "devDependencies": [ + "**/test*/**", + "**/mocks/**", + "**/mock/**", + "test/**", + "tests/**", + "spec/**", + "**/__tests__/**", + "**/__mocks__/**", + "test.{js,jsx,ts,tsx}", + "test-*.{js,jsx,ts,tsx}", + "**/*{.,_}{test,spec}.{js,jsx,ts,tsx}", + "**/jest.config.{cjs,mjs,js,ts}", + "**/jest.setup.{cjs,mjs,js,ts}", + "**/vitest.config.{cjs,mjs,js,ts}", + "**/vue.config.{cjs,mjs,js,ts}", + "**/svelte.config.{cjs,mjs,js,ts}", + "**/tsup.config.{cjs,mjs,js,ts}", + "**/playwright.config.{cjs,mjs,js,ts}", + "**/webpack.config.{cjs,mjs,js,ts}", + "**/webpack.mod.{cjs,mjs,js,ts}", + "**/rollup.config.{cjs,mjs,js,ts}", + "**/rollup.config.*cjs,mjs,.{js,ts}", + "**/protractor.conf.{cjs,mjs,js,ts}", + "**/protractor.conf.*.{cjs,mjs,js,ts}", + "**/.eslintrc.{cjs,mjs,js,ts}", + "**/eslint.config.{cjs,mjs,js,ts}", + "**/.prettierrc.{cjs,mjs,js,ts}", + "**/.prettierrc" + ], + "optionalDependencies": false + } + ], + "import-x/no-import-module-exports": [ + "error", + { + "exceptions": [] + } + ], + "import-x/no-mutable-exports": "error", + "import-x/no-named-as-default": "error", + "import-x/no-named-as-default-member": "off", + "import-x/no-named-default": "error", + "import-x/no-nodejs-modules": "off", + "import-x/no-relative-packages": "error", + "import-x/no-self-import": "error", + "import-x/no-unresolved": [ + "error", + { + "caseSensitive": true, + "commonjs": true + } + ], + "import-x/no-unused-modules": "error", + "import-x/no-useless-path-segments": [ + "error", + { + "commonjs": true + } + ], + "import-x/no-webpack-loader-syntax": "error", + "import-x/prefer-default-export": "off", + "max-classes-per-file": [ + "error", + 1 + ], + "new-cap": [ + "error", + { + "capIsNew": false, + "capIsNewExceptions": [ + "Immutable.Map", + "Immutable.Set", + "Immutable.List" + ], + "newIsCap": true, + "newIsCapExceptions": [] + } + ], + "no-alert": "error", + "no-array-constructor": "off", + "no-async-promise-executor": "error", + "no-await-in-loop": "error", + "no-bitwise": "error", + "no-caller": "error", + "no-case-declarations": "error", + "no-class-assign": "off", + "no-compare-neg-zero": "error", + "no-cond-assign": [ + "error", + "always" + ], + "no-console": "warn", + "no-const-assign": "off", + "no-constant-binary-expression": "error", + "no-constant-condition": "warn", + "no-constructor-return": "error", + "no-continue": "error", + "no-control-regex": "error", + "no-debugger": "error", + "no-delete-var": "error", + "no-dupe-args": "off", + "no-dupe-class-members": "off", + "no-dupe-else-if": "error", + "no-dupe-keys": "off", + "no-duplicate-case": "error", + "no-else-return": [ + "error", + { + "allowElseIf": false + } + ], + "no-empty": "error", + "no-empty-character-class": "error", + "no-empty-function": [ + "error", + { + "allow": [ + "arrowFunctions", + "functions", + "methods" + ] + } + ], + "no-empty-pattern": "error", + "no-empty-static-block": "error", + "no-eval": "error", + "no-ex-assign": "error", + "no-extend-native": "error", + "no-extra-bind": "error", + "no-extra-boolean-cast": "error", + "no-extra-label": "error", + "no-fallthrough": "error", + "no-func-assign": "off", + "no-global-assign": [ + "error", + { + "exceptions": [] + } + ], + "no-implied-eval": "error", + "no-import-assign": "off", + "no-inner-declarations": "error", + "no-invalid-regexp": "error", + "no-irregular-whitespace": "error", + "no-iterator": "error", + "no-label-var": "error", + "no-labels": [ + "error", + { + "allowLoop": false, + "allowSwitch": false + } + ], + "no-lone-blocks": "error", + "no-lonely-if": "error", + "no-loop-func": "off", + "no-loss-of-precision": "error", + "no-magic-numbers": "off", + "no-misleading-character-class": "error", + "no-multi-assign": [ + "error" + ], + "no-multi-str": "error", + "no-nested-ternary": "error", + "no-new": "error", + "no-new-func": "error", + "no-new-native-nonconstructor": "off", + "no-new-symbol": "off", + "no-new-wrappers": "error", + "no-nonoctal-decimal-escape": "error", + "no-obj-calls": "off", + "no-object-constructor": "error", + "no-octal": "error", + "no-octal-escape": "error", + "no-param-reassign": [ + "error", + { + "ignorePropertyModificationsFor": [ + "prev", + "acc", + "accumulator", + "e", + "ctx", + "context", + "req", + "request", + "res", + "response", + "$scope", + "staticContext", + "sharedState", + "state" + ], + "props": true + } + ], + "no-promise-executor-return": "error", + "no-proto": "error", + "no-prototype-builtins": "error", + "no-redeclare": "off", + "no-regex-spaces": "error", + "no-restricted-exports": [ + "error", + { + "restrictedNamedExports": [ + "default", + "then" + ] + } + ], + "no-restricted-globals": [ + "error", + { + "message": "Use Number.isFinite instead", + "name": "isFinite" + }, + { + "message": "Use Number.isNaN instead", + "name": "isNaN" + }, + { + "message": "Use window.addEventListener instead", + "name": "addEventListener" + }, + { + "message": "Use window.blur instead", + "name": "blur" + }, + { + "message": "Use window.close instead", + "name": "close" + }, + { + "message": "Use window.closed instead", + "name": "closed" + }, + { + "message": "Use window.confirm instead", + "name": "confirm" + }, + { + "message": "Use window.defaultStatus instead", + "name": "defaultStatus" + }, + { + "message": "Use window.defaultstatus instead", + "name": "defaultstatus" + }, + { + "message": "Use window.event instead", + "name": "event" + }, + { + "message": "Use window.external instead", + "name": "external" + }, + { + "message": "Use window.find instead", + "name": "find" + }, + { + "message": "Use window.focus instead", + "name": "focus" + }, + { + "message": "Use window.frameElement instead", + "name": "frameElement" + }, + { + "message": "Use window.frames instead", + "name": "frames" + }, + { + "message": "Use window.history instead", + "name": "history" + }, + { + "message": "Use window.innerHeight instead", + "name": "innerHeight" + }, + { + "message": "Use window.innerWidth instead", + "name": "innerWidth" + }, + { + "message": "Use window.length instead", + "name": "length" + }, + { + "message": "Use window.location instead", + "name": "location" + }, + { + "message": "Use window.locationbar instead", + "name": "locationbar" + }, + { + "message": "Use window.menubar instead", + "name": "menubar" + }, + { + "message": "Use window.moveBy instead", + "name": "moveBy" + }, + { + "message": "Use window.moveTo instead", + "name": "moveTo" + }, + { + "message": "Use window.name instead", + "name": "name" + }, + { + "message": "Use window.onblur instead", + "name": "onblur" + }, + { + "message": "Use window.onerror instead", + "name": "onerror" + }, + { + "message": "Use window.onfocus instead", + "name": "onfocus" + }, + { + "message": "Use window.onload instead", + "name": "onload" + }, + { + "message": "Use window.onresize instead", + "name": "onresize" + }, + { + "message": "Use window.onunload instead", + "name": "onunload" + }, + { + "message": "Use window.open instead", + "name": "open" + }, + { + "message": "Use window.opener instead", + "name": "opener" + }, + { + "message": "Use window.opera instead", + "name": "opera" + }, + { + "message": "Use window.outerHeight instead", + "name": "outerHeight" + }, + { + "message": "Use window.outerWidth instead", + "name": "outerWidth" + }, + { + "message": "Use window.pageXOffset instead", + "name": "pageXOffset" + }, + { + "message": "Use window.pageYOffset instead", + "name": "pageYOffset" + }, + { + "message": "Use window.parent instead", + "name": "parent" + }, + { + "message": "Use window.print instead", + "name": "print" + }, + { + "message": "Use window.removeEventListener instead", + "name": "removeEventListener" + }, + { + "message": "Use window.resizeBy instead", + "name": "resizeBy" + }, + { + "message": "Use window.resizeTo instead", + "name": "resizeTo" + }, + { + "message": "Use window.screen instead", + "name": "screen" + }, + { + "message": "Use window.screenLeft instead", + "name": "screenLeft" + }, + { + "message": "Use window.screenTop instead", + "name": "screenTop" + }, + { + "message": "Use window.screenX instead", + "name": "screenX" + }, + { + "message": "Use window.screenY instead", + "name": "screenY" + }, + { + "message": "Use window.scroll instead", + "name": "scroll" + }, + { + "message": "Use window.scrollbars instead", + "name": "scrollbars" + }, + { + "message": "Use window.scrollBy instead", + "name": "scrollBy" + }, + { + "message": "Use window.scrollTo instead", + "name": "scrollTo" + }, + { + "message": "Use window.scrollX instead", + "name": "scrollX" + }, + { + "message": "Use window.scrollY instead", + "name": "scrollY" + }, + { + "message": "Use window.self instead", + "name": "self" + }, + { + "message": "Use window.status instead", + "name": "status" + }, + { + "message": "Use window.statusbar instead", + "name": "statusbar" + }, + { + "message": "Use window.stop instead", + "name": "stop" + }, + { + "message": "Use window.toolbar instead", + "name": "toolbar" + }, + { + "message": "Use window.top instead", + "name": "top" + } + ], + "no-restricted-imports": "off", + "no-restricted-properties": [ + "error", + { + "message": "arguments.callee is deprecated", + "object": "arguments", + "property": "callee" + }, + { + "message": "Please use Number.isFinite instead", + "object": "global", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "self", + "property": "isFinite" + }, + { + "message": "Please use Number.isFinite instead", + "object": "window", + "property": "isFinite" + }, + { + "message": "Please use Number.isNaN instead", + "object": "global", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "self", + "property": "isNaN" + }, + { + "message": "Please use Number.isNaN instead", + "object": "window", + "property": "isNaN" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineGetter__" + }, + { + "message": "Please use Object.defineProperty instead.", + "property": "__defineSetter__" + }, + { + "message": "Use the exponentiation operator (**) instead.", + "object": "Math", + "property": "pow" + } + ], + "no-restricted-syntax": [ + "error", + { + "message": "Labels are a form of GOTO; using them makes code confusing and hard to maintain and understand.", + "selector": "LabeledStatement" + }, + { + "message": "`with` is disallowed in strict mode because it makes code impossible to predict and optimize.", + "selector": "WithStatement" + } + ], + "no-return-assign": [ + "error", + "always" + ], + "no-return-await": "off", + "no-script-url": "error", + "no-self-assign": [ + "error", + { + "props": true + } + ], + "no-self-compare": "error", + "no-sequences": "error", + "no-setter-return": "off", + "no-shadow": "off", + "no-shadow-restricted-names": "error", + "no-sparse-arrays": "error", + "no-template-curly-in-string": "error", + "no-this-before-super": "off", + "no-throw-literal": "error", + "no-undef": "off", + "no-undef-init": "error", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "error", + "no-unneeded-ternary": [ + "error", + { + "defaultAssignment": false + } + ], + "no-unreachable": "off", + "no-unreachable-loop": [ + "error", + { + "ignore": [] + } + ], + "no-unsafe-finally": "error", + "no-unsafe-negation": "off", + "no-unsafe-optional-chaining": [ + "error", + { + "disallowArithmeticOperators": true + } + ], + "no-unused-expressions": "off", + "no-unused-labels": "error", + "no-unused-private-class-members": "error", + "no-unused-vars": "off", + "no-useless-backreference": "error", + "no-useless-call": "error", + "no-useless-catch": "error", + "no-useless-computed-key": "error", + "no-useless-concat": "error", + "no-useless-constructor": "off", + "no-useless-escape": "error", + "no-useless-rename": [ + "error", + { + "ignoreDestructuring": false, + "ignoreExport": false, + "ignoreImport": false + } + ], + "no-useless-return": "error", + "no-var": "error", + "no-with": "error", + "object-shorthand": [ + "error", + "always", + { + "avoidQuotes": true, + "ignoreConstructors": false + } + ], + "one-var": [ + "error", + "never" + ], + "operator-assignment": [ + "error", + "always" + ], + "prefer-arrow-callback": "off", + "prefer-const": "error", + "prefer-exponentiation-operator": "error", + "prefer-numeric-literals": "error", + "prefer-object-has-own": "error", + "prefer-object-spread": "error", + "prefer-promise-reject-errors": [ + "error", + { + "allowEmptyReject": true + } + ], + "prefer-regex-literals": [ + "error", + { + "disallowRedundantWrapping": true + } + ], + "prefer-rest-params": "error", + "prefer-spread": "error", + "prefer-template": "error", + "radix": "error", + "require-atomic-updates": "error", + "require-yield": "error", + "symbol-description": "error", + "unicode-bom": [ + "error", + "never" + ], + "use-isnan": "error", + "valid-typeof": [ + "error", + { + "requireStringLiterals": true + } + ], + "yoda": "error" + }, + "settings": { + "import-x/extensions": [ + ".ts", + ".tsx", + ".cts", + ".mts", + ".js", + ".jsx", + ".cjs", + ".mjs" + ], + "import-x/external-module-folders": [ + "node_modules", + "node_modules/@types" + ], + "import-x/parsers": { + "@typescript-eslint/parser": [ + ".ts", + ".tsx", + ".cts", + ".mts" + ] + }, + "import-x/resolver": { + "typescript": true + } + } + }, + { + "files": [ + "**/*.svelte" + ], + "languageOptions": { + "parser": "@qlik/eslint-config/svelte-parser", + "parserOptions": { + "extraFileExtensions": [ + ".svelte" + ], + "parser": { + "meta": { + "name": "typescript-eslint/parser", + "version": "8.16.0" + } + } + } + }, + "name": "@qlik/eslint-config/svelte", + "plugins": { + "svelte": "svelte-plugin" + }, + "processor": "svelte/svelte", + "rules": { + "@typescript-eslint/no-unsafe-argument": "off", + "@typescript-eslint/no-unsafe-assignment": "off", + "@typescript-eslint/no-unsafe-call": "off", + "@typescript-eslint/no-unsafe-member-access": "off", + "@typescript-eslint/no-unsafe-return": "off", + "import-x/extensions": "off", + "import-x/first": "off", + "import-x/no-duplicates": "off", + "import-x/no-mutable-exports": "off", + "import-x/no-unresolved": "off", + "import-x/prefer-default-export": "off", + "no-inner-declarations": "off", + "no-self-assign": "off", + "no-unused-vars": "off", + "svelte/comment-directive": "error", + "svelte/no-at-debug-tags": "warn", + "svelte/no-at-html-tags": "error", + "svelte/no-dupe-else-if-blocks": "error", + "svelte/no-dupe-style-properties": "error", + "svelte/no-dynamic-slot-name": "error", + "svelte/no-inner-declarations": "error", + "svelte/no-not-function-handler": "error", + "svelte/no-object-in-text-mustaches": "error", + "svelte/no-shorthand-style-property-overrides": "error", + "svelte/no-unknown-style-directive-property": "error", + "svelte/no-unused-svelte-ignore": "error", + "svelte/system": "error", + "svelte/valid-compile": "error" + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/generated/vitest-final-config.js b/packages/eslint-config/test/generated/vitest-final-config.js new file mode 100644 index 0000000..2577f73 --- /dev/null +++ b/packages/eslint-config/test/generated/vitest-final-config.js @@ -0,0 +1,60 @@ +export default [ + { + "files": [ + "**/__test__/**/*.{js,jsx,ts,tsx}", + "**/__tests__/**/*.{js,jsx,ts,tsx}" + ], + "name": "@qlik/eslint-config/vitest", + "plugins": { + "testing-library": "testing-library-plugin", + "vitest": "vitest-plugin" + }, + "rules": { + "testing-library/await-async-events": [ + "error", + { + "eventModule": "userEvent" + } + ], + "testing-library/await-async-queries": "error", + "testing-library/await-async-utils": "error", + "testing-library/no-await-sync-events": [ + "error", + { + "eventModules": [ + "fire-event" + ] + } + ], + "testing-library/no-await-sync-queries": "error", + "testing-library/no-container": "error", + "testing-library/no-debugging-utils": "warn", + "testing-library/no-dom-import": [ + "error", + "react" + ], + "testing-library/no-global-regexp-flag-in-query": "error", + "testing-library/no-manual-cleanup": "error", + "testing-library/no-node-access": "error", + "testing-library/no-promise-in-fire-event": "error", + "testing-library/no-render-in-lifecycle": "error", + "testing-library/no-unnecessary-act": "error", + "testing-library/no-wait-for-multiple-assertions": "error", + "testing-library/no-wait-for-side-effects": "error", + "testing-library/no-wait-for-snapshot": "error", + "testing-library/prefer-find-by": "error", + "testing-library/prefer-presence-queries": "error", + "testing-library/prefer-query-by-disappearance": "error", + "testing-library/prefer-screen-queries": "error", + "testing-library/render-result-naming-convention": "error", + "vitest/expect-expect": "error", + "vitest/no-commented-out-tests": "error", + "vitest/no-identical-title": "error", + "vitest/no-import-node-test": "error", + "vitest/require-local-test-context-for-concurrent-snapshots": "error", + "vitest/valid-describe-callback": "error", + "vitest/valid-expect": "error", + "vitest/valid-title": "error" + } + } +] \ No newline at end of file diff --git a/packages/eslint-config/test/update-configs.sh b/packages/eslint-config/test/update-configs.sh new file mode 100755 index 0000000..6728c3e --- /dev/null +++ b/packages/eslint-config/test/update-configs.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +# make the location of this script the current working directory +cd "$(dirname "$0")" || exit 1 + +# Run the generate-configs.js script next to this file even if cwd is different +node generate-configs.js + +# Check if there are any differences between the generated files and the committed files +if ! git diff --exit-code generated/; then + git add generated/ + git commit -m "chore(eslint-confg): update eslint test configs" + git push + echo -e "\033[32mBranch has been updated with new test configs\033[0m" +fi + +echo -e "\033[32mNothing was updated\033[0m" diff --git a/packages/eslint-config/test/verify-configs.sh b/packages/eslint-config/test/verify-configs.sh new file mode 100755 index 0000000..6443867 --- /dev/null +++ b/packages/eslint-config/test/verify-configs.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +# make the location of this script the current working directory +cd "$(dirname "$0")" || exit 1 + +# Run the generate-configs.js script next to this file even if cwd is different +node generate-configs.js + +# Check if there are any differences between the generated files and the committed files +if ! git diff --exit-code generated/; then + echo -e "\033[31mThere is a difference between the new config files and the previously commited config files\033[0m" + echo -e "\033[31mPlease review the difference and commit them if they are expected\033[0m" + exit 1 +fi + +echo -e "\033[32mLint configs has been verified, no diff found!\033[0m" diff --git a/test/test-react-svelte/src/ReactComponent.tsx b/test/test-react-svelte/src/ReactComponent.tsx index fbae7ca..9438cbd 100644 --- a/test/test-react-svelte/src/ReactComponent.tsx +++ b/test/test-react-svelte/src/ReactComponent.tsx @@ -1,3 +1,5 @@ +import type React from "react"; + export type ReactComponentProps = { name: string; }; diff --git a/test/test-react/src/ReactComponent.tsx b/test/test-react/src/ReactComponent.tsx index b30039b..c8d03e9 100644 --- a/test/test-react/src/ReactComponent.tsx +++ b/test/test-react/src/ReactComponent.tsx @@ -1,3 +1,5 @@ +import type React from "react"; + export type ReactComponentProps = { name: string; }; diff --git a/turbo.json b/turbo.json index 3083464..c4d407e 100644 --- a/turbo.json +++ b/turbo.json @@ -4,6 +4,9 @@ "lint": { "outputs": [] }, + "test": { + "outputs": [] + }, "format:check": { "outputs": [] },