diff --git a/.eslintignore b/.eslintignore
index 572c354a4e..112d7c2f68 100644
--- a/.eslintignore
+++ b/.eslintignore
@@ -1,2 +1,4 @@
node_modules/
-builds/
\ No newline at end of file
+builds/
+test-results/*
+.vscode/*
\ No newline at end of file
diff --git a/.eslintrc.json b/.eslintrc.json
deleted file mode 100644
index faee1c51d0..0000000000
--- a/.eslintrc.json
+++ /dev/null
@@ -1,699 +0,0 @@
-{
- "root": true,
- "extends": [
- "eslint:recommended",
- "plugin:jsonc/recommended-with-json",
- "plugin:eslint-comments/recommended"
- ],
- "parser": "@typescript-eslint/parser",
- "parserOptions": {
- "ecmaVersion": 2022,
- "sourceType": "module",
- "ecmaFeatures": {
- "globalReturn": false,
- "impliedStrict": true
- },
- "project": [
- "./jsconfig.json",
- "./dev/jsconfig.json",
- "./test/jsconfig.json",
- "./benches/jsconfig.json"
- ]
- },
- "env": {
- "browser": true,
- "es2022": true,
- "webextensions": true
- },
- "plugins": [
- "no-unsanitized",
- "header",
- "jsdoc",
- "jsonc",
- "unused-imports",
- "@typescript-eslint",
- "@stylistic",
- "unicorn",
- "sonarjs",
- "import"
- ],
- "ignorePatterns": [
- "/ext/lib/",
- "/dev/lib/handlebars/"
- ],
- "rules": {
- "accessor-pairs": "error",
- "curly": ["error", "all"],
- "default-case-last": "error",
- "dot-notation": "error",
- "eqeqeq": "error",
- "func-names": ["error", "always"],
- "guard-for-in": "error",
- "grouped-accessor-pairs": "error",
- "new-cap": "error",
- "no-alert": "error",
- "no-case-declarations": "error",
- "no-caller": "error",
- "no-const-assign": "error",
- "no-constant-condition": ["error", {"checkLoops": false}],
- "no-constructor-return": "error",
- "no-duplicate-imports": "error",
- "no-eval": "error",
- "no-extend-native": "error",
- "no-global-assign": "error",
- "no-implicit-globals": "error",
- "no-implied-eval": "error",
- "no-new": "error",
- "no-new-native-nonconstructor": "error",
- "no-octal": "error",
- "no-octal-escape": "error",
- "no-param-reassign": "off",
- "no-promise-executor-return": "error",
- "no-prototype-builtins": "error",
- "no-restricted-syntax": [
- "error",
- {
- "message": "Avoid using JSON.parse(), prefer parseJson.",
- "selector": "MemberExpression[object.name=JSON][property.name=parse]"
- },
- {
- "message": "Avoid using Response.json(), prefer readResponseJson.",
- "selector": "MemberExpression[property.name=json]"
- }
- ],
- "no-self-compare": "error",
- "no-sequences": "error",
- "no-shadow": ["error", {"builtinGlobals": false}],
- "no-shadow-restricted-names": "error",
- "no-template-curly-in-string": "error",
- "no-undef": "error",
- "no-undefined": "error",
- "no-underscore-dangle": ["error", {"allowAfterThis": true, "allowAfterSuper": false, "allowAfterThisConstructor": false}],
- "no-unexpected-multiline": "error",
- "no-unneeded-ternary": "error",
- "no-unused-vars": ["error", {"vars": "local", "args": "after-used", "argsIgnorePattern": "^_", "caughtErrors": "none"}],
- "no-unused-expressions": "error",
- "no-var": "error",
- "no-with": "error",
- "prefer-const": ["error", {"destructuring": "all"}],
- "radix": "error",
- "require-atomic-updates": "off",
- "sort-imports": "off",
- "yoda": ["error", "never"],
-
- "@stylistic/array-bracket-newline": ["error", "consistent"],
- "@stylistic/array-bracket-spacing": ["error", "never"],
- "@stylistic/array-element-newline": ["error", "consistent"],
- "@stylistic/arrow-parens": ["error", "always"],
- "@stylistic/arrow-spacing": ["error", {"before": true, "after": true}],
- "@stylistic/block-spacing": ["error", "always"],
- "@stylistic/brace-style": ["error", "1tbs", {"allowSingleLine": true}],
- "@stylistic/comma-dangle": ["error", "always-multiline"],
- "@stylistic/comma-spacing": ["error", {"before": false, "after": true}],
- "@stylistic/comma-style": ["error", "last"],
- "@stylistic/computed-property-spacing": ["error", "never"],
- "@stylistic/dot-location": ["error", "property"],
- "@stylistic/eol-last": ["error", "always"],
- "@stylistic/func-call-spacing": ["error", "never"],
- "@stylistic/function-call-argument-newline": ["error", "consistent"],
- "@stylistic/function-call-spacing": ["error", "never"],
- "@stylistic/function-paren-newline": ["error", "multiline-arguments"],
- "@stylistic/generator-star-spacing": ["error", "before"],
- "@stylistic/implicit-arrow-linebreak": ["error", "beside"],
- "@stylistic/indent": ["error", 4, {"SwitchCase": 1, "MemberExpression": 1, "flatTernaryExpressions": true, "ignoredNodes": ["ConditionalExpression"]}],
- "@stylistic/indent-binary-ops": ["error", 0],
- "@stylistic/key-spacing": ["error", {"beforeColon": false, "afterColon": true, "mode": "strict"}],
- "@stylistic/keyword-spacing": ["error", {"before": true, "after": true}],
- "@stylistic/linebreak-style": ["error", "unix"],
- "@stylistic/lines-around-comment": "off",
- "@stylistic/lines-between-class-members": ["error", "always", {"exceptAfterSingleLine": true}],
- "@stylistic/max-len": "off",
- "@stylistic/max-statements-per-line": ["error", {"max": 2}],
- "@stylistic/member-delimiter-style": [
- "error",
- {
- "multiline": {"delimiter": "semi", "requireLast": true},
- "singleline": {"delimiter": "comma", "requireLast": false},
- "multilineDetection": "brackets"
- }
- ],
- "@stylistic/multiline-ternary": ["error", "always-multiline"],
- "@stylistic/new-parens": "error",
- "@stylistic/newline-per-chained-call": ["error", {"ignoreChainWithDepth": 3}],
- "@stylistic/no-confusing-arrow": "error",
- "@stylistic/no-extra-parens": "off",
- "@stylistic/no-extra-semi": "error",
- "@stylistic/no-floating-decimal": "error",
- "@stylistic/no-mixed-operators": ["error", {"allowSamePrecedence": true, "groups": [["&&", "||"]]}],
- "@stylistic/no-mixed-spaces-and-tabs": "error",
- "@stylistic/no-multi-spaces": "error",
- "@stylistic/no-multiple-empty-lines": ["error", {"max": 2, "maxEOF": 0, "maxBOF": 0}],
- "@stylistic/no-tabs": "error",
- "@stylistic/no-trailing-spaces": "error",
- "@stylistic/no-whitespace-before-property": "error",
- "@stylistic/nonblock-statement-body-position": ["error", "beside"],
- "@stylistic/object-curly-newline": "error",
- "@stylistic/object-curly-spacing": ["error", "never"],
- "@stylistic/object-property-newline": ["error", {"allowAllPropertiesOnSameLine": true}],
- "@stylistic/one-var-declaration-per-line": ["error", "initializations"],
- "@stylistic/operator-linebreak": ["error", "after"],
- "@stylistic/padded-blocks": ["error", "never"],
- "@stylistic/padding-line-between-statements": [
- "error",
- {"blankLine": "always", "prev": "*", "next": "import"},
- {"blankLine": "always", "prev": "import", "next": "*"},
- {"blankLine": "always", "prev": "*", "next": "export"},
- {"blankLine": "always", "prev": "import", "next": "let"},
- {"blankLine": "always", "prev": "import", "next": "const"},
- {"blankLine": "always", "prev": "export", "next": "let"},
- {"blankLine": "always", "prev": "export", "next": "const"},
- {"blankLine": "always", "prev": "export", "next": "export"},
- {"blankLine": "always", "prev": "export", "next": "type"},
- {"blankLine": "always", "prev": "type", "next": "export"},
- {"blankLine": "always", "prev": "type", "next": "type"},
- {"blankLine": "never", "prev": "import", "next": "import"}
- ],
- "@stylistic/quote-props": ["error", "consistent-as-needed", {"numbers": true}],
- "@stylistic/quotes": ["error", "single", "avoid-escape"],
- "@stylistic/rest-spread-spacing": ["error", "never"],
- "@stylistic/semi": "error",
- "@stylistic/semi-spacing": ["error", {"before": false, "after": true}],
- "@stylistic/semi-style": ["error", "last"],
- "@stylistic/space-before-blocks": ["error", "always"],
- "@stylistic/space-before-function-paren": ["error", {"anonymous": "never", "named": "never", "asyncArrow": "always"}],
- "@stylistic/space-in-parens": ["error", "never"],
- "@stylistic/space-infix-ops": ["error", {"int32Hint": false}],
- "@stylistic/space-unary-ops": "error",
- "@stylistic/spaced-comment": ["error", "always"],
- "@stylistic/switch-colon-spacing": ["error", {"after": true, "before": false}],
- "@stylistic/template-curly-spacing": ["error", "never"],
- "@stylistic/template-tag-spacing": ["error", "never"],
- "@stylistic/type-annotation-spacing": [
- "error",
- {
- "before": false,
- "after": true,
- "overrides": {
- "arrow": {"before": true, "after": true}
- }
- }
- ],
- "@stylistic/type-generic-spacing": "error",
- "@stylistic/type-named-tuple-spacing": "error",
- "@stylistic/wrap-iife": ["error", "inside"],
- "@stylistic/wrap-regex": "off",
- "@stylistic/yield-star-spacing": ["error", {"before": true, "after": false}],
-
- "no-unsanitized/method": "error",
- "no-unsanitized/property": "error",
-
- "jsdoc/check-access": "error",
- "jsdoc/check-alignment": "error",
- "jsdoc/check-line-alignment": ["error", "never", {"wrapIndent": " "}],
- "jsdoc/check-param-names": "error",
- "jsdoc/check-property-names": "error",
- "jsdoc/check-tag-names": "error",
- "jsdoc/empty-tags": "error",
- "jsdoc/check-types": "error",
- "jsdoc/check-values": "error",
- "jsdoc/implements-on-classes": "error",
- "jsdoc/multiline-blocks": "error",
- "jsdoc/no-bad-blocks": "error",
- "jsdoc/no-multi-asterisks": "error",
- "jsdoc/no-undefined-types": "error",
- "jsdoc/require-asterisk-prefix": "error",
- "jsdoc/require-description": "off",
- "jsdoc/require-hyphen-before-param-description": ["error", "never"],
- "jsdoc/require-jsdoc": [
- "error",
- {
- "require": {
- "ClassDeclaration": false,
- "FunctionDeclaration": true,
- "MethodDefinition": false
- },
- "contexts": [
- "MethodDefinition[kind=constructor]>FunctionExpression>BlockStatement>ExpressionStatement>AssignmentExpression[left.object.type=ThisExpression]",
- "ClassDeclaration>Classbody>PropertyDefinition",
- "MethodDefinition[kind!=constructor][kind!=set]",
- "MethodDefinition[kind=constructor][value.params.length>0]"
- ],
- "checkGetters": "no-setter",
- "checkSetters": "no-getter"
- }
- ],
- "jsdoc/require-param": "error",
- "jsdoc/require-param-description": "off",
- "jsdoc/require-param-name": "error",
- "jsdoc/require-param-type": "error",
- "jsdoc/require-property": "error",
- "jsdoc/require-property-description": "off",
- "jsdoc/require-property-name": "error",
- "jsdoc/require-property-type": "error",
- "jsdoc/require-returns": "error",
- "jsdoc/require-returns-check": "error",
- "jsdoc/require-returns-description": "off",
- "jsdoc/require-returns-type": "error",
- "jsdoc/require-throws": "error",
- "jsdoc/require-yields": "error",
- "jsdoc/require-yields-check": "error",
- "jsdoc/tag-lines": ["error", "never", {"startLines": 0}],
- "jsdoc/valid-types": "error",
-
- "jsonc/indent": ["error", 4],
- "jsonc/array-bracket-newline": ["error", "consistent"],
- "jsonc/array-bracket-spacing": ["error", "never"],
- "jsonc/array-element-newline": ["error", "consistent"],
- "jsonc/comma-style": ["error", "last"],
- "jsonc/key-spacing": ["error", {"beforeColon": false, "afterColon": true, "mode": "strict"}],
- "jsonc/no-octal-escape": "error",
- "jsonc/object-curly-newline": ["error", {"consistent": true}],
- "jsonc/object-curly-spacing": ["error", "never"],
- "jsonc/object-property-newline": ["error", {"allowAllPropertiesOnSameLine": true}],
-
- "eslint-comments/no-unused-disable": "error",
-
- "unused-imports/no-unused-imports": "error",
-
- "import/extensions": ["error", "ignorePackages"],
-
- "unicorn/catch-error-name": ["error", {"ignore": ["^(e|error2?)$"]}],
- "unicorn/custom-error-definition": "error",
- "unicorn/empty-brace-spaces": "error",
- "unicorn/error-message": "error",
- "unicorn/expiring-todo-comments": "error",
- "unicorn/explicit-length-check": "error",
- "unicorn/new-for-builtins": "error",
- "unicorn/no-abusive-eslint-disable": "error",
- "unicorn/no-array-for-each": "error",
- "unicorn/no-array-method-this-argument": "error",
- "unicorn/no-array-push-push": "error",
- "unicorn/no-array-reduce": "error",
- "unicorn/no-console-spaces": "error",
- "unicorn/no-document-cookie": "error",
- "unicorn/no-empty-file": "error",
- "unicorn/no-hex-escape": "error",
- "unicorn/no-instanceof-array": "error",
- "unicorn/no-invalid-remove-event-listener": "error",
- "unicorn/no-lonely-if": "error",
- "unicorn/no-nested-ternary": "error",
- "unicorn/no-new-buffer": "error",
- "unicorn/no-object-as-default-parameter": "error",
- "unicorn/no-static-only-class": "error",
- "unicorn/no-thenable": "error",
- "unicorn/no-unnecessary-await": "error",
- "unicorn/no-unnecessary-polyfills": "error",
- "unicorn/no-unreadable-array-destructuring": "error",
- "unicorn/no-unreadable-iife": "error",
- "unicorn/no-useless-fallback-in-spread": "error",
- "unicorn/no-useless-length-check": "error",
- "unicorn/no-useless-promise-resolve-reject": "error",
- "unicorn/no-useless-spread": "error",
- "unicorn/no-useless-switch-case": "error",
- "unicorn/no-useless-undefined": "error",
- "unicorn/no-zero-fractions": "error",
- "unicorn/prefer-array-find": "error",
- "unicorn/prefer-array-flat": "error",
- "unicorn/prefer-array-flat-map": "error",
- "unicorn/prefer-array-index-of": "error",
- "unicorn/prefer-array-some": "error",
- "unicorn/prefer-date-now": "error",
- "unicorn/prefer-default-parameters": "error",
- "unicorn/prefer-dom-node-dataset": "error",
- "unicorn/prefer-dom-node-text-content": "error",
- "unicorn/prefer-event-target": "error",
- "unicorn/prefer-export-from": "error",
- "unicorn/prefer-includes": "error",
- "unicorn/prefer-keyboard-event-key": "error",
- "unicorn/prefer-logical-operator-over-ternary": "error",
- "unicorn/prefer-modern-math-apis": "error",
- "unicorn/prefer-module": "error",
- "unicorn/prefer-native-coercion-functions": "error",
- "unicorn/prefer-negative-index": "error",
- "unicorn/prefer-number-properties": "error",
- "unicorn/prefer-object-from-entries": "error",
- "unicorn/prefer-prototype-methods": "error",
- "unicorn/prefer-reflect-apply": "error",
- "unicorn/prefer-regexp-test": "error",
- "unicorn/prefer-set-has": "error",
- "unicorn/prefer-set-size": "error",
- "unicorn/prefer-spread": "error",
- "unicorn/prefer-string-starts-ends-with": "error",
- "unicorn/prefer-string-trim-start-end": "error",
- "unicorn/prefer-switch": "error",
- "unicorn/prefer-ternary": "error",
- "unicorn/relative-url-style": "error",
- "unicorn/require-array-join-separator": "error",
- "unicorn/require-number-to-fixed-digits-argument": "error",
- "unicorn/template-indent": "error",
- "unicorn/throw-new-error": "error",
-
- "sonarjs/max-switch-cases": "error",
- "sonarjs/no-all-duplicated-branches": "error",
- "sonarjs/no-collapsible-if": "error",
- "sonarjs/no-collection-size-mischeck": "error",
- "sonarjs/no-duplicated-branches": "error",
- "sonarjs/no-element-overwrite": "error",
- "sonarjs/no-empty-collection": "error",
- "sonarjs/no-extra-arguments": "error",
- "sonarjs/no-gratuitous-expressions": "error",
- "sonarjs/no-identical-conditions": "error",
- "sonarjs/no-identical-expressions": "error",
- "sonarjs/no-identical-functions": "error",
- "sonarjs/no-ignored-return": "error",
- "sonarjs/no-inverted-boolean-check": "error",
- "sonarjs/no-one-iteration-loop": "error",
- "sonarjs/no-redundant-boolean": "error",
- "sonarjs/no-redundant-jump": "error",
- "sonarjs/no-same-line-conditional": "error",
- "sonarjs/no-unused-collection": "error",
- "sonarjs/no-use-of-empty-return-value": "error",
- "sonarjs/no-useless-catch": "error",
- "sonarjs/non-existent-operator": "error",
- "sonarjs/prefer-immediate-return": "error",
- "sonarjs/prefer-object-literal": "error",
- "sonarjs/prefer-single-boolean-return": "error",
- "sonarjs/prefer-while": "error"
- },
- "overrides": [
- {
- "files": [
- "*.js",
- "*.ts"
- ],
- "extends": [
- "plugin:@typescript-eslint/recommended-type-checked"
- ],
- "rules": {
- "@typescript-eslint/no-floating-promises": ["error", {"ignoreIIFE": true}],
- "@typescript-eslint/no-misused-promises": "off",
- "@typescript-eslint/no-redundant-type-constituents": "error",
- "@typescript-eslint/no-unsafe-argument": "error",
- "@typescript-eslint/no-unsafe-assignment": "error",
- "@typescript-eslint/no-unsafe-call": "off",
- "@typescript-eslint/no-unsafe-enum-comparison": "off",
- "@typescript-eslint/no-unsafe-member-access": "off",
- "@typescript-eslint/no-unsafe-return": "off",
- "@typescript-eslint/require-await": "off",
- "@typescript-eslint/restrict-template-expressions": "off",
-
- "@typescript-eslint/ban-ts-comment": ["error", {"ts-expect-error": {"descriptionFormat": "^ - .+$"}}],
- "@typescript-eslint/ban-types": ["error", {"types": {"object": true}, "extendDefaults": true}],
- "@typescript-eslint/no-explicit-any": "error",
- "@typescript-eslint/no-shadow": ["error", {"builtinGlobals": false}],
- "@typescript-eslint/no-this-alias": "error",
- "@typescript-eslint/no-unused-vars": ["error", {"vars": "local", "args": "after-used", "argsIgnorePattern": "^_", "caughtErrors": "none"}]
- }
- },
- {
- "files": [
- "*.ts"
- ],
- "rules": {
- "@stylistic/block-spacing": "off",
- "@stylistic/comma-dangle": [
- "error",
- {
- "arrays": "always-multiline",
- "objects": "always-multiline",
- "imports": "always-multiline",
- "exports": "always-multiline",
- "functions": "always-multiline",
- "enums": "always-multiline",
- "generics": "always-multiline",
- "tuples": "always-multiline"
- }
- ],
- "@stylistic/indent-binary-ops": "off",
- "@stylistic/no-multiple-empty-lines": ["error", {"max": 1, "maxEOF": 0, "maxBOF": 0}],
- "@stylistic/no-extra-parens": ["error", "all"]
- }
- },
- {
- "files": [
- "*.json"
- ],
- "parser": "jsonc-eslint-parser"
- },
- {
- "files": [
- "ext/data/schemas/options-schema.json"
- ],
- "rules": {
- "@stylistic/no-multi-spaces": "off"
- }
- },
- {
- "files": [
- "test/data/anki-note-builder-test-results.json",
- "test/data/database-test-cases.json",
- "test/data/translator-test-results-note-data1.json",
- "test/data/translator-test-results.json"
- ],
- "rules": {
- "jsonc/indent": ["error", 2]
- }
- },
- {
- "files": [
- "test/data/dictionaries/valid-dictionary1/term_bank_1.json",
- "test/data/dictionaries/valid-dictionary1/term_bank_2.json"
- ],
- "rules": {
- "jsonc/array-element-newline": "off",
- "jsonc/object-property-newline": "off"
- }
- },
- {
- "files": [
- "*.js",
- "*.ts"
- ],
- "rules": {
- "header/header": [
- "error",
- "block",
- {
- "pattern": " \\* Copyright \\(C\\) (2023-)?2024 Yomitan Authors(\n \\* Copyright \\(C\\) (20(16|17|18|19|20|21)-)?2022 Yomichan Authors)?\n \\*\n \\* This program is free software: you can redistribute it and/or modify\n \\* it under the terms of the GNU General Public License as published by\n \\* the Free Software Foundation, either version 3 of the License, or\n \\* \\(at your option\\) any later version\\.\n \\*\n \\* This program is distributed in the hope that it will be useful,\n \\* but WITHOUT ANY WARRANTY; without even the implied warranty of\n \\* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\\. See the\n \\* GNU General Public License for more details\\.\n \\*\n \\* You should have received a copy of the GNU General Public License\n \\* along with this program\\. If not, see \\.\n "
- }
- ]
- }
- },
- {
- "files": [
- "ext/**/*.js"
- ],
- "rules": {
- "no-console": "error"
- }
- },
- {
- "files": [
- "test/**/*.js",
- "dev/**/*.js",
- "integration.spec.js",
- "playwright.config.js",
- "playwright-util.js",
- "visual.spec.js"
- ],
- "env": {
- "browser": false,
- "node": true,
- "webextensions": false
- }
- },
- {
- "files": [
- "test/data/html/**/*.js"
- ],
- "parserOptions": {
- "sourceType": "script"
- },
- "env": {
- "browser": true,
- "node": false,
- "webextensions": false
- }
- },
- {
- "files": [
- "test/data/html/**/*.js"
- ],
- "excludedFiles": [
- "test/data/html/js/html-test-utilities.js"
- ],
- "globals": {
- "HtmlTestUtilities": "readonly"
- }
- },
- {
- "files": [
- "test/**/*.test.js"
- ],
- "plugins": [
- "vitest"
- ],
- "extends": [
- "plugin:vitest/recommended"
- ],
- "rules": {
- "vitest/prefer-to-be": "off"
- }
- },
- {
- "files": [
- "dev/lib/**/*.js"
- ],
- "extends": [
- "plugin:@typescript-eslint/disable-type-checked"
- ]
- },
- {
- "files": [
- "ext/js/core/api-map.js",
- "ext/js/core/extension-error.js",
- "ext/js/core/json.js",
- "ext/js/data/anki-note-data-creator.js",
- "ext/js/dictionary/dictionary-data-util.js",
- "ext/js/display/pronunciation-generator.js",
- "ext/js/display/structured-content-generator.js",
- "ext/js/dom/css-style-applier.js",
- "ext/js/language/CJK-util.js",
- "ext/js/language/ja/japanese.js",
- "ext/js/language/text-utilities.js",
- "ext/js/templates/anki-template-renderer-content-manager.js",
- "ext/js/templates/anki-template-renderer.js",
- "ext/js/templates/template-renderer-frame-api.js",
- "ext/js/templates/template-renderer-frame-main.js",
- "ext/js/templates/template-renderer-media-provider.js",
- "ext/js/templates/template-renderer.js"
- ],
- "env": {
- "webextensions": false
- }
- },
- {
- "files": [
- "ext/js/core/event-dispatcher.js",
- "ext/js/core/extension-error.js",
- "ext/js/core/json.js",
- "ext/js/core/log.js",
- "ext/js/core/to-error.js",
- "ext/js/core/utilities.js",
- "ext/js/data/database.js",
- "ext/js/dictionary/dictionary-database.js",
- "ext/js/dictionary/dictionary-importer.js",
- "ext/js/dictionary/dictionary-worker-handler.js",
- "ext/js/dictionary/dictionary-worker-main.js",
- "ext/js/dictionary/dictionary-worker-media-loader.js",
- "ext/js/media/media-util.js"
- ],
- "env": {
- "browser": false,
- "worker": true
- }
- },
- {
- "files": [
- "ext/js/accessibility/accessibility-controller.js",
- "ext/js/background/backend.js",
- "ext/js/background/background-main.js",
- "ext/js/background/offscreen-proxy.js",
- "ext/js/background/profile-conditions-util.js",
- "ext/js/background/request-builder.js",
- "ext/js/background/script-manager.js",
- "ext/js/comm/anki-connect.js",
- "ext/js/comm/clipboard-monitor.js",
- "ext/js/comm/clipboard-reader.js",
- "ext/js/comm/mecab.js",
- "ext/js/core/api-map.js",
- "ext/js/core/event-dispatcher.js",
- "ext/js/core/event-listener-collection.js",
- "ext/js/core/extension-error.js",
- "ext/js/core/fetch-utilities.js",
- "ext/js/core/json.js",
- "ext/js/core/log-utilities.js",
- "ext/js/core/log.js",
- "ext/js/core/object-utilities.js",
- "ext/js/core/to-error.js",
- "ext/js/core/utilities.js",
- "ext/js/data/anki-util.js",
- "ext/js/data/array-buffer-util.js",
- "ext/js/data/database.js",
- "ext/js/data/json-schema.js",
- "ext/js/data/options-util.js",
- "ext/js/data/permissions-util.js",
- "ext/js/dictionary/dictionary-database.js",
- "ext/js/dom/native-simple-dom-parser.js",
- "ext/js/dom/simple-dom-parser.js",
- "ext/js/extension/environment.js",
- "ext/js/extension/web-extension.js",
- "ext/js/general/cache-map.js",
- "ext/js/general/object-property-accessor.js",
- "ext/js/general/regex-util.js",
- "ext/js/language/ar/arabic-text-preprocessors.js",
- "ext/js/language/CJK-util.js",
- "ext/js/language/de/german-text-preprocessors.js",
- "ext/js/language/de/german-transforms.js",
- "ext/js/language/en/english-transforms.js",
- "ext/js/language/es/spanish-transforms.js",
- "ext/js/language/ja/japanese-text-preprocessors.js",
- "ext/js/language/ja/japanese-transforms.js",
- "ext/js/language/ja/japanese-wanakana.js",
- "ext/js/language/ja/japanese.js",
- "ext/js/language/ko/korean-text-processors.js",
- "ext/js/language/ko/korean-transforms.js",
- "ext/js/language/la/latin-transforms.js",
- "ext/js/language/language-descriptors.js",
- "ext/js/language/language-transformer.js",
- "ext/js/language/language-transforms.js",
- "ext/js/language/languages.js",
- "ext/js/language/multi-language-transformer.js",
- "ext/js/language/ru/russian-text-preprocessors.js",
- "ext/js/language/sga/old-irish-transforms.js",
- "ext/js/language/sh/serbo-croatian-text-preprocessors.js",
- "ext/js/language/sq/albanian-transforms.js",
- "ext/js/language/vi/viet-text-preprocessors.js",
- "ext/js/language/tl/tagalog-transforms.js",
- "ext/js/language/text-processors.js",
- "ext/js/language/translator.js",
- "ext/js/language/zh/chinese.js",
- "ext/js/media/audio-downloader.js",
- "ext/js/media/media-util.js",
- "ext/js/templates/template-patcher.js"
- ],
- "env": {
- "browser": false,
- "serviceworker": true
- },
- "globals": {
- "FileReader": "readonly",
- "Intl": "readonly",
- "crypto": "readonly",
- "AbortController": "readonly"
- }
- },
- {
- "files": [
- "ext/data/recommended-dictionaries.json"
- ],
- "rules": {
- "jsonc/sort-keys": ["error", {
- "pathPattern": ".*",
- "hasProperties": ["name"],
- "order": [
- "name",
- "description",
- "homepage",
- "downloadUrl"
- ]
- }, {
- "pathPattern": ".*",
- "order": {
- "type": "asc"
- }
- }]
- }
- }
- ]
-}
diff --git a/eslint.config.mjs b/eslint.config.mjs
new file mode 100644
index 0000000000..a59e36ad55
--- /dev/null
+++ b/eslint.config.mjs
@@ -0,0 +1,901 @@
+import {FlatCompat} from '@eslint/eslintrc';
+import js from '@eslint/js';
+import stylistic from '@stylistic/eslint-plugin';
+import typescriptEslint from '@typescript-eslint/eslint-plugin';
+import tsParser from '@typescript-eslint/parser';
+import header from 'eslint-plugin-header';
+import * as _import from 'eslint-plugin-import';
+import jsdoc from 'eslint-plugin-jsdoc';
+import jsonc from 'eslint-plugin-jsonc';
+import noUnsanitized from 'eslint-plugin-no-unsanitized';
+import sonarjs from 'eslint-plugin-sonarjs';
+import unicorn from 'eslint-plugin-unicorn';
+import unusedImports from 'eslint-plugin-unused-imports';
+import vitest from 'eslint-plugin-vitest';
+import globals from 'globals';
+import parser from 'jsonc-eslint-parser';
+import path from 'node:path';
+import {fileURLToPath} from 'node:url';
+
+const filename = fileURLToPath(import.meta.url);
+const dirname = path.dirname(filename);
+const compat = new FlatCompat({
+ baseDirectory: dirname,
+ recommendedConfig: js.configs.recommended,
+ allConfig: js.configs.all,
+});
+
+export default [{
+ ignores: ['ext/lib/', 'dev/lib/handlebars/', '**/node_modules/', '**/builds/'],
+}, ...compat.extends(
+ 'eslint:recommended',
+ 'plugin:jsonc/recommended-with-json',
+ 'plugin:eslint-comments/recommended',
+), {
+ plugins: {
+ 'no-unsanitized': noUnsanitized,
+ header,
+ jsdoc,
+ jsonc,
+ 'unused-imports': unusedImports,
+ '@typescript-eslint': typescriptEslint,
+ '@stylistic': stylistic,
+ unicorn,
+ sonarjs,
+ 'import': _import,
+ },
+
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ ...globals.webextensions,
+ },
+
+ parser: tsParser,
+ ecmaVersion: 2022,
+ sourceType: 'module',
+
+ parserOptions: {
+ ecmaFeatures: {
+ globalReturn: false,
+ impliedStrict: true,
+ },
+
+ project: [
+ './jsconfig.json',
+ './dev/jsconfig.json',
+ './test/jsconfig.json',
+ './benches/jsconfig.json',
+ ],
+ },
+ },
+
+ rules: {
+ 'accessor-pairs': 'error',
+ 'curly': ['error', 'all'],
+ 'default-case-last': 'error',
+ 'dot-notation': 'error',
+ 'eqeqeq': 'error',
+ 'func-names': ['error', 'always'],
+ 'guard-for-in': 'error',
+ 'grouped-accessor-pairs': 'error',
+ 'new-cap': 'error',
+ 'no-alert': 'error',
+ 'no-case-declarations': 'error',
+ 'no-caller': 'error',
+ 'no-const-assign': 'error',
+
+ 'no-constant-condition': ['error', {
+ checkLoops: false,
+ }],
+
+ 'no-constructor-return': 'error',
+ 'no-duplicate-imports': 'error',
+ 'no-eval': 'error',
+ 'no-extend-native': 'error',
+ 'no-global-assign': 'error',
+ 'no-implicit-globals': 'error',
+ 'no-implied-eval': 'error',
+ 'no-new': 'error',
+ 'no-new-native-nonconstructor': 'error',
+ 'no-octal': 'error',
+ 'no-octal-escape': 'error',
+ 'no-param-reassign': 'off',
+ 'no-promise-executor-return': 'error',
+ 'no-prototype-builtins': 'error',
+
+ 'no-restricted-syntax': ['error', {
+ message: 'Avoid using JSON.parse(), prefer parseJson.',
+ selector: 'MemberExpression[object.name=JSON][property.name=parse]',
+ }, {
+ message: 'Avoid using Response.json(), prefer readResponseJson.',
+ selector: 'MemberExpression[property.name=json]',
+ }],
+
+ 'no-self-compare': 'error',
+ 'no-sequences': 'error',
+
+ 'no-shadow': ['error', {
+ builtinGlobals: false,
+ }],
+
+ 'no-shadow-restricted-names': 'error',
+ 'no-template-curly-in-string': 'error',
+ 'no-undef': 'error',
+ 'no-undefined': 'error',
+
+ 'no-underscore-dangle': ['error', {
+ allowAfterThis: true,
+ allowAfterSuper: false,
+ allowAfterThisConstructor: false,
+ }],
+
+ 'no-unexpected-multiline': 'error',
+ 'no-unneeded-ternary': 'error',
+
+ 'no-unused-vars': ['error', {
+ vars: 'local',
+ args: 'after-used',
+ argsIgnorePattern: '^_',
+ caughtErrors: 'none',
+ }],
+
+ 'no-unused-expressions': 'error',
+ 'no-var': 'error',
+ 'no-with': 'error',
+
+ 'prefer-const': ['error', {
+ destructuring: 'all',
+ }],
+
+ 'radix': 'error',
+ 'require-atomic-updates': 'off',
+ 'sort-imports': 'off',
+ 'yoda': ['error', 'never'],
+ '@stylistic/array-bracket-newline': ['error', 'consistent'],
+ '@stylistic/array-bracket-spacing': ['error', 'never'],
+ '@stylistic/array-element-newline': ['error', 'consistent'],
+ '@stylistic/arrow-parens': ['error', 'always'],
+
+ '@stylistic/arrow-spacing': ['error', {
+ before: true,
+ after: true,
+ }],
+
+ '@stylistic/block-spacing': ['error', 'always'],
+
+ '@stylistic/brace-style': ['error', '1tbs', {
+ allowSingleLine: true,
+ }],
+
+ '@stylistic/comma-dangle': ['error', 'always-multiline'],
+
+ '@stylistic/comma-spacing': ['error', {
+ before: false,
+ after: true,
+ }],
+
+ '@stylistic/comma-style': ['error', 'last'],
+ '@stylistic/computed-property-spacing': ['error', 'never'],
+ '@stylistic/dot-location': ['error', 'property'],
+ '@stylistic/eol-last': ['error', 'always'],
+ '@stylistic/func-call-spacing': ['error', 'never'],
+ '@stylistic/function-call-argument-newline': ['error', 'consistent'],
+ '@stylistic/function-call-spacing': ['error', 'never'],
+ '@stylistic/function-paren-newline': ['error', 'multiline-arguments'],
+ '@stylistic/generator-star-spacing': ['error', 'before'],
+ '@stylistic/implicit-arrow-linebreak': ['error', 'beside'],
+
+ '@stylistic/indent': ['error', 4, {
+ SwitchCase: 1,
+ MemberExpression: 1,
+ flatTernaryExpressions: true,
+ ignoredNodes: ['ConditionalExpression'],
+ }],
+
+ '@stylistic/indent-binary-ops': ['error', 0],
+
+ '@stylistic/key-spacing': ['error', {
+ beforeColon: false,
+ afterColon: true,
+ mode: 'strict',
+ }],
+
+ '@stylistic/keyword-spacing': ['error', {
+ before: true,
+ after: true,
+ }],
+
+ '@stylistic/linebreak-style': ['error', 'unix'],
+ '@stylistic/lines-around-comment': 'off',
+
+ '@stylistic/lines-between-class-members': ['error', 'always', {
+ exceptAfterSingleLine: true,
+ }],
+
+ '@stylistic/max-len': 'off',
+
+ '@stylistic/max-statements-per-line': ['error', {
+ max: 2,
+ }],
+
+ '@stylistic/member-delimiter-style': ['error', {
+ multiline: {
+ delimiter: 'semi',
+ requireLast: true,
+ },
+
+ singleline: {
+ delimiter: 'comma',
+ requireLast: false,
+ },
+
+ multilineDetection: 'brackets',
+ }],
+
+ '@stylistic/multiline-ternary': ['error', 'always-multiline'],
+ '@stylistic/new-parens': 'error',
+
+ '@stylistic/newline-per-chained-call': ['error', {
+ ignoreChainWithDepth: 3,
+ }],
+
+ '@stylistic/no-confusing-arrow': 'error',
+ '@stylistic/no-extra-parens': 'off',
+ '@stylistic/no-extra-semi': 'error',
+ '@stylistic/no-floating-decimal': 'error',
+
+ '@stylistic/no-mixed-operators': ['error', {
+ allowSamePrecedence: true,
+ groups: [['&&', '||']],
+ }],
+
+ '@stylistic/no-mixed-spaces-and-tabs': 'error',
+ '@stylistic/no-multi-spaces': 'error',
+
+ '@stylistic/no-multiple-empty-lines': ['error', {
+ max: 2,
+ maxEOF: 0,
+ maxBOF: 0,
+ }],
+
+ '@stylistic/no-tabs': 'error',
+ '@stylistic/no-trailing-spaces': 'error',
+ '@stylistic/no-whitespace-before-property': 'error',
+ '@stylistic/nonblock-statement-body-position': ['error', 'beside'],
+ '@stylistic/object-curly-newline': 'error',
+ '@stylistic/object-curly-spacing': ['error', 'never'],
+
+ '@stylistic/object-property-newline': ['error', {
+ allowAllPropertiesOnSameLine: true,
+ }],
+
+ '@stylistic/one-var-declaration-per-line': ['error', 'initializations'],
+ '@stylistic/operator-linebreak': ['error', 'after'],
+ '@stylistic/padded-blocks': ['error', 'never'],
+
+ '@stylistic/padding-line-between-statements': ['error', {
+ blankLine: 'always',
+ prev: '*',
+ next: 'import',
+ }, {
+ blankLine: 'always',
+ prev: 'import',
+ next: '*',
+ }, {
+ blankLine: 'always',
+ prev: '*',
+ next: 'export',
+ }, {
+ blankLine: 'always',
+ prev: 'import',
+ next: 'let',
+ }, {
+ blankLine: 'always',
+ prev: 'import',
+ next: 'const',
+ }, {
+ blankLine: 'always',
+ prev: 'export',
+ next: 'let',
+ }, {
+ blankLine: 'always',
+ prev: 'export',
+ next: 'const',
+ }, {
+ blankLine: 'always',
+ prev: 'export',
+ next: 'export',
+ }, {
+ blankLine: 'always',
+ prev: 'export',
+ next: 'type',
+ }, {
+ blankLine: 'always',
+ prev: 'type',
+ next: 'export',
+ }, {
+ blankLine: 'always',
+ prev: 'type',
+ next: 'type',
+ }, {
+ blankLine: 'never',
+ prev: 'import',
+ next: 'import',
+ }],
+
+ '@stylistic/quote-props': ['error', 'consistent-as-needed', {
+ numbers: true,
+ }],
+
+ '@stylistic/quotes': ['error', 'single', 'avoid-escape'],
+ '@stylistic/rest-spread-spacing': ['error', 'never'],
+ '@stylistic/semi': 'error',
+
+ '@stylistic/semi-spacing': ['error', {
+ before: false,
+ after: true,
+ }],
+
+ '@stylistic/semi-style': ['error', 'last'],
+ '@stylistic/space-before-blocks': ['error', 'always'],
+
+ '@stylistic/space-before-function-paren': ['error', {
+ anonymous: 'never',
+ named: 'never',
+ asyncArrow: 'always',
+ }],
+
+ '@stylistic/space-in-parens': ['error', 'never'],
+
+ '@stylistic/space-infix-ops': ['error', {
+ int32Hint: false,
+ }],
+
+ '@stylistic/space-unary-ops': 'error',
+ '@stylistic/spaced-comment': ['error', 'always'],
+
+ '@stylistic/switch-colon-spacing': ['error', {
+ after: true,
+ before: false,
+ }],
+
+ '@stylistic/template-curly-spacing': ['error', 'never'],
+ '@stylistic/template-tag-spacing': ['error', 'never'],
+
+ '@stylistic/type-annotation-spacing': ['error', {
+ before: false,
+ after: true,
+
+ overrides: {
+ arrow: {
+ before: true,
+ after: true,
+ },
+ },
+ }],
+
+ '@stylistic/type-generic-spacing': 'error',
+ '@stylistic/type-named-tuple-spacing': 'error',
+ '@stylistic/wrap-iife': ['error', 'inside'],
+ '@stylistic/wrap-regex': 'off',
+
+ '@stylistic/yield-star-spacing': ['error', {
+ before: true,
+ after: false,
+ }],
+
+ 'no-unsanitized/method': 'error',
+ 'no-unsanitized/property': 'error',
+ 'jsdoc/check-access': 'error',
+ 'jsdoc/check-alignment': 'error',
+
+ 'jsdoc/check-line-alignment': ['error', 'never', {
+ wrapIndent: ' ',
+ }],
+
+ 'jsdoc/check-param-names': 'error',
+ 'jsdoc/check-property-names': 'error',
+ 'jsdoc/check-tag-names': 'error',
+ 'jsdoc/empty-tags': 'error',
+ 'jsdoc/check-types': 'error',
+ 'jsdoc/check-values': 'error',
+ 'jsdoc/implements-on-classes': 'error',
+ 'jsdoc/multiline-blocks': 'error',
+ 'jsdoc/no-bad-blocks': 'error',
+ 'jsdoc/no-multi-asterisks': 'error',
+ 'jsdoc/no-undefined-types': 'error',
+ 'jsdoc/require-asterisk-prefix': 'error',
+ 'jsdoc/require-description': 'off',
+ 'jsdoc/require-hyphen-before-param-description': ['error', 'never'],
+
+ 'jsdoc/require-jsdoc': ['error', {
+ require: {
+ ClassDeclaration: false,
+ FunctionDeclaration: true,
+ MethodDefinition: false,
+ },
+
+ contexts: [
+ 'MethodDefinition[kind=constructor]>FunctionExpression>BlockStatement>ExpressionStatement>AssignmentExpression[left.object.type=ThisExpression]',
+ 'ClassDeclaration>Classbody>PropertyDefinition',
+ 'MethodDefinition[kind!=constructor][kind!=set]',
+ 'MethodDefinition[kind=constructor][value.params.length>0]',
+ ],
+
+ checkGetters: 'no-setter',
+ checkSetters: 'no-getter',
+ }],
+
+ 'jsdoc/require-param': 'error',
+ 'jsdoc/require-param-description': 'off',
+ 'jsdoc/require-param-name': 'error',
+ 'jsdoc/require-param-type': 'error',
+ 'jsdoc/require-property': 'error',
+ 'jsdoc/require-property-description': 'off',
+ 'jsdoc/require-property-name': 'error',
+ 'jsdoc/require-property-type': 'error',
+ 'jsdoc/require-returns': 'error',
+ 'jsdoc/require-returns-check': 'error',
+ 'jsdoc/require-returns-description': 'off',
+ 'jsdoc/require-returns-type': 'error',
+ 'jsdoc/require-throws': 'error',
+ 'jsdoc/require-yields': 'error',
+ 'jsdoc/require-yields-check': 'error',
+
+ 'jsdoc/tag-lines': ['error', 'never', {
+ startLines: 0,
+ }],
+
+ 'jsdoc/valid-types': 'error',
+ 'jsonc/indent': ['error', 4],
+ 'jsonc/array-bracket-newline': ['error', 'consistent'],
+ 'jsonc/array-bracket-spacing': ['error', 'never'],
+ 'jsonc/array-element-newline': ['error', 'consistent'],
+ 'jsonc/comma-style': ['error', 'last'],
+
+ 'jsonc/key-spacing': ['error', {
+ beforeColon: false,
+ afterColon: true,
+ mode: 'strict',
+ }],
+
+ 'jsonc/no-octal-escape': 'error',
+
+ 'jsonc/object-curly-newline': ['error', {
+ consistent: true,
+ }],
+
+ 'jsonc/object-curly-spacing': ['error', 'never'],
+
+ 'jsonc/object-property-newline': ['error', {
+ allowAllPropertiesOnSameLine: true,
+ }],
+
+ 'eslint-comments/no-unused-disable': 'error',
+ 'unused-imports/no-unused-imports': 'error',
+ 'import/extensions': ['error', 'ignorePackages'],
+
+ 'unicorn/catch-error-name': ['error', {
+ ignore: ['^(e|error2?)$'],
+ }],
+
+ 'unicorn/custom-error-definition': 'error',
+ 'unicorn/empty-brace-spaces': 'error',
+ 'unicorn/error-message': 'error',
+ 'unicorn/expiring-todo-comments': 'error',
+ 'unicorn/explicit-length-check': 'error',
+ 'unicorn/new-for-builtins': 'error',
+ 'unicorn/no-abusive-eslint-disable': 'error',
+ 'unicorn/no-array-for-each': 'error',
+ 'unicorn/no-array-method-this-argument': 'error',
+ 'unicorn/no-array-push-push': 'error',
+ 'unicorn/no-array-reduce': 'error',
+ 'unicorn/no-console-spaces': 'error',
+ 'unicorn/no-document-cookie': 'error',
+ 'unicorn/no-empty-file': 'error',
+ 'unicorn/no-hex-escape': 'error',
+ 'unicorn/no-instanceof-array': 'error',
+ 'unicorn/no-invalid-remove-event-listener': 'error',
+ 'unicorn/no-lonely-if': 'error',
+ 'unicorn/no-nested-ternary': 'error',
+ 'unicorn/no-new-buffer': 'error',
+ 'unicorn/no-object-as-default-parameter': 'error',
+ 'unicorn/no-static-only-class': 'error',
+ 'unicorn/no-thenable': 'error',
+ 'unicorn/no-unnecessary-await': 'error',
+ 'unicorn/no-unnecessary-polyfills': 'error',
+ 'unicorn/no-unreadable-array-destructuring': 'error',
+ 'unicorn/no-unreadable-iife': 'error',
+ 'unicorn/no-useless-fallback-in-spread': 'error',
+ 'unicorn/no-useless-length-check': 'error',
+ 'unicorn/no-useless-promise-resolve-reject': 'error',
+ 'unicorn/no-useless-spread': 'error',
+ 'unicorn/no-useless-switch-case': 'error',
+ 'unicorn/no-useless-undefined': 'error',
+ 'unicorn/no-zero-fractions': 'error',
+ 'unicorn/prefer-array-find': 'error',
+ 'unicorn/prefer-array-flat': 'error',
+ 'unicorn/prefer-array-flat-map': 'error',
+ 'unicorn/prefer-array-index-of': 'error',
+ 'unicorn/prefer-array-some': 'error',
+ 'unicorn/prefer-date-now': 'error',
+ 'unicorn/prefer-default-parameters': 'error',
+ 'unicorn/prefer-dom-node-dataset': 'error',
+ 'unicorn/prefer-dom-node-text-content': 'error',
+ 'unicorn/prefer-event-target': 'error',
+ 'unicorn/prefer-export-from': 'error',
+ 'unicorn/prefer-includes': 'error',
+ 'unicorn/prefer-keyboard-event-key': 'error',
+ 'unicorn/prefer-logical-operator-over-ternary': 'error',
+ 'unicorn/prefer-modern-math-apis': 'error',
+ 'unicorn/prefer-module': 'error',
+ 'unicorn/prefer-native-coercion-functions': 'error',
+ 'unicorn/prefer-negative-index': 'error',
+ 'unicorn/prefer-number-properties': 'error',
+ 'unicorn/prefer-object-from-entries': 'error',
+ 'unicorn/prefer-prototype-methods': 'error',
+ 'unicorn/prefer-reflect-apply': 'error',
+ 'unicorn/prefer-regexp-test': 'error',
+ 'unicorn/prefer-set-has': 'error',
+ 'unicorn/prefer-set-size': 'error',
+ 'unicorn/prefer-spread': 'error',
+ 'unicorn/prefer-string-starts-ends-with': 'error',
+ 'unicorn/prefer-string-trim-start-end': 'error',
+ 'unicorn/prefer-switch': 'error',
+ 'unicorn/prefer-ternary': 'error',
+ 'unicorn/relative-url-style': 'error',
+ 'unicorn/require-array-join-separator': 'error',
+ 'unicorn/require-number-to-fixed-digits-argument': 'error',
+ 'unicorn/template-indent': 'error',
+ 'unicorn/throw-new-error': 'error',
+ 'sonarjs/max-switch-cases': 'error',
+ 'sonarjs/no-all-duplicated-branches': 'error',
+ 'sonarjs/no-collapsible-if': 'error',
+ 'sonarjs/no-collection-size-mischeck': 'error',
+ 'sonarjs/no-duplicated-branches': 'error',
+ 'sonarjs/no-element-overwrite': 'error',
+ 'sonarjs/no-empty-collection': 'error',
+ 'sonarjs/no-extra-arguments': 'error',
+ 'sonarjs/no-gratuitous-expressions': 'error',
+ 'sonarjs/no-identical-conditions': 'error',
+ 'sonarjs/no-identical-expressions': 'error',
+ 'sonarjs/no-identical-functions': 'error',
+ 'sonarjs/no-ignored-return': 'error',
+ 'sonarjs/no-inverted-boolean-check': 'error',
+ 'sonarjs/no-one-iteration-loop': 'error',
+ 'sonarjs/no-redundant-boolean': 'error',
+ 'sonarjs/no-redundant-jump': 'error',
+ 'sonarjs/no-same-line-conditional': 'error',
+ 'sonarjs/no-unused-collection': 'error',
+ 'sonarjs/no-use-of-empty-return-value': 'error',
+ 'sonarjs/no-useless-catch': 'error',
+ 'sonarjs/non-existent-operator': 'error',
+ 'sonarjs/prefer-immediate-return': 'error',
+ 'sonarjs/prefer-object-literal': 'error',
+ 'sonarjs/prefer-single-boolean-return': 'error',
+ 'sonarjs/prefer-while': 'error',
+ },
+}, ...compat.extends('plugin:@typescript-eslint/recommended-type-checked').map((config) => ({
+ ...config,
+ files: ['**/*.js', '**/*.ts'],
+})), {
+ files: ['**/*.js', '**/*.ts'],
+
+ rules: {
+ '@typescript-eslint/no-floating-promises': ['error', {
+ ignoreIIFE: true,
+ }],
+
+ '@typescript-eslint/no-misused-promises': 'off',
+ '@typescript-eslint/no-redundant-type-constituents': 'error',
+ '@typescript-eslint/no-unsafe-argument': 'error',
+ '@typescript-eslint/no-unsafe-assignment': 'error',
+ '@typescript-eslint/no-unsafe-call': 'off',
+ '@typescript-eslint/no-unsafe-enum-comparison': 'off',
+ '@typescript-eslint/no-unsafe-member-access': 'off',
+ '@typescript-eslint/no-unsafe-return': 'off',
+ '@typescript-eslint/require-await': 'off',
+ '@typescript-eslint/restrict-template-expressions': 'off',
+
+ '@typescript-eslint/ban-ts-comment': ['error', {
+ 'ts-expect-error': {
+ descriptionFormat: '^ - .+$',
+ },
+ }],
+
+ '@typescript-eslint/ban-types': ['error', {
+ types: {
+ object: true,
+ },
+
+ extendDefaults: true,
+ }],
+
+ '@typescript-eslint/no-explicit-any': 'error',
+
+ '@typescript-eslint/no-shadow': ['error', {
+ builtinGlobals: false,
+ }],
+
+ '@typescript-eslint/no-this-alias': 'error',
+
+ '@typescript-eslint/no-unused-vars': ['error', {
+ vars: 'local',
+ args: 'after-used',
+ argsIgnorePattern: '^_',
+ caughtErrors: 'none',
+ }],
+ },
+}, {
+ files: ['**/*.ts'],
+
+ rules: {
+ '@stylistic/block-spacing': 'off',
+
+ '@stylistic/comma-dangle': ['error', {
+ arrays: 'always-multiline',
+ objects: 'always-multiline',
+ imports: 'always-multiline',
+ exports: 'always-multiline',
+ functions: 'always-multiline',
+ enums: 'always-multiline',
+ generics: 'always-multiline',
+ tuples: 'always-multiline',
+ }],
+
+ '@stylistic/indent-binary-ops': 'off',
+
+ '@stylistic/no-multiple-empty-lines': ['error', {
+ max: 1,
+ maxEOF: 0,
+ maxBOF: 0,
+ }],
+
+ '@stylistic/no-extra-parens': ['error', 'all'],
+ },
+}, {
+ files: ['**/*.json'],
+
+ languageOptions: {
+ parser: parser,
+ },
+}, {
+ files: ['ext/data/schemas/options-schema.json'],
+
+ rules: {
+ '@stylistic/no-multi-spaces': 'off',
+ },
+}, {
+ files: [
+ 'test/data/anki-note-builder-test-results.json',
+ 'test/data/database-test-cases.json',
+ 'test/data/translator-test-results-note-data1.json',
+ 'test/data/translator-test-results.json',
+ ],
+
+ rules: {
+ 'jsonc/indent': ['error', 2],
+ },
+}, {
+ files: [
+ 'test/data/dictionaries/valid-dictionary1/term_bank_1.json',
+ 'test/data/dictionaries/valid-dictionary1/term_bank_2.json',
+ ],
+
+ rules: {
+ 'jsonc/array-element-newline': 'off',
+ 'jsonc/object-property-newline': 'off',
+ },
+}, {
+ files: ['**/*.js', '**/*.ts'],
+
+ rules: {
+ 'header/header': ['error', 'block', {
+ pattern: ' \\* Copyright \\(C\\) (2023-)?2024 Yomitan Authors(\n \\* Copyright \\(C\\) (20(16|17|18|19|20|21)-)?2022 Yomichan Authors)?\n \\*\n \\* This program is free software: you can redistribute it and/or modify\n \\* it under the terms of the GNU General Public License as published by\n \\* the Free Software Foundation, either version 3 of the License, or\n \\* \\(at your option\\) any later version\\.\n \\*\n \\* This program is distributed in the hope that it will be useful,\n \\* but WITHOUT ANY WARRANTY; without even the implied warranty of\n \\* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE\\. See the\n \\* GNU General Public License for more details\\.\n \\*\n \\* You should have received a copy of the GNU General Public License\n \\* along with this program\\. If not, see \\.\n ',
+ }],
+ },
+}, {
+ files: ['ext/**/*.js'],
+
+ rules: {
+ 'no-console': 'error',
+ },
+}, {
+ files: [
+ 'test/**/*.js',
+ 'dev/**/*.js',
+ '**/integration.spec.js',
+ '**/playwright.config.js',
+ '**/playwright-util.js',
+ '**/visual.spec.js',
+ ],
+
+ languageOptions: {
+ globals: {
+ ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])),
+ ...globals.node,
+ ...Object.fromEntries(Object.entries(globals.webextensions).map(([key]) => [key, 'off'])),
+ },
+ },
+}, {
+ files: ['test/data/html/**/*.js'],
+
+ languageOptions: {
+ globals: {
+ ...globals.browser,
+ ...Object.fromEntries(Object.entries(globals.node).map(([key]) => [key, 'off'])),
+ ...Object.fromEntries(Object.entries(globals.webextensions).map(([key]) => [key, 'off'])),
+ },
+
+ ecmaVersion: 5,
+ sourceType: 'script',
+ },
+}, {
+ files: ['test/data/html/**/*.js'],
+ ignores: ['test/data/html/js/html-test-utilities.js'],
+
+ languageOptions: {
+ globals: {
+ HtmlTestUtilities: 'readonly',
+ },
+ },
+}, ...compat.extends('plugin:vitest/recommended').map((config) => ({
+ ...config,
+ files: ['test/**/*.test.js'],
+ plugins: {
+ vitest,
+ },
+
+ rules: {
+ 'vitest/prefer-to-be': 'off',
+ },
+})), ...compat.extends('plugin:@typescript-eslint/disable-type-checked').map((config) => ({
+ ...config,
+ files: ['dev/lib/**/*.js'],
+})), {
+ files: [
+ 'ext/js/core/api-map.js',
+ 'ext/js/core/extension-error.js',
+ 'ext/js/core/json.js',
+ 'ext/js/data/anki-note-data-creator.js',
+ 'ext/js/dictionary/dictionary-data-util.js',
+ 'ext/js/display/pronunciation-generator.js',
+ 'ext/js/display/structured-content-generator.js',
+ 'ext/js/dom/css-style-applier.js',
+ 'ext/js/language/CJK-util.js',
+ 'ext/js/language/ja/japanese.js',
+ 'ext/js/language/text-utilities.js',
+ 'ext/js/templates/anki-template-renderer-content-manager.js',
+ 'ext/js/templates/anki-template-renderer.js',
+ 'ext/js/templates/template-renderer-frame-api.js',
+ 'ext/js/templates/template-renderer-frame-main.js',
+ 'ext/js/templates/template-renderer-media-provider.js',
+ 'ext/js/templates/template-renderer.js',
+ ],
+
+ languageOptions: {
+ globals: {
+ ...Object.fromEntries(Object.entries(globals.webextensions).map(([key]) => [key, 'off'])),
+ },
+ },
+}, {
+ files: [
+ 'ext/js/core/event-dispatcher.js',
+ 'ext/js/core/extension-error.js',
+ 'ext/js/core/json.js',
+ 'ext/js/core/log.js',
+ 'ext/js/core/to-error.js',
+ 'ext/js/core/utilities.js',
+ 'ext/js/data/database.js',
+ 'ext/js/dictionary/dictionary-database.js',
+ 'ext/js/dictionary/dictionary-importer.js',
+ 'ext/js/dictionary/dictionary-worker-handler.js',
+ 'ext/js/dictionary/dictionary-worker-main.js',
+ 'ext/js/dictionary/dictionary-worker-media-loader.js',
+ 'ext/js/media/media-util.js',
+ ],
+
+ languageOptions: {
+ globals: {
+ ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])),
+ ...globals.worker,
+ },
+ },
+}, {
+ files: [
+ 'ext/js/accessibility/accessibility-controller.js',
+ 'ext/js/background/backend.js',
+ 'ext/js/background/background-main.js',
+ 'ext/js/background/offscreen-proxy.js',
+ 'ext/js/background/profile-conditions-util.js',
+ 'ext/js/background/request-builder.js',
+ 'ext/js/background/script-manager.js',
+ 'ext/js/comm/anki-connect.js',
+ 'ext/js/comm/clipboard-monitor.js',
+ 'ext/js/comm/clipboard-reader.js',
+ 'ext/js/comm/mecab.js',
+ 'ext/js/core/api-map.js',
+ 'ext/js/core/event-dispatcher.js',
+ 'ext/js/core/event-listener-collection.js',
+ 'ext/js/core/extension-error.js',
+ 'ext/js/core/fetch-utilities.js',
+ 'ext/js/core/json.js',
+ 'ext/js/core/log-utilities.js',
+ 'ext/js/core/log.js',
+ 'ext/js/core/object-utilities.js',
+ 'ext/js/core/to-error.js',
+ 'ext/js/core/utilities.js',
+ 'ext/js/data/anki-util.js',
+ 'ext/js/data/array-buffer-util.js',
+ 'ext/js/data/database.js',
+ 'ext/js/data/json-schema.js',
+ 'ext/js/data/options-util.js',
+ 'ext/js/data/permissions-util.js',
+ 'ext/js/dictionary/dictionary-database.js',
+ 'ext/js/dom/native-simple-dom-parser.js',
+ 'ext/js/dom/simple-dom-parser.js',
+ 'ext/js/extension/environment.js',
+ 'ext/js/extension/web-extension.js',
+ 'ext/js/general/cache-map.js',
+ 'ext/js/general/object-property-accessor.js',
+ 'ext/js/general/regex-util.js',
+ 'ext/js/language/ar/arabic-text-preprocessors.js',
+ 'ext/js/language/CJK-util.js',
+ 'ext/js/language/de/german-text-preprocessors.js',
+ 'ext/js/language/de/german-transforms.js',
+ 'ext/js/language/en/english-transforms.js',
+ 'ext/js/language/es/spanish-transforms.js',
+ 'ext/js/language/ja/japanese-text-preprocessors.js',
+ 'ext/js/language/ja/japanese-transforms.js',
+ 'ext/js/language/ja/japanese-wanakana.js',
+ 'ext/js/language/ja/japanese.js',
+ 'ext/js/language/ko/korean-text-processors.js',
+ 'ext/js/language/ko/korean-transforms.js',
+ 'ext/js/language/la/latin-transforms.js',
+ 'ext/js/language/language-descriptors.js',
+ 'ext/js/language/language-transformer.js',
+ 'ext/js/language/language-transforms.js',
+ 'ext/js/language/languages.js',
+ 'ext/js/language/multi-language-transformer.js',
+ 'ext/js/language/ru/russian-text-preprocessors.js',
+ 'ext/js/language/sga/old-irish-transforms.js',
+ 'ext/js/language/sh/serbo-croatian-text-preprocessors.js',
+ 'ext/js/language/sq/albanian-transforms.js',
+ 'ext/js/language/vi/viet-text-preprocessors.js',
+ 'ext/js/language/tl/tagalog-transforms.js',
+ 'ext/js/language/text-processors.js',
+ 'ext/js/language/translator.js',
+ 'ext/js/language/zh/chinese.js',
+ 'ext/js/media/audio-downloader.js',
+ 'ext/js/media/media-util.js',
+ 'ext/js/templates/template-patcher.js',
+ ],
+
+ languageOptions: {
+ globals: {
+ ...Object.fromEntries(Object.entries(globals.browser).map(([key]) => [key, 'off'])),
+ ...globals.serviceworker,
+ FileReader: 'readonly',
+ Intl: 'readonly',
+ crypto: 'readonly',
+ AbortController: 'readonly',
+ },
+ },
+}, {
+ files: ['ext/data/recommended-dictionaries.json'],
+
+ rules: {
+ 'jsonc/sort-keys': ['error', {
+ pathPattern: '.*',
+ hasProperties: ['name'],
+ order: ['name', 'description', 'homepage', 'downloadUrl'],
+ }, {
+ pathPattern: '.*',
+
+ order: {
+ type: 'asc',
+ },
+ }],
+ },
+}];
diff --git a/jsconfig.json b/jsconfig.json
index 4ab1310628..4ae65b4c90 100644
--- a/jsconfig.json
+++ b/jsconfig.json
@@ -3,7 +3,7 @@
"module": "ES2022",
"target": "ES2022",
"checkJs": true,
- "moduleResolution": "node",
+ "moduleResolution": "Bundler",
"strict": true,
"strictNullChecks": true,
"noImplicitAny": true,
@@ -30,7 +30,8 @@
"include": [
"ext/**/*.js",
"types/ext/**/*.ts",
- "types/other/globals.d.ts"
+ "types/other/globals.d.ts",
+ "eslint.config.mjs"
],
"exclude": [
"node_modules",
diff --git a/package-lock.json b/package-lock.json
index 26aa8e8724..1b5102905e 100644
--- a/package-lock.json
+++ b/package-lock.json
@@ -9,7 +9,6 @@
"version": "0.0.0",
"license": "GPL-3.0-or-later",
"dependencies": {
- "@typescript-eslint/typescript-estree": "^8.11.0",
"@zip.js/zip.js": "^2.7.45",
"dexie": "^3.2.5",
"dexie-export-import": "^4.1.2",
@@ -937,10 +936,11 @@
}
},
"node_modules/@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": "^12.0.0 || ^14.0.0 || >=16.0.0"
}
@@ -1172,6 +1172,7 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
"dependencies": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -1184,6 +1185,7 @@
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
"integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true,
"engines": {
"node": ">= 8"
}
@@ -1192,6 +1194,7 @@
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
"dependencies": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -1554,6 +1557,32 @@
"eslint": "*"
}
},
+ "node_modules/@stylistic/eslint-plugin-plus/node_modules/@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/@stylistic/eslint-plugin-ts": {
"version": "1.6.3",
"resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin-ts/-/eslint-plugin-ts-1.6.3.tgz",
@@ -1571,6 +1600,32 @@
"eslint": ">=8.40.0"
}
},
+ "node_modules/@stylistic/eslint-plugin-ts/node_modules/@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/@stylistic/stylelint-plugin": {
"version": "2.1.2",
"resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.1.2.tgz",
@@ -1760,10 +1815,11 @@
"dev": true
},
"node_modules/@types/semver": {
- "version": "7.5.6",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
- "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
- "dev": true
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
+ "dev": true,
+ "license": "MIT"
},
"node_modules/@types/tough-cookie": {
"version": "4.0.5",
@@ -1839,6 +1895,34 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
+ "node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/type-utils": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
+ "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ },
+ "engines": {
+ "node": "^18.18.0 || >=20.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^8.56.0"
+ },
+ "peerDependenciesMeta": {
+ "typescript": {
+ "optional": true
+ }
+ }
+ },
"node_modules/@typescript-eslint/eslint-plugin/node_modules/@typescript-eslint/types": {
"version": "7.18.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
@@ -2088,6 +2172,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.21.0.tgz",
"integrity": "sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "6.21.0",
"@typescript-eslint/visitor-keys": "6.21.0"
@@ -2100,283 +2185,21 @@
"url": "https://opencollective.com/typescript-eslint"
}
},
- "node_modules/@typescript-eslint/type-utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
- "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/typescript-estree": "7.18.0",
- "@typescript-eslint/utils": "7.18.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/scope-manager": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
- "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/types": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
- "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
- "dev": true,
- "license": "MIT",
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/typescript-estree": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
- "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
- "dev": true,
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
- "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^8.56.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/@typescript-eslint/visitor-keys": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
- "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "7.18.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || >=20.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/type-utils/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
"node_modules/@typescript-eslint/types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
"integrity": "sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==",
"dev": true,
- "engines": {
- "node": "^16.0.0 || >=18.0.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz",
- "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==",
- "license": "BSD-2-Clause",
- "dependencies": {
- "@typescript-eslint/types": "8.11.0",
- "@typescript-eslint/visitor-keys": "8.11.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependenciesMeta": {
- "typescript": {
- "optional": true
- }
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/types": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz",
- "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw==",
"license": "MIT",
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/@typescript-eslint/visitor-keys": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz",
- "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==",
- "license": "MIT",
- "dependencies": {
- "@typescript-eslint/types": "8.11.0",
- "eslint-visitor-keys": "^3.4.3"
- },
- "engines": {
- "node": "^18.18.0 || ^20.9.0 || >=21.1.0"
- },
- "funding": {
- "type": "opencollective",
- "url": "https://opencollective.com/typescript-eslint"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "license": "MIT",
- "dependencies": {
- "balanced-match": "^1.0.0"
- }
- },
- "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "license": "ISC",
- "dependencies": {
- "brace-expansion": "^2.0.1"
- },
- "engines": {
- "node": ">=16 || 14 >=14.17"
- },
- "funding": {
- "url": "https://github.com/sponsors/isaacs"
- }
- },
- "node_modules/@typescript-eslint/utils": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
- "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
- "dev": true,
- "dependencies": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.21.0",
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "semver": "^7.5.4"
- },
"engines": {
"node": "^16.0.0 || >=18.0.0"
},
"funding": {
"type": "opencollective",
"url": "https://opencollective.com/typescript-eslint"
- },
- "peerDependencies": {
- "eslint": "^7.0.0 || ^8.0.0"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/@typescript-eslint/typescript-estree": {
+ "node_modules/@typescript-eslint/typescript-estree": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
"integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
@@ -2405,7 +2228,7 @@
}
}
},
- "node_modules/@typescript-eslint/utils/node_modules/brace-expansion": {
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
"integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
@@ -2415,7 +2238,7 @@
"balanced-match": "^1.0.0"
}
},
- "node_modules/@typescript-eslint/utils/node_modules/minimatch": {
+ "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": {
"version": "9.0.3",
"resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.3.tgz",
"integrity": "sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==",
@@ -2436,6 +2259,7 @@
"resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.21.0.tgz",
"integrity": "sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"@typescript-eslint/types": "6.21.0",
"eslint-visitor-keys": "^3.4.1"
@@ -2452,7 +2276,8 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz",
"integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==",
- "dev": true
+ "dev": true,
+ "license": "ISC"
},
"node_modules/@vitest/coverage-v8": {
"version": "1.2.2",
@@ -2601,10 +2426,11 @@
}
},
"node_modules/acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true,
+ "license": "MIT",
"bin": {
"acorn": "bin/acorn"
},
@@ -3925,6 +3751,7 @@
"resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz",
"integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==",
"dev": true,
+ "license": "Apache-2.0",
"dependencies": {
"esutils": "^2.0.2"
},
@@ -4625,6 +4452,32 @@
}
}
},
+ "node_modules/eslint-plugin-vitest/node_modules/@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "license": "MIT",
+ "dependencies": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ },
+ "engines": {
+ "node": "^16.0.0 || >=18.0.0"
+ },
+ "funding": {
+ "type": "opencollective",
+ "url": "https://opencollective.com/typescript-eslint"
+ },
+ "peerDependencies": {
+ "eslint": "^7.0.0 || ^8.0.0"
+ }
+ },
"node_modules/eslint-rule-composer": {
"version": "0.3.0",
"resolved": "https://registry.npmjs.org/eslint-rule-composer/-/eslint-rule-composer-0.3.0.tgz",
@@ -4639,6 +4492,7 @@
"resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz",
"integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"esrecurse": "^4.3.0",
"estraverse": "^5.2.0"
@@ -4654,6 +4508,7 @@
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
"integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true,
"engines": {
"node": "^12.22.0 || ^14.17.0 || >=16.0.0"
},
@@ -4666,6 +4521,7 @@
"resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz",
"integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"fast-deep-equal": "^3.1.1",
"fast-json-stable-stringify": "^2.0.0",
@@ -4681,7 +4537,8 @@
"version": "0.4.1",
"resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz",
"integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==",
- "dev": true
+ "dev": true,
+ "license": "MIT"
},
"node_modules/espree": {
"version": "9.6.1",
@@ -4717,6 +4574,7 @@
"resolved": "https://registry.npmjs.org/esrecurse/-/esrecurse-4.3.0.tgz",
"integrity": "sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==",
"dev": true,
+ "license": "BSD-2-Clause",
"dependencies": {
"estraverse": "^5.2.0"
},
@@ -4817,6 +4675,7 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
"dependencies": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -4832,6 +4691,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
"dependencies": {
"is-glob": "^4.0.1"
},
@@ -4871,6 +4731,7 @@
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
"dependencies": {
"reusify": "^1.0.4"
}
@@ -4880,6 +4741,7 @@
"resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz",
"integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flat-cache": "^3.0.4"
},
@@ -4964,6 +4826,7 @@
"resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz",
"integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==",
"dev": true,
+ "license": "MIT",
"dependencies": {
"flatted": "^3.2.9",
"keyv": "^4.5.3",
@@ -5989,6 +5852,7 @@
"resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz",
"integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==",
"dev": true,
+ "license": "MIT",
"engines": {
"node": ">=8"
}
@@ -6978,6 +6842,7 @@
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
"integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true,
"engines": {
"node": ">= 8"
}
@@ -6986,6 +6851,7 @@
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
"license": "MIT",
"dependencies": {
"braces": "^3.0.3",
@@ -7866,6 +7732,7 @@
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
"integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -8256,6 +8123,7 @@
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
"integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true,
"engines": {
"iojs": ">=1.0.0",
"node": ">=0.10.0"
@@ -8344,6 +8212,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
"funding": [
{
"type": "github",
@@ -8439,6 +8308,7 @@
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
"integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true,
"bin": {
"semver": "bin/semver.js"
},
@@ -9399,6 +9269,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "dev": true,
"engines": {
"node": ">=16"
},
@@ -9613,6 +9484,7 @@
"version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
"integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+ "dev": true,
"license": "Apache-2.0",
"bin": {
"tsc": "bin/tsc",
@@ -10859,9 +10731,9 @@
}
},
"@eslint-community/regexpp": {
- "version": "4.10.0",
- "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz",
- "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==",
+ "version": "4.12.1",
+ "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz",
+ "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==",
"dev": true
},
"@eslint/eslintrc": {
@@ -11034,6 +10906,7 @@
"version": "2.1.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz",
"integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==",
+ "dev": true,
"requires": {
"@nodelib/fs.stat": "2.0.5",
"run-parallel": "^1.1.9"
@@ -11042,12 +10915,14 @@
"@nodelib/fs.stat": {
"version": "2.0.5",
"resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz",
- "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A=="
+ "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==",
+ "dev": true
},
"@nodelib/fs.walk": {
"version": "1.2.8",
"resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz",
"integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==",
+ "dev": true,
"requires": {
"@nodelib/fs.scandir": "2.1.5",
"fastq": "^1.6.0"
@@ -11263,6 +11138,23 @@
"requires": {
"@types/eslint": "^8.56.2",
"@typescript-eslint/utils": "^6.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ }
+ }
}
},
"@stylistic/eslint-plugin-ts": {
@@ -11274,6 +11166,23 @@
"@stylistic/eslint-plugin-js": "1.6.3",
"@types/eslint": "^8.56.2",
"@typescript-eslint/utils": "^6.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ }
+ }
}
},
"@stylistic/stylelint-plugin": {
@@ -11456,9 +11365,9 @@
"dev": true
},
"@types/semver": {
- "version": "7.5.6",
- "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz",
- "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==",
+ "version": "7.5.8",
+ "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz",
+ "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==",
"dev": true
},
"@types/tough-cookie": {
@@ -11509,6 +11418,18 @@
"@typescript-eslint/visitor-keys": "7.18.0"
}
},
+ "@typescript-eslint/type-utils": {
+ "version": "7.18.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
+ "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
+ "dev": true,
+ "requires": {
+ "@typescript-eslint/typescript-estree": "7.18.0",
+ "@typescript-eslint/utils": "7.18.0",
+ "debug": "^4.3.4",
+ "ts-api-utils": "^1.3.0"
+ }
+ },
"@typescript-eslint/types": {
"version": "7.18.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
@@ -11658,92 +11579,6 @@
"@typescript-eslint/visitor-keys": "6.21.0"
}
},
- "@typescript-eslint/type-utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-7.18.0.tgz",
- "integrity": "sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/typescript-estree": "7.18.0",
- "@typescript-eslint/utils": "7.18.0",
- "debug": "^4.3.4",
- "ts-api-utils": "^1.3.0"
- },
- "dependencies": {
- "@typescript-eslint/scope-manager": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.18.0.tgz",
- "integrity": "sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0"
- }
- },
- "@typescript-eslint/types": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.18.0.tgz",
- "integrity": "sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==",
- "dev": true
- },
- "@typescript-eslint/typescript-estree": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.18.0.tgz",
- "integrity": "sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/visitor-keys": "7.18.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- }
- },
- "@typescript-eslint/utils": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.18.0.tgz",
- "integrity": "sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==",
- "dev": true,
- "requires": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@typescript-eslint/scope-manager": "7.18.0",
- "@typescript-eslint/types": "7.18.0",
- "@typescript-eslint/typescript-estree": "7.18.0"
- }
- },
- "@typescript-eslint/visitor-keys": {
- "version": "7.18.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.18.0.tgz",
- "integrity": "sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "7.18.0",
- "eslint-visitor-keys": "^3.4.3"
- }
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "dev": true,
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "dev": true,
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
"@typescript-eslint/types": {
"version": "6.21.0",
"resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.21.0.tgz",
@@ -11751,83 +11586,21 @@
"dev": true
},
"@typescript-eslint/typescript-estree": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.11.0.tgz",
- "integrity": "sha512-yHC3s1z1RCHoCz5t06gf7jH24rr3vns08XXhfEqzYpd6Hll3z/3g23JRi0jM8A47UFKNc3u/y5KIMx8Ynbjohg==",
- "requires": {
- "@typescript-eslint/types": "8.11.0",
- "@typescript-eslint/visitor-keys": "8.11.0",
- "debug": "^4.3.4",
- "fast-glob": "^3.3.2",
- "is-glob": "^4.0.3",
- "minimatch": "^9.0.4",
- "semver": "^7.6.0",
- "ts-api-utils": "^1.3.0"
- },
- "dependencies": {
- "@typescript-eslint/types": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.11.0.tgz",
- "integrity": "sha512-tn6sNMHf6EBAYMvmPUaKaVeYvhUsrE6x+bXQTxjQRp360h1giATU0WvgeEys1spbvb5R+VpNOZ+XJmjD8wOUHw=="
- },
- "@typescript-eslint/visitor-keys": {
- "version": "8.11.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.11.0.tgz",
- "integrity": "sha512-EaewX6lxSjRJnc+99+dqzTeoDZUfyrA52d2/HRrkI830kgovWsmIiTfmr0NZorzqic7ga+1bS60lRBUgR3n/Bw==",
- "requires": {
- "@typescript-eslint/types": "8.11.0",
- "eslint-visitor-keys": "^3.4.3"
- }
- },
- "brace-expansion": {
- "version": "2.0.1",
- "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
- "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==",
- "requires": {
- "balanced-match": "^1.0.0"
- }
- },
- "minimatch": {
- "version": "9.0.5",
- "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz",
- "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==",
- "requires": {
- "brace-expansion": "^2.0.1"
- }
- }
- }
- },
- "@typescript-eslint/utils": {
"version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
- "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
+ "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
"dev": true,
"requires": {
- "@eslint-community/eslint-utils": "^4.4.0",
- "@types/json-schema": "^7.0.12",
- "@types/semver": "^7.5.0",
- "@typescript-eslint/scope-manager": "6.21.0",
"@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/typescript-estree": "6.21.0",
- "semver": "^7.5.4"
+ "@typescript-eslint/visitor-keys": "6.21.0",
+ "debug": "^4.3.4",
+ "globby": "^11.1.0",
+ "is-glob": "^4.0.3",
+ "minimatch": "9.0.3",
+ "semver": "^7.5.4",
+ "ts-api-utils": "^1.0.1"
},
"dependencies": {
- "@typescript-eslint/typescript-estree": {
- "version": "6.21.0",
- "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.21.0.tgz",
- "integrity": "sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==",
- "dev": true,
- "requires": {
- "@typescript-eslint/types": "6.21.0",
- "@typescript-eslint/visitor-keys": "6.21.0",
- "debug": "^4.3.4",
- "globby": "^11.1.0",
- "is-glob": "^4.0.3",
- "minimatch": "9.0.3",
- "semver": "^7.5.4",
- "ts-api-utils": "^1.0.1"
- }
- },
"brace-expansion": {
"version": "2.0.1",
"resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz",
@@ -11972,9 +11745,9 @@
}
},
"acorn": {
- "version": "8.11.3",
- "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz",
- "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==",
+ "version": "8.14.0",
+ "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz",
+ "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==",
"dev": true
},
"acorn-jsx": {
@@ -13443,6 +13216,23 @@
"dev": true,
"requires": {
"@typescript-eslint/utils": "^6.21.0"
+ },
+ "dependencies": {
+ "@typescript-eslint/utils": {
+ "version": "6.21.0",
+ "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.21.0.tgz",
+ "integrity": "sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==",
+ "dev": true,
+ "requires": {
+ "@eslint-community/eslint-utils": "^4.4.0",
+ "@types/json-schema": "^7.0.12",
+ "@types/semver": "^7.5.0",
+ "@typescript-eslint/scope-manager": "6.21.0",
+ "@typescript-eslint/types": "6.21.0",
+ "@typescript-eslint/typescript-estree": "6.21.0",
+ "semver": "^7.5.4"
+ }
+ }
}
},
"eslint-rule-composer": {
@@ -13464,7 +13254,8 @@
"eslint-visitor-keys": {
"version": "3.4.3",
"resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz",
- "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag=="
+ "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==",
+ "dev": true
},
"espree": {
"version": "9.6.1",
@@ -13569,6 +13360,7 @@
"version": "3.3.2",
"resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz",
"integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==",
+ "dev": true,
"requires": {
"@nodelib/fs.stat": "^2.0.2",
"@nodelib/fs.walk": "^1.2.3",
@@ -13581,6 +13373,7 @@
"version": "5.1.2",
"resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz",
"integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==",
+ "dev": true,
"requires": {
"is-glob": "^4.0.1"
}
@@ -13615,6 +13408,7 @@
"version": "1.15.0",
"resolved": "https://registry.npmjs.org/fastq/-/fastq-1.15.0.tgz",
"integrity": "sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==",
+ "dev": true,
"requires": {
"reusify": "^1.0.4"
}
@@ -15111,12 +14905,14 @@
"merge2": {
"version": "1.4.1",
"resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz",
- "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg=="
+ "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==",
+ "dev": true
},
"micromatch": {
"version": "4.0.8",
"resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz",
"integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==",
+ "dev": true,
"requires": {
"braces": "^3.0.3",
"picomatch": "^2.3.1"
@@ -15717,7 +15513,8 @@
"queue-microtask": {
"version": "1.2.3",
"resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz",
- "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A=="
+ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==",
+ "dev": true
},
"quick-lru": {
"version": "5.1.1",
@@ -16000,7 +15797,8 @@
"reusify": {
"version": "1.0.4",
"resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz",
- "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw=="
+ "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==",
+ "dev": true
},
"rfdc": {
"version": "1.3.1",
@@ -16066,6 +15864,7 @@
"version": "1.2.0",
"resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz",
"integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==",
+ "dev": true,
"requires": {
"queue-microtask": "^1.2.2"
}
@@ -16130,7 +15929,8 @@
"semver": {
"version": "7.6.2",
"resolved": "https://registry.npmjs.org/semver/-/semver-7.6.2.tgz",
- "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w=="
+ "integrity": "sha512-FNAIBWCx9qcRhoHcgcJ0gvU7SN1lYU2ZXuSfl04bSC5OpvDHFyJCjdNHomPXxjQlCBU67YW64PzY7/VIEH7F2w==",
+ "dev": true
},
"sentence-case": {
"version": "3.0.4",
@@ -16864,6 +16664,7 @@
"version": "1.3.0",
"resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz",
"integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==",
+ "dev": true,
"requires": {}
},
"ts-json-schema-generator": {
@@ -17024,7 +16825,8 @@
"typescript": {
"version": "5.4.5",
"resolved": "https://registry.npmjs.org/typescript/-/typescript-5.4.5.tgz",
- "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ=="
+ "integrity": "sha512-vcI4UpRgg81oIRUFwR0WSIHKt11nJ7SAVlYNIu+QpqeyXP+gpQJy/Z4+F0aGxSE4MqwjyXvW/TzgkLAx2AGHwQ==",
+ "dev": true
},
"ua-parser-js": {
"version": "0.7.37",