From e8e7266305b257f3482030ed80a39d388aed1720 Mon Sep 17 00:00:00 2001 From: Mu-Tsun Tsai Date: Sat, 24 Aug 2024 00:24:25 +0800 Subject: [PATCH 1/2] Migrate to eslint v9 --- .eslintignore | 2 - .eslintrc.json | 445 ---------- .vscode/settings.json | 4 +- .vscode/typescript.code-snippets | 4 +- e2e/.eslintrc.json | 62 -- eslint-local-rules.js | 127 +-- eslint.config.mjs | 512 +++++++++++ gulp/plugins/order.js | 1 - gulp/tasks/app.js | 4 +- gulp/tasks/html.js | 2 +- gulp/tasks/pixi.js | 1 - package.json | 24 +- pnpm-lock.yaml | 815 ++++++++---------- src/.eslintrc.json | 81 -- src/app/.eslintrc.json | 5 - src/app/vue/.eslintrc.json | 40 - src/app/vue/gadgets/form/input.ts | 2 +- src/app/vue/toolbar/helpMenu.vue | 1 - src/app/vue/welcome.vue | 1 - src/client/.eslintrc.json | 19 - src/client/project/components/layout/river.ts | 1 - src/client/project/project.ts | 2 +- src/client/screen/display.ts | 2 - src/core/.eslintrc.json | 24 - src/core/design/context/aabb/aabb.ts | 1 - .../layout/joiner/logic/standardJoinLogic.ts | 1 - src/core/design/layout/pattern/gadget.ts | 1 - src/core/math/fraction.ts | 1 - src/core/math/geometry/line.ts | 1 - src/other/donate/.eslintrc.json | 49 -- src/other/donate/paypal.ts | 28 +- src/other/service/.eslintrc.json | 5 - src/public/.eslintrc.json | 12 - src/public/donate.htm | 4 +- src/public/index.htm | 76 +- src/shared/data/.eslintrc.json | 5 - src/shared/data/heap/ternaryHeap.ts | 1 - src/shared/polyfill/.eslintrc.json | 5 - test/.eslintrc.json | 67 -- test/specs/junction.spec.ts | 1 - test/specs/pattern/searching.spec.ts | 1 - test/specs/pattern/threeFlap.spec.ts | 2 +- test/specs/tree.spec.ts | 1 - tools/polyBool/index.ts | 1 - 44 files changed, 1034 insertions(+), 1410 deletions(-) delete mode 100644 .eslintignore delete mode 100644 .eslintrc.json delete mode 100644 e2e/.eslintrc.json create mode 100644 eslint.config.mjs delete mode 100644 src/.eslintrc.json delete mode 100644 src/app/.eslintrc.json delete mode 100644 src/app/vue/.eslintrc.json delete mode 100644 src/client/.eslintrc.json delete mode 100644 src/core/.eslintrc.json delete mode 100644 src/other/donate/.eslintrc.json delete mode 100644 src/other/service/.eslintrc.json delete mode 100644 src/public/.eslintrc.json delete mode 100644 src/shared/data/.eslintrc.json delete mode 100644 src/shared/polyfill/.eslintrc.json delete mode 100644 test/.eslintrc.json diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index d0ed69c8..00000000 --- a/.eslintignore +++ /dev/null @@ -1,2 +0,0 @@ -build/**/* -lib/**/* diff --git a/.eslintrc.json b/.eslintrc.json deleted file mode 100644 index 241b5e55..00000000 --- a/.eslintrc.json +++ /dev/null @@ -1,445 +0,0 @@ -{ - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/recommended" - ], - "globals": { - "globalThis": false - }, - "parser": "@typescript-eslint/parser", - "parserOptions": { - "ecmaVersion": "latest" - }, - "plugins": [ - "@typescript-eslint", - "@stylistic", - "eslint-plugin-local-rules" - ], - "env": { - "node": true, - "es2022": true - }, - "rules": { - "@stylistic/array-bracket-newline": [ - "warn", - "consistent" - ], - "@stylistic/array-bracket-spacing": "warn", - "@stylistic/arrow-spacing": "warn", - "@stylistic/block-spacing": "warn", - "@stylistic/brace-style": [ - "warn", - "1tbs", - { - "allowSingleLine": true - } - ], - "@stylistic/comma-dangle": [ - "warn", - { - "arrays": "always-multiline", - "enums": "always-multiline", - "exports": "never", - "functions": "never", - "imports": "never", - "objects": "always-multiline" - } - ], - "@stylistic/comma-spacing": "warn", - "@stylistic/comma-style": "warn", - "@stylistic/computed-property-spacing": "warn", - "@stylistic/dot-location": [ - "warn", - "property" - ], - "@stylistic/eol-last": "warn", - "@stylistic/func-call-spacing": [ - "warn", - "never" - ], - "@stylistic/generator-star-spacing": [ - "warn", - { - "after": true, - "anonymous": "neither", - "before": false, - "method": { - "after": false, - "before": true - } - } - ], - "@stylistic/jsx-quotes": "warn", - "@stylistic/key-spacing": [ - "warn", - { - "afterColon": true, - "mode": "strict" - } - ], - "@stylistic/linebreak-style": "warn", - "@stylistic/max-len": [ - "warn", - { - "code": 120, - "ignoreComments": true, - "ignoreStrings": true, - "ignoreTemplateLiterals": true, - "tabWidth": 4 - } - ], - "@stylistic/max-statements-per-line": [ - "warn", - { - "max": 2 - } - ], - "@stylistic/member-delimiter-style": [ - "warn", - { - "singleline": { - "delimiter": "comma", - "requireLast": false - } - } - ], - "@stylistic/new-parens": "warn", - "@stylistic/no-extra-parens": "warn", - "@stylistic/no-floating-decimal": "warn", - "@stylistic/no-mixed-spaces-and-tabs": [ - "warn", - "smart-tabs" - ], - "@stylistic/no-multi-spaces": "warn", - "@stylistic/no-multiple-empty-lines": "warn", - "@stylistic/no-trailing-spaces": "warn", - "@stylistic/no-whitespace-before-property": "warn", - "@stylistic/nonblock-statement-body-position": "warn", - "@stylistic/object-curly-newline": "warn", - "@stylistic/object-curly-spacing": [ - "warn", - "always" - ], - "@stylistic/operator-linebreak": [ - "warn", - "after" - ], - "@stylistic/padded-blocks": "off", - "@stylistic/padding-line-between-statements": "warn", - "@stylistic/quotes": [ - "warn", - "double", - { - "allowTemplateLiterals": true, - "avoidEscape": true - } - ], - "@stylistic/rest-spread-spacing": "warn", - "@stylistic/semi": [ - "warn" - ], - "@stylistic/semi-spacing": "warn", - "@stylistic/semi-style": "warn", - "@stylistic/space-before-blocks": "warn", - "@stylistic/space-before-function-paren": [ - "warn", - { - "anonymous": "never", - "asyncArrow": "always", - "named": "never" - } - ], - "@stylistic/space-in-parens": "warn", - "@stylistic/space-infix-ops": [ - "warn", - { - "int32Hint": false - } - ], - "@stylistic/space-unary-ops": "warn", - "@stylistic/switch-colon-spacing": "warn", - "@stylistic/template-curly-spacing": "warn", - "@stylistic/template-tag-spacing": "warn", - "@stylistic/type-annotation-spacing": [ - "warn", - { - "after": true, - "before": false, - "overrides": { - "arrow": { - "before": true - } - } - } - ], - "@stylistic/wrap-iife": [ - "warn", - "inside" - ], - "@stylistic/wrap-regex": "warn", - "@stylistic/yield-star-spacing": "warn", - "@typescript-eslint/ban-ts-comment": "off", - "@typescript-eslint/ban-types": "off", - "@typescript-eslint/class-methods-use-this": [ - "warn", - { - "ignoreOverrideMethods": true, - "ignoreClassesThatImplementAnInterface": "public-fields" - } - ], - "@typescript-eslint/no-empty-function": "warn", - "@typescript-eslint/no-empty-interface": "off", - "@typescript-eslint/no-explicit-any": [ - "warn", - { - "ignoreRestArgs": true - } - ], - "@typescript-eslint/no-inferrable-types": "off", - "@typescript-eslint/no-invalid-this": "error", - "@typescript-eslint/no-loop-func": [ - "warn" - ], - "@typescript-eslint/no-magic-numbers": [ - "warn", - { - "ignore": [ - -1, - 0, - 1, - 2 - ], - "ignoreArrayIndexes": true, - "ignoreDefaultValues": true, - "ignoreEnums": true, - "ignoreNumericLiteralTypes": true, - "ignoreReadonlyClassProperties": true - } - ], - "@typescript-eslint/no-namespace": "off", - "@typescript-eslint/no-non-null-assertion": "off", - "@typescript-eslint/no-shadow": "warn", - "@typescript-eslint/no-this-alias": [ - "warn", - { - "allowDestructuring": true, - "allowedNames": [ - "cursor" - ] - } - ], - "@typescript-eslint/no-unused-expressions": "warn", - "@typescript-eslint/no-unused-vars": "off", - "@typescript-eslint/no-useless-constructor": [ - "warn" - ], - "@typescript-eslint/no-var-requires": "off", - "@typescript-eslint/triple-slash-reference": "off", - "accessor-pairs": "off", - "array-callback-return": "warn", - "arrow-body-style": "warn", - "block-scoped-var": "warn", - "camelcase": "off", - "capitalized-comments": "off", - "class-methods-use-this": "off", // see ts - "complexity": "warn", - "consistent-return": "off", - "consistent-this": "off", - "curly": [ - "warn", - "multi-line", - "consistent" - ], - "default-case": "warn", - "default-case-last": "warn", - "default-param-last": "warn", - "dot-notation": "warn", - "eqeqeq": "off", - "func-name-matching": "warn", - "func-names": "off", - "func-style": "off", - "grouped-accessor-pairs": "warn", - "guard-for-in": "off", - "id-denylist": "warn", - "id-length": "off", - "id-match": "warn", - "init-declarations": "off", - "line-comment-position": "off", - "local-rules/ascii-comments": "error", - "local-rules/single-line-control-statement-spacing": "warn", - "max-classes-per-file": "warn", - "max-depth": "warn", - "max-lines": [ - "warn", - { - "skipBlankLines": true, - "skipComments": true - } - ], - "max-lines-per-function": [ - "warn", - { - "skipComments": true - } - ], - "max-nested-callbacks": "warn", - "max-params": [ - "warn", - 6 - ], - "max-statements": "off", - "multiline-comment-style": "off", - "new-cap": "warn", - "no-alert": "warn", - "no-array-constructor": "warn", - "no-await-in-loop": "warn", - "no-bitwise": "off", - "no-caller": "warn", - "no-cond-assign": "off", - "no-console": "off", - "no-constant-condition": [ - "warn", - { - "checkLoops": false - } - ], - "no-constructor-return": "warn", - "no-continue": "off", - "no-debugger": "off", - "no-div-regex": "warn", - "no-duplicate-imports": "warn", - "no-else-return": "off", - "no-empty": [ - "warn", - { - "allowEmptyCatch": true - } - ], - "no-empty-function": "off", // see ts - "no-eq-null": "off", - "no-eval": "warn", - "no-extend-native": "warn", - "no-extra-bind": "warn", - "no-extra-label": "warn", - "no-implicit-coercion": "warn", - "no-implicit-globals": "warn", - "no-implied-eval": "warn", - "no-inline-comments": "off", - "no-inner-declarations": "off", - "no-invalid-this": "off", // see ts - "no-irregular-whitespace": "error", - "no-iterator": "warn", - "no-label-var": "warn", - "no-labels": "error", - "no-lone-blocks": "warn", - "no-lonely-if": "off", - "no-loop-func": "off", // see ts - "no-loss-of-precision": "off", - "no-magic-numbers": "off", // see ts - "no-multi-assign": "off", - "no-multi-str": "error", - "no-negated-condition": "off", - "no-nested-ternary": "warn", - "no-new": "off", - "no-new-func": "warn", - "no-new-object": "warn", - "no-new-wrappers": "warn", - "no-nonoctal-decimal-escape": "warn", - "no-octal-escape": "warn", - "no-param-reassign": "off", - "no-plusplus": "off", - "no-promise-executor-return": "off", - "no-proto": "warn", - "no-restricted-exports": "warn", - "no-restricted-globals": "warn", - "no-restricted-imports": "warn", - "no-restricted-properties": "warn", - "no-restricted-syntax": "warn", - "no-return-assign": "off", - "no-return-await": "off", - "no-script-url": "warn", - "no-self-compare": "warn", - "no-sequences": "warn", - "no-shadow": "off", // see ts - "no-template-curly-in-string": "warn", - "no-ternary": "off", - "no-this-before-super": "error", - "no-throw-literal": "warn", - "no-undef-init": "warn", - "no-undefined": "off", - "no-underscore-dangle": "off", - "no-unexpected-multiline": "error", - "no-unmodified-loop-condition": "warn", - "no-unneeded-ternary": "warn", - "no-unreachable-loop": "warn", - "no-unsafe-optional-chaining": "warn", - "no-unused-expressions": "off", - "no-use-before-define": "off", - "no-useless-backreference": "warn", - "no-useless-call": "warn", - "no-useless-computed-key": "warn", - "no-useless-concat": "warn", - "no-useless-constructor": "off", // see ts - "no-useless-rename": "warn", - "no-useless-return": "warn", - "no-var": "warn", - "no-void": "warn", - "no-warning-comments": "off", - "no-with": "error", - "object-shorthand": "warn", - "one-var": "off", - "one-var-declaration-per-line": "off", - "operator-assignment": "warn", - "prefer-arrow-callback": "warn", - "prefer-const": "warn", - "prefer-destructuring": "off", - "prefer-exponentiation-operator": "warn", - "prefer-named-capture-group": "off", - "prefer-numeric-literals": "warn", - "prefer-object-spread": "off", - "prefer-promise-reject-errors": "off", - "prefer-regex-literals": "warn", - "prefer-rest-params": "warn", - "prefer-spread": "off", - "prefer-template": "off", - "radix": "off", - "require-atomic-updates": "warn", - "require-await": "warn", - "require-unicode-regexp": "off", - "sort-imports": [ - "warn", - { - "allowSeparatedGroups": true - } - ], - "sort-keys": "off", - "sort-vars": "off", - "strict": "warn", - "symbol-description": "warn", - "unicode-bom": "warn", - "vars-on-top": "warn", - "yoda": [ - "warn", - "never", - { - "onlyEquality": true - } - ] - }, - "overrides": [ - { - "files": [ - "*.ts", - "*.vue" - ], - "rules": { - "@typescript-eslint/explicit-function-return-type": [ - "warn", - { - "allowExpressions": true - } - ] - } - } - ] -} \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json index 83ca6ab4..47dd8210 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -92,7 +92,7 @@ "*.js": "$(capture).prod.js, $(capture).min.js, $(capture).js.map", "*.woff2": "$(capture).eot, $(capture).svg, $(capture).ttf, $(capture).woff", ".*rc.json": ".$(capture)ignore", - ".eslintrc.json": "eslint-local-rules.js", + "eslint.config.mjs": "eslint-local-rules.js", ".gitignore": ".gitattributes", "package.json": "pnpm-lock.yaml, .npmrc" }, @@ -129,4 +129,4 @@ "vue" ], "typescript.tsdk": "node_modules\\typescript\\lib" -} \ No newline at end of file +} diff --git a/.vscode/typescript.code-snippets b/.vscode/typescript.code-snippets index c106284f..c062a0c6 100644 --- a/.vscode/typescript.code-snippets +++ b/.vscode/typescript.code-snippets @@ -6,7 +6,7 @@ "// $1", "/////////////////////////////////////////////////////////////////////////////////////////////////////" ], - "scope": "typescript" + "scope": "typescript,javascript" }, "Doc": { "prefix": "doc", @@ -17,6 +17,6 @@ " */", "//=================================================================" ], - "scope": "typescript" + "scope": "typescript,javascript" } } diff --git a/e2e/.eslintrc.json b/e2e/.eslintrc.json deleted file mode 100644 index ee3f9555..00000000 --- a/e2e/.eslintrc.json +++ /dev/null @@ -1,62 +0,0 @@ -{ - "extends": [ - "plugin:import/typescript" - ], - "plugins": [ - "import" - ], - "rules": { - "@typescript-eslint/consistent-type-imports": [ - "warn", - { - "prefer": "type-imports" - } - ], - "@typescript-eslint/explicit-function-return-type": [ - "warn", - { - "allowFunctionsWithoutTypeParameters": true - } - ], - "@typescript-eslint/no-invalid-this": "off", - "@typescript-eslint/no-magic-numbers": "off", - "@typescript-eslint/no-unused-expressions": "off", - "import/consistent-type-specifier-style": [ - "warn", - "prefer-top-level" - ], - "import/no-duplicates": "warn", - "import/order": [ - "warn", - { - "groups": [ - [ - "builtin", - "external" - ], - [ - "internal", - "parent", - "sibling", - "index", - "object" - ], - "type" - ], - "newlines-between": "always" - } - ], - "max-classes-per-file": "off", - "max-lines-per-function": "off", - "no-duplicate-imports": "off", - "prefer-arrow-callback": "off", - "sort-imports": "off" - }, - "settings": { - "import/resolver": { - "typescript": { - "project": "e2e" - } - } - } -} \ No newline at end of file diff --git a/eslint-local-rules.js b/eslint-local-rules.js index 65aec0ff..5283610f 100644 --- a/eslint-local-rules.js +++ b/eslint-local-rules.js @@ -1,74 +1,75 @@ - module.exports = { - "ascii-comments": { - meta: { - type: "layout", - docs: { - description: "Comments should use ASCII characters only.", + rules: { + "ascii-comments": { + meta: { + type: "layout", + docs: { + description: "Comments should use ASCII characters only.", + }, }, - }, - create(context) { - const sourceCode = context.getSourceCode(); - return { - Program() { - for(const comment of sourceCode.getAllComments()) { - const match = (/[^\s!-~]+/m).exec(comment.value); - if(match) { - const start = comment.range[0]; - context.report({ - loc: { - start: sourceCode.getLocFromIndex(start + 2 + match.index), - end: sourceCode.getLocFromIndex(start + 2 + match.index + match[0].length), - }, - message: "Comments should use ASCII characters only.", - }); + create(context) { + const sourceCode = context.getSourceCode(); + return { + Program() { + for(const comment of sourceCode.getAllComments()) { + const match = (/[^\s!-~]+/m).exec(comment.value); + if(match) { + const start = comment.range[0]; + context.report({ + loc: { + start: sourceCode.getLocFromIndex(start + 2 + match.index), + end: sourceCode.getLocFromIndex(start + 2 + match.index + match[0].length), + }, + message: "Comments should use ASCII characters only.", + }); + } } - } - }, - }; - }, - }, - "single-line-control-statement-spacing": { - meta: { - type: "layout", - docs: { - description: "Enforces consistent spacing in single-line control statements.", + }, + }; }, - fixable: "whitespace", }, - create(context) { - const sourceCode = context.getSourceCode(); + "single-line-control-statement-spacing": { + meta: { + type: "layout", + docs: { + description: "Enforces consistent spacing in single-line control statements.", + }, + fixable: "whitespace", + }, + create(context) { + const sourceCode = context.getSourceCode(); - function checkSpaceAfter(node) { - if(!node) return; - if(node.loc.start.line !== node.loc.end.line) return; // Not single-line - const body = node.consequent || node.body; - const token = sourceCode.getFirstToken(body); - const prev = sourceCode.getTokenBefore(token); - const start = prev.range[1]; - const end = token.range[0]; - if(start === end) { - context.report({ - loc: { - start: sourceCode.getLocFromIndex(start), - end: sourceCode.getLocFromIndex(end), - }, - message: "There should be a single space after control statements.", - fix(fixer) { - return fixer.replaceTextRange([start, end], " "); - }, - }); + function checkSpaceAfter(node) { + if(!node) return; + if(node.loc.start.line !== node.loc.end.line) return; // Not single-line + const body = node.consequent || node.body; + const token = sourceCode.getFirstToken(body); + const prev = sourceCode.getTokenBefore(token); + const start = prev.range[1]; + const end = token.range[0]; + if(start === end) { + context.report({ + loc: { + start: sourceCode.getLocFromIndex(start), + end: sourceCode.getLocFromIndex(end), + }, + message: "There should be a single space after control statements.", + fix(fixer) { + return fixer.replaceTextRange([start, end], " "); + }, + }); + } } - } - return { - IfStatement: checkSpaceAfter, - DoWhileStatement: checkSpaceAfter, - ForInStatement: checkSpaceAfter, - ForOfStatement: checkSpaceAfter, - ForStatement: checkSpaceAfter, - WhileStatement: checkSpaceAfter, - }; + return { + IfStatement: checkSpaceAfter, + DoWhileStatement: checkSpaceAfter, + ForInStatement: checkSpaceAfter, + ForOfStatement: checkSpaceAfter, + ForStatement: checkSpaceAfter, + WhileStatement: checkSpaceAfter, + }; + }, }, }, }; diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..7ebf4d2a --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,512 @@ +import { FlatCompat } from "@eslint/eslintrc"; +import { fileURLToPath } from "url"; +import { fixupPluginRules } from "@eslint/compat"; +import path from "path"; +import globals from "globals"; +import pluginCompat from "eslint-plugin-compat"; +import pluginHtml from "eslint-plugin-html"; +import pluginJs from "@eslint/js"; +import pluginJsDoc from "eslint-plugin-jsdoc"; +import pluginMocha from "eslint-plugin-mocha"; +import pluginTs from "typescript-eslint"; +import pluginVue from "eslint-plugin-vue"; +import stylistic from "@mutsuntsai/stylistic"; + +import pluginLocal from "./eslint-local-rules.js"; + +const __filename = fileURLToPath(import.meta.url); +const __dirname = path.dirname(__filename); +const compat = new FlatCompat({ baseDirectory: __dirname }); +function legacyPlugin(name, alias = name) { + const plugin = compat.plugins(name)[0]?.plugins?.[alias]; + if(!plugin) throw new Error(`Unable to resolve plugin ${name} and/or alias ${alias}`); + return fixupPluginRules(plugin); +} + +export default [ + { + name: "Global ignores", + ignores: ["{build,lib,coverage}/**"], + }, + { + name: "Matching file extensions", + files: ["**/*.{ts,vue,htm}"], + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // General rules + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + pluginJs.configs.recommended, + ...pluginTs.configs.recommended, + ...stylistic, + { + name: "General:TypeScript", + files: ["**/*.{ts,vue}"], + rules: { + "@typescript-eslint/class-methods-use-this": ["warn", { + ignoreOverrideMethods: true, + ignoreClassesThatImplementAnInterface: "public-fields", + }], + "@typescript-eslint/no-empty-function": "warn", + "@typescript-eslint/no-empty-object-type": ["warn", { allowInterfaces: "always" }], + "@typescript-eslint/no-explicit-any": ["warn", { ignoreRestArgs: true }], + "@typescript-eslint/no-invalid-this": "error", + "@typescript-eslint/no-loop-func": ["warn"], + "@typescript-eslint/no-magic-numbers": ["warn", { + ignore: [-1, 0, 1, 2], + ignoreArrayIndexes: true, + ignoreDefaultValues: true, + ignoreEnums: true, + ignoreNumericLiteralTypes: true, + ignoreReadonlyClassProperties: true, + }], + "@typescript-eslint/no-shadow": "warn", + "@typescript-eslint/no-this-alias": ["warn", { + allowDestructuring: true, + allowedNames: ["cursor"], + }], + "@typescript-eslint/no-unsafe-declaration-merging": "off", + "@typescript-eslint/no-unused-expressions": "warn", + "@typescript-eslint/no-useless-constructor": ["warn"], + "no-undef": "off", // This is redundant as TypeScript catches things that are really undefined + }, + }, + { + name: "Local rules", + plugins: { + "local-rules": pluginLocal, + }, + rules: { + "local-rules/ascii-comments": "error", + "local-rules/single-line-control-statement-spacing": "warn", + }, + }, + { + name: "General rules", + rules: { + "@typescript-eslint/ban-ts-comment": "off", + "@typescript-eslint/ban-types": "off", + "@typescript-eslint/no-empty-interface": "off", + "@typescript-eslint/no-inferrable-types": "off", + "@typescript-eslint/no-namespace": "off", + "@typescript-eslint/no-non-null-assertion": "off", + "@typescript-eslint/no-unused-vars": "off", + "@typescript-eslint/no-var-requires": "off", + "@typescript-eslint/triple-slash-reference": "off", + "accessor-pairs": "off", + "array-callback-return": "warn", + "arrow-body-style": "warn", + "block-scoped-var": "warn", + "camelcase": "off", + "capitalized-comments": "off", + "class-methods-use-this": "off", + "complexity": "warn", + "consistent-return": "off", + "consistent-this": "off", + "curly": ["warn", "multi-line", "consistent"], + "default-case": "warn", + "default-case-last": "warn", + "default-param-last": "warn", + "dot-notation": "warn", + "eqeqeq": "off", + "func-name-matching": "warn", + "func-names": "off", + "func-style": "off", + "grouped-accessor-pairs": "warn", + "guard-for-in": "off", + "id-denylist": "warn", + "id-length": "off", + "id-match": "warn", + "init-declarations": "off", + "line-comment-position": "off", + "max-classes-per-file": "warn", + "max-depth": "warn", + "max-lines": ["warn", { skipBlankLines: true, skipComments: true }], + "max-lines-per-function": ["warn", { skipComments: true }], + "max-nested-callbacks": "warn", + "max-params": ["warn", 6], + "max-statements": "off", + "multiline-comment-style": "off", + "new-cap": "warn", + "no-alert": "warn", + "no-array-constructor": "warn", + "no-await-in-loop": "warn", + "no-bitwise": "off", + "no-caller": "warn", + "no-cond-assign": "off", + "no-console": "off", + "no-constant-binary-expression": "off", + "no-constant-condition": ["warn", { checkLoops: false }], + "no-constructor-return": "warn", + "no-continue": "off", + "no-debugger": "off", + "no-div-regex": "warn", + "no-duplicate-imports": "warn", + "no-else-return": "off", + "no-empty": ["warn", { allowEmptyCatch: true }], + "no-empty-function": "off", + "no-eq-null": "off", + "no-eval": "warn", + "no-extend-native": "warn", + "no-extra-bind": "warn", + "no-extra-label": "warn", + "no-implicit-coercion": "warn", + "no-implied-eval": "warn", + "no-inline-comments": "off", + "no-inner-declarations": "off", + "no-invalid-this": "off", + "no-irregular-whitespace": "error", + "no-iterator": "warn", + "no-label-var": "warn", + "no-labels": "error", + "no-lone-blocks": "warn", + "no-lonely-if": "off", + "no-loop-func": "off", + "no-loss-of-precision": "off", + "no-magic-numbers": "off", + "no-multi-assign": "off", + "no-multi-str": "error", + "no-negated-condition": "off", + "no-nested-ternary": "warn", + "no-new": "off", + "no-new-func": "warn", + "no-new-object": "warn", + "no-new-wrappers": "warn", + "no-nonoctal-decimal-escape": "warn", + "no-octal-escape": "warn", + "no-param-reassign": "off", + "no-plusplus": "off", + "no-promise-executor-return": "off", + "no-proto": "warn", + "no-restricted-exports": "warn", + "no-restricted-globals": "warn", + "no-restricted-imports": "warn", + "no-restricted-properties": "warn", + "no-restricted-syntax": "warn", + "no-return-assign": "off", + "no-return-await": "off", + "no-script-url": "warn", + "no-self-compare": "warn", + "no-sequences": "warn", + "no-shadow": "off", + "no-template-curly-in-string": "warn", + "no-ternary": "off", + "no-this-before-super": "error", + "no-throw-literal": "warn", + "no-undef-init": "warn", + "no-undefined": "off", + "no-underscore-dangle": "off", + "no-unexpected-multiline": "error", + "no-unmodified-loop-condition": "warn", + "no-unneeded-ternary": "warn", + "no-unreachable-loop": "warn", + "no-unsafe-optional-chaining": "warn", + "no-unused-expressions": "off", + "no-use-before-define": "off", + "no-useless-backreference": "warn", + "no-useless-call": "warn", + "no-useless-computed-key": "warn", + "no-useless-concat": "warn", + "no-useless-constructor": "off", + "no-useless-rename": "warn", + "no-useless-return": "warn", + "no-var": "warn", + "no-void": "warn", + "no-warning-comments": "off", + "no-with": "error", + "object-shorthand": "warn", + "one-var": "off", + "one-var-declaration-per-line": "off", + "operator-assignment": "warn", + "prefer-arrow-callback": "warn", + "prefer-const": "warn", + "prefer-destructuring": "off", + "prefer-exponentiation-operator": "warn", + "prefer-named-capture-group": "off", + "prefer-numeric-literals": "warn", + "prefer-object-spread": "off", + "prefer-promise-reject-errors": "off", + "prefer-regex-literals": "warn", + "prefer-rest-params": "warn", + "prefer-spread": "off", + "prefer-template": "off", + "radix": "off", + "require-atomic-updates": "warn", + "require-await": "warn", + "require-unicode-regexp": "off", + "sort-imports": ["warn", { allowSeparatedGroups: true }], + "sort-keys": "off", + "sort-vars": "off", + "symbol-description": "warn", + "unicode-bom": "warn", + "vars-on-top": "warn", + "yoda": ["warn", "never", { onlyEquality: true }], + }, + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // Compatibility + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + { + name: "Plugin:typescript-compat", + files: ["src/**/*.{ts,vue}"], + languageOptions: { + parserOptions: { + sourceType: "module", + project: true, + }, + }, + plugins: { + "typescript-compat": legacyPlugin("eslint-plugin-typescript-compat", "typescript-compat"), + }, + rules: { + "typescript-compat/compat": "error", + }, + }, + { + name: "Plugin:compat", + ...pluginCompat.configs["flat/recommended"], + files: ["src/**"], + settings: { + polyfills: [ + "globalThis", + "navigator.locks", + "Array.flatMap", + "Array.prototype.toReversed", + "Array.prototype.flatMap", + "PromiseConstructor.withResolvers", + ], + }, + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // Import + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + { + name: "Plugin:import", + ...compat.extends("plugin:import/typescript")[0], + files: ["src/**/*.{vue,htm}", "**/*.ts", "eslint.config.mjs"], + plugins: { + import: legacyPlugin("eslint-plugin-import", "import"), + }, + rules: { + "@typescript-eslint/consistent-type-imports": ["warn", { + prefer: "type-imports", + }], + "import/consistent-type-specifier-style": ["warn", "prefer-top-level"], + "import/newline-after-import": "warn", + "import/no-cycle": ["warn", { ignoreExternal: true }], + "import/no-duplicates": "warn", + "import/no-unresolved": "error", + "import/order": ["warn", { + "groups": [ + [ + "builtin", + "external", + ], + [ + "internal", + "parent", + "sibling", + "index", + "object", + ], + "type", + ], + "newlines-between": "always", + }], + "no-duplicate-imports": "off", + "sort-imports": "off", + }, + settings: { + "import/resolver": { + typescript: { + project: [ + "src/app", + "src/client", + "src/core", + "src/other/donate", + "src/other/service", + "test", + "e2e", + "tools", + ], + }, + }, + }, + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // Vue + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + ...pluginVue.configs["flat/essential"].map(cfg => ({ + ...cfg, + files: ["**/*.vue"], + })), + { + name: "General:vue", + files: ["**/*.vue"], + languageOptions: { + parserOptions: { + parser: pluginTs.parser, + extraFileExtensions: [".vue"], + }, + }, + rules: { + "@stylistic/indent": "off", // see vue + "@stylistic/max-len": "off", // see vue + "no-mixed-spaces-and-tabs": "off", // to work with Volar formatter + "vue/max-len": ["warn", { + code: 200, + ignoreComments: true, + ignoreHTMLAttributeValues: true, + ignoreStrings: true, + tabWidth: 4, + }], + "vue/multi-word-component-names": "off", + "vue/no-mutating-props": "off", // see https://github.com/vuejs/eslint-plugin-vue/issues/1371 + "vue/script-indent": ["warn", "tab", { + baseIndent: 1, + ignores: [], + switchCase: 1, + }], + }, + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // JsDoc + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + { + files: ["src/client/**", "src/core/**"], + plugins: { + jsdoc: pluginJsDoc, + }, + rules: { + "jsdoc/require-jsdoc": ["warn", { + require: { + ClassDeclaration: true, + FunctionDeclaration: false, + }, + enableFixer: false, + }], + }, + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // Tests + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + { + ...pluginMocha.configs.flat.recommended, + files: ["test/**"], + }, + { + files: ["test/**"], + rules: { + "mocha/prefer-arrow-callback": "warn", + "mocha/no-exports": "off", + "mocha/no-skipped-tests": "off", + }, + }, + { + files: ["{test,e2e,tools}/**"], + rules: { + "@typescript-eslint/explicit-function-return-type": ["warn", { + allowFunctionsWithoutTypeParameters: true, + }], + "@typescript-eslint/no-invalid-this": "off", + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-unused-expressions": "off", + "max-classes-per-file": "off", + "max-lines-per-function": "off", + "prefer-arrow-callback": "off", + }, + }, + + ///////////////////////////////////////////////////////////////////////////////////////////////////// + // Specific scopes + ///////////////////////////////////////////////////////////////////////////////////////////////////// + + { + files: ["gulpfile.js", "gulp/**", "test/mocha.env.mjs", "eslint-local-rules.js"], + languageOptions: { + globals: globals.node, + sourceType: "commonjs", + }, + rules: { + "@typescript-eslint/no-require-imports": "off", + }, + }, + { + files: ["eslint.config.mjs"], + languageOptions: { + globals: globals.nodeBuiltin, + }, + rules: { + "@typescript-eslint/no-magic-numbers": "off", + "import/no-unresolved": "off", + "max-lines": "off", + "sort-keys": ["warn", "asc", { + minKeys: 6, + }], + }, + }, + { + files: ["src/**"], + languageOptions: { + globals: globals.browser, + }, + }, + { + files: ["src/**/*.{ts,vue}"], + rules: { + "@typescript-eslint/explicit-function-return-type": ["warn", { + allowExpressions: true, + }], + }, + }, + { + files: ["src/core/**"], + rules: { + // This rule is good for identifying unnecessary optional chaining, + // but otherwise is giving too many warnings. + // So we keep it off in most cases and turn it on as needed. + "@typescript-eslint/no-unnecessary-condition": "off", + }, + }, + { + name: "General:HTML", + files: ["**/*.htm"], + plugins: { + html: pluginHtml, + }, + rules: { + "@typescript-eslint/no-magic-numbers": "off", + "@typescript-eslint/no-this-alias": "off", + "max-lines-per-function": "off", + "no-undef": "off", + "no-var": "off", + "prefer-rest-params": "off", + "vars-on-top": "off", + }, + }, + { + name: "Data structures", + files: ["src/shared/data/**"], + rules: { + eqeqeq: "warn", // See src/shared/data/README.md + }, + }, + { + name: "Polyfills", + files: ["src/shared/polyfill/**"], + rules: { + "no-extend-native": "off", + }, + }, +]; diff --git a/gulp/plugins/order.js b/gulp/plugins/order.js index f9fc7b63..31b6ad38 100644 --- a/gulp/plugins/order.js +++ b/gulp/plugins/order.js @@ -5,7 +5,6 @@ const through2 = require("gulp-through2"); function copyInOrderOf(source, order) { if(typeof source != "object" || Array.isArray(source)) return source; const result = {}; - // eslint-disable-next-line guard-for-in for(const key in order) result[key] = copyInOrderOf(source[key], order[key]); return result; } diff --git a/gulp/tasks/app.js b/gulp/tasks/app.js index 905ad7ac..e52bc0e0 100644 --- a/gulp/tasks/app.js +++ b/gulp/tasks/app.js @@ -24,8 +24,8 @@ gulp.task("appDebug", () => })) .pipe(esb({ define: { - "__VUE_OPTIONS_API__": "false", - "__VUE_PROD_DEVTOOLS__": "false", + __VUE_OPTIONS_API__: "false", + __VUE_PROD_DEVTOOLS__: "false", }, sourcemap: true, sourcesContent: false, diff --git a/gulp/tasks/html.js b/gulp/tasks/html.js index 22d982f0..aadf6e4b 100644 --- a/gulp/tasks/html.js +++ b/gulp/tasks/html.js @@ -21,7 +21,7 @@ function ssg() { }); } -const insertVersion = (package) => $.through2( +const insertVersion = package => $.through2( content => content .replace("__VERSION__", package.version) .replace("__APP_VERSION__", package.app_version) diff --git a/gulp/tasks/pixi.js b/gulp/tasks/pixi.js index 31c58678..e508ef2e 100644 --- a/gulp/tasks/pixi.js +++ b/gulp/tasks/pixi.js @@ -52,7 +52,6 @@ module.exports.pixiCore = () => })) .pipe(gulp.dest(config.dest.dist + "/lib")); - module.exports.pixi = () => gulp.src(base + "/pixi.ts", { base }) .pipe(newer({ diff --git a/package.json b/package.json index 674515f7..089043c6 100644 --- a/package.json +++ b/package.json @@ -25,6 +25,7 @@ "license-check": "pnpx license-checker --exclude \"MIT,Apache-2.0,BSD-2-Clause,ISC\"", "lint": "eslint src", "loc": "powershell \"(gci src -include *.ts,*.htm,*.scss,*.vue -recurse | select-string .).Count\"", + "postinstall": "playwright install --with-deps", "start": "http-server build/debug -p 30783 -e htm -c-1", "stylelint": "stylelint src/**/*.vue src/**/*.scss", "test": "mocha --require mocha-suppress-logs" @@ -35,13 +36,16 @@ "yarn": "please-use-pnpm" }, "devDependencies": { + "@eslint/compat": "^1.1.1", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "^9.9.1", "@fal-works/esbuild-plugin-global-externals": "^2.1.2", "@intlify/vue-i18n-extensions": "^6.2.0", "@makeomatic/gulp-wrap-js": "^1.0.2", "@mutsuntsai/esbuild-plugin-vue": "^0.1.6", + "@mutsuntsai/stylistic": "^1.0.1", "@playwright/test": "^1.46.1", - "@stylistic/eslint-plugin": "^1.8.1", - "@swc/core": "^1.7.14", + "@swc/core": "^1.7.18", "@types/bootstrap": "^5.2.10", "@types/chai": "^4.3.17", "@types/gtag.js": "^0.0.20", @@ -50,26 +54,22 @@ "@types/mocha": "^10.0.7", "@types/node": "^22.5.0", "@types/wicg-file-system-access": "^2023.10.5", - "@typescript-eslint/eslint-plugin": "^7.18.0", - "@typescript-eslint/parser": "^7.18.0", - "@vue/eslint-config-typescript": "13.0.0", "chai": "^5.1.1", "del": "7.1.0", "esbuild": "^0.23.1", "esbuild-ifdef": "^0.2.0", "esbuild-sass-plugin": "^3.3.1", - "eslint": "^8.57.0", + "eslint": "^9.9.1", "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-compat": "^4.2.0", + "eslint-plugin-compat": "^6.0.0", "eslint-plugin-html": "^8.1.1", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jsdoc": "^48.11.0", - "eslint-plugin-local-rules": "^2.0.1", + "eslint-plugin-jsdoc": "^50.2.2", "eslint-plugin-mocha": "^10.5.0", "eslint-plugin-typescript-compat": "^1.0.2", "eslint-plugin-vue": "^9.27.0", "fancy-log": "^2.0.0", "global-jsdom": "^24.0.0", + "globals": "^15.9.0", "gulp": "^5.0.0", "gulp-all": "^1.1.0", "gulp-clean-css": "^4.3.0", @@ -113,6 +113,7 @@ "tsconfig-paths": "^4.2.0", "ttf2woff2": "^6.0.1", "typescript": "^5.5.4", + "typescript-eslint": "^8.2.0", "vinyl-ftp": "^0.6.1", "vue-eslint-parser": "^9.4.3", "workbox-build": "^7.1.1", @@ -153,7 +154,8 @@ }, "peerDependencyRules": { "allowAny": [ - "esbuild" + "esbuild", + "eslint" ] } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index e7bab996..d29f6a65 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -91,6 +91,15 @@ importers: specifier: ^7.1.0 version: 7.1.0 devDependencies: + '@eslint/compat': + specifier: ^1.1.1 + version: 1.1.1 + '@eslint/eslintrc': + specifier: ^3.1.0 + version: 3.1.0 + '@eslint/js': + specifier: ^9.9.1 + version: 9.9.1 '@fal-works/esbuild-plugin-global-externals': specifier: ^2.1.2 version: 2.1.2 @@ -103,15 +112,15 @@ importers: '@mutsuntsai/esbuild-plugin-vue': specifier: ^0.1.6 version: 0.1.6(@vue/compiler-sfc@3.4.38) + '@mutsuntsai/stylistic': + specifier: ^1.0.1 + version: 1.0.1(eslint@9.9.1)(typescript@5.5.4) '@playwright/test': specifier: ^1.46.1 version: 1.46.1 - '@stylistic/eslint-plugin': - specifier: ^1.8.1 - version: 1.8.1(eslint@8.57.0)(typescript@5.5.4) '@swc/core': - specifier: ^1.7.14 - version: 1.7.14 + specifier: ^1.7.18 + version: 1.7.18 '@types/bootstrap': specifier: ^5.2.10 version: 5.2.10 @@ -136,15 +145,6 @@ importers: '@types/wicg-file-system-access': specifier: ^2023.10.5 version: 2023.10.5 - '@typescript-eslint/eslint-plugin': - specifier: ^7.18.0 - version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': - specifier: ^7.18.0 - version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@vue/eslint-config-typescript': - specifier: 13.0.0 - version: 13.0.0(eslint-plugin-vue@9.27.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4) chai: specifier: ^5.1.1 version: 5.1.1 @@ -161,41 +161,38 @@ importers: specifier: ^3.3.1 version: 3.3.1(esbuild@0.23.1)(sass-embedded@1.77.8) eslint: - specifier: ^8.57.0 - version: 8.57.0 + specifier: ^9.9.1 + version: 9.9.1 eslint-import-resolver-typescript: specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + version: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1) eslint-plugin-compat: - specifier: ^4.2.0 - version: 4.2.0(eslint@8.57.0) + specifier: ^6.0.0 + version: 6.0.0(eslint@9.9.1) eslint-plugin-html: specifier: ^8.1.1 version: 8.1.1 - eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) eslint-plugin-jsdoc: - specifier: ^48.11.0 - version: 48.11.0(eslint@8.57.0) - eslint-plugin-local-rules: - specifier: ^2.0.1 - version: 2.0.1 + specifier: ^50.2.2 + version: 50.2.2(eslint@9.9.1) eslint-plugin-mocha: specifier: ^10.5.0 - version: 10.5.0(eslint@8.57.0) + version: 10.5.0(eslint@9.9.1) eslint-plugin-typescript-compat: specifier: ^1.0.2 - version: 1.0.2(eslint@8.57.0)(typescript@5.5.4) + version: 1.0.2(eslint@9.9.1)(typescript@5.5.4) eslint-plugin-vue: specifier: ^9.27.0 - version: 9.27.0(eslint@8.57.0) + version: 9.27.0(eslint@9.9.1) fancy-log: specifier: ^2.0.0 version: 2.0.0 global-jsdom: specifier: ^24.0.0 version: 24.0.0(jsdom@24.1.1) + globals: + specifier: ^15.9.0 + version: 15.9.0 gulp: specifier: ^5.0.0 version: 5.0.0 @@ -315,7 +312,7 @@ importers: version: 4.0.2 ts-node: specifier: ^10.9.2 - version: 10.9.2(@swc/core@1.7.14)(@types/node@22.5.0)(typescript@5.5.4) + version: 10.9.2(@swc/core@1.7.18)(@types/node@22.5.0)(typescript@5.5.4) tsconfig-paths: specifier: ^4.2.0 version: 4.2.0 @@ -325,12 +322,15 @@ importers: typescript: specifier: ^5.5.4 version: 5.5.4 + typescript-eslint: + specifier: ^8.2.0 + version: 8.2.0(eslint@9.9.1)(typescript@5.5.4) vinyl-ftp: specifier: ^0.6.1 version: 0.6.1 vue-eslint-parser: specifier: ^9.4.3 - version: 9.4.3(eslint@8.57.0) + version: 9.4.3(eslint@9.9.1) workbox-build: specifier: ^7.1.1 version: 7.1.1 @@ -362,8 +362,8 @@ packages: resolution: {integrity: sha512-BBt3opiCOxUr9euZ5/ro/Xv8/V7yJ5bjYMqG/C1YAo8MIKAnumZalCN+msbci3Pigy4lIQfPUpfMM27HMGaYEA==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.4': - resolution: {integrity: sha512-NFtZmZsyzDPJnk9Zg3BbTfKKc9UlHYzD0E//p2Z3B9nCwwtJW9T0gVbCz8+fBngnn4zf1Dr3IK8PHQQHq0lDQw==} + '@babel/generator@7.25.5': + resolution: {integrity: sha512-abd43wyLfbWoxC6ahM8xTkqLpGB2iWBVyuKC9/srhFunCd1SDNrV1s72bBpK4hLj8KLzHBBcOblvLQZBNw9r3w==} engines: {node: '>=6.9.0'} '@babel/helper-annotate-as-pure@7.24.7': @@ -1172,8 +1172,8 @@ packages: '@dual-bundle/import-meta-resolve@4.1.0': resolution: {integrity: sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==} - '@es-joy/jsdoccomment@0.46.0': - resolution: {integrity: sha512-C3Axuq1xd/9VqFZpW4YAzOx5O9q/LP46uIQy/iNDpHG3fmPa6TBtvfglMCs3RBiBxAIi0Go97r8+jvTt55XMyQ==} + '@es-joy/jsdoccomment@0.48.0': + resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} engines: {node: '>=16'} '@esbuild/aix-ppc64@0.21.5': @@ -1468,13 +1468,25 @@ packages: resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/compat@1.1.1': + resolution: {integrity: sha512-lpHyRyplhGPL5mGEh6M9O5nnKk0Gz4bFI+Zu6tKlPpDUN7XshWvH9C/px4UVm87IAANE0W81CEsNGbS1KlzXpA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@eslint/config-array@0.18.0': + resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.1.0': + resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.9.1': + resolution: {integrity: sha512-xIDQRsfg5hNBqHz04H1R3scSVwmI+KUbqjsQKHKQ1DAUSaUjYPReZZmS/5PNiKu1fUvzDd6H7DEDKACSEhu+TQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@fal-works/esbuild-plugin-global-externals@2.1.2': resolution: {integrity: sha512-cEee/Z+I12mZcFJshKcCqC8tuX5hG3s+d+9nZ3LabqKF1vKdF41B92pJVCBggjAGORAeOzyyDDKrZwIkLffeOQ==} @@ -1491,18 +1503,13 @@ packages: resolution: {integrity: sha512-kjotm7XJrJ6v+7knhPaRgaT6q8F8K2jiafwYdNHLzmV0uGLuZY43FK6smNSHUPrhq5kX2slCUy+RGG/xGqmIKA==} engines: {node: '>=10.13.0'} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead - '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@humanwhocodes/retry@0.3.0': + resolution: {integrity: sha512-d2CGZR2o7fS6sWB7DG/3a95bGKQyHMACZ5aW8qGkkqQpUoZV6C0X7Pc7l4ZNMZkfNBf4VWNe9E1jRsf0G146Ew==} + engines: {node: '>=18.18'} '@inquirer/checkbox@2.4.7': resolution: {integrity: sha512-5YwCySyV1UEgqzz34gNsC38eKxRBtlRDpJLlKcRtTjlYA/yDKuc1rfw+hjw+2WJxbAZtaDPsRl5Zk7J14SBoBw==} @@ -1630,14 +1637,19 @@ packages: resolution: {integrity: sha512-KbshZSkfiGbjd7FQo6ZFJmf8fNdLay9w5r9Zh1hmar3O95VN/jX2SoqIT9ZqzqS4l4g5w1szDREAtaTn7rkDtA==} engines: {node: '>=8.9.0', npm: '>=4.0.0'} - '@mdn/browser-compat-data@5.5.47': - resolution: {integrity: sha512-M/lmqoDgbKz0LP9K5mjqzNWpbTDmgBeGsh5A+o9KcJuI3KbJ/PCiXFs7XKR1nabQxwYtcHpl9Bn0OGUnijcXiw==} + '@mdn/browser-compat-data@5.5.48': + resolution: {integrity: sha512-ddCsJkVKMfZJS4Ik7ekgoBjMPRdAb7p68+1VSRls3mUWJ2hknSAIOj2gBobRSd/8XdbIRYMsBEpJRl2jhB4sFg==} '@mutsuntsai/esbuild-plugin-vue@0.1.6': resolution: {integrity: sha512-PPoZ4ibyAQ/gA+LH4WbHPHMyj7//MVSP6C6yktzU7O1zNNUDVgpHfAHfm5F3qXvUFPx+Kr6bMcqrOdxbaO+yBA==} peerDependencies: '@vue/compiler-sfc': '>=3.0.0' + '@mutsuntsai/stylistic@1.0.1': + resolution: {integrity: sha512-Ucsdq6QePkXgbOpbQbbetdh34XmRrcAg28Ncxwwhun6xTkRj0vaL6KxzD8NDAOW3QrDMDatZBFuFkqcy/qPIZA==} + peerDependencies: + eslint: ^9.5.0 + '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} engines: {node: '>= 8'} @@ -1798,100 +1810,100 @@ packages: rollup: optional: true - '@stylistic/eslint-plugin-js@1.8.1': - resolution: {integrity: sha512-c5c2C8Mos5tTQd+NWpqwEu7VT6SSRooAguFPMj1cp2RkTYl1ynKoXo8MWy3k4rkbzoeYHrqC2UlUzsroAN7wtQ==} - engines: {node: ^16.0.0 || >=18.0.0} + '@stylistic/eslint-plugin-js@2.6.4': + resolution: {integrity: sha512-kx1hS3xTvzxZLdr/DCU/dLBE++vcP97sHeEFX2QXhk1Ipa4K1rzPOLw1HCbf4mU3s+7kHP5eYpDe+QteEOFLug==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' - '@stylistic/eslint-plugin-jsx@1.8.1': - resolution: {integrity: sha512-k1Eb6rcjMP+mmjvj+vd9y5KUdWn1OBkkPLHXhsrHt5lCDFZxJEs0aVQzE5lpYrtVZVkpc5esTtss/cPJux0lfA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@stylistic/eslint-plugin-jsx@2.6.4': + resolution: {integrity: sha512-bIvVhdtjmyu3S10V7QRIuawtCZSq9gRmzAX23ucjCOdSFzEwlq+di0IM0riBAvvQerrJL4SM6G3xgyPs8BSXIA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' - '@stylistic/eslint-plugin-plus@1.8.1': - resolution: {integrity: sha512-4+40H3lHYTN8OWz+US8CamVkO+2hxNLp9+CAjorI7top/lHqemhpJvKA1LD9Uh+WMY9DYWiWpL2+SZ2wAXY9fQ==} + '@stylistic/eslint-plugin-plus@2.6.4': + resolution: {integrity: sha512-EuRvtxhf7Hv8OoMIePulP/6rBJIgPTu1l5GAm1780WcF1Cl8bOZXIn84Pdac5pNv6lVlzCOFm8MD3VE+2YROuA==} peerDependencies: eslint: '*' - '@stylistic/eslint-plugin-ts@1.8.1': - resolution: {integrity: sha512-/q1m+ZuO1JHfiSF16EATFzv7XSJkc5W6DocfvH5o9oB6WWYFMF77fVoBWnKT3wGptPOc2hkRupRKhmeFROdfWA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@stylistic/eslint-plugin-ts@2.6.4': + resolution: {integrity: sha512-yxL8Hj6WkObw1jfiLpBzKy5yfxY6vwlwO4miq34ySErUjUecPV5jxfVbOe4q1QDPKemQGPq93v7sAQS5PzM8lA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' - '@stylistic/eslint-plugin@1.8.1': - resolution: {integrity: sha512-64My6I7uCcmSQ//427Pfg2vjSf9SDzfsGIWohNFgISMLYdC5BzJqDo647iDDJzSxINh3WTC0Ql46ifiKuOoTyA==} - engines: {node: ^16.0.0 || >=18.0.0} + '@stylistic/eslint-plugin@2.6.4': + resolution: {integrity: sha512-euUGnjzH8EOqEYTGk9dB2OBINp0FX1nuO7/k4fO82zNRBIKZgJoDwTLM4Ce+Om6W1Qmh1PrZjCr4jh4tMEXGPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: '>=8.40.0' '@surma/rollup-plugin-off-main-thread@2.2.3': resolution: {integrity: sha512-lR8q/9W7hZpMWweNiAKU7NQerBnzQQLvi8qnTDU/fxItPhtZVMbPV3lbCwjhIlNBe9Bbr5V+KHshvWmVSG9cxQ==} - '@swc/core-darwin-arm64@1.7.14': - resolution: {integrity: sha512-V0OUXjOH+hdGxDYG8NkQzy25mKOpcNKFpqtZEzLe5V/CpLJPnpg1+pMz70m14s9ZFda9OxsjlvPbg1FLUwhgIQ==} + '@swc/core-darwin-arm64@1.7.18': + resolution: {integrity: sha512-MwLc5U+VGPMZm8MjlFBjEB2wyT1EK0NNJ3tn+ps9fmxdFP+PL8EpMiY1O1F2t1ydy2OzBtZz81sycjM9RieFBg==} engines: {node: '>=10'} cpu: [arm64] os: [darwin] - '@swc/core-darwin-x64@1.7.14': - resolution: {integrity: sha512-9iFvUnxG6FC3An5ogp5jbBfQuUmTTwy8KMB+ZddUoPB3NR1eV+Y9vOh/tfWcenSJbgOKDLgYC5D/b1mHAprsrQ==} + '@swc/core-darwin-x64@1.7.18': + resolution: {integrity: sha512-IkukOQUw7/14VkHp446OkYGCZEHqZg9pTmTdBawlUyz2JwZMSn2VodCl7aFSdGCsU4Cwni8zKA8CCgkCCAELhw==} engines: {node: '>=10'} cpu: [x64] os: [darwin] - '@swc/core-linux-arm-gnueabihf@1.7.14': - resolution: {integrity: sha512-zGJsef9qPivKSH8Vv4F/HiBXBTHZ5Hs3ZjVGo/UIdWPJF8fTL9OVADiRrl34Q7zOZEtGXRwEKLUW1SCQcbDvZA==} + '@swc/core-linux-arm-gnueabihf@1.7.18': + resolution: {integrity: sha512-ATnb6jJaBeXCqrTUawWdoOy7eP9SCI7UMcfXlYIMxX4otKKspLPAEuGA5RaNxlCcj9ObyO0J3YGbtZ6hhD2pjg==} engines: {node: '>=10'} cpu: [arm] os: [linux] - '@swc/core-linux-arm64-gnu@1.7.14': - resolution: {integrity: sha512-AxV3MPsoI7i4B8FXOew3dx3N8y00YoJYvIPfxelw07RegeCEH3aHp2U2DtgbP/NV1ugZMx0TL2Z2DEvocmA51g==} + '@swc/core-linux-arm64-gnu@1.7.18': + resolution: {integrity: sha512-poHtH7zL7lEp9K2inY90lGHJABWxURAOgWNeZqrcR5+jwIe7q5KBisysH09Zf/JNF9+6iNns+U0xgWTNJzBuGA==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-arm64-musl@1.7.14': - resolution: {integrity: sha512-JDLdNjUj3zPehd4+DrQD8Ltb3B5lD8D05IwePyDWw+uR/YPc7w/TX1FUVci5h3giJnlMCJRvi1IQYV7K1n7KtQ==} + '@swc/core-linux-arm64-musl@1.7.18': + resolution: {integrity: sha512-qnNI1WmcOV7Wz1ZDyK6WrOlzLvJ01rnni8ec950mMHWkLRMP53QvCvhF3S+7gFplWBwWJTOOPPUqJp/PlSxWyQ==} engines: {node: '>=10'} cpu: [arm64] os: [linux] - '@swc/core-linux-x64-gnu@1.7.14': - resolution: {integrity: sha512-Siy5OvPCLLWmMdx4msnEs8HvEVUEigSn0+3pbLjv78iwzXd0qSBNHUPZyC1xeurVaUbpNDxZTpPRIwpqNE2+Og==} + '@swc/core-linux-x64-gnu@1.7.18': + resolution: {integrity: sha512-x9SCqCLzwtlqtD5At3I1a7Gco+EuXnzrJGoucmkpeQohshHuwa+cskqsXO6u1Dz0jXJEuHbBZB9va1wYYfjgFg==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-linux-x64-musl@1.7.14': - resolution: {integrity: sha512-FtEGm9mwtRYQNK43WMtUIadxHs/ja2rnDurB99os0ZoFTGG2IHuht2zD97W0wB8JbqEabT1XwSG9Y5wmN+ciEQ==} + '@swc/core-linux-x64-musl@1.7.18': + resolution: {integrity: sha512-qtj8iOpMMgKjzxTv+islmEY0JBsbd93nka0gzcTTmGZxKtL5jSUsYQvkxwNPZr5M9NU1fgaR3n1vE6lFmtY0IQ==} engines: {node: '>=10'} cpu: [x64] os: [linux] - '@swc/core-win32-arm64-msvc@1.7.14': - resolution: {integrity: sha512-Jp8KDlfq7Ntt2/BXr0y344cYgB1zf0DaLzDZ1ZJR6rYlAzWYSccLYcxHa97VGnsYhhPspMpmCvHid97oe2hl4A==} + '@swc/core-win32-arm64-msvc@1.7.18': + resolution: {integrity: sha512-ltX/Ol9+Qu4SXmISCeuwVgAjSa8nzHTymknpozzVMgjXUoZMoz6lcynfKL1nCh5XLgqh0XNHUKLti5YFF8LrrA==} engines: {node: '>=10'} cpu: [arm64] os: [win32] - '@swc/core-win32-ia32-msvc@1.7.14': - resolution: {integrity: sha512-I+cFsXF0OU0J9J4zdWiQKKLURO5dvCujH9Jr8N0cErdy54l9d4gfIxdctfTF+7FyXtWKLTCkp+oby9BQhkFGWA==} + '@swc/core-win32-ia32-msvc@1.7.18': + resolution: {integrity: sha512-RgTcFP3wgyxnQbTCJrlgBJmgpeTXo8t807GU9GxApAXfpLZJ3swJ2GgFUmIJVdLWyffSHF5BEkF3FmF6mtH5AQ==} engines: {node: '>=10'} cpu: [ia32] os: [win32] - '@swc/core-win32-x64-msvc@1.7.14': - resolution: {integrity: sha512-NNrprQCK6d28mG436jVo2TD+vACHseUECacEBGZ9Ef0qfOIWS1XIt2MisQKG0Oea2VvLFl6tF/V4Lnx/H0Sn3Q==} + '@swc/core-win32-x64-msvc@1.7.18': + resolution: {integrity: sha512-XbZ0wAgzR757+DhQcnv60Y/bK9yuWPhDNRQVFFQVRsowvK3+c6EblyfUSytIidpXgyYFzlprq/9A9ZlO/wvDWw==} engines: {node: '>=10'} cpu: [x64] os: [win32] - '@swc/core@1.7.14': - resolution: {integrity: sha512-9aeXeifnyuvc2pcuuhPQgVUwdpGEzZ+9nJu0W8/hNl/aESFsJGR5i9uQJRGu0atoNr01gK092fvmqMmQAPcKow==} + '@swc/core@1.7.18': + resolution: {integrity: sha512-qL9v5N5S38ijmqiQRvCFUUx2vmxWT/JJ2rswElnyaHkOHuVoAFhBB90Ywj4RKjh3R0zOjhEcemENTyF3q3G6WQ==} engines: {node: '>=10'} peerDependencies: '@swc/helpers': '*' @@ -1929,8 +1941,8 @@ packages: '@types/earcut@2.1.4': resolution: {integrity: sha512-qp3m9PPz4gULB9MhjGID7wpo3gJ4bTGXm7ltNDsmOvsPduTeHp8wSW9YckBj3mljeOh4F0m2z/0JKAALRKbmLQ==} - '@types/eslint@8.56.11': - resolution: {integrity: sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==} + '@types/eslint@9.6.0': + resolution: {integrity: sha512-gi6WQJ7cHRgZxtkQEoyHMppPjq9Kxo5Tjn2prSKDSmZrCz8TZ3jSRCeTJm+WoM+oB0WG37bRqLzaaU3q7JypGg==} '@types/estree@0.0.39': resolution: {integrity: sha512-EYNwp3bU+98cpU4lAWYYL7Zz+2gryWH1qbdDTidVd6hkiR6weksdbMadyXKXNPEkQFhXM+hVO9ZygomHXp+AIw==} @@ -2004,12 +2016,12 @@ packages: '@types/wrap-ansi@3.0.0': resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - '@typescript-eslint/eslint-plugin@7.18.0': - resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.2.0': + resolution: {integrity: sha512-02tJIs655em7fvt9gps/+4k4OsKULYGtLBPJfOsmOq1+3cdClYiF0+d6mHu6qDnTcg88wJBkcPLpQhq7FyDz0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: @@ -2021,11 +2033,11 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/parser@7.18.0': - resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.2.0': + resolution: {integrity: sha512-j3Di+o0lHgPrb7FxL3fdEy6LJ/j2NE8u+AP/5cQ9SKb+JLH6V6UHDqJ+e0hXBkHP1wn1YDFjYCS9LBQsZDlDEg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: @@ -2035,19 +2047,14 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@6.21.0': - resolution: {integrity: sha512-OwLUIWZJry80O99zvqXVEioyniJMa+d2GrqpUTqi5/v5D5rOrppJVBPa0yKCblcigC0/aYAzxxqQ1B+DS2RYsg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/scope-manager@7.18.0': - resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.2.0': + resolution: {integrity: sha512-OFn80B38yD6WwpoHU2Tz/fTz7CgFqInllBoC3WP+/jLbTb4gGPTy9HBSTsbDWkMdN55XlVU0mMDYAtgvlUspGw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.18.0': - resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.2.0': + resolution: {integrity: sha512-g1CfXGFMQdT5S+0PSO0fvGXUaiSkl73U1n9LTK5aRAFnPlJ8dLKkXr4AaLFvPedW8lVDoMgLLE3JN98ZZfsj0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: @@ -2057,13 +2064,9 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@6.21.0': - resolution: {integrity: sha512-1kFmZ1rOm5epu9NZEZm1kckCDGj5UJEf7P1kliH4LKu/RkwpsfqqGmY2OOcUs18lSlQBKLDYBOGxRVtrMN5lpg==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/types@7.18.0': - resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.2.0': + resolution: {integrity: sha512-6a9QSK396YqmiBKPkJtxsgZZZVjYQ6wQ/TlI0C65z7vInaETuC6HAHD98AGLC8DyIPqHytvNuS8bBVvNLKyqvQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} @@ -2074,18 +2077,9 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@6.21.0': - resolution: {integrity: sha512-6npJTkZcO+y2/kr+z0hc4HwNfrrP4kNYh57ek7yCNlrBjWQ1Y0OS7jiZTkgumrvkX5HkEKXFZkkdFNkaW2wmUQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - - '@typescript-eslint/typescript-estree@7.18.0': - resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.2.0': + resolution: {integrity: sha512-kiG4EDUT4dImplOsbh47B1QnNmXSoUqOjWDvCJw/o8LgfD0yr7k2uy54D5Wm0j4t71Ge1NkynGhpWdS0dEIAUA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -2098,32 +2092,19 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@6.21.0': - resolution: {integrity: sha512-NfWVaC8HP9T8cbKQxHcsJBY5YE1O33+jpMwN45qzWWaPDZgLIbo12toGMWnmhvCpd3sIxkpDw3Wv1B3dYrbDQQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - - '@typescript-eslint/utils@7.18.0': - resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.2.0': + resolution: {integrity: sha512-O46eaYKDlV3TvAVDNcoDzd5N550ckSe8G4phko++OCSC1dYIb9LTc3HDGYdWqWIAT5qDUKphO6sd9RrpIJJPfg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@6.21.0': - resolution: {integrity: sha512-JJtkDduxLi9bivAB+cYOVMtbkqdPOhZ+ZI5LC47MIRrDV4Yn2o+ZnW10Nkmr28xRpSpdJ6Sm42Hjf2+REYXm0A==} - engines: {node: ^16.0.0 || >=18.0.0} - - '@typescript-eslint/visitor-keys@7.18.0': - resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} - engines: {node: ^18.18.0 || >=20.0.0} - - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@typescript-eslint/visitor-keys@8.2.0': + resolution: {integrity: sha512-sbgsPMW9yLvS7IhCi8IpuK1oBmtbWUNP+hBdwl/I9nzqVsszGnNGti5r9dUtF5RLivHUFFIdRvLiTsPhzSyJ3Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@vue/compiler-core@3.4.38': resolution: {integrity: sha512-8IQOTCWnLFqfHzOGm9+P8OPSEDukgg3Huc92qSG49if/xI2SAwLHQO2qaPQbjCWPBcQoO1WYfXfTACUrWV3c5A==} @@ -2140,17 +2121,6 @@ packages: '@vue/devtools-api@6.6.3': resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} - '@vue/eslint-config-typescript@13.0.0': - resolution: {integrity: sha512-MHh9SncG/sfqjVqjcuFLOLD6Ed4dRAis4HNt0dXASeAuLqIAx4YMB1/m2o4pUKK1vCt8fUvYG8KKX2Ot3BVZTg==} - engines: {node: ^18.18.0 || >=20.0.0} - peerDependencies: - eslint: ^8.56.0 - eslint-plugin-vue: ^9.0.0 - typescript: '>=4.7.4' - peerDependenciesMeta: - typescript: - optional: true - '@vue/reactivity@3.4.38': resolution: {integrity: sha512-4vl4wMMVniLsSYYeldAKzbk72+D3hUnkw9z8lDeJacTxAkXeDAP1uE9xr2+aKIN0ipOL8EG2GPouVTH6yF7Gnw==} @@ -2841,10 +2811,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - doiuse@6.0.2: resolution: {integrity: sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==} engines: {node: '>=16'} @@ -3026,11 +2992,11 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-compat@4.2.0: - resolution: {integrity: sha512-RDKSYD0maWy5r7zb5cWQS+uSPc26mgOzdORJ8hxILmWM7S/Ncwky7BcAtXVY5iRbKjBdHsWU8Yg7hfoZjtkv7w==} - engines: {node: '>=14.x'} + eslint-plugin-compat@6.0.0: + resolution: {integrity: sha512-oIynkQYqGnW9ibHl1cGLER8XkUlKaOI8bS80Qz7CjKROvbQm4oN8fWb5l2cG9GJJ4h5eFIHPqkB9ZJuMzwpPFQ==} + engines: {node: '>=18.x'} peerDependencies: - eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 + eslint: ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 || ^9.0.0 eslint-plugin-html@8.1.1: resolution: {integrity: sha512-6qmlJsc40D2m3Dn9oEH+0PAOkJhxVu0f5sVItqpCE0YWgYnyP4xCjBc3UWTHaJcY9ARkWOLIIuXLq0ndRnQOHw==} @@ -3046,15 +3012,12 @@ packages: '@typescript-eslint/parser': optional: true - eslint-plugin-jsdoc@48.11.0: - resolution: {integrity: sha512-d12JHJDPNo7IFwTOAItCeJY1hcqoIxE0lHA8infQByLilQ9xkqrRa6laWCnsuCrf+8rUnvxXY1XuTbibRBNylA==} + eslint-plugin-jsdoc@50.2.2: + resolution: {integrity: sha512-i0ZMWA199DG7sjxlzXn5AeYZxpRfMJjDPUl7lL9eJJX8TPRoIaxJU4ys/joP5faM5AXE1eqW/dslCj3uj4Nqpg==} engines: {node: '>=18'} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-local-rules@2.0.1: - resolution: {integrity: sha512-AJhGd+GcI5r2dbjiGPixM8jnBl0XFxqoVbqzwKbYz+nTk+Cj5dNE3+OlhC176bl5r25KsGsIthLi1VqIW5Ga+A==} - eslint-plugin-mocha@10.5.0: resolution: {integrity: sha512-F2ALmQVPT1GoP27O1JTZGrV9Pqg8k79OeIuvw63UxMtQKREZtmkK1NFgkZQ2TW7L2JSSFKHFPTtHu5z8R9QNRw==} engines: {node: '>=14.0.0'} @@ -3080,6 +3043,10 @@ packages: resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@8.0.2: + resolution: {integrity: sha512-6E4xmrTw5wtxnLA5wYL3WDfhZ/1bUBGOXV0zQvVRDOtrR8D0p6W7fs3JweNYhwRYeGvd/1CKX2se0/2s7Q/nJA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + eslint-utils@3.0.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -3098,10 +3065,15 @@ packages: resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint@9.9.1: + resolution: {integrity: sha512-dHvhrbfr4xFQ9/dq+jcVneZMyRYLjggWjk6RVsIiHsP8Rz6yZ8LvZ//iU4TrZF+SXWG+JkNF2OyiZRvzgRDqMg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true espree@10.1.0: resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} @@ -3208,9 +3180,9 @@ packages: fastq@1.17.1: resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} - file-entry-cache@6.0.1: - resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} - engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} file-entry-cache@9.0.0: resolution: {integrity: sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==} @@ -3250,9 +3222,9 @@ packages: resolution: {integrity: sha512-Gq/a6YCi8zexmGHMuJwahTGzXlAZAOsbCVKduWXC6TlLCjjFRlExMJc4GC2NYPYZ0r/brw9P7CpRgQmlPVeOoA==} engines: {node: '>= 10.13.0'} - flat-cache@3.2.0: - resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} - engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} flat-cache@5.0.0: resolution: {integrity: sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==} @@ -3451,6 +3423,14 @@ packages: resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.9.0: + resolution: {integrity: sha512-SmSKyLLKFbSr6rptvP8izbyxJL4ILwqO9Jg23UA0sDlGlu58V59D1//I3vlc0KJphVdUR7vMjHIplYnzBxorQA==} + engines: {node: '>=18'} + globalthis@1.0.4: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} @@ -3986,8 +3966,8 @@ packages: jsbn@1.1.0: resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} + jsdoc-type-pratt-parser@4.1.0: + resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} engines: {node: '>=12.0.0'} jsdom@24.1.1: @@ -4200,8 +4180,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -4224,10 +4204,6 @@ packages: resolution: {integrity: sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==} engines: {node: '>=10'} - minimatch@9.0.3: - resolution: {integrity: sha512-RHiac9mvaRw0x3AYRgDC1CxAP7HTcNrrECeA8YYJeWnpo+2Q5CegtZjaotWTWxDG3UeGA1coE05iH1mPjT/2mg==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.5: resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} @@ -5609,8 +5585,8 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -5666,6 +5642,15 @@ packages: typedarray-to-buffer@3.1.5: resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} + typescript-eslint@8.2.0: + resolution: {integrity: sha512-DmnqaPcML0xYwUzgNbM1XaKXpEb7BShYf2P1tkUmmcl8hyeG7Pj08Er7R9bNy6AufabywzJcOybQAtnD/c9DGw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + typescript@5.5.4: resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} engines: {node: '>=14.17'} @@ -6081,7 +6066,7 @@ snapshots: dependencies: '@ampproject/remapping': 2.3.0 '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.4 + '@babel/generator': 7.25.5 '@babel/helper-compilation-targets': 7.25.2 '@babel/helper-module-transforms': 7.25.2(@babel/core@7.25.2) '@babel/helpers': 7.25.0 @@ -6097,7 +6082,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.4': + '@babel/generator@7.25.5': dependencies: '@babel/types': 7.25.4 '@jridgewell/gen-mapping': 0.3.5 @@ -6816,7 +6801,7 @@ snapshots: '@babel/traverse@7.25.4': dependencies: '@babel/code-frame': 7.24.7 - '@babel/generator': 7.25.4 + '@babel/generator': 7.25.5 '@babel/parser': 7.25.4 '@babel/template': 7.25.0 '@babel/types': 7.25.4 @@ -7077,11 +7062,11 @@ snapshots: '@dual-bundle/import-meta-resolve@4.1.0': {} - '@es-joy/jsdoccomment@0.46.0': + '@es-joy/jsdoccomment@0.48.0': dependencies: comment-parser: 1.4.1 esquery: 1.6.0 - jsdoc-type-pratt-parser: 4.0.0 + jsdoc-type-pratt-parser: 4.1.0 '@esbuild/aix-ppc64@0.21.5': optional: true @@ -7224,19 +7209,29 @@ snapshots: '@esbuild/win32-x64@0.23.1': optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.0(eslint@9.9.1)': dependencies: - eslint: 8.57.0 + eslint: 9.9.1 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.11.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/compat@1.1.1': {} + + '@eslint/config-array@0.18.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.6(supports-color@8.1.1) + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.6(supports-color@8.1.1) - espree: 9.6.1 - globals: 13.24.0 + espree: 10.1.0 + globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 @@ -7245,7 +7240,9 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.9.1': {} + + '@eslint/object-schema@2.1.4': {} '@fal-works/esbuild-plugin-global-externals@2.1.2': {} @@ -7257,17 +7254,9 @@ snapshots: dependencies: is-negated-glob: 1.0.0 - '@humanwhocodes/config-array@0.11.14': - dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.6(supports-color@8.1.1) - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color - '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.0': {} '@inquirer/checkbox@2.4.7': dependencies: @@ -7444,7 +7433,7 @@ snapshots: vinyl: 2.2.1 vinyl-sourcemaps-apply: 0.2.1 - '@mdn/browser-compat-data@5.5.47': {} + '@mdn/browser-compat-data@5.5.48': {} '@mutsuntsai/esbuild-plugin-vue@0.1.6(@vue/compiler-sfc@3.4.38)': dependencies: @@ -7452,6 +7441,14 @@ snapshots: convert-source-map: 2.0.0 hash-sum: 2.0.0 + '@mutsuntsai/stylistic@1.0.1(eslint@9.9.1)(typescript@5.5.4)': + dependencies: + '@stylistic/eslint-plugin': 2.6.4(eslint@9.9.1)(typescript@5.5.4) + eslint: 9.9.1 + transitivePeerDependencies: + - supports-color + - typescript + '@nodelib/fs.scandir@2.1.5': dependencies: '@nodelib/fs.stat': 2.0.5 @@ -7624,50 +7621,47 @@ snapshots: optionalDependencies: rollup: 2.79.1 - '@stylistic/eslint-plugin-js@1.8.1(eslint@8.57.0)': + '@stylistic/eslint-plugin-js@2.6.4(eslint@9.9.1)': dependencies: - '@types/eslint': 8.56.11 + '@types/eslint': 9.6.0 acorn: 8.12.1 - escape-string-regexp: 4.0.0 - eslint: 8.57.0 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint: 9.9.1 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 - '@stylistic/eslint-plugin-jsx@1.8.1(eslint@8.57.0)': + '@stylistic/eslint-plugin-jsx@2.6.4(eslint@9.9.1)': dependencies: - '@stylistic/eslint-plugin-js': 1.8.1(eslint@8.57.0) - '@types/eslint': 8.56.11 - eslint: 8.57.0 + '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.1) + '@types/eslint': 9.6.0 + eslint: 9.9.1 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 estraverse: 5.3.0 picomatch: 4.0.2 - '@stylistic/eslint-plugin-plus@1.8.1(eslint@8.57.0)(typescript@5.5.4)': + '@stylistic/eslint-plugin-plus@2.6.4(eslint@9.9.1)': dependencies: - '@types/eslint': 8.56.11 - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - transitivePeerDependencies: - - supports-color - - typescript + '@types/eslint': 9.6.0 + eslint: 9.9.1 - '@stylistic/eslint-plugin-ts@1.8.1(eslint@8.57.0)(typescript@5.5.4)': + '@stylistic/eslint-plugin-ts@2.6.4(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 1.8.1(eslint@8.57.0) - '@types/eslint': 8.56.11 - '@typescript-eslint/utils': 6.21.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.1) + '@types/eslint': 9.6.0 + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + eslint: 9.9.1 transitivePeerDependencies: - supports-color - typescript - '@stylistic/eslint-plugin@1.8.1(eslint@8.57.0)(typescript@5.5.4)': + '@stylistic/eslint-plugin@2.6.4(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@stylistic/eslint-plugin-js': 1.8.1(eslint@8.57.0) - '@stylistic/eslint-plugin-jsx': 1.8.1(eslint@8.57.0) - '@stylistic/eslint-plugin-plus': 1.8.1(eslint@8.57.0)(typescript@5.5.4) - '@stylistic/eslint-plugin-ts': 1.8.1(eslint@8.57.0)(typescript@5.5.4) - '@types/eslint': 8.56.11 - eslint: 8.57.0 + '@stylistic/eslint-plugin-js': 2.6.4(eslint@9.9.1) + '@stylistic/eslint-plugin-jsx': 2.6.4(eslint@9.9.1) + '@stylistic/eslint-plugin-plus': 2.6.4(eslint@9.9.1) + '@stylistic/eslint-plugin-ts': 2.6.4(eslint@9.9.1)(typescript@5.5.4) + '@types/eslint': 9.6.0 + eslint: 9.9.1 transitivePeerDependencies: - supports-color - typescript @@ -7679,51 +7673,51 @@ snapshots: magic-string: 0.27.0 string.prototype.matchall: 4.0.11 - '@swc/core-darwin-arm64@1.7.14': + '@swc/core-darwin-arm64@1.7.18': optional: true - '@swc/core-darwin-x64@1.7.14': + '@swc/core-darwin-x64@1.7.18': optional: true - '@swc/core-linux-arm-gnueabihf@1.7.14': + '@swc/core-linux-arm-gnueabihf@1.7.18': optional: true - '@swc/core-linux-arm64-gnu@1.7.14': + '@swc/core-linux-arm64-gnu@1.7.18': optional: true - '@swc/core-linux-arm64-musl@1.7.14': + '@swc/core-linux-arm64-musl@1.7.18': optional: true - '@swc/core-linux-x64-gnu@1.7.14': + '@swc/core-linux-x64-gnu@1.7.18': optional: true - '@swc/core-linux-x64-musl@1.7.14': + '@swc/core-linux-x64-musl@1.7.18': optional: true - '@swc/core-win32-arm64-msvc@1.7.14': + '@swc/core-win32-arm64-msvc@1.7.18': optional: true - '@swc/core-win32-ia32-msvc@1.7.14': + '@swc/core-win32-ia32-msvc@1.7.18': optional: true - '@swc/core-win32-x64-msvc@1.7.14': + '@swc/core-win32-x64-msvc@1.7.18': optional: true - '@swc/core@1.7.14': + '@swc/core@1.7.18': dependencies: '@swc/counter': 0.1.3 '@swc/types': 0.1.12 optionalDependencies: - '@swc/core-darwin-arm64': 1.7.14 - '@swc/core-darwin-x64': 1.7.14 - '@swc/core-linux-arm-gnueabihf': 1.7.14 - '@swc/core-linux-arm64-gnu': 1.7.14 - '@swc/core-linux-arm64-musl': 1.7.14 - '@swc/core-linux-x64-gnu': 1.7.14 - '@swc/core-linux-x64-musl': 1.7.14 - '@swc/core-win32-arm64-msvc': 1.7.14 - '@swc/core-win32-ia32-msvc': 1.7.14 - '@swc/core-win32-x64-msvc': 1.7.14 + '@swc/core-darwin-arm64': 1.7.18 + '@swc/core-darwin-x64': 1.7.18 + '@swc/core-linux-arm-gnueabihf': 1.7.18 + '@swc/core-linux-arm64-gnu': 1.7.18 + '@swc/core-linux-arm64-musl': 1.7.18 + '@swc/core-linux-x64-gnu': 1.7.18 + '@swc/core-linux-x64-musl': 1.7.18 + '@swc/core-win32-arm64-msvc': 1.7.18 + '@swc/core-win32-ia32-msvc': 1.7.18 + '@swc/core-win32-x64-msvc': 1.7.18 '@swc/counter@0.1.3': {} @@ -7749,7 +7743,7 @@ snapshots: '@types/earcut@2.1.4': {} - '@types/eslint@8.56.11': + '@types/eslint@9.6.0': dependencies: '@types/estree': 1.0.5 '@types/json-schema': 7.0.15 @@ -7830,15 +7824,15 @@ snapshots: '@types/wrap-ansi@3.0.0': {} - '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/eslint-plugin@8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4)': dependencies: '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 - eslint: 8.57.0 + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + '@typescript-eslint/scope-manager': 8.2.0 + '@typescript-eslint/type-utils': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.2.0 + eslint: 9.9.1 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 @@ -7848,22 +7842,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/experimental-utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/experimental-utils@5.62.0(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@9.9.1)(typescript@5.5.4) + eslint: 9.9.1 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/scope-manager': 8.2.0 + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) + '@typescript-eslint/visitor-keys': 8.2.0 debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 9.9.1 optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: @@ -7874,33 +7868,26 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@6.21.0': + '@typescript-eslint/scope-manager@8.2.0': dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/visitor-keys': 8.2.0 - '@typescript-eslint/scope-manager@7.18.0': + '@typescript-eslint/type-utils@8.2.0(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 - - '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1)(typescript@5.5.4) debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 ts-api-utils: 1.3.0(typescript@5.5.4) optionalDependencies: typescript: 5.5.4 transitivePeerDependencies: + - eslint - supports-color '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@6.21.0': {} - - '@typescript-eslint/types@7.18.0': {} + '@typescript-eslint/types@8.2.0': {} '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.4)': dependencies: @@ -7916,25 +7903,10 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@6.21.0(typescript@5.5.4)': - dependencies: - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/visitor-keys': 6.21.0 - debug: 4.3.6(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.5.4) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - - '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': + '@typescript-eslint/typescript-estree@8.2.0(typescript@5.5.4)': dependencies: - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/visitor-keys': 7.18.0 + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/visitor-keys': 8.2.0 debug: 4.3.6(supports-color@8.1.1) globby: 11.1.0 is-glob: 4.0.3 @@ -7946,42 +7918,28 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@5.62.0(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.4) - eslint: 8.57.0 + eslint: 9.9.1 eslint-scope: 5.1.1 semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@6.21.0(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@types/json-schema': 7.0.15 - '@types/semver': 7.5.8 - '@typescript-eslint/scope-manager': 6.21.0 - '@typescript-eslint/types': 6.21.0 - '@typescript-eslint/typescript-estree': 6.21.0(typescript@5.5.4) - eslint: 8.57.0 - semver: 7.6.3 - transitivePeerDependencies: - - supports-color - - typescript - - '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': + '@typescript-eslint/utils@8.2.0(eslint@9.9.1)(typescript@5.5.4)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.18.0 - '@typescript-eslint/types': 7.18.0 - '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1) + '@typescript-eslint/scope-manager': 8.2.0 + '@typescript-eslint/types': 8.2.0 + '@typescript-eslint/typescript-estree': 8.2.0(typescript@5.5.4) + eslint: 9.9.1 transitivePeerDependencies: - supports-color - typescript @@ -7991,18 +7949,11 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@6.21.0': - dependencies: - '@typescript-eslint/types': 6.21.0 - eslint-visitor-keys: 3.4.3 - - '@typescript-eslint/visitor-keys@7.18.0': + '@typescript-eslint/visitor-keys@8.2.0': dependencies: - '@typescript-eslint/types': 7.18.0 + '@typescript-eslint/types': 8.2.0 eslint-visitor-keys: 3.4.3 - '@ungap/structured-clone@1.2.0': {} - '@vue/compiler-core@3.4.38': dependencies: '@babel/parser': 7.25.4 @@ -8035,18 +7986,6 @@ snapshots: '@vue/devtools-api@6.6.3': {} - '@vue/eslint-config-typescript@13.0.0(eslint-plugin-vue@9.27.0(eslint@8.57.0))(eslint@8.57.0)(typescript@5.5.4)': - dependencies: - '@typescript-eslint/eslint-plugin': 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 - eslint-plugin-vue: 9.27.0(eslint@8.57.0) - vue-eslint-parser: 9.4.3(eslint@8.57.0) - optionalDependencies: - typescript: 5.5.4 - transitivePeerDependencies: - - supports-color - '@vue/reactivity@3.4.38': dependencies: '@vue/shared': 3.4.38 @@ -8253,7 +8192,7 @@ snapshots: ast-metadata-inferer@0.8.0: dependencies: - '@mdn/browser-compat-data': 5.5.47 + '@mdn/browser-compat-data': 5.5.48 astral-regex@2.0.0: {} @@ -8436,7 +8375,7 @@ snapshots: camel-case@4.1.2: dependencies: pascal-case: 3.1.2 - tslib: 2.6.3 + tslib: 2.7.0 camelcase@5.3.1: {} @@ -8733,10 +8672,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - doiuse@6.0.2: dependencies: browserslist: 4.23.3 @@ -8770,7 +8705,7 @@ snapshots: dot-case@3.0.4: dependencies: no-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.7.0 duplexer@0.1.2: {} @@ -8993,13 +8928,13 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0): + eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1): dependencies: debug: 4.3.6(supports-color@8.1.1) enhanced-resolve: 5.17.1 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + eslint: 9.9.1 + eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1))(eslint@9.9.1) + eslint-plugin-import: 2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1) fast-glob: 3.3.2 get-tsconfig: 4.7.6 is-core-module: 2.15.1 @@ -9010,25 +8945,26 @@ snapshots: - eslint-import-resolver-webpack - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.8.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1))(eslint@9.9.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) - eslint: 8.57.0 + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + eslint: 9.9.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0) + eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1) transitivePeerDependencies: - supports-color - eslint-plugin-compat@4.2.0(eslint@8.57.0): + eslint-plugin-compat@6.0.0(eslint@9.9.1): dependencies: - '@mdn/browser-compat-data': 5.5.47 + '@mdn/browser-compat-data': 5.5.48 ast-metadata-inferer: 0.8.0 browserslist: 4.23.3 caniuse-lite: 1.0.30001651 - eslint: 8.57.0 + eslint: 9.9.1 find-up: 5.0.0 + globals: 15.9.0 lodash.memoize: 4.1.2 semver: 7.6.3 @@ -9036,7 +8972,7 @@ snapshots: dependencies: htmlparser2: 9.1.0 - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.29.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-typescript@3.6.1)(eslint@9.9.1): dependencies: array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 @@ -9044,9 +8980,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.9.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.8.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint-plugin-import@2.29.1)(eslint@9.9.1))(eslint@9.9.1) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -9057,20 +8993,20 @@ snapshots: semver: 6.3.1 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1)(typescript@5.5.4) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@48.11.0(eslint@8.57.0): + eslint-plugin-jsdoc@50.2.2(eslint@9.9.1): dependencies: - '@es-joy/jsdoccomment': 0.46.0 + '@es-joy/jsdoccomment': 0.48.0 are-docs-informative: 0.0.2 comment-parser: 1.4.1 debug: 4.3.6(supports-color@8.1.1) escape-string-regexp: 4.0.0 - eslint: 8.57.0 + eslint: 9.9.1 espree: 10.1.0 esquery: 1.6.0 parse-imports: 2.1.1 @@ -9080,19 +9016,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-plugin-local-rules@2.0.1: {} - - eslint-plugin-mocha@10.5.0(eslint@8.57.0): + eslint-plugin-mocha@10.5.0(eslint@9.9.1): dependencies: - eslint: 8.57.0 - eslint-utils: 3.0.0(eslint@8.57.0) + eslint: 9.9.1 + eslint-utils: 3.0.0(eslint@9.9.1) globals: 13.24.0 rambda: 7.5.0 - eslint-plugin-typescript-compat@1.0.2(eslint@8.57.0)(typescript@5.5.4): + eslint-plugin-typescript-compat@1.0.2(eslint@9.9.1)(typescript@5.5.4): dependencies: - '@mdn/browser-compat-data': 5.5.47 - '@typescript-eslint/experimental-utils': 5.62.0(eslint@8.57.0)(typescript@5.5.4) + '@mdn/browser-compat-data': 5.5.48 + '@typescript-eslint/experimental-utils': 5.62.0(eslint@9.9.1)(typescript@5.5.4) browserslist: 4.23.3 semver: 7.6.3 typescript: 5.5.4 @@ -9100,16 +9034,16 @@ snapshots: - eslint - supports-color - eslint-plugin-vue@9.27.0(eslint@8.57.0): + eslint-plugin-vue@9.27.0(eslint@9.9.1): dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1) + eslint: 9.9.1 globals: 13.24.0 natural-compare: 1.4.0 nth-check: 2.1.1 postcss-selector-parser: 6.1.2 semver: 7.6.3 - vue-eslint-parser: 9.4.3(eslint@8.57.0) + vue-eslint-parser: 9.4.3(eslint@9.9.1) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color @@ -9124,9 +9058,14 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@8.57.0): + eslint-scope@8.0.2: dependencies: - eslint: 8.57.0 + esrecurse: 4.3.0 + estraverse: 5.3.0 + + eslint-utils@3.0.0(eslint@9.9.1): + dependencies: + eslint: 9.9.1 eslint-visitor-keys: 2.1.0 eslint-visitor-keys@2.1.0: {} @@ -9135,38 +9074,34 @@ snapshots: eslint-visitor-keys@4.0.0: {} - eslint@8.57.0: + eslint@9.9.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@9.9.1) '@eslint-community/regexpp': 4.11.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/config-array': 0.18.0 + '@eslint/eslintrc': 3.1.0 + '@eslint/js': 9.9.1 '@humanwhocodes/module-importer': 1.0.1 + '@humanwhocodes/retry': 0.3.0 '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 debug: 4.3.6(supports-color@8.1.1) - doctrine: 3.0.0 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 + eslint-scope: 8.0.2 + eslint-visitor-keys: 4.0.0 + espree: 10.1.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 lodash.merge: 4.6.2 @@ -9256,7 +9191,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -9274,9 +9209,9 @@ snapshots: dependencies: reusify: 1.0.4 - file-entry-cache@6.0.1: + file-entry-cache@8.0.0: dependencies: - flat-cache: 3.2.0 + flat-cache: 4.0.1 file-entry-cache@9.0.0: dependencies: @@ -9312,7 +9247,7 @@ snapshots: dependencies: detect-file: 1.0.0 is-glob: 4.0.3 - micromatch: 4.0.7 + micromatch: 4.0.8 resolve-dir: 1.0.1 fined@2.0.0: @@ -9325,11 +9260,10 @@ snapshots: flagged-respawn@2.0.0: {} - flat-cache@3.2.0: + flat-cache@4.0.1: dependencies: flatted: 3.3.1 keyv: 4.5.4 - rimraf: 3.0.2 flat-cache@5.0.0: dependencies: @@ -9544,6 +9478,10 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@14.0.0: {} + + globals@15.9.0: {} + globalthis@1.0.4: dependencies: define-properties: 1.2.1 @@ -9656,7 +9594,7 @@ snapshots: findup-sync: 5.0.0 gulplog: 2.2.0 has-gulplog: 1.0.0 - micromatch: 4.0.7 + micromatch: 4.0.8 resolve: 1.22.8 gulp-match@1.1.0: @@ -10155,7 +10093,7 @@ snapshots: jsbn@1.1.0: {} - jsdoc-type-pratt-parser@4.0.0: {} + jsdoc-type-pratt-parser@4.1.0: {} jsdom@24.1.1: dependencies: @@ -10312,7 +10250,7 @@ snapshots: lower-case@2.0.2: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 lru-cache@10.4.3: {} @@ -10367,7 +10305,7 @@ snapshots: merge2@1.4.1: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -10388,10 +10326,6 @@ snapshots: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.3: - dependencies: - brace-expansion: 2.0.1 - minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -10503,7 +10437,7 @@ snapshots: no-case@3.0.4: dependencies: lower-case: 2.0.2 - tslib: 2.6.3 + tslib: 2.7.0 node-gyp@10.2.0: dependencies: @@ -10695,7 +10629,7 @@ snapshots: param-case@3.0.4: dependencies: dot-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.7.0 parent-module@1.0.1: dependencies: @@ -10728,7 +10662,7 @@ snapshots: pascal-case@3.1.2: dependencies: no-case: 3.0.4 - tslib: 2.6.3 + tslib: 2.7.0 path-exists@4.0.0: {} @@ -11261,7 +11195,7 @@ snapshots: rxjs@7.8.1: dependencies: - tslib: 2.6.3 + tslib: 2.7.0 safe-array-concat@1.1.2: dependencies: @@ -11699,7 +11633,7 @@ snapshots: known-css-properties: 0.34.0 mathml-tag-names: 2.1.3 meow: 13.2.0 - micromatch: 4.0.7 + micromatch: 4.0.8 normalize-path: 3.0.0 picocolors: 1.0.1 postcss: 8.4.41 @@ -11755,7 +11689,7 @@ snapshots: synckit@0.9.1: dependencies: '@pkgr/core': 0.1.1 - tslib: 2.6.3 + tslib: 2.7.0 table@6.8.2: dependencies: @@ -11880,7 +11814,7 @@ snapshots: dependencies: typescript: 5.5.4 - ts-node@10.9.2(@swc/core@1.7.14)(@types/node@22.5.0)(typescript@5.5.4): + ts-node@10.9.2(@swc/core@1.7.18)(@types/node@22.5.0)(typescript@5.5.4): dependencies: '@cspotcode/source-map-support': 0.8.1 '@tsconfig/node10': 1.0.11 @@ -11898,7 +11832,7 @@ snapshots: v8-compile-cache-lib: 3.0.1 yn: 3.1.1 optionalDependencies: - '@swc/core': 1.7.14 + '@swc/core': 1.7.18 tsconfig-paths@3.15.0: dependencies: @@ -11915,7 +11849,7 @@ snapshots: tslib@1.14.1: {} - tslib@2.6.3: {} + tslib@2.7.0: {} tsutils@3.21.0(typescript@5.5.4): dependencies: @@ -11985,6 +11919,17 @@ snapshots: dependencies: is-typedarray: 1.0.0 + typescript-eslint@8.2.0(eslint@9.9.1)(typescript@5.5.4): + dependencies: + '@typescript-eslint/eslint-plugin': 8.2.0(@typescript-eslint/parser@8.2.0(eslint@9.9.1)(typescript@5.5.4))(eslint@9.9.1)(typescript@5.5.4) + '@typescript-eslint/parser': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + '@typescript-eslint/utils': 8.2.0(eslint@9.9.1)(typescript@5.5.4) + optionalDependencies: + typescript: 5.5.4 + transitivePeerDependencies: + - eslint + - supports-color + typescript@5.5.4: {} unbox-primitive@1.0.2: @@ -12135,10 +12080,10 @@ snapshots: replace-ext: 2.0.0 teex: 1.0.1 - vue-eslint-parser@9.4.3(eslint@8.57.0): + vue-eslint-parser@9.4.3(eslint@9.9.1): dependencies: debug: 4.3.6(supports-color@8.1.1) - eslint: 8.57.0 + eslint: 9.9.1 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 espree: 9.6.1 diff --git a/src/.eslintrc.json b/src/.eslintrc.json deleted file mode 100644 index 26d5a9ef..00000000 --- a/src/.eslintrc.json +++ /dev/null @@ -1,81 +0,0 @@ -{ - "extends": [ - "plugin:import/typescript", - "plugin:compat/recommended", - "plugin:typescript-compat/recommended" - ], - "plugins": [ - "import" - ], - "parserOptions": { - "sourceType": "module" - }, - "env": { - "node": false - }, - "rules": { - "@typescript-eslint/consistent-type-imports": [ - "warn", - { - "prefer": "type-imports" - } - ], - "@typescript-eslint/no-unsafe-declaration-merging": "off", - "import/consistent-type-specifier-style": [ - "warn", - "prefer-top-level" - ], - "import/newline-after-import": "warn", - "import/no-cycle": [ - "warn", - { - "ignoreExternal": true - } - ], - "import/no-duplicates": "warn", - "import/no-unresolved": "error", - "import/order": [ - "warn", - { - "groups": [ - [ - "builtin", - "external" - ], - [ - "internal", - "parent", - "sibling", - "index", - "object" - ], - "type" - ], - "newlines-between": "always" - } - ], - "no-duplicate-imports": "off", - "sort-imports": "off" - }, - "settings": { - "import/resolver": { - "typescript": { - "project": [ - "src/app", - "src/client", - "src/core", - "src/other/donate", - "src/other/service" - ] - } - }, - "polyfills": [ - "globalThis", - "navigator.locks", - "Array.flatMap", - "Array.prototype.toReversed", - "Array.prototype.flatMap", - "PromiseConstructor.withResolvers" - ] - } -} \ No newline at end of file diff --git a/src/app/.eslintrc.json b/src/app/.eslintrc.json deleted file mode 100644 index 3981ad89..00000000 --- a/src/app/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parserOptions": { - "project": true - } -} \ No newline at end of file diff --git a/src/app/vue/.eslintrc.json b/src/app/vue/.eslintrc.json deleted file mode 100644 index fd155204..00000000 --- a/src/app/vue/.eslintrc.json +++ /dev/null @@ -1,40 +0,0 @@ -{ - "extends": [ - "plugin:vue/vue3-essential" - ], - "parser": "vue-eslint-parser", - "parserOptions": { - "parser": "@typescript-eslint/parser", - "extraFileExtensions": [ - ".vue" - ], - "sourceType": "module", - "project": true - }, - "rules": { - "@stylistic/max-len": "off", // see vue - "no-mixed-spaces-and-tabs": "off", // to work with Volar formatter - "no-undef": "off", // This is redudant as TypeScript catches things that are really undefined - "vue/no-mutating-props": "off", // see https://github.com/vuejs/eslint-plugin-vue/issues/1371 - "vue/max-len": [ - "warn", - { - "code": 200, - "ignoreComments": true, - "ignoreHTMLAttributeValues": true, - "ignoreStrings": true, - "tabWidth": 4 - } - ], - "vue/multi-word-component-names": "off", - "vue/script-indent": [ - "warn", - "tab", - { - "baseIndent": 1, - "ignores": [], - "switchCase": 1 - } - ] - } -} \ No newline at end of file diff --git a/src/app/vue/gadgets/form/input.ts b/src/app/vue/gadgets/form/input.ts index e3500002..5798017a 100644 --- a/src/app/vue/gadgets/form/input.ts +++ b/src/app/vue/gadgets/form/input.ts @@ -7,7 +7,7 @@ export function useFieldId(): string { // eslint-disable-next-line @typescript-eslint/explicit-function-return-type export function useInput( props: { readonly modelValue: unknown }, - emit: Function + emit: Action ) { const value = shallowRef(); let focused = false; diff --git a/src/app/vue/toolbar/helpMenu.vue b/src/app/vue/toolbar/helpMenu.vue index 24c5e416..c8071b96 100644 --- a/src/app/vue/toolbar/helpMenu.vue +++ b/src/app/vue/toolbar/helpMenu.vue @@ -53,7 +53,6 @@ const notify = shallowRef(false); const checking = shallowRef(false); - // eslint-disable-next-line compat/compat const serviceWorker = navigator.serviceWorker; onMounted(() => { diff --git a/src/app/vue/welcome.vue b/src/app/vue/welcome.vue index 92dda7cf..9cac0426 100644 --- a/src/app/vue/welcome.vue +++ b/src/app/vue/welcome.vue @@ -109,7 +109,6 @@ const installAvailable = "onbeforeinstallprompt" in window && hasServiceWorker && - // eslint-disable-next-line compat/compat !navigator.serviceWorker.controller; const state = shallowRef(installState.uninstalled); diff --git a/src/client/.eslintrc.json b/src/client/.eslintrc.json deleted file mode 100644 index 7366d8a5..00000000 --- a/src/client/.eslintrc.json +++ /dev/null @@ -1,19 +0,0 @@ -{ - "plugins": [ - "jsdoc" - ], - "parserOptions": { - "project": true - }, - "rules": { - "jsdoc/require-jsdoc": [ - "warn", - { - "require": { - "ClassDeclaration": true, - "FunctionDeclaration": false - } - } - ] - } -} \ No newline at end of file diff --git a/src/client/project/components/layout/river.ts b/src/client/project/components/layout/river.ts index 9ffa5619..077ce421 100644 --- a/src/client/project/components/layout/river.ts +++ b/src/client/project/components/layout/river.ts @@ -31,7 +31,6 @@ export class River extends Control { private readonly _hinge: SmoothGraphics; private readonly _ridge: SmoothGraphics; - constructor(layout: Layout, edge: Edge, graphics: GraphicsData) { const sheet = layout.$sheet; super(sheet); diff --git a/src/client/project/project.ts b/src/client/project/project.ts index e926fc62..218d700f 100644 --- a/src/client/project/project.ts +++ b/src/client/project/project.ts @@ -204,7 +204,7 @@ function callCore(worker: Worker, request: CoreRequest): Promise { ///#if !DEBUG worker.terminate(); // Terminate immediately in this case resolve({ - "error": { + error: { message: "Computation timeout", coreTrace: "", } as CoreError, diff --git a/src/client/screen/display.ts b/src/client/screen/display.ts index 0b7ca099..7b24fc62 100644 --- a/src/client/screen/display.ts +++ b/src/client/screen/display.ts @@ -3,7 +3,6 @@ import { Container } from "@pixi/display"; import { LINE_SCALE_MODE, settings } from "@pixi/graphics-smooth"; import { Ticker } from "@pixi/core"; - import ProjectService from "client/services/projectService"; import { useBackground } from "./background"; import { useControlEventBoundary } from "./controlEventBoundary"; @@ -70,7 +69,6 @@ namespace Display { export let designs: Container; export let ui: Container; - // Automatically switch Pixi on or off by the opening of projects async function toggleDisplay(on: boolean): Promise { if(on && !ticker.started) ticker.start(); diff --git a/src/core/.eslintrc.json b/src/core/.eslintrc.json deleted file mode 100644 index 8614f698..00000000 --- a/src/core/.eslintrc.json +++ /dev/null @@ -1,24 +0,0 @@ -{ - "plugins": [ - "jsdoc" - ], - "parserOptions": { - "project": true - }, - "rules": { - // This rule is good for identifying unnecessary optional chaining, - // but otherwise is giving too many warnings. - // So we keep it off in most cases and turn it on as needed. - "@typescript-eslint/no-unnecessary-condition": "off", - "jsdoc/require-jsdoc": [ - "warn", - { - "require": { - "ClassDeclaration": true, - "FunctionDeclaration": false - }, - "enableFixer": false - } - ] - } -} \ No newline at end of file diff --git a/src/core/design/context/aabb/aabb.ts b/src/core/design/context/aabb/aabb.ts index 702610a8..6dc7d51b 100644 --- a/src/core/design/context/aabb/aabb.ts +++ b/src/core/design/context/aabb/aabb.ts @@ -19,7 +19,6 @@ const SIDES = [Side.top, Side.right, Side.bottom, Side.left]; const minComparator: Comparator = (a, b) => a.$key - b.$key; const maxComparator: Comparator = (a, b) => b.$key - a.$key; - //================================================================= /** * {@link AABB} (Axis-Aligned Bounding Box) is an orthogonal rectangular range. diff --git a/src/core/design/layout/joiner/logic/standardJoinLogic.ts b/src/core/design/layout/joiner/logic/standardJoinLogic.ts index 56a6152f..bfedc92b 100644 --- a/src/core/design/layout/joiner/logic/standardJoinLogic.ts +++ b/src/core/design/layout/joiner/logic/standardJoinLogic.ts @@ -63,7 +63,6 @@ export class StandardJoinLogic extends BaseJoinLogic { yield this._result(true, R.$dist(T)); } - private _tryConvexTransform(e: Line, B: Point, D: Point, i: Index): [Point, Point] | null { const { pt } = this.data; const { j1, j2, f } = this; diff --git a/src/core/design/layout/pattern/gadget.ts b/src/core/design/layout/pattern/gadget.ts index 8566273b..af00d3be 100644 --- a/src/core/design/layout/pattern/gadget.ts +++ b/src/core/design/layout/pattern/gadget.ts @@ -156,7 +156,6 @@ export class Gadget implements JGadget { return false; } - ///////////////////////////////////////////////////////////////////////////////////////////////////// // Private methods ///////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/math/fraction.ts b/src/core/math/fraction.ts index dc9c25d4..e4eab564 100644 --- a/src/core/math/fraction.ts +++ b/src/core/math/fraction.ts @@ -207,7 +207,6 @@ export class Fraction { */ public div(v: Fraction): Fraction { return this.c().d(v); } - ///////////////////////////////////////////////////////////////////////////////////////////////////// // Compare methods ///////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/core/math/geometry/line.ts b/src/core/math/geometry/line.ts index 33991b9b..aa2d77e0 100644 --- a/src/core/math/geometry/line.ts +++ b/src/core/math/geometry/line.ts @@ -213,7 +213,6 @@ export class Line { return new Line(this.p1.$add(v), this.p2.$add(v)); } - ///////////////////////////////////////////////////////////////////////////////////////////////////// // Private methods ///////////////////////////////////////////////////////////////////////////////////////////////////// diff --git a/src/other/donate/.eslintrc.json b/src/other/donate/.eslintrc.json deleted file mode 100644 index fac2bb7e..00000000 --- a/src/other/donate/.eslintrc.json +++ /dev/null @@ -1,49 +0,0 @@ -{ - "extends": [ - "plugin:vue/vue3-essential" - ], - "parser": "vue-eslint-parser", - "parserOptions": { - "parser": "@typescript-eslint/parser", - "extraFileExtensions": [ - ".vue" - ], - "sourceType": "module", - "project": "./src/other/donate/tsconfig.json" - }, - "rules": { - "max-len": "off", // see vue - "new-cap": [ - "warn", - { - "capIsNewExceptions": [ - "Component", - "Prop", - "Watch" - ] - } - ], - "no-undef": "off", - "vue/no-mutating-props": "off", // see https://github.com/vuejs/eslint-plugin-vue/issues/1371 - "vue/max-len": [ - "warn", - { - "code": 200, - "ignoreComments": true, - "ignoreHTMLAttributeValues": true, - "ignoreStrings": true, - "tabWidth": 4 - } - ], - "vue/multi-word-component-names": "off", - "vue/script-indent": [ - "warn", - "tab", - { - "baseIndent": 1, - "ignores": [], - "switchCase": 1 - } - ] - } -} \ No newline at end of file diff --git a/src/other/donate/paypal.ts b/src/other/donate/paypal.ts index bb98448c..99399801 100644 --- a/src/other/donate/paypal.ts +++ b/src/other/donate/paypal.ts @@ -14,23 +14,23 @@ interface Store { function onApprove(details: PayPal.OrderResponseBody, store: Store): void { if(gtag) { gtag("event", "purchase", { - "transaction_id": details.id, - "affiliation": "PayPal", - "value": store.amount.value, - "currency": "USD", - "shipping": store.extra.value, - "items": [ + transaction_id: details.id, + affiliation: "PayPal", + value: store.amount.value, + currency: "USD", + shipping: store.extra.value, + items: [ { - "id": "default", - "name": "Supporting Box Pleating Studio", - "category": "Donation", - "quantity": 1, - "price": store.amount.value, + id: "default", + name: "Supporting Box Pleating Studio", + category: "Donation", + quantity: 1, + price: store.amount.value, }, ], }); } - store.name.value = details.payer.name?.given_name; + store.name.value = details.payer!.name?.given_name; store.step.value = 2; } @@ -41,7 +41,7 @@ export function initPayPalButton(init: (action: PayPal.OnInitActions) => void, s } const purchase_units: PayPal.PurchaseUnit[] = []; - purchase_units[0] = { amount: { value: "" } }; + purchase_units[0] = { amount: { currency_code: "USD", value: "" } }; if(!paypal.Buttons) return; // type guard paypal.Buttons({ @@ -63,7 +63,7 @@ export function initPayPalButton(init: (action: PayPal.OnInitActions) => void, s }, createOrder(data: Record, actions: PayPal.CreateOrderActions) { store.processing.value = true; - return actions.order.create({ purchase_units }); + return actions.order.create({ intent: "AUTHORIZE", purchase_units }); }, onApprove(data: Record, actions: PayPal.OnApproveActions): Promise { if(!actions.order) return Promise.resolve(); diff --git a/src/other/service/.eslintrc.json b/src/other/service/.eslintrc.json deleted file mode 100644 index f273bdb0..00000000 --- a/src/other/service/.eslintrc.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "parserOptions": { - "project": "./src/other/service/tsconfig.json" - } -} diff --git a/src/public/.eslintrc.json b/src/public/.eslintrc.json deleted file mode 100644 index af7f6835..00000000 --- a/src/public/.eslintrc.json +++ /dev/null @@ -1,12 +0,0 @@ -{ - "root": true, - "env": { - "browser": true - }, - "extends": [ - "plugin:compat/recommended" - ], - "plugins": [ - "html" - ] -} \ No newline at end of file diff --git a/src/public/donate.htm b/src/public/donate.htm index b16a14e4..3aa64fbd 100644 --- a/src/public/donate.htm +++ b/src/public/donate.htm @@ -12,8 +12,8 @@ diff --git a/src/public/index.htm b/src/public/index.htm index 20bf7724..a62b13aa 100644 --- a/src/public/index.htm +++ b/src/public/index.htm @@ -43,10 +43,10 @@ page_title: document.title, page_path: "/", app_name: document.title, - app_version: "__APP_VERSION__" + app_version: "__APP_VERSION__", }; - gtag('js', new Date()); - gtag('config', 'G-GG1TEZGBCQ', app_config); + gtag("js", new Date()); + gtag("config", "G-GG1TEZGBCQ", app_config); // Setup dark mode if needed immediately on first visit, to avoid flashing if(!localStorage.getItem("settings") && matchMedia("(prefers-color-scheme: dark)").matches) { @@ -191,7 +191,7 @@ -->