From 8c84c69cd80a0b6091aaa055401c422ec3fb56d2 Mon Sep 17 00:00:00 2001 From: Evan Sutherland Date: Tue, 5 Nov 2024 22:02:22 -0600 Subject: [PATCH 1/5] replace prefetchq/eslint-config with eslint v9 config --- .vscode/settings.json | 8 + eslint.config.js | 190 ++ package-lock.json | 2522 ++++------------- package.json | 7 +- src/.eslintrc | 62 - src/components/echo.ts | 5 +- src/components/helloWorld.ts | 2 +- src/components/rejection.ts | 4 +- src/components/routerLink.browser.spec.ts | 14 +- src/components/routerLink.vue | 13 +- src/components/routerView.browser.spec.ts | 11 +- src/components/routerView.vue | 2 +- src/compositions/index.ts | 2 +- src/compositions/useLink.ts | 10 +- src/compositions/usePrefetching.ts | 8 +- src/compositions/usePropStore.ts | 2 +- src/compositions/useRejection.ts | 2 +- src/compositions/useRoute.browser.spec.ts | 2 +- src/compositions/useRoute.ts | 2 +- src/compositions/useRouter.ts | 2 +- src/compositions/useRouterDepth.ts | 2 +- src/errors/initialRouteMissingError.ts | 2 +- src/errors/metaPropertyConflict.ts | 2 +- src/errors/navigationAbortError.ts | 2 +- src/errors/routeNotFoundError.ts | 2 +- src/errors/routerRejectionError.ts | 1 - src/guards/routes.spec-d.ts | 2 +- src/guards/routes.ts | 2 +- src/main.ts | 2 +- src/models/RouteHooks.ts | 2 +- src/services/combineHash.ts | 2 +- src/services/combineMeta.spec.ts | 2 +- src/services/combineMeta.ts | 4 +- src/services/combinePath.spec.ts | 2 +- src/services/combinePath.ts | 2 +- src/services/combineQuery.spec.ts | 2 +- src/services/combineQuery.ts | 2 +- src/services/combineState.spec.ts | 2 +- src/services/combineState.ts | 2 +- src/services/component.browser.spec.ts | 4 +- src/services/component.ts | 3 +- src/services/createCurrentRoute.ts | 6 +- src/services/createExternalRoute.ts | 2 +- src/services/createIsExternal.spec.ts | 2 +- src/services/createIsExternal.ts | 2 +- src/services/createMaybeRelativeUrl.ts | 2 +- src/services/createParam.ts | 6 +- src/services/createPropStore.ts | 2 +- src/services/createResolvedRouteQuery.ts | 2 +- src/services/createRoute.spec.ts | 2 +- src/services/createRoute.ts | 50 +- src/services/createRouteHookStore.ts | 3 +- src/services/createRouteId.ts | 2 +- src/services/createRouter.browser.spec.ts | 3 +- src/services/createRouter.spec.ts | 19 +- src/services/createRouter.ts | 11 +- src/services/createRouterFind.spec.ts | 4 +- .../createRouterHistory.browser.spec.ts | 2 +- src/services/createRouterHistory.ts | 7 +- src/services/createRouterHooks.ts | 2 +- src/services/createRouterReject.ts | 4 +- src/services/createRouterResolve.spec.ts | 10 +- src/services/createRouterResolve.ts | 10 +- src/services/createRouterRoute.spec.ts | 2 +- src/services/createRouterRoute.ts | 2 +- src/services/getInitialUrl.browser.spec.ts | 3 +- src/services/getInitialUrl.spec.ts | 2 +- src/services/getInitialUrl.ts | 2 +- src/services/getParamsForString.ts | 4 +- .../getResolvedRouteForUrl.browser.spec.ts | 3 +- src/services/getResolvedRouteForUrl.ts | 2 +- src/services/getRouteHooks.spec.ts | 2 +- src/services/getRouteHooks.ts | 2 +- src/services/hooks.spec.ts | 20 +- src/services/hooks.ts | 4 +- src/services/index.ts | 2 +- src/services/insertBaseRoute.spec.ts | 2 +- src/services/insertBaseRoute.ts | 2 +- src/services/isRejectionRoute.ts | 2 +- src/services/paramValidation.spec.ts | 2 +- src/services/paramValidation.ts | 2 +- src/services/params.spec.ts | 4 +- src/services/params.ts | 10 +- src/services/paramsFinder.spec.ts | 2 +- src/services/paramsFinder.ts | 2 +- src/services/path.spec.ts | 2 +- src/services/query.spec.ts | 2 +- src/services/routeMatchRules.spec.ts | 2 +- src/services/routeMatchScore.spec.ts | 2 +- src/services/routeMatchScore.ts | 6 +- src/services/routeRegex.spec.ts | 3 +- src/services/routeRegex.ts | 13 +- src/services/state.spec.ts | 2 +- src/services/state.ts | 2 +- src/services/urlAssembly.spec.ts | 5 +- src/services/withDefault.ts | 2 +- src/services/withQuery.spec.ts | 2 +- src/services/withQuery.ts | 2 +- src/types/createRouteOptions.ts | 2 +- src/types/hash.ts | 2 +- src/types/hooks.ts | 2 +- src/types/host.ts | 4 +- src/types/injectionDepth.ts | 2 +- src/types/name.ts | 2 +- src/types/params.ts | 8 +- src/types/path.ts | 4 +- src/types/prefetch.ts | 2 +- src/types/query.ts | 4 +- src/types/register.ts | 2 +- src/types/resolved.spec-d.ts | 2 +- src/types/resolved.ts | 2 +- src/types/resolvedQuery.ts | 2 +- src/types/route.spec-d.ts | 2 +- src/types/route.ts | 2 +- src/types/routeMatchRule.ts | 2 +- src/types/routeUpdate.ts | 4 +- src/types/routeWithParams.ts | 2 +- src/types/router.ts | 2 +- src/types/routerFind.ts | 2 +- src/types/routerPush.ts | 2 +- src/types/routesMap.spec-ts.ts | 1 + src/types/routesMap.ts | 2 +- src/types/state.ts | 2 +- src/types/url.ts | 2 +- src/types/utilities.ts | 3 +- src/utilities/array.ts | 2 +- src/utilities/checkDuplicateKeys.spec.ts | 22 +- src/utilities/checkDuplicateKeys.ts | 6 +- src/utilities/checkDuplicateNames.spec.ts | 10 +- src/utilities/checkDuplicateNames.ts | 2 +- src/utilities/components.spec.ts | 2 +- src/utilities/components.ts | 4 +- src/utilities/guards.spec.ts | 4 +- src/utilities/guards.ts | 2 +- src/utilities/isBrowser.browser.spec.ts | 2 +- src/utilities/isBrowser.spec.ts | 2 +- src/utilities/isBrowser.ts | 1 - src/utilities/makeOptional.ts | 2 +- src/utilities/testHelpers.ts | 10 +- 139 files changed, 1001 insertions(+), 2330 deletions(-) create mode 100644 eslint.config.js delete mode 100644 src/.eslintrc diff --git a/.vscode/settings.json b/.vscode/settings.json index 62adfa76..b69978fb 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -3,9 +3,17 @@ "editor.codeActionsOnSave": { "source.fixAll.eslint": "explicit" }, + "eslint.rules.customizations": [ + { + "rule": "@stylistic/*", + "fixable": true, + "severity": "warn" + } + ], "typescript.tsdk": "node_modules/typescript/lib", "cSpell.words": [ "composables", + "tseslint", "vitepress" ], } \ No newline at end of file diff --git a/eslint.config.js b/eslint.config.js new file mode 100644 index 00000000..91bf3677 --- /dev/null +++ b/eslint.config.js @@ -0,0 +1,190 @@ +import globals from 'globals' +import tseslint from 'typescript-eslint' +import pluginVue from 'eslint-plugin-vue' +import stylistic from '@stylistic/eslint-plugin' + +/** @type {import('eslint').Linter.Config[]} */ +export default [ + ...tseslint.configs.strictTypeChecked, + ...tseslint.configs.stylisticTypeChecked, + stylistic.configs['recommended-flat'], + { + files: [ + '**/*.{ts,vue}', + ], + languageOptions: { + globals: globals.browser, + parserOptions: { + parser: tseslint.parser, + projectService: true, + tsconfigRootDir: import.meta.dirname, + extraFileExtensions: ['.vue'], + }, + }, + rules: { + 'no-duplicate-imports': ['warn'], + 'no-extra-parens': ['warn'], + '@typescript-eslint/array-type': ['warn'], + '@typescript-eslint/consistent-type-definitions': ['off'], + '@typescript-eslint/explicit-function-return-type': ['warn', { allowExpressions: true }], + '@typescript-eslint/explicit-member-accessibility': ['warn'], + '@typescript-eslint/method-signature-style': ['warn', 'property'], + '@typescript-eslint/no-empty-function': ['off'], + '@typescript-eslint/no-empty-object-type': ['off'], + '@typescript-eslint/no-floating-promises': ['off'], + '@typescript-eslint/no-inferrable-types': ['off'], + '@typescript-eslint/no-unsafe-argument': ['off'], + '@typescript-eslint/no-unsafe-assignment': ['off'], + '@typescript-eslint/no-unsafe-call': ['off'], + '@typescript-eslint/no-unsafe-member-access': ['off'], + '@typescript-eslint/no-unsafe-return': ['off'], + '@typescript-eslint/no-unused-vars': ['warn', { ignoreRestSiblings: true }], + '@typescript-eslint/non-nullable-type-assertion-style': ['warn'], + '@typescript-eslint/parameter-properties': ['warn'], + '@typescript-eslint/prefer-enum-initializers': ['warn'], + '@typescript-eslint/prefer-nullish-coalescing': ['warn', { ignoreConditionalTests: true }], + '@typescript-eslint/prefer-readonly': ['warn'], + '@typescript-eslint/require-array-sort-compare': ['warn'], + '@typescript-eslint/require-await': ['off'], + '@typescript-eslint/restrict-template-expressions': ['off'], + '@typescript-eslint/switch-exhaustiveness-check': ['warn'], + '@typescript-eslint/unbound-method': ['off'], + '@typescript-eslint/unified-signatures': ['off'], + '@stylistic/array-bracket-newline': ['warn', 'consistent'], + '@stylistic/array-element-newline': ['warn', { consistent: true, multiline: true }], + '@stylistic/brace-style': ['warn', '1tbs'], + '@stylistic/comma-dangle': ['warn', { arrays: 'always-multiline', objects: 'always-multiline', imports: 'never', exports: 'never', functions: 'always-multiline' }], + '@stylistic/comma-spacing': ['warn'], + '@stylistic/curly-newline': ['warn', { multiline: true, consistent: true }], + '@stylistic/dot-location': ['warn', 'property'], + '@stylistic/func-call-spacing': ['warn'], + '@stylistic/function-call-spacing': ['warn'], + '@stylistic/implicit-arrow-linebreak': ['warn'], + '@stylistic/key-spacing': ['warn', { afterColon: true }], + '@stylistic/keyword-spacing': ['warn', { before: true, after: true }], + '@stylistic/member-delimiter-style': ['warn', { multiline: { delimiter: 'comma', requireLast: true }, singleline: { delimiter: 'comma', requireLast: false } }], + '@stylistic/newline-per-chained-call': ['warn', { ignoreChainWithDepth: 2 }], + '@stylistic/no-confusing-arrow': ['warn'], + '@stylistic/object-curly-newline': ['warn', { multiline: true, consistent: true }], + '@stylistic/object-curly-spacing': ['warn', 'always'], + '@stylistic/operator-linebreak': ['warn', 'none'], + '@stylistic/object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }], + '@stylistic/one-var-declaration-per-line': ['warn'], + '@stylistic/quotes': ['warn', 'single', { avoidEscape: true }], + '@stylistic/space-before-function-paren': ['warn', { anonymous: 'never', named: 'never', asyncArrow: 'always' }], + '@stylistic/spaced-comment': ['warn', 'always', { markers: ['/'] }], + '@stylistic/switch-colon-spacing': ['warn'], + }, + }, + ...pluginVue.configs['flat/recommended'], + { + files: [ + '**/*.vue', + ], + rules: { + '@stylistic/indent': ['off'], + 'vue/script-indent': [ + 'warn', 2, { baseIndent: 1 }, + ], + 'vue/array-bracket-newline': ['warn', 'consistent'], + 'vue/array-element-newline': ['warn', { consistent: true, multiline: true }], + 'vue/brace-style': ['warn', '1tbs'], + 'vue/comma-dangle': ['warn', { arrays: 'always-multiline', objects: 'always-multiline', imports: 'never', exports: 'never', functions: 'always-multiline' }], + 'vue/comma-spacing': ['warn', { before: true, after: false }], + 'vue/dot-location': ['warn', 'property'], + 'vue/key-spacing': ['warn', { afterColon: true }], + 'vue/keyword-spacing': ['warn', { before: true, after: true }], + 'vue/object-curly-newline': ['warn', { multiline: true, consistent: true }], + 'vue/object-curly-spacing': ['warn', 'always'], + 'vue/operator-linebreak': ['warn', 'none'], + 'vue/object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }], + 'vue/block-tag-newline': ['warn'], + 'vue/brace-style': ['warn', '1tbs'], + 'vue/camelcase': ['warn'], + 'vue/comma-dangle': ['warn', { arrays: 'always-multiline', objects: 'always-multiline', imports: 'never', exports: 'never', functions: 'never' }], + 'vue/comma-spacing': ['warn'], + 'vue/component-definition-name-casing': ['warn'], + 'vue/component-name-in-template-casing': ['off'], + 'vue/component-options-name-casing': ['warn'], + 'vue/component-tags-order': ['warn', { order: ['template', 'script', 'style'] }], + 'vue/custom-event-name-casing': ['warn'], + 'vue/dot-location': ['warn', 'property'], + 'vue/dot-notation': ['warn'], + 'vue/first-attribute-linebreak': ['warn'], + 'vue/func-call-spacing': ['warn'], + 'vue/html-button-has-type': ['warn'], + 'vue/html-closing-bracket-newline': ['warn'], + 'vue/html-closing-bracket-spacing': ['warn'], + 'vue/html-comment-content-newline': ['warn'], + 'vue/html-comment-content-spacing': ['warn'], + 'vue/html-comment-indent': ['warn'], + 'vue/html-end-tags': ['warn'], + 'vue/html-indent': ['warn'], + 'vue/html-quotes': ['warn'], + 'vue/html-self-closing': ['warn'], + 'vue/key-spacing': ['warn', { afterColon: true }], + 'vue/keyword-spacing': ['warn', { before: true, after: true }], + 'vue/match-component-file-name': ['warn'], + 'vue/max-attributes-per-line': ['warn', { singleline: { max: 5 }, multiline: { max: 1 } }], + 'vue/multi-word-component-names': ['warn'], + 'vue/multiline-html-element-content-newline': ['warn'], + 'vue/mustache-interpolation-spacing': ['warn'], + 'vue/new-line-between-multi-line-property': ['warn'], + 'vue/next-tick-style': ['warn'], + 'vue/no-boolean-default': ['warn'], + 'vue/no-child-content': ['warn'], + 'vue/no-duplicate-attr-inheritance': ['warn'], + 'vue/no-empty-component-block': ['warn'], + 'vue/no-expose-after-await': ['warn'], + 'vue/no-extra-parens': ['warn'], + 'vue/no-invalid-model-keys': ['warn'], + 'vue/no-lone-template': ['warn'], + 'vue/no-multi-spaces': ['warn'], + 'vue/no-multiple-objects-in-class': ['warn'], + 'vue/no-multiple-slot-args': ['warn'], + 'vue/no-potential-component-option-typo': ['warn'], + 'vue/no-reserved-component-names': ['warn'], + 'vue/no-spaces-around-equal-signs-in-attribute': ['warn'], + 'vue/no-static-inline-styles': ['warn'], + 'vue/no-template-shadow': ['warn'], + 'vue/no-this-in-before-route-enter': ['warn'], + 'vue/no-undef-properties': ['warn'], + 'vue/no-unused-properties': ['warn'], + 'vue/no-unused-refs': ['warn'], + 'vue/no-use-computed-property-like-method': ['warn'], + 'vue/no-useless-concat': ['warn'], + 'vue/no-useless-mustaches': ['warn'], + 'vue/no-useless-v-bind': ['warn'], + 'vue/no-v-html': ['warn'], + 'vue/no-v-text': ['warn'], + 'vue/object-curly-newline': ['warn', { multiline: true, consistent: true }], + 'vue/object-curly-spacing': ['warn', 'always'], + 'vue/object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }], + 'vue/one-component-per-file': ['warn'], + 'vue/order-in-components': ['warn'], + 'vue/padding-line-between-blocks': ['warn'], + 'vue/prefer-separate-static-class': ['warn'], + 'vue/prefer-template': ['warn'], + 'vue/prop-name-casing': ['warn'], + 'vue/require-default-prop': ['warn'], + 'vue/require-direct-export': ['warn'], + 'vue/require-explicit-emits': ['warn'], + 'vue/require-expose': ['warn'], + 'vue/require-name-property': ['warn'], + 'vue/require-prop-types': ['warn'], + 'vue/script-indent': ['warn', 2, { baseIndent: 1, switchCase: 1 }], + 'vue/singleline-html-element-content-newline': ['warn'], + 'vue/space-in-parens': ['warn'], + 'vue/this-in-template': ['warn'], + 'vue/v-bind-style': ['warn'], + 'vue/v-on-event-hyphenation': ['warn'], + 'vue/v-on-function-call': ['warn'], + 'vue/v-on-style': ['warn'], + 'vue/v-slot-style': ['warn'], + }, + }, + { + files: ['**/*.js'], + ...tseslint.configs.disableTypeChecked, + }, +] diff --git a/package-lock.json b/package-lock.json index e88ade8b..cd8e6992 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,15 +11,18 @@ "history": "^5.3.0" }, "devDependencies": { - "@prefecthq/eslint-config": "^1.0.31", + "@stylistic/eslint-plugin": "^2.10.1", "@vitejs/plugin-vue": "^5.0.4", "@vue/test-utils": "^2.4.3", - "eslint": "^8.54.0", + "eslint": "^9.14.0", + "eslint-plugin-vue": "^9.30.0", + "globals": "^15.11.0", "happy-dom": "^12.10.3", "typedoc": "^0.25.13", "typedoc-plugin-markdown": "^4.0.0", "typedoc-plugin-vue": "^1.1.0", "typescript": "^5.4.3", + "typescript-eslint": "^8.12.2", "vite": "^5.4.8", "vite-plugin-dts": "^3.8.1", "vitepress": "^1.0.1", @@ -30,15 +33,6 @@ "vue": "^3.4.5" } }, - "node_modules/@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/@algolia/autocomplete-core": { "version": "1.9.3", "resolved": "https://registry.npmjs.org/@algolia/autocomplete-core/-/autocomplete-core-1.9.3.tgz", @@ -671,39 +665,99 @@ } }, "node_modules/@eslint-community/eslint-utils": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.0.tgz", - "integrity": "sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==", + "version": "4.4.1", + "resolved": "https://registry.npmjs.org/@eslint-community/eslint-utils/-/eslint-utils-4.4.1.tgz", + "integrity": "sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==", "dev": true, "dependencies": { - "eslint-visitor-keys": "^3.3.0" + "eslint-visitor-keys": "^3.4.3" }, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, + "funding": { + "url": "https://opencollective.com/eslint" + }, "peerDependencies": { "eslint": "^6.0.0 || ^7.0.0 || >=8.0.0" } }, + "node_modules/@eslint-community/eslint-utils/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, + "node_modules/@eslint/config-array": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/@eslint/config-array/-/config-array-0.18.0.tgz", + "integrity": "sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==", + "dev": true, + "dependencies": { + "@eslint/object-schema": "^2.1.4", + "debug": "^4.3.1", + "minimatch": "^3.1.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/config-array/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@eslint/config-array/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@eslint/core": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/@eslint/core/-/core-0.7.0.tgz", + "integrity": "sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, "node_modules/@eslint/eslintrc": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-2.1.4.tgz", - "integrity": "sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==", + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", "dev": true, "dependencies": { "ajv": "^6.12.4", "debug": "^4.3.2", - "espree": "^9.6.0", - "globals": "^13.19.0", + "espree": "^10.0.1", + "globals": "^14.0.0", "ignore": "^5.2.0", "import-fresh": "^3.2.1", "js-yaml": "^4.1.0", @@ -711,7 +765,7 @@ "strip-json-comments": "^3.1.1" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -727,6 +781,18 @@ "concat-map": "0.0.1" } }, + "node_modules/@eslint/eslintrc/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/@eslint/eslintrc/node_modules/minimatch": { "version": "3.1.2", "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", @@ -740,48 +806,68 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + } + }, + "node_modules/@eslint/object-schema": { + "version": "2.1.4", + "resolved": "https://registry.npmjs.org/@eslint/object-schema/-/object-schema-2.1.4.tgz", + "integrity": "sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "node_modules/@eslint/plugin-kit": { + "version": "0.2.2", + "resolved": "https://registry.npmjs.org/@eslint/plugin-kit/-/plugin-kit-0.2.2.tgz", + "integrity": "sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", - "minimatch": "^3.0.5" + "levn": "^0.4.1" }, "engines": { - "node": ">=10.10.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/@humanfs/core": { + "version": "0.19.1", + "resolved": "https://registry.npmjs.org/@humanfs/core/-/core-0.19.1.tgz", + "integrity": "sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "engines": { + "node": ">=18.18.0" } }, - "node_modules/@humanwhocodes/config-array/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@humanfs/node": { + "version": "0.16.6", + "resolved": "https://registry.npmjs.org/@humanfs/node/-/node-0.16.6.tgz", + "integrity": "sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==", "dev": true, "dependencies": { - "brace-expansion": "^1.1.7" + "@humanfs/core": "^0.19.1", + "@humanwhocodes/retry": "^0.3.0" }, "engines": { - "node": "*" + "node": ">=18.18.0" + } + }, + "node_modules/@humanfs/node/node_modules/@humanwhocodes/retry": { + "version": "0.3.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.3.1.tgz", + "integrity": "sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" } }, "node_modules/@humanwhocodes/module-importer": { @@ -797,11 +883,18 @@ "url": "https://github.com/sponsors/nzakas" } }, - "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", - "dev": true + "node_modules/@humanwhocodes/retry": { + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.0.tgz", + "integrity": "sha512-xnRgu9DxZbkWak/te3fcytNyp8MTbuiZIaueg2rgEvBuN55n04nwLYLU9TX/VVlusc9L2ZNXi99nUFNkHXtr5g==", + "dev": true, + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } }, "node_modules/@isaacs/cliui": { "version": "8.0.2", @@ -1016,26 +1109,6 @@ "node": ">=14" } }, - "node_modules/@prefecthq/eslint-config": { - "version": "1.0.31", - "resolved": "https://registry.npmjs.org/@prefecthq/eslint-config/-/eslint-config-1.0.31.tgz", - "integrity": "sha512-56Eja5yFsJTcLp9TTLv7Tbq+VGx8TR//p09cygdYqMiW1qK1OVCc9Zie9fV6OmyuUcBBZGQxIAvfu5TdVTbj/g==", - "dev": true, - "dependencies": { - "@typescript-eslint/eslint-plugin": "^6.5.0", - "@typescript-eslint/parser": "^6.7.0", - "@vue/eslint-config-typescript": "^11.0.3", - "eslint-import-resolver-typescript": "^3.5.4", - "eslint-plugin-import": "^2.27.5", - "eslint-plugin-no-relative-import-paths": "^1.5.2", - "eslint-plugin-only-warn": "^1.1.0", - "eslint-plugin-vue": "^9.13.0", - "vue-eslint-parser": "^9.3.0" - }, - "peerDependencies": { - "eslint": ">= 8" - } - }, "node_modules/@rollup/pluginutils": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/@rollup/pluginutils/-/pluginutils-5.1.0.tgz", @@ -1373,6 +1446,37 @@ "integrity": "sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==", "dev": true }, + "node_modules/@stylistic/eslint-plugin": { + "version": "2.10.1", + "resolved": "https://registry.npmjs.org/@stylistic/eslint-plugin/-/eslint-plugin-2.10.1.tgz", + "integrity": "sha512-U+4yzNXElTf9q0kEfnloI9XbOyD4cnEQCxjUI94q0+W++0GAEQvJ/slwEj9lwjDHfGADRSr+Tco/z0XJvmDfCQ==", + "dev": true, + "dependencies": { + "@typescript-eslint/utils": "^8.12.2", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "estraverse": "^5.3.0", + "picomatch": "^4.0.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "peerDependencies": { + "eslint": ">=8.40.0" + } + }, + "node_modules/@stylistic/eslint-plugin/node_modules/picomatch": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-4.0.2.tgz", + "integrity": "sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, "node_modules/@types/argparse": { "version": "1.0.38", "resolved": "https://registry.npmjs.org/@types/argparse/-/argparse-1.0.38.tgz", @@ -1406,12 +1510,6 @@ "integrity": "sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==", "dev": true }, - "node_modules/@types/json5": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/@types/json5/-/json5-0.0.29.tgz", - "integrity": "sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==", - "dev": true - }, "node_modules/@types/linkify-it": { "version": "3.0.5", "resolved": "https://registry.npmjs.org/@types/linkify-it/-/linkify-it-3.0.5.tgz", @@ -1443,12 +1541,6 @@ "undici-types": "~5.26.4" } }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "node_modules/@types/web-bluetooth": { "version": "0.0.20", "resolved": "https://registry.npmjs.org/@types/web-bluetooth/-/web-bluetooth-0.0.20.tgz", @@ -1456,33 +1548,31 @@ "dev": true }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-6.18.0.tgz", - "integrity": "sha512-3lqEvQUdCozi6d1mddWqd+kf8KxmGq2Plzx36BlkjuQe3rSTm/O98cLf0A4uDO+a5N1KD2SeEEl6fW97YHY+6w==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.12.2.tgz", + "integrity": "sha512-gQxbxM8mcxBwaEmWdtLCIGLfixBMHhQjBqR8sVWNTPpcj45WlYL2IObS/DNMLH1DBP0n8qz+aiiLTGfopPEebw==", "dev": true, "dependencies": { - "@eslint-community/regexpp": "^4.5.1", - "@typescript-eslint/scope-manager": "6.18.0", - "@typescript-eslint/type-utils": "6.18.0", - "@typescript-eslint/utils": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0", - "debug": "^4.3.4", + "@eslint-community/regexpp": "^4.10.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/type-utils": "8.12.2", + "@typescript-eslint/utils": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "graphemer": "^1.4.0", - "ignore": "^5.2.4", + "ignore": "^5.3.1", "natural-compare": "^1.4.0", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@typescript-eslint/parser": "^6.0.0 || ^6.0.0-alpha", - "eslint": "^7.0.0 || ^8.0.0" + "@typescript-eslint/parser": "^8.0.0 || ^8.0.0-alpha.0", + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1490,39 +1580,27 @@ } } }, - "node_modules/@typescript-eslint/eslint-plugin/node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, "node_modules/@typescript-eslint/parser": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-6.18.0.tgz", - "integrity": "sha512-v6uR68SFvqhNQT41frCMCQpsP+5vySy6IdgjlzUWoo7ALCnpaWYcz/Ij2k4L8cEsL0wkvOviCMpjmtRtHNOKzA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.12.2.tgz", + "integrity": "sha512-MrvlXNfGPLH3Z+r7Tk+Z5moZAc0dzdVjTgUgwsdGweH7lydysQsnSww3nAmsq8blFuRD5VRlAr9YdEFw3e6PBw==", "dev": true, "dependencies": { - "@typescript-eslint/scope-manager": "6.18.0", - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/typescript-estree": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0", + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" }, "peerDependenciesMeta": { "typescript": { @@ -1531,16 +1609,16 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-6.18.0.tgz", - "integrity": "sha512-o/UoDT2NgOJ2VfHpfr+KBY2ErWvCySNUIX/X7O9g8Zzt/tXdpfEU43qbNk8LVuWUT2E0ptzTWXh79i74PP0twA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.12.2.tgz", + "integrity": "sha512-gPLpLtrj9aMHOvxJkSbDBmbRuYdtiEbnvO25bCMza3DhMjTQw0u7Y1M+YR5JPbMsXXnSPuCf5hfq0nEkQDL/JQ==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0" + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1548,51 +1626,36 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-6.18.0.tgz", - "integrity": "sha512-ZeMtrXnGmTcHciJN1+u2CigWEEXgy1ufoxtWcHORt5kGvpjjIlK9MUhzHm4RM8iVy6dqSaZA/6PVkX6+r+ChjQ==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.12.2.tgz", + "integrity": "sha512-bwuU4TAogPI+1q/IJSKuD4shBLc/d2vGcRT588q+jzayQyjVK2X6v/fbR4InY2U2sgf8MEvVCqEWUzYzgBNcGQ==", "dev": true, "dependencies": { - "@typescript-eslint/typescript-estree": "6.18.0", - "@typescript-eslint/utils": "6.18.0", + "@typescript-eslint/typescript-estree": "8.12.2", + "@typescript-eslint/utils": "8.12.2", "debug": "^4.3.4", - "ts-api-utils": "^1.0.1" + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, - "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" - }, "peerDependenciesMeta": { "typescript": { "optional": true } } }, - "node_modules/@typescript-eslint/type-utils/node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", - "dev": true, - "engines": { - "node": ">=16.13.0" - }, - "peerDependencies": { - "typescript": ">=4.2.0" - } - }, "node_modules/@typescript-eslint/types": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-6.18.0.tgz", - "integrity": "sha512-/RFVIccwkwSdW/1zeMx3hADShWbgBxBnV/qSrex6607isYjj05t36P6LyONgqdUrNLl5TYU8NIKdHUYpFvExkA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.12.2.tgz", + "integrity": "sha512-VwDwMF1SZ7wPBUZwmMdnDJ6sIFk4K4s+ALKLP6aIQsISkPv8jhiw65sAK6SuWODN/ix+m+HgbYDkH+zLjrzvOA==", "dev": true, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1600,22 +1663,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-6.18.0.tgz", - "integrity": "sha512-klNvl+Ql4NsBNGB4W9TZ2Od03lm7aGvTbs0wYaFYsplVPhr+oeXjlPZCDI4U9jgJIDK38W1FKhacCFzCC+nbIg==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.12.2.tgz", + "integrity": "sha512-mME5MDwGe30Pq9zKPvyduyU86PH7aixwqYR2grTglAdB+AN8xXQ1vFGpYaUSJ5o5P/5znsSBeNcs5g5/2aQwow==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/visitor-keys": "6.18.0", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/visitor-keys": "8.12.2", "debug": "^4.3.4", - "globby": "^11.1.0", + "fast-glob": "^3.3.2", "is-glob": "^4.0.3", - "minimatch": "9.0.3", - "semver": "^7.5.4", - "ts-api-utils": "^1.0.1" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", @@ -1627,65 +1690,83 @@ } } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/ts-api-utils": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.0.3.tgz", - "integrity": "sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=16.13.0" + "node": ">=16 || 14 >=14.17" }, - "peerDependencies": { - "typescript": ">=4.2.0" + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@typescript-eslint/typescript-estree/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, "node_modules/@typescript-eslint/utils": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-6.18.0.tgz", - "integrity": "sha512-wiKKCbUeDPGaYEYQh1S580dGxJ/V9HI7K5sbGAVklyf+o5g3O+adnS4UNJajplF4e7z2q0uVBaTdT/yLb4XAVA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.12.2.tgz", + "integrity": "sha512-UTTuDIX3fkfAz6iSVa5rTuSfWIYZ6ATtEocQ/umkRSyC9O919lbZ8dcH7mysshrCdrAM03skJOEYaBugxN+M6A==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@types/json-schema": "^7.0.12", - "@types/semver": "^7.5.0", - "@typescript-eslint/scope-manager": "6.18.0", - "@typescript-eslint/types": "6.18.0", - "@typescript-eslint/typescript-estree": "6.18.0", - "semver": "^7.5.4" + "@typescript-eslint/scope-manager": "8.12.2", + "@typescript-eslint/types": "8.12.2", + "@typescript-eslint/typescript-estree": "8.12.2" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^8.57.0 || ^9.0.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-6.18.0.tgz", - "integrity": "sha512-1wetAlSZpewRDb2h9p/Q8kRjdGuqdTAQbkJIOUMLug2LBLG+QOjiWoSj6/3B/hA9/tVTFFdtiKvAYoYnSRW/RA==", + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.12.2.tgz", + "integrity": "sha512-PChz8UaKQAVNHghsHcPyx1OMHoFRUEA7rJSK/mDhdq85bk+PLsUHUBqTQTFt18VJZbmxBovM65fezlheQRsSDA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "6.18.0", - "eslint-visitor-keys": "^3.4.1" + "@typescript-eslint/types": "8.12.2", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^16.0.0 || >=18.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "type": "opencollective", "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@ungap/structured-clone/-/structured-clone-1.2.0.tgz", - "integrity": "sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==", - "dev": true + "node_modules/@typescript-eslint/visitor-keys/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } }, "node_modules/@vitejs/plugin-vue": { "version": "5.0.4", @@ -1929,22 +2010,23 @@ "rfdc": "^1.3.1" } }, - "node_modules/@vue/eslint-config-typescript": { - "version": "11.0.3", - "resolved": "https://registry.npmjs.org/@vue/eslint-config-typescript/-/eslint-config-typescript-11.0.3.tgz", - "integrity": "sha512-dkt6W0PX6H/4Xuxg/BlFj5xHvksjpSlVjtkQCpaYJBIEuKj2hOVU7r+TIe+ysCwRYFz/lGqvklntRkCAibsbPw==", + "node_modules/@vue/language-core": { + "version": "1.8.27", + "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", + "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", "dev": true, "dependencies": { - "@typescript-eslint/eslint-plugin": "^5.59.1", - "@typescript-eslint/parser": "^5.59.1", - "vue-eslint-parser": "^9.1.1" - }, - "engines": { - "node": "^14.17.0 || >=16.0.0" + "@volar/language-core": "~1.11.1", + "@volar/source-map": "~1.11.1", + "@vue/compiler-dom": "^3.3.0", + "@vue/shared": "^3.3.0", + "computeds": "^0.0.1", + "minimatch": "^9.0.3", + "muggle-string": "^0.3.1", + "path-browserify": "^1.0.1", + "vue-template-compiler": "^2.7.14" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0", - "eslint-plugin-vue": "^9.0.0", "typescript": "*" }, "peerDependenciesMeta": { @@ -1953,314 +2035,34 @@ } } }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-5.62.0.tgz", - "integrity": "sha512-TiZzBSJja/LbhNPvk6yc0JrX9XqhQ0hdh6M2svYfsHGejaKFIAGd9MQ+ERIMzLGlN/kZoYIgdxFV0PuljTKXag==", - "dev": true, + "node_modules/@vue/reactivity": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.5.tgz", + "integrity": "sha512-BcWkKvjdvqJwb7BhhFkXPLDCecX4d4a6GATvCduJQDLv21PkPowAE5GKuIE5p6RC07/Lp9FMkkq4AYCTVF5KlQ==", + "peer": true, "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "@vue/shared": "3.4.5" } }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/eslint-plugin/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, + "node_modules/@vue/runtime-core": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.5.tgz", + "integrity": "sha512-wh9ELIOQKeWT9SaUPdLrsxRkZv14jp+SJm9aiQGWio+/MWNM3Lib0wE6CoKEqQ9+SCYyGjDBhTOTtO47kCgbkg==", + "peer": true, "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "@vue/reactivity": "3.4.5", + "@vue/shared": "3.4.5" } }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-5.62.0.tgz", - "integrity": "sha512-VlJEV0fOQ7BExOsHYAGrgbEiZoi8D+Bl2+f6V2RrXerRSylnp+ZBHmPvaIa8cz0Ajx7WO7Z5RqfgYg7ED1nRhA==", - "dev": true, + "node_modules/@vue/runtime-dom": { + "version": "3.4.5", + "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.5.tgz", + "integrity": "sha512-n5ewvOjyG3IEpqGBahdPXODFSpVlSz3H4LF76Sx0XAqpIOqyJ5bIb2PrdYuH2ogBMAQPh+o5tnoH4nJpBr8U0Q==", + "peer": true, "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-5.62.0.tgz", - "integrity": "sha512-xsSQreu+VnfbqQpW5vnCJdq1Z3Q0U31qiWmRhr98ONQmcp/yhiPJFPq8MXiJVLiksmOKSjIldZzkebzHuCGzew==", - "dev": true, - "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/type-utils/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", - "dev": true, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/typescript-estree/node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", - "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, - "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", - "dev": true, - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", - "dev": true, - "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" - }, - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@vue/eslint-config-typescript/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true, - "engines": { - "node": ">=4.0" - } - }, - "node_modules/@vue/language-core": { - "version": "1.8.27", - "resolved": "https://registry.npmjs.org/@vue/language-core/-/language-core-1.8.27.tgz", - "integrity": "sha512-L8Kc27VdQserNaCUNiSFdDl9LWT24ly8Hpwf1ECy3aFb9m6bDhBGQYOujDm21N7EW3moKIOKEanQwe1q5BK+mA==", - "dev": true, - "dependencies": { - "@volar/language-core": "~1.11.1", - "@volar/source-map": "~1.11.1", - "@vue/compiler-dom": "^3.3.0", - "@vue/shared": "^3.3.0", - "computeds": "^0.0.1", - "minimatch": "^9.0.3", - "muggle-string": "^0.3.1", - "path-browserify": "^1.0.1", - "vue-template-compiler": "^2.7.14" - }, - "peerDependencies": { - "typescript": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } - } - }, - "node_modules/@vue/reactivity": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@vue/reactivity/-/reactivity-3.4.5.tgz", - "integrity": "sha512-BcWkKvjdvqJwb7BhhFkXPLDCecX4d4a6GATvCduJQDLv21PkPowAE5GKuIE5p6RC07/Lp9FMkkq4AYCTVF5KlQ==", - "peer": true, - "dependencies": { - "@vue/shared": "3.4.5" - } - }, - "node_modules/@vue/runtime-core": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@vue/runtime-core/-/runtime-core-3.4.5.tgz", - "integrity": "sha512-wh9ELIOQKeWT9SaUPdLrsxRkZv14jp+SJm9aiQGWio+/MWNM3Lib0wE6CoKEqQ9+SCYyGjDBhTOTtO47kCgbkg==", - "peer": true, - "dependencies": { - "@vue/reactivity": "3.4.5", - "@vue/shared": "3.4.5" - } - }, - "node_modules/@vue/runtime-dom": { - "version": "3.4.5", - "resolved": "https://registry.npmjs.org/@vue/runtime-dom/-/runtime-dom-3.4.5.tgz", - "integrity": "sha512-n5ewvOjyG3IEpqGBahdPXODFSpVlSz3H4LF76Sx0XAqpIOqyJ5bIb2PrdYuH2ogBMAQPh+o5tnoH4nJpBr8U0Q==", - "peer": true, - "dependencies": { - "@vue/runtime-core": "3.4.5", - "@vue/shared": "3.4.5", - "csstype": "^3.1.3" + "@vue/runtime-core": "3.4.5", + "@vue/shared": "3.4.5", + "csstype": "^3.1.3" } }, "node_modules/@vue/server-renderer": { @@ -2490,9 +2292,9 @@ } }, "node_modules/acorn": { - "version": "8.11.3", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.3.tgz", - "integrity": "sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.14.0.tgz", + "integrity": "sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -2594,123 +2396,6 @@ "integrity": "sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==", "dev": true }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz", - "integrity": "sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-includes": { - "version": "3.1.7", - "resolved": "https://registry.npmjs.org/array-includes/-/array-includes-3.1.7.tgz", - "integrity": "sha512-dlcsNBIiWhPkHdOEEKnehA+RNUWDc4UqFtnIXU4uuYDPtA4LDkr7qip2p0VvFAEXNDr0yWZ9PJyIRiGjRLQzwQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/array.prototype.findlastindex/-/array.prototype.findlastindex-1.2.3.tgz", - "integrity": "sha512-LzLoiOMAxvy+Gd3BAq3B7VeIgPdo+Q8hthvKtXybMvRV0jrXfJM/t8mw7nNlpEcVlVUnCnM2KSX4XU5HmpodOA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", - "integrity": "sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/array.prototype.flatmap/-/array.prototype.flatmap-1.3.2.tgz", - "integrity": "sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz", - "integrity": "sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/assertion-error": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/assertion-error/-/assertion-error-1.1.0.tgz", @@ -2720,18 +2405,6 @@ "node": "*" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz", - "integrity": "sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", @@ -2774,20 +2447,6 @@ "node": ">=8" } }, - "node_modules/call-bind": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.5.tgz", - "integrity": "sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -2971,70 +2630,15 @@ "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", "dev": true }, - "node_modules/define-data-property": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.1.tgz", - "integrity": "sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/define-properties": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/define-properties/-/define-properties-1.2.1.tgz", - "integrity": "sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/diff-sequences": { - "version": "29.6.3", - "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", - "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", + "node_modules/diff-sequences": { + "version": "29.6.3", + "resolved": "https://registry.npmjs.org/diff-sequences/-/diff-sequences-29.6.3.tgz", + "integrity": "sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==", "dev": true, "engines": { "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/dir-glob": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/dir-glob/-/dir-glob-3.0.1.tgz", - "integrity": "sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==", - "dev": true, - "dependencies": { - "path-type": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/doctrine": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-3.0.0.tgz", - "integrity": "sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==", - "dev": true, - "dependencies": { - "esutils": "^2.0.2" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/eastasianwidth": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", @@ -3089,19 +2693,6 @@ "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", "dev": true }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" - }, - "engines": { - "node": ">=10.13.0" - } - }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -3113,99 +2704,6 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, - "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", - "dev": true, - "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/es-shim-unscopables/-/es-shim-unscopables-1.0.2.tgz", - "integrity": "sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0" - } - }, - "node_modules/es-to-primitive": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/es-to-primitive/-/es-to-primitive-1.2.1.tgz", - "integrity": "sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/esbuild": { "version": "0.21.5", "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.21.5.tgz", @@ -3257,273 +2755,137 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint-community/regexpp": "^4.12.1", + "@eslint/config-array": "^0.18.0", + "@eslint/core": "^0.7.0", + "@eslint/eslintrc": "^3.1.0", + "@eslint/js": "9.14.0", + "@eslint/plugin-kit": "^0.2.0", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", + "@humanwhocodes/retry": "^0.4.0", + "@types/estree": "^1.0.6", + "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", "chalk": "^4.0.0", "cross-spawn": "^7.0.2", "debug": "^4.3.2", - "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", - "esquery": "^1.4.2", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", + "esquery": "^1.5.0", "esutils": "^2.0.2", "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.19.0", - "graphemer": "^1.4.0", "ignore": "^5.2.0", "imurmurhash": "^0.1.4", "is-glob": "^4.0.0", - "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", "minimatch": "^3.1.2", "natural-compare": "^1.4.0", "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", "text-table": "^0.2.0" }, "bin": { "eslint": "bin/eslint.js" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" - } - }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-node/-/eslint-import-resolver-node-0.3.9.tgz", - "integrity": "sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==", - "dev": true, - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-import-resolver-typescript": { - "version": "3.6.1", - "resolved": "https://registry.npmjs.org/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-3.6.1.tgz", - "integrity": "sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==", - "dev": true, - "dependencies": { - "debug": "^4.3.4", - "enhanced-resolve": "^5.12.0", - "eslint-module-utils": "^2.7.4", - "fast-glob": "^3.3.1", - "get-tsconfig": "^4.5.0", - "is-core-module": "^2.11.0", - "is-glob": "^4.0.3" - }, - "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://opencollective.com/unts/projects/eslint-import-resolver-ts" + "url": "https://eslint.org/donate" }, "peerDependencies": { - "eslint": "*", - "eslint-plugin-import": "*" - } - }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", - "dev": true, - "dependencies": { - "debug": "^3.2.7" - }, - "engines": { - "node": ">=4" + "jiti": "*" }, "peerDependenciesMeta": { - "eslint": { + "jiti": { "optional": true } } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "node_modules/eslint-plugin-vue": { + "version": "9.30.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.30.0.tgz", + "integrity": "sha512-CyqlRgShvljFkOeYK8wN5frh/OGTvkj1S7wlr2Q2pUvwq+X5VYiLd6ZjujpgSgLnys2W8qrBLkXQ41SUYaoPIQ==", "dev": true, "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", + "natural-compare": "^1.4.0", + "nth-check": "^2.1.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.3", + "vue-eslint-parser": "^9.4.3", + "xml-name-validator": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", - "dev": true, - "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/eslint-plugin-vue/node_modules/globals": { + "version": "13.24.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", + "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", "dev": true, "dependencies": { - "esutils": "^2.0.2" + "type-fest": "^0.20.2" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" + "node": ">=8" }, - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "node_modules/eslint-plugin-vue/node_modules/semver": { + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, "bin": { "semver": "bin/semver.js" - } - }, - "node_modules/eslint-plugin-no-relative-import-paths": { - "version": "1.5.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-relative-import-paths/-/eslint-plugin-no-relative-import-paths-1.5.3.tgz", - "integrity": "sha512-z7c7Km1U0zdLyPziWeRKSsN2mPaGaBHDjfXn98B8XjRIhFi2bPqduRYcxWih1kI5al5tQtiChXVmspLkB0wNsQ==", - "dev": true - }, - "node_modules/eslint-plugin-only-warn": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-only-warn/-/eslint-plugin-only-warn-1.1.0.tgz", - "integrity": "sha512-2tktqUAT+Q3hCAU0iSf4xAN1k9zOpjK5WO8104mB0rT/dGhOa09582HN5HlbxNbPRZ0THV7nLGvzugcNOSjzfA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/eslint-plugin-vue": { - "version": "9.19.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", - "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", - "dev": true, - "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", - "xml-name-validator": "^4.0.0" }, "engines": { - "node": "^14.17.0 || >=16.0.0" - }, - "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "node": ">=10" } }, "node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "version": "8.2.0", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-8.2.0.tgz", + "integrity": "sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==", "dev": true, "dependencies": { "esrecurse": "^4.3.0", "estraverse": "^5.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", - "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", + "integrity": "sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" @@ -3552,26 +2914,26 @@ } }, "node_modules/espree": { - "version": "9.6.1", - "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", - "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "version": "10.3.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.3.0.tgz", + "integrity": "sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==", "dev": true, "dependencies": { - "acorn": "^8.9.0", + "acorn": "^8.14.0", "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" + "eslint-visitor-keys": "^4.2.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { "url": "https://opencollective.com/eslint" } }, "node_modules/esquery": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.5.0.tgz", - "integrity": "sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/esquery/-/esquery-1.6.0.tgz", + "integrity": "sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==", "dev": true, "dependencies": { "estraverse": "^5.1.0" @@ -3662,24 +3024,24 @@ "dev": true }, "node_modules/fastq": { - "version": "1.16.0", - "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.16.0.tgz", - "integrity": "sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA==", + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", "dev": true, "dependencies": { "reusify": "^1.0.4" } }, "node_modules/file-entry-cache": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-6.0.1.tgz", - "integrity": "sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==", + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", "dev": true, "dependencies": { - "flat-cache": "^3.0.4" + "flat-cache": "^4.0.0" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16.0.0" } }, "node_modules/fill-range": { @@ -3711,23 +3073,22 @@ } }, "node_modules/flat-cache": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-3.2.0.tgz", - "integrity": "sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==", + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", "dev": true, "dependencies": { "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "keyv": "^4.5.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=16" } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/focus-trap": { @@ -3739,15 +3100,6 @@ "tabbable": "^6.2.0" } }, - "node_modules/for-each": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/for-each/-/for-each-0.3.3.tgz", - "integrity": "sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==", - "dev": true, - "dependencies": { - "is-callable": "^1.1.3" - } - }, "node_modules/foreground-child": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", @@ -3778,12 +3130,6 @@ "node": ">=6 <7 || >=8" } }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/fs.realpath/-/fs.realpath-1.0.0.tgz", - "integrity": "sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==", - "dev": true - }, "node_modules/fsevents": { "version": "2.3.3", "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", @@ -3807,33 +3153,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "resolved": "https://registry.npmjs.org/function.prototype.name/-/function.prototype.name-1.1.6.tgz", - "integrity": "sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/functions-have-names/-/functions-have-names-1.2.3.tgz", - "integrity": "sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/get-func-name": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/get-func-name/-/get-func-name-2.0.2.tgz", @@ -3843,69 +3162,6 @@ "node": "*" } }, - "node_modules/get-intrinsic": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.2.tgz", - "integrity": "sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA==", - "dev": true, - "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-symbol-description": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/get-symbol-description/-/get-symbol-description-1.0.0.tgz", - "integrity": "sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", - "dev": true, - "dependencies": { - "resolve-pkg-maps": "^1.0.0" - }, - "funding": { - "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", - "dev": true, - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/glob-parent": { "version": "6.0.2", "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", @@ -3918,90 +3174,18 @@ "node": ">=10.13.0" } }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/globals": { - "version": "13.24.0", - "resolved": "https://registry.npmjs.org/globals/-/globals-13.24.0.tgz", - "integrity": "sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==", + "version": "15.11.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.11.0.tgz", + "integrity": "sha512-yeyNSjdbyVaWurlwCpcA6XNBrHTMIeDdj0/hnvX/OLJ9ekOXYbLsLinH/MucQyGvNnXhidTdNhTtJaffL2sMfw==", "dev": true, - "dependencies": { - "type-fest": "^0.20.2" - }, "engines": { - "node": ">=8" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/globalthis/-/globalthis-1.0.3.tgz", - "integrity": "sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==", - "dev": true, - "dependencies": { - "define-properties": "^1.1.3" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/gopd": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", - "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.1.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/graceful-fs": { "version": "4.2.11", "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", @@ -4012,89 +3196,29 @@ "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", "integrity": "sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==", - "dev": true - }, - "node_modules/happy-dom": { - "version": "12.10.3", - "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-12.10.3.tgz", - "integrity": "sha512-JzUXOh0wdNGY54oKng5hliuBkq/+aT1V3YpTM+lrN/GoLQTANZsMaIvmHiHe612rauHvPJnDZkZ+5GZR++1Abg==", - "dev": true, - "dependencies": { - "css.escape": "^1.5.1", - "entities": "^4.5.0", - "iconv-lite": "^0.6.3", - "webidl-conversions": "^7.0.0", - "whatwg-encoding": "^2.0.0", - "whatwg-mimetype": "^3.0.0" - } - }, - "node_modules/has-bigints": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/has-bigints/-/has-bigints-1.0.2.tgz", - "integrity": "sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "dev": true }, - "node_modules/has-symbols": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", - "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "node_modules/happy-dom": { + "version": "12.10.3", + "resolved": "https://registry.npmjs.org/happy-dom/-/happy-dom-12.10.3.tgz", + "integrity": "sha512-JzUXOh0wdNGY54oKng5hliuBkq/+aT1V3YpTM+lrN/GoLQTANZsMaIvmHiHe612rauHvPJnDZkZ+5GZR++1Abg==", "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "dependencies": { + "css.escape": "^1.5.1", + "entities": "^4.5.0", + "iconv-lite": "^0.6.3", + "webidl-conversions": "^7.0.0", + "whatwg-encoding": "^2.0.0", + "whatwg-mimetype": "^3.0.0" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/has-tostringtag/-/has-tostringtag-1.0.0.tgz", - "integrity": "sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ==", + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8" } }, "node_modules/hasown": { @@ -4145,9 +3269,9 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.2.tgz", + "integrity": "sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==", "dev": true, "engines": { "node": ">= 4" @@ -4187,96 +3311,12 @@ "node": ">=0.8.19" } }, - "node_modules/inflight": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/inflight/-/inflight-1.0.6.tgz", - "integrity": "sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==", - "dev": true, - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" - } - }, - "node_modules/inherits": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", - "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==", - "dev": true - }, "node_modules/ini": { "version": "1.3.8", "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, - "node_modules/internal-slot": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/internal-slot/-/internal-slot-1.0.6.tgz", - "integrity": "sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg==", - "dev": true, - "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/is-array-buffer": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/is-array-buffer/-/is-array-buffer-3.0.2.tgz", - "integrity": "sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-bigint": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-bigint/-/is-bigint-1.0.4.tgz", - "integrity": "sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==", - "dev": true, - "dependencies": { - "has-bigints": "^1.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/is-boolean-object/-/is-boolean-object-1.1.2.tgz", - "integrity": "sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-callable": { - "version": "1.2.7", - "resolved": "https://registry.npmjs.org/is-callable/-/is-callable-1.2.7.tgz", - "integrity": "sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-core-module": { "version": "2.13.1", "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", @@ -4289,21 +3329,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-date-object": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/is-date-object/-/is-date-object-1.0.5.tgz", - "integrity": "sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-extglob": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", @@ -4334,18 +3359,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", - "dev": true, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/is-number": { "version": "7.0.0", "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", @@ -4355,121 +3368,6 @@ "node": ">=0.12.0" } }, - "node_modules/is-number-object": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-number-object/-/is-number-object-1.0.7.tgz", - "integrity": "sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/is-regex": { - "version": "1.1.4", - "resolved": "https://registry.npmjs.org/is-regex/-/is-regex-1.1.4.tgz", - "integrity": "sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-string": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/is-string/-/is-string-1.0.7.tgz", - "integrity": "sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==", - "dev": true, - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-symbol": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", - "integrity": "sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==", - "dev": true, - "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "resolved": "https://registry.npmjs.org/is-typed-array/-/is-typed-array-1.1.12.tgz", - "integrity": "sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg==", - "dev": true, - "dependencies": { - "which-typed-array": "^1.1.11" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/is-weakref": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-weakref/-/is-weakref-1.0.2.tgz", - "integrity": "sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/isarray": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/isarray/-/isarray-2.0.5.tgz", - "integrity": "sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==", - "dev": true - }, "node_modules/isexe": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", @@ -4572,18 +3470,6 @@ "integrity": "sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==", "dev": true }, - "node_modules/json5": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json5/-/json5-1.0.2.tgz", - "integrity": "sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==", - "dev": true, - "dependencies": { - "minimist": "^1.2.0" - }, - "bin": { - "json5": "lib/cli.js" - } - }, "node_modules/jsonc-parser": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/jsonc-parser/-/jsonc-parser-3.2.0.tgz", @@ -4744,12 +3630,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -4771,15 +3657,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/minimist": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.8.tgz", - "integrity": "sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/minipass": { "version": "7.0.4", "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.0.4.tgz", @@ -4848,12 +3725,6 @@ "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==", "dev": true }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/natural-compare-lite/-/natural-compare-lite-1.4.0.tgz", - "integrity": "sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==", - "dev": true - }, "node_modules/nopt": { "version": "7.2.0", "resolved": "https://registry.npmjs.org/nopt/-/nopt-7.2.0.tgz", @@ -4881,109 +3752,18 @@ "url": "https://github.com/fb55/nth-check?sponsor=1" } }, - "node_modules/object-inspect": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", - "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", - "dev": true, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/object-keys/-/object-keys-1.1.1.tgz", - "integrity": "sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==", - "dev": true, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/object.assign": { - "version": "4.1.5", - "resolved": "https://registry.npmjs.org/object.assign/-/object.assign-4.1.5.tgz", - "integrity": "sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.fromentries": { - "version": "2.0.7", - "resolved": "https://registry.npmjs.org/object.fromentries/-/object.fromentries-2.0.7.tgz", - "integrity": "sha512-UPbPHML6sL8PI/mOqPwsH4G6iyXcCGzLin8KvEPenOZN5lpCNBZZQ+V62vdjB1mQHrmqGQt5/OJzemUA+KJmEA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/object.groupby": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/object.groupby/-/object.groupby-1.0.1.tgz", - "integrity": "sha512-HqaQtqLnp/8Bn4GL16cj+CUYbnpe1bh0TtEaWvybszDG4tgxCJuRpV8VGuvNaI1fAnI4lUJzDG55MXcOH4JZcQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" - } - }, - "node_modules/object.values": { - "version": "1.1.7", - "resolved": "https://registry.npmjs.org/object.values/-/object.values-1.1.7.tgz", - "integrity": "sha512-aU6xnDFYT3x17e/f0IiiwlGPTy2jzMySGfUB4fq6z7CV8l85CWHDk5ErhyhpfDHhrOMwGFhSQkhMGHaIotA6Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/once": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/once/-/once-1.4.0.tgz", - "integrity": "sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==", - "dev": true, - "dependencies": { - "wrappy": "1" - } - }, "node_modules/optionator": { - "version": "0.9.3", - "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.3.tgz", - "integrity": "sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==", + "version": "0.9.4", + "resolved": "https://registry.npmjs.org/optionator/-/optionator-0.9.4.tgz", + "integrity": "sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==", "dev": true, "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", "deep-is": "^0.1.3", "fast-levenshtein": "^2.0.6", "levn": "^0.4.1", "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "type-check": "^0.4.0", + "word-wrap": "^1.2.5" }, "engines": { "node": ">= 0.8.0" @@ -5043,16 +3823,7 @@ "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, "engines": { - "node": ">=8" - } - }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-is-absolute/-/path-is-absolute-1.0.1.tgz", - "integrity": "sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/path-key": { @@ -5095,15 +3866,6 @@ "node": "14 || >=16.14" } }, - "node_modules/path-type": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-4.0.0.tgz", - "integrity": "sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/pathe": { "version": "1.1.1", "resolved": "https://registry.npmjs.org/pathe/-/pathe-1.1.1.tgz", @@ -5181,9 +3943,9 @@ } }, "node_modules/postcss-selector-parser": { - "version": "6.0.15", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.15.tgz", - "integrity": "sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==", + "version": "6.1.2", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.2.tgz", + "integrity": "sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -5284,23 +4046,6 @@ "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.14.1.tgz", "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", - "resolved": "https://registry.npmjs.org/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz", - "integrity": "sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/resolve": { "version": "1.22.8", "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", @@ -5327,15 +4072,6 @@ "node": ">=4" } }, - "node_modules/resolve-pkg-maps": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/resolve-pkg-maps/-/resolve-pkg-maps-1.0.0.tgz", - "integrity": "sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==", - "dev": true, - "funding": { - "url": "https://github.com/privatenumber/resolve-pkg-maps?sponsor=1" - } - }, "node_modules/reusify": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", @@ -5352,21 +4088,6 @@ "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==", "dev": true }, - "node_modules/rimraf": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/rimraf/-/rimraf-3.0.2.tgz", - "integrity": "sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==", - "dev": true, - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, "node_modules/rollup": { "version": "4.24.0", "resolved": "https://registry.npmjs.org/rollup/-/rollup-4.24.0.tgz", @@ -5425,38 +4146,6 @@ "queue-microtask": "^1.2.2" } }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/safe-array-concat/-/safe-array-concat-1.0.1.tgz", - "integrity": "sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" - }, - "engines": { - "node": ">=0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/safe-regex-test": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/safe-regex-test/-/safe-regex-test-1.0.0.tgz", - "integrity": "sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/safer-buffer": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", @@ -5485,35 +4174,6 @@ "node": ">=10" } }, - "node_modules/set-function-length": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.1.1.tgz", - "integrity": "sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ==", - "dev": true, - "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", - "dev": true, - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - } - }, "node_modules/shebang-command": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", @@ -5544,20 +4204,6 @@ "@shikijs/core": "1.2.1" } }, - "node_modules/side-channel": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.4.tgz", - "integrity": "sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/siginfo": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/siginfo/-/siginfo-2.0.0.tgz", @@ -5576,15 +4222,6 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/slash": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-3.0.0.tgz", - "integrity": "sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5703,51 +4340,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", - "resolved": "https://registry.npmjs.org/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz", - "integrity": "sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz", - "integrity": "sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz", - "integrity": "sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/strip-ansi": { "version": "6.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", @@ -5773,15 +4365,6 @@ "node": ">=8" } }, - "node_modules/strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/strip-json-comments": { "version": "3.1.1", "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-3.1.1.tgz", @@ -5836,15 +4419,6 @@ "integrity": "sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==", "dev": true }, - "node_modules/tapable": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", - "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -5887,24 +4461,18 @@ "node": ">=8.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", + "node_modules/ts-api-utils": { + "version": "1.4.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.4.0.tgz", + "integrity": "sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==", "dev": true, - "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "engines": { + "node": ">=16" + }, + "peerDependencies": { + "typescript": ">=4.2.0" } }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -5938,71 +4506,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz", - "integrity": "sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - } - }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/typedoc": { "version": "0.25.13", "resolved": "https://registry.npmjs.org/typedoc/-/typedoc-0.25.13.tgz", @@ -6067,27 +4570,35 @@ "node": ">=14.17" } }, - "node_modules/ufo": { - "version": "1.3.2", - "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", - "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", - "dev": true - }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/unbox-primitive/-/unbox-primitive-1.0.2.tgz", - "integrity": "sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==", + "node_modules/typescript-eslint": { + "version": "8.12.2", + "resolved": "https://registry.npmjs.org/typescript-eslint/-/typescript-eslint-8.12.2.tgz", + "integrity": "sha512-UbuVUWSrHVR03q9CWx+JDHeO6B/Hr9p4U5lRH++5tq/EbFq1faYZe50ZSBePptgfIKLEti0aPQ3hFgnPVcd8ZQ==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "@typescript-eslint/eslint-plugin": "8.12.2", + "@typescript-eslint/parser": "8.12.2", + "@typescript-eslint/utils": "8.12.2" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, + "node_modules/ufo": { + "version": "1.3.2", + "resolved": "https://registry.npmjs.org/ufo/-/ufo-1.3.2.tgz", + "integrity": "sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==", + "dev": true + }, "node_modules/undici-types": { "version": "5.26.5", "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", @@ -6538,9 +5049,9 @@ "dev": true }, "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -6561,6 +5072,51 @@ "eslint": ">=6.0.0" } }, + "node_modules/vue-eslint-parser/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz", + "integrity": "sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==", + "dev": true, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/vue-eslint-parser/node_modules/espree": { + "version": "9.6.1", + "resolved": "https://registry.npmjs.org/espree/-/espree-9.6.1.tgz", + "integrity": "sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==", + "dev": true, + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, + "engines": { + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, "node_modules/vue-template-compiler": { "version": "2.7.16", "resolved": "https://registry.npmjs.org/vue-template-compiler/-/vue-template-compiler-2.7.16.tgz", @@ -6680,41 +5236,6 @@ "node": ">= 8" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz", - "integrity": "sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==", - "dev": true, - "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "resolved": "https://registry.npmjs.org/which-typed-array/-/which-typed-array-1.1.13.tgz", - "integrity": "sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow==", - "dev": true, - "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/why-is-node-running": { "version": "2.2.2", "resolved": "https://registry.npmjs.org/why-is-node-running/-/why-is-node-running-2.2.2.tgz", @@ -6731,6 +5252,15 @@ "node": ">=8" } }, + "node_modules/word-wrap": { + "version": "1.2.5", + "resolved": "https://registry.npmjs.org/word-wrap/-/word-wrap-1.2.5.tgz", + "integrity": "sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/wrap-ansi": { "version": "8.1.0", "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", @@ -6825,12 +5355,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/wrappy": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/wrappy/-/wrappy-1.0.2.tgz", - "integrity": "sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==", - "dev": true - }, "node_modules/xml-name-validator": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/xml-name-validator/-/xml-name-validator-4.0.0.tgz", diff --git a/package.json b/package.json index 8f44cca9..f0a0b458 100644 --- a/package.json +++ b/package.json @@ -33,15 +33,18 @@ } }, "devDependencies": { - "@prefecthq/eslint-config": "^1.0.31", + "@stylistic/eslint-plugin": "^2.10.1", "@vitejs/plugin-vue": "^5.0.4", "@vue/test-utils": "^2.4.3", - "eslint": "^8.54.0", + "eslint": "^9.14.0", + "eslint-plugin-vue": "^9.30.0", + "globals": "^15.11.0", "happy-dom": "^12.10.3", "typedoc": "^0.25.13", "typedoc-plugin-markdown": "^4.0.0", "typedoc-plugin-vue": "^1.1.0", "typescript": "^5.4.3", + "typescript-eslint": "^8.12.2", "vite": "^5.4.8", "vite-plugin-dts": "^3.8.1", "vitepress": "^1.0.1", diff --git a/src/.eslintrc b/src/.eslintrc deleted file mode 100644 index 21bf4383..00000000 --- a/src/.eslintrc +++ /dev/null @@ -1,62 +0,0 @@ -{ - "root": true, - "env": { - "node": true - }, - "parserOptions": { - "ecmaVersion": "latest", - "project": ["./tsconfig.json"], - "sourceType": "module", - "parser": "@typescript-eslint/parser" - }, - "extends": [ - "@prefecthq" - ], - "globals": { - "defineProps": "readonly", - "defineEmits": "readonly", - "defineExpose": "readonly" - }, - "settings": { - "import/resolver": { - "typescript": { - "project": "./tsconfig.json" - } - } - }, - "rules": { - "func-call-spacing": "off", // overridden by @typescript-eslint/func-call-spacing - "@typescript-eslint/no-explicit-any": "off", - "vue/new-line-between-multi-line-property": "off", - "@typescript-eslint/ban-types": [ - "error", - { - "types": { - "{}": false - }, - "extendDefaults": true - }, - ], - }, - "overrides": [ - { - "files": [ - "**/*.spec.ts", - "**/*.spec-d.ts" - ], - "rules": { - "@typescript-eslint/ban-ts-comment": "off" - } - }, - { - "files": [ - "**/*.ts", - "**/*.vue" - ], - "rules": { - "no-unused-vars": "off", - "typescript-eslint/no-unused-vars": "off" - } - } - ] -} \ No newline at end of file diff --git a/src/components/echo.ts b/src/components/echo.ts index 7c9bb3e4..3ea2457d 100644 --- a/src/components/echo.ts +++ b/src/components/echo.ts @@ -1,6 +1,3 @@ -/* eslint-disable vue/no-unused-properties */ -/* eslint-disable vue/require-name-property */ -/* eslint-disable vue/require-expose */ import { defineComponent } from 'vue' export default defineComponent(({ value }) => { @@ -12,4 +9,4 @@ export default defineComponent(({ value }) => { required: true, }, }, -}) \ No newline at end of file +}) diff --git a/src/components/helloWorld.ts b/src/components/helloWorld.ts index 49bed259..865e28ad 100644 --- a/src/components/helloWorld.ts +++ b/src/components/helloWorld.ts @@ -4,4 +4,4 @@ export default defineComponent({ name: 'HelloWorld', template: 'hello world', expose: [], -}) \ No newline at end of file +}) diff --git a/src/components/rejection.ts b/src/components/rejection.ts index 5eda33cd..ed17ee92 100644 --- a/src/components/rejection.ts +++ b/src/components/rejection.ts @@ -1,5 +1,3 @@ -/* eslint-disable vue/require-expose */ - import { Component, defineComponent, h } from 'vue' export function genericRejection(type: string): Component { @@ -9,4 +7,4 @@ export function genericRejection(type: string): Component { name: type, props: [], }) -} \ No newline at end of file +} diff --git a/src/components/routerLink.browser.spec.ts b/src/components/routerLink.browser.spec.ts index 74ed9453..579baded 100644 --- a/src/components/routerLink.browser.spec.ts +++ b/src/components/routerLink.browser.spec.ts @@ -26,7 +26,7 @@ test('renders an anchor tag with the correct href and slot content', () => { const wrapper = mount(routerLink, { props: { - to: (resolve) => resolve('parent', { paramName: paramValue }), + to: resolve => resolve('parent', { paramName: paramValue }), }, slots: { default: content, @@ -235,7 +235,6 @@ test.each([ }) describe('prefetch components', () => { - test.each([ undefined, true, @@ -249,7 +248,7 @@ describe('prefetch components', () => { name: 'route', path: '/route', component: defineAsyncComponent(() => { - return new Promise(resolve => { + return new Promise((resolve) => { loaded = true resolve({ default: { template: 'foo' } }) }) @@ -295,7 +294,7 @@ describe('prefetch components', () => { path: '/route', prefetch, component: defineAsyncComponent(() => { - return new Promise(resolve => { + return new Promise((resolve) => { loaded = true resolve({ default: { template: 'foo' } }) }) @@ -339,7 +338,7 @@ describe('prefetch components', () => { name: 'route', path: '/route', component: defineAsyncComponent(() => { - return new Promise(resolve => { + return new Promise((resolve) => { loaded = true resolve({ default: { template: 'foo' } }) }) @@ -370,11 +369,9 @@ describe('prefetch components', () => { expect(loaded).toBeUndefined() } }) - }) describe('prefetch props', () => { - test.each([ undefined, true, @@ -586,5 +583,4 @@ describe('prefetch props', () => { expect(childProps).toHaveBeenCalledOnce() expect(parentProps).not.toHaveBeenCalledOnce() }) - -}) \ No newline at end of file +}) diff --git a/src/components/routerLink.vue b/src/components/routerLink.vue index d8be6c84..1306e88d 100644 --- a/src/components/routerLink.vue +++ b/src/components/routerLink.vue @@ -1,5 +1,10 @@ @@ -46,6 +51,10 @@ return isUrl(props.to) ? props.to : props.to(router.resolve) }) + const something_new = '123' + + console.log(something_new) + const options = computed(() => { const { to, ...options } = props @@ -64,4 +73,4 @@ push() } - \ No newline at end of file + diff --git a/src/components/routerView.browser.spec.ts b/src/components/routerView.browser.spec.ts index a9f25fe6..f20aeb79 100644 --- a/src/components/routerView.browser.spec.ts +++ b/src/components/routerView.browser.spec.ts @@ -185,7 +185,7 @@ test('Renders custom genericRejection component when the initialUrl does not mat }) if (!isWithComponent(router.route.matched)) { - throw 'Matched route does not have a single component' + throw new Error('Matched route does not have a single component') } const route = mount(router.route.matched.component) @@ -287,7 +287,6 @@ test('Renders the multiple components when using named route views', async () => }) test('Binds props and attrs from route', async () => { - const routeA = createRoute({ name: 'routeA', path: '/routeA/[param]', @@ -300,7 +299,7 @@ test('Binds props and attrs from route', async () => { path: '/routeB/[param]', component: echo, props: async ({ param }) => { - return await { value: param } + return { value: param } }, }) @@ -330,7 +329,6 @@ test('Binds props and attrs from route', async () => { }) test('Updates props and attrs when route params change', async () => { - const syncProps = createRoute({ name: 'sync', path: '/sync/[param]', @@ -338,13 +336,12 @@ test('Updates props and attrs when route params change', async () => { props: ({ param }) => ({ value: param }), }) - const asyncProps = createRoute({ name: 'async', path: '/async/[param]', component: echo, props: async ({ param }) => { - return await { value: param } + return { value: param } }, }) @@ -383,4 +380,4 @@ test('Updates props and attrs when route params change', async () => { await flushPromises() expect(app.html()).toBe('async-bar') -}) \ No newline at end of file +}) diff --git a/src/components/routerView.vue b/src/components/routerView.vue index c8e14347..f4c903a3 100644 --- a/src/components/routerView.vue +++ b/src/components/routerView.vue @@ -85,4 +85,4 @@ return { default: routerView } } - \ No newline at end of file + diff --git a/src/compositions/index.ts b/src/compositions/index.ts index 4f5d4fde..5c4f1949 100644 --- a/src/compositions/index.ts +++ b/src/compositions/index.ts @@ -8,4 +8,4 @@ export { onAfterRouteEnter, onAfterRouteLeave, onAfterRouteUpdate -} from './hooks' \ No newline at end of file +} from './hooks' diff --git a/src/compositions/useLink.ts b/src/compositions/useLink.ts index c13df59c..b8669145 100644 --- a/src/compositions/useLink.ts +++ b/src/compositions/useLink.ts @@ -74,8 +74,12 @@ export function useLink( ): UseLink { const router = useRouter() const sourceRef = toRef(source) - const paramsRef = computed>(() => isUrl(sourceRef.value) ? {} : toValue(paramsOrOptions)) - const optionsRef = computed(() => isUrl(sourceRef.value) ? toValue(paramsOrOptions) : toValue(maybeOptions)) + const paramsRef = computed>(() => { + return isUrl(sourceRef.value) ? {} : toValue(paramsOrOptions) + }) + const optionsRef = computed(() => { + return isUrl(sourceRef.value) ? toValue(paramsOrOptions) : toValue(maybeOptions) + }) const href = computed(() => { if (isUrl(sourceRef.value)) { @@ -123,4 +127,4 @@ export function useLink( push, replace, } -} \ No newline at end of file +} diff --git a/src/compositions/usePrefetching.ts b/src/compositions/usePrefetching.ts index 50d9b16f..7cdce2d4 100644 --- a/src/compositions/usePrefetching.ts +++ b/src/compositions/usePrefetching.ts @@ -38,8 +38,7 @@ export function usePrefetching(config: MaybeRefOrGetter): } function prefetchComponentsForRoute(route: ResolvedRoute, { routerPrefetch, linkPrefetch }: PrefetchConfigs): void { - - route.matches.forEach(route => { + route.matches.forEach((route) => { const shouldPrefetchComponents = getPrefetchOption({ routePrefetch: route.prefetch, routerPrefetch, @@ -55,12 +54,11 @@ function prefetchComponentsForRoute(route: ResolvedRoute, { routerPrefetch, link } if (isWithComponents(route)) { - Object.values(route.components).forEach(component => { + Object.values(route.components).forEach((component) => { if (isAsyncComponent(component)) { component.setup() } }) } }) - -} \ No newline at end of file +} diff --git a/src/compositions/usePropStore.ts b/src/compositions/usePropStore.ts index b37771e8..c341413c 100644 --- a/src/compositions/usePropStore.ts +++ b/src/compositions/usePropStore.ts @@ -10,4 +10,4 @@ export function usePropStore(): PropStore { } return store -} \ No newline at end of file +} diff --git a/src/compositions/useRejection.ts b/src/compositions/useRejection.ts index 115a741f..bed03500 100644 --- a/src/compositions/useRejection.ts +++ b/src/compositions/useRejection.ts @@ -20,4 +20,4 @@ export function useRejection(): RouterRejection { } return rejection -} \ No newline at end of file +} diff --git a/src/compositions/useRoute.browser.spec.ts b/src/compositions/useRoute.browser.spec.ts index 9b873b27..17e07554 100644 --- a/src/compositions/useRoute.browser.spec.ts +++ b/src/compositions/useRoute.browser.spec.ts @@ -132,4 +132,4 @@ test('when given a routeKey that does not match exactly the current route throws }) expect(error).toBeInstanceOf(UseRouteInvalidError) -}) \ No newline at end of file +}) diff --git a/src/compositions/useRoute.ts b/src/compositions/useRoute.ts index 56510716..b2ea541b 100644 --- a/src/compositions/useRoute.ts +++ b/src/compositions/useRoute.ts @@ -46,4 +46,4 @@ export function useRoute(routeName?: string, options?: IsRouteOptions): Register watch(router.route, checkRouteNameIsValid, { immediate: true, deep: true }) return router.route -} \ No newline at end of file +} diff --git a/src/compositions/useRouter.ts b/src/compositions/useRouter.ts index 526c42a3..27af708a 100644 --- a/src/compositions/useRouter.ts +++ b/src/compositions/useRouter.ts @@ -19,4 +19,4 @@ export function useRouter(): RegisteredRouter { } return router -} \ No newline at end of file +} diff --git a/src/compositions/useRouterDepth.ts b/src/compositions/useRouterDepth.ts index 56389f86..1d92ac5d 100644 --- a/src/compositions/useRouterDepth.ts +++ b/src/compositions/useRouterDepth.ts @@ -3,4 +3,4 @@ import { depthInjectionKey } from '@/types/injectionDepth' export function useRouterDepth(): number { return inject(depthInjectionKey, 0) -} \ No newline at end of file +} diff --git a/src/errors/initialRouteMissingError.ts b/src/errors/initialRouteMissingError.ts index 3a39cc43..0bd1204d 100644 --- a/src/errors/initialRouteMissingError.ts +++ b/src/errors/initialRouteMissingError.ts @@ -2,4 +2,4 @@ export class InitialRouteMissingError extends Error { public constructor() { super('initialUrl must be set if window.location is unavailable') } -} \ No newline at end of file +} diff --git a/src/errors/metaPropertyConflict.ts b/src/errors/metaPropertyConflict.ts index 82f8b1b8..5e36fc7b 100644 --- a/src/errors/metaPropertyConflict.ts +++ b/src/errors/metaPropertyConflict.ts @@ -6,4 +6,4 @@ export class MetaPropertyConflict extends Error { public constructor(property?: string) { super(`Child property on meta for ${property} conflicts with the parent meta.`) } -} \ No newline at end of file +} diff --git a/src/errors/navigationAbortError.ts b/src/errors/navigationAbortError.ts index 09aca12e..31c9c113 100644 --- a/src/errors/navigationAbortError.ts +++ b/src/errors/navigationAbortError.ts @@ -1 +1 @@ -export class NavigationAbortError extends Error {} \ No newline at end of file +export class NavigationAbortError extends Error {} diff --git a/src/errors/routeNotFoundError.ts b/src/errors/routeNotFoundError.ts index 29ff0f23..92950c41 100644 --- a/src/errors/routeNotFoundError.ts +++ b/src/errors/routeNotFoundError.ts @@ -5,4 +5,4 @@ export class RouteNotFoundError extends Error { public constructor(source: string) { super(`Route not found: "${source}"`) } -} \ No newline at end of file +} diff --git a/src/errors/routerRejectionError.ts b/src/errors/routerRejectionError.ts index 79f56e38..60d4b594 100644 --- a/src/errors/routerRejectionError.ts +++ b/src/errors/routerRejectionError.ts @@ -9,4 +9,3 @@ export class RouterRejectionError extends Error { this.type = type } } - diff --git a/src/guards/routes.spec-d.ts b/src/guards/routes.spec-d.ts index a446e09c..478aab34 100644 --- a/src/guards/routes.spec-d.ts +++ b/src/guards/routes.spec-d.ts @@ -70,4 +70,4 @@ test('router route can be narrowed', () => { bar?: boolean | undefined, }>() } -}) \ No newline at end of file +}) diff --git a/src/guards/routes.ts b/src/guards/routes.ts index 994425bd..354644a5 100644 --- a/src/guards/routes.ts +++ b/src/guards/routes.ts @@ -46,4 +46,4 @@ export function isRoute(route: unknown, routeName?: string, { exact }: IsRouteOp } return names.includes(routeName) -} \ No newline at end of file +} diff --git a/src/main.ts b/src/main.ts index a20ab7fd..f2c7586f 100644 --- a/src/main.ts +++ b/src/main.ts @@ -7,4 +7,4 @@ export * from './types' export type { CreateRouteOptions } from './types/createRouteOptions' export { isRoute } from './guards/routes' export { createRoute } from './services/createRoute' -export { createExternalRoute } from './services/createExternalRoute' \ No newline at end of file +export { createExternalRoute } from './services/createExternalRoute' diff --git a/src/models/RouteHooks.ts b/src/models/RouteHooks.ts index cf472622..6a79c32e 100644 --- a/src/models/RouteHooks.ts +++ b/src/models/RouteHooks.ts @@ -7,4 +7,4 @@ export class RouteHooks { public onAfterRouteEnter = new Set() public onAfterRouteUpdate = new Set() public onAfterRouteLeave = new Set() -} \ No newline at end of file +} diff --git a/src/services/combineHash.ts b/src/services/combineHash.ts index d69b1c52..d6d1a40c 100644 --- a/src/services/combineHash.ts +++ b/src/services/combineHash.ts @@ -13,4 +13,4 @@ export type CombineHash< export function combineHash(parentHash: TParentHash, childHash: TChildHash): CombineHash export function combineHash(parentHash: Hash, childHash: Hash): Hash { return hash(`${parentHash.value ?? ''}${childHash.value ?? ''}`) -} \ No newline at end of file +} diff --git a/src/services/combineMeta.spec.ts b/src/services/combineMeta.spec.ts index 238cbb37..0b756d8c 100644 --- a/src/services/combineMeta.spec.ts +++ b/src/services/combineMeta.spec.ts @@ -32,4 +32,4 @@ test('given 2 meta objects with duplicate properties with DIFFERENT types, throw const action: () => void = () => combineMeta(aMeta, bMeta) expect(action).toThrow(MetaPropertyConflict) -}) \ No newline at end of file +}) diff --git a/src/services/combineMeta.ts b/src/services/combineMeta.ts index d070ff2b..768659e5 100644 --- a/src/services/combineMeta.ts +++ b/src/services/combineMeta.ts @@ -13,11 +13,11 @@ export function combineMeta(parentMeta: Record, childMeta: Reco } function checkForConflicts(parentMeta: Record, childMeta: Record): void { - const conflict = Object.keys(parentMeta).find(key => { + const conflict = Object.keys(parentMeta).find((key) => { return key in childMeta && typeof childMeta[key] !== typeof parentMeta[key] }) if (conflict) { throw new MetaPropertyConflict(conflict) } -} \ No newline at end of file +} diff --git a/src/services/combinePath.spec.ts b/src/services/combinePath.spec.ts index a84e7044..955f8b61 100644 --- a/src/services/combinePath.spec.ts +++ b/src/services/combinePath.spec.ts @@ -29,4 +29,4 @@ test('given 2 paths with params that include duplicates, throws DuplicateParamsE const action: () => void = () => combinePath(aPath, bPath) expect(action).toThrow(DuplicateParamsError) -}) \ No newline at end of file +}) diff --git a/src/services/combinePath.ts b/src/services/combinePath.ts index fbdc80dc..a43e5461 100644 --- a/src/services/combinePath.ts +++ b/src/services/combinePath.ts @@ -24,4 +24,4 @@ export function combinePath(parentPath: Path, childPath: Path): Path { params: { ...parentPath.params, ...childPath.params }, toString: () => newPathString, } -} \ No newline at end of file +} diff --git a/src/services/combineQuery.spec.ts b/src/services/combineQuery.spec.ts index 2cbde051..d4b65361 100644 --- a/src/services/combineQuery.spec.ts +++ b/src/services/combineQuery.spec.ts @@ -29,4 +29,4 @@ test('given 2 queries with params that include duplicates, throws DuplicateParam const action: () => void = () => combineQuery(aQuery, bQuery) expect(action).toThrow(DuplicateParamsError) -}) \ No newline at end of file +}) diff --git a/src/services/combineQuery.ts b/src/services/combineQuery.ts index c46726f6..bac84f62 100644 --- a/src/services/combineQuery.ts +++ b/src/services/combineQuery.ts @@ -33,4 +33,4 @@ export function combineQuery(parentQuery: Query, childQuery: Query): Query { params: { ...parentQuery.params, ...childQuery.params }, toString: () => newQueryString, } -} \ No newline at end of file +} diff --git a/src/services/combineState.spec.ts b/src/services/combineState.spec.ts index 9dfef92b..872d6425 100644 --- a/src/services/combineState.spec.ts +++ b/src/services/combineState.spec.ts @@ -21,4 +21,4 @@ test('given 2 states with params that include duplicates, throws DuplicateParams const action: () => void = () => combineState(aState, bState) expect(action).toThrow(DuplicateParamsError) -}) \ No newline at end of file +}) diff --git a/src/services/combineState.ts b/src/services/combineState.ts index 30883c24..85db4ec2 100644 --- a/src/services/combineState.ts +++ b/src/services/combineState.ts @@ -11,4 +11,4 @@ export function combineState(parentState: Record, childState: Rec checkDuplicateParams(parentState, childState) return { ...parentState, ...childState } -} \ No newline at end of file +} diff --git a/src/services/component.browser.spec.ts b/src/services/component.browser.spec.ts index 327e1bd1..7754bd37 100644 --- a/src/services/component.browser.spec.ts +++ b/src/services/component.browser.spec.ts @@ -38,7 +38,7 @@ test('renders component with async props', async () => { name: 'echo', path: '/echo', component: component(echo, async () => { - return await { value: 'echo' } + return { value: 'echo' } }), }) @@ -64,4 +64,4 @@ test('renders component with async props', async () => { await flushPromises() expect(app.html()).toBe('echo') -}) \ No newline at end of file +}) diff --git a/src/services/component.ts b/src/services/component.ts index 9589f1c7..faf542de 100644 --- a/src/services/component.ts +++ b/src/services/component.ts @@ -55,7 +55,6 @@ function asyncPropsWrapper(component: TComponent, setup() { const values = ref() - // eslint-disable-next-line semi-style ;(async () => { values.value = await props })() @@ -69,4 +68,4 @@ function asyncPropsWrapper(component: TComponent, } }, }) -} \ No newline at end of file +} diff --git a/src/services/createCurrentRoute.ts b/src/services/createCurrentRoute.ts index 78d66ec4..573339af 100644 --- a/src/services/createCurrentRoute.ts +++ b/src/services/createCurrentRoute.ts @@ -19,9 +19,9 @@ export function createCurrentRoute(fallbackRoute: ResolvedRoute, push: RouterPus const route = reactive({ ...fallbackRoute }) const updateRoute: ResolvedRouteUpdate = (newRoute) => { - Object.assign(route, { + Object.assign(route, { [isRejectionRouteSymbol]: false, - ...newRoute + ...newRoute, }) } @@ -33,4 +33,4 @@ export function createCurrentRoute(fallbackRoute: ResolvedRoute, push: RouterPus routerRoute, updateRoute, } -} \ No newline at end of file +} diff --git a/src/services/createExternalRoute.ts b/src/services/createExternalRoute.ts index 71c931de..e30902fc 100644 --- a/src/services/createExternalRoute.ts +++ b/src/services/createExternalRoute.ts @@ -63,4 +63,4 @@ export function createExternalRoute(options: CreateRouteOptions): Route { checkDuplicateParams(merged.path.params, merged.query.params, merged.host.params) return merged -} \ No newline at end of file +} diff --git a/src/services/createIsExternal.spec.ts b/src/services/createIsExternal.spec.ts index 047fecd7..c677239b 100644 --- a/src/services/createIsExternal.spec.ts +++ b/src/services/createIsExternal.spec.ts @@ -29,4 +29,4 @@ test('given host with url that does NOT match, returns true', () => { const response = isExternal(url) expect(response).toBe(true) -}) \ No newline at end of file +}) diff --git a/src/services/createIsExternal.ts b/src/services/createIsExternal.ts index 0bee31a8..2b3b3506 100644 --- a/src/services/createIsExternal.ts +++ b/src/services/createIsExternal.ts @@ -9,4 +9,4 @@ export function createIsExternal(host: string | undefined): (url: string) => boo return true } -} \ No newline at end of file +} diff --git a/src/services/createMaybeRelativeUrl.ts b/src/services/createMaybeRelativeUrl.ts index c530bc17..8a72d32d 100644 --- a/src/services/createMaybeRelativeUrl.ts +++ b/src/services/createMaybeRelativeUrl.ts @@ -27,4 +27,4 @@ function createRelativeUrl(value: string): MaybeRelativeUrl { return { pathname, search, searchParams, hash, } -} \ No newline at end of file +} diff --git a/src/services/createParam.ts b/src/services/createParam.ts index efb2e0a2..9a76c2c2 100644 --- a/src/services/createParam.ts +++ b/src/services/createParam.ts @@ -12,8 +12,8 @@ export function createParam(param: TParam, defaultValue?: } return { - get: (value) => getParamValue(value, param), - set: (value) => setParamValue(value, param), + get: value => getParamValue(value, param), + set: value => setParamValue(value, param), defaultValue, } -} \ No newline at end of file +} diff --git a/src/services/createPropStore.ts b/src/services/createPropStore.ts index 9e6e3864..84d3fbfb 100644 --- a/src/services/createPropStore.ts +++ b/src/services/createPropStore.ts @@ -101,4 +101,4 @@ export function createPropStore(): PropStore { getProps, setProps, } -} \ No newline at end of file +} diff --git a/src/services/createResolvedRouteQuery.ts b/src/services/createResolvedRouteQuery.ts index 259fce62..36b5801d 100644 --- a/src/services/createResolvedRouteQuery.ts +++ b/src/services/createResolvedRouteQuery.ts @@ -7,4 +7,4 @@ export function createResolvedRouteQuery(query?: string): ResolvedRouteQuery { get: (key: string) => params.get(key), getAll: (key: string) => params.getAll(key), } -} \ No newline at end of file +} diff --git a/src/services/createRoute.spec.ts b/src/services/createRoute.spec.ts index 102bc34a..9a52f574 100644 --- a/src/services/createRoute.spec.ts +++ b/src/services/createRoute.spec.ts @@ -109,4 +109,4 @@ test('given parent and child without meta, meta matches parent', () => { expect(child.meta).toMatchObject({ foo: 123, }) -}) \ No newline at end of file +}) diff --git a/src/services/createRoute.ts b/src/services/createRoute.ts index 3afc3b73..378f7939 100644 --- a/src/services/createRoute.ts +++ b/src/services/createRoute.ts @@ -36,10 +36,10 @@ export function createRoute< const TMeta extends RouteMeta = RouteMeta, const TState extends Record = Record >(options: CreateRouteOptions -& WithHooks -& WithoutComponents -& WithoutParent -& (WithState | WithoutState)): + & WithHooks + & WithoutComponents + & WithoutParent + & (WithState | WithoutState)): Route, Host<'', {}>, ToPath, ToQuery, ToHash, TMeta, TState> export function createRoute< @@ -51,10 +51,10 @@ export function createRoute< const TMeta extends RouteMeta = RouteMeta, const TState extends Record = Record >(options: CreateRouteOptions -& WithHooks -& WithoutComponents -& WithParent -& (WithState | WithoutState)): + & WithHooks + & WithoutComponents + & WithParent + & (WithState | WithoutState)): Route, Host<'', {}>, CombinePath>, CombineQuery>, CombineHash>, CombineMeta, CombineState> export function createRoute< @@ -66,10 +66,10 @@ export function createRoute< const TMeta extends RouteMeta = RouteMeta, const TState extends Record = Record >(options: CreateRouteOptions -& WithHooks -& WithComponent> -& WithoutParent -& (WithState | WithoutState)): + & WithHooks + & WithComponent> + & WithoutParent + & (WithState | WithoutState)): Route, Host<'', {}>, ToPath, ToQuery, ToHash, TMeta, TState> export function createRoute< @@ -82,10 +82,10 @@ export function createRoute< const TMeta extends RouteMeta = RouteMeta, const TState extends Record = Record >(options: CreateRouteOptions -& WithHooks -& WithComponent> -& WithParent -& (WithState | WithoutState)): + & WithHooks + & WithComponent> + & WithParent + & (WithState | WithoutState)): Route, Host<'', {}>, CombinePath>, CombineQuery>, CombineHash>, CombineMeta, CombineState> export function createRoute< @@ -97,10 +97,10 @@ export function createRoute< const TMeta extends RouteMeta = RouteMeta, const TState extends Record = Record >(options: CreateRouteOptions -& WithHooks -& WithComponents> -& WithoutParent -& (WithState | WithoutState)): + & WithHooks + & WithComponents> + & WithoutParent + & (WithState | WithoutState)): Route, Host<'', {}>, ToPath, ToQuery, ToHash, TMeta, TState> export function createRoute< @@ -113,10 +113,10 @@ export function createRoute< const TMeta extends RouteMeta = RouteMeta, const TState extends Record = Record >(options: CreateRouteOptions -& WithHooks -& WithComponents> -& WithParent -& (WithState | WithoutState)): + & WithHooks + & WithComponents> + & WithParent + & (WithState | WithoutState)): Route, Host<'', {}>, CombinePath>, CombineQuery>, CombineHash>, CombineMeta, CombineState> export function createRoute(options: CreateRouteOptions): Route { @@ -149,4 +149,4 @@ export function createRoute(options: CreateRouteOptions): Route { checkDuplicateParams(merged.path.params, merged.query.params) return merged -} \ No newline at end of file +} diff --git a/src/services/createRouteHookStore.ts b/src/services/createRouteHookStore.ts index 78efa242..8766717f 100644 --- a/src/services/createRouteHookStore.ts +++ b/src/services/createRouteHookStore.ts @@ -66,5 +66,4 @@ export function createRouteHookStore(): RouteHookStore { } return { ...store, addBeforeRouteHook, addAfterRouteHook } - -} \ No newline at end of file +} diff --git a/src/services/createRouteId.ts b/src/services/createRouteId.ts index a5dd71a3..855d294f 100644 --- a/src/services/createRouteId.ts +++ b/src/services/createRouteId.ts @@ -4,4 +4,4 @@ function uniqueIdSequence(): () => string { return () => (++currentId).toString() } -export const createRouteId = uniqueIdSequence() \ No newline at end of file +export const createRouteId = uniqueIdSequence() diff --git a/src/services/createRouter.browser.spec.ts b/src/services/createRouter.browser.spec.ts index 83483878..5eb5b5d6 100644 --- a/src/services/createRouter.browser.spec.ts +++ b/src/services/createRouter.browser.spec.ts @@ -30,5 +30,4 @@ test('Router is automatically started when installed', async () => { await router.start() expect(router.route.name).toBe('root') - -}) \ No newline at end of file +}) diff --git a/src/services/createRouter.spec.ts b/src/services/createRouter.spec.ts index dca320c4..0a663771 100644 --- a/src/services/createRouter.spec.ts +++ b/src/services/createRouter.spec.ts @@ -115,7 +115,6 @@ test('route update updates the current route', async () => { }) expect(router.route.params.param).toBe('three') - }) test.fails('route is readonly except for individual params', async () => { @@ -133,19 +132,19 @@ test.fails('route is readonly except for individual params', async () => { await start() - // @ts-expect-error + // @ts-expect-error value is immutable route.name = 'child' expect(route.name).toBe('root') - // @ts-expect-error + // @ts-expect-error value is immutable route.matched = 'match' expect(route.matched).toMatchObject(routes[0].matched) - // @ts-expect-error + // @ts-expect-error value is immutable route.matches = 'matches' expect(route.matches).toMatchObject(routes[0].matches) - // @ts-expect-error + // @ts-expect-error value is immutable route.params = { foo: 'bar' } expect(route.params).toMatchObject({}) }) @@ -179,12 +178,12 @@ test('individual params are writable', async () => { expect(route.params.param).toBe('again') - // @ts-expect-error + // @ts-expect-error value is immutable route.params.nothing = 'nothing' await flushPromises() - // @ts-expect-error + // @ts-expect-error value is immutable expect(route.params.nothing).toBeUndefined() }) @@ -226,12 +225,12 @@ test('setting an unknown param does not add its value to the route', async () => await start() - // @ts-expect-error + // @ts-expect-error value is immutable route.params.nothing = 'nothing' await flushPromises() - // @ts-expect-error + // @ts-expect-error value is immutable expect(route.params.nothing).toBeUndefined() }) @@ -290,4 +289,4 @@ test('initial route is not set until the router is started', async () => { await router.start() expect(router.route.name).toBe('root') -}) \ No newline at end of file +}) diff --git a/src/services/createRouter.ts b/src/services/createRouter.ts index 67f19c96..f4120677 100644 --- a/src/services/createRouter.ts +++ b/src/services/createRouter.ts @@ -88,7 +88,8 @@ export function createRouter { - return setRejection(type) + setRejection(type) } - const find = >( - source: Url | TSource, + const find = ( + source: Url | RoutesName, params: Record = {}, ): ResolvedRoute | undefined => { if (!isUrl(source)) { @@ -269,4 +270,4 @@ export function createRouter { test('when given a name that does not match a route returns undefined', () => { const router = createRouter(routes, { initialUrl: '/' }) - // @ts-expect-error + // @ts-expect-error route doesn't exist expect(() => router.find('parentD')).toThrow(RouteNotFoundError) }) @@ -46,4 +46,4 @@ test('when given an external url that does not match a route returns undefined', const route = router.find('https://example.com') expect(route).toBeUndefined() -}) \ No newline at end of file +}) diff --git a/src/services/createRouterHistory.browser.spec.ts b/src/services/createRouterHistory.browser.spec.ts index 5c3aa7d1..592ac6b3 100644 --- a/src/services/createRouterHistory.browser.spec.ts +++ b/src/services/createRouterHistory.browser.spec.ts @@ -33,4 +33,4 @@ test('when forward is called, forwards call to window history', () => { history.forward() expect(window.history.go).toHaveBeenCalledOnce() -}) \ No newline at end of file +}) diff --git a/src/services/createRouterHistory.ts b/src/services/createRouterHistory.ts index b3d42d46..54f2d8a1 100644 --- a/src/services/createRouterHistory.ts +++ b/src/services/createRouterHistory.ts @@ -28,7 +28,8 @@ export function createRouterHistory({ mode, listener }: RouterHistoryOptions): R const update: NavigationUpdate = (url, options) => { if (options?.replace) { - return history.replace(url, options.state) + history.replace(url, options.state) + return } history.push(url, options?.state) @@ -37,7 +38,7 @@ export function createRouterHistory({ mode, listener }: RouterHistoryOptions): R const refresh: NavigationRefresh = () => { const url = createPath(history.location) - return history.replace(url) + history.replace(url) } let removeListener: (() => void) | undefined @@ -74,4 +75,4 @@ function createHistory(mode: RouterHistoryMode = 'auto'): History { const exhaustive: never = mode throw new Error(`Switch is not exhaustive for mode: ${exhaustive}`) } -} \ No newline at end of file +} diff --git a/src/services/createRouterHooks.ts b/src/services/createRouterHooks.ts index 80074a16..78cca036 100644 --- a/src/services/createRouterHooks.ts +++ b/src/services/createRouterHooks.ts @@ -50,4 +50,4 @@ export function createRouterHooks(): RouterHooks { onAfterRouteLeave, hooks, } -} \ No newline at end of file +} diff --git a/src/services/createRouterReject.ts b/src/services/createRouterReject.ts index c5c80485..26a2fae4 100644 --- a/src/services/createRouterReject.ts +++ b/src/services/createRouterReject.ts @@ -19,7 +19,6 @@ type CreateRouterRejectContext = { rejections?: Partial>, } - export type CreateRouterReject = { setRejection: RouterSetReject, rejection: RouterRejection, @@ -29,7 +28,6 @@ export type CreateRouterReject = { export function createRouterReject({ rejections: customRejectionComponents, }: CreateRouterRejectContext): CreateRouterReject { - const getRejectionComponent = (type: RegisteredRejectionType): Component => { const components = { ...customRejectionComponents, @@ -81,4 +79,4 @@ export function createRouterReject({ rejection, getRejectionRoute, } -} \ No newline at end of file +} diff --git a/src/services/createRouterResolve.spec.ts b/src/services/createRouterResolve.spec.ts index a2b81294..d736ea3c 100644 --- a/src/services/createRouterResolve.spec.ts +++ b/src/services/createRouterResolve.spec.ts @@ -17,7 +17,6 @@ test('given a route name with params, interpolates param values', () => { }) test('given a route name with query, interpolates param values', () => { - const resolve = createRouterResolve(routes) const url = resolve('parentA', { paramA: 'bar' }, { query: { foo: 'foo' } }) @@ -27,11 +26,10 @@ test('given a route name with query, interpolates param values', () => { test('given a route name with params cannot be matched, throws an error', () => { const resolve = createRouterResolve(routes) - // @ts-expect-error + // @ts-expect-error route doesn't actually exist expect(() => resolve({ route: 'foo' })).toThrowError() }) - test('given a param with a dash or underscore resolves the correct url', () => { const routes = [ createRoute({ @@ -52,7 +50,7 @@ test('given a param with a dash or underscore resolves the correct url', () => { expect(kebab).toBe('/foo') - const snake = resolve('snake', { 'test_param': 'foo' }) + const snake = resolve('snake', { test_param: 'foo' }) expect(snake).toBe('/foo') }) @@ -80,7 +78,7 @@ test('when given an external route with params in host, interpolates param value const resolve = createRouterResolve([route]) - const url = resolve('external', { 'subdomain': 'router' }) + const url = resolve('external', { subdomain: 'router' }) expect(url).toBe('https://router.kitbag.dev/') }) @@ -89,4 +87,4 @@ test('given a route with hash, interpolates hash value', () => { const resolve = createRouterResolve(routes) expect(resolve('parentA', { paramA: 'bar' }, { hash: 'foo' })).toBe('/parentA/bar#foo') -}) \ No newline at end of file +}) diff --git a/src/services/createRouterResolve.ts b/src/services/createRouterResolve.ts index 5ce7b6f1..0d26025f 100644 --- a/src/services/createRouterResolve.ts +++ b/src/services/createRouterResolve.ts @@ -29,9 +29,8 @@ export type RouterResolve< } export function createRouterResolve(routes: TRoutes): RouterResolve { - - return >( - source: Url | TSource, + return ( + source: Url | RoutesName, paramsOrOptions?: Record, maybeOptions?: RouterResolveOptions, ): string => { @@ -43,7 +42,7 @@ export function createRouterResolve(routes: TRoute const params = paramsOrOptions ?? {} const options: RouterResolveOptions = maybeOptions ?? {} - const match = routes.find((route) => route.name === source) + const match = routes.find(route => route.name === source) if (!match) { throw new RouteNotFoundError(String(source)) @@ -57,5 +56,4 @@ export function createRouterResolve(routes: TRoute return url } - -} \ No newline at end of file +} diff --git a/src/services/createRouterRoute.spec.ts b/src/services/createRouterRoute.spec.ts index 99fb9429..1cf5727c 100644 --- a/src/services/createRouterRoute.spec.ts +++ b/src/services/createRouterRoute.spec.ts @@ -34,4 +34,4 @@ test('sending state, includes state in push options', () => { { param: 123 }, { state: { bar: 'bar' } }, ) -}) \ No newline at end of file +}) diff --git a/src/services/createRouterRoute.ts b/src/services/createRouterRoute.ts index fa3a8ce7..c2163b33 100644 --- a/src/services/createRouterRoute.ts +++ b/src/services/createRouterRoute.ts @@ -82,4 +82,4 @@ export function createRouterRoute(route: TRoute, p return Reflect.get(target, property, receiver) }, }) -} \ No newline at end of file +} diff --git a/src/services/getInitialUrl.browser.spec.ts b/src/services/getInitialUrl.browser.spec.ts index 5e1f2135..b552cc4b 100644 --- a/src/services/getInitialUrl.browser.spec.ts +++ b/src/services/getInitialUrl.browser.spec.ts @@ -7,7 +7,6 @@ test('given value for initial route, returns value', () => { const response = getInitialUrl(initialRoute) - expect(response).toBe(initialRoute) }) @@ -18,4 +17,4 @@ test('defaults to window.location without protocol or host', () => { const response = getInitialUrl() expect(response).toBe(initialRoute) -}) \ No newline at end of file +}) diff --git a/src/services/getInitialUrl.spec.ts b/src/services/getInitialUrl.spec.ts index 98db41f6..af03a023 100644 --- a/src/services/getInitialUrl.spec.ts +++ b/src/services/getInitialUrl.spec.ts @@ -3,4 +3,4 @@ import { getInitialUrl } from '@/services/getInitialUrl' test('throws error if initial route is not set', () => { expect(() => getInitialUrl()).toThrowError('initialUrl must be set if window.location is unavailable') -}) \ No newline at end of file +}) diff --git a/src/services/getInitialUrl.ts b/src/services/getInitialUrl.ts index db6152ac..8c08d8fd 100644 --- a/src/services/getInitialUrl.ts +++ b/src/services/getInitialUrl.ts @@ -11,4 +11,4 @@ export function getInitialUrl(initialUrl?: string): string { } throw new InitialRouteMissingError() -} \ No newline at end of file +} diff --git a/src/services/getParamsForString.ts b/src/services/getParamsForString.ts index 8918c8a8..e0b77b6f 100644 --- a/src/services/getParamsForString.ts +++ b/src/services/getParamsForString.ts @@ -4,7 +4,7 @@ import { paramEnd, paramStart } from '@/types/params' import { Param } from '@/types/paramTypes' import { checkDuplicateParams } from '@/utilities/checkDuplicateKeys' -export function getParamsForString>(string: TInput, params: TParams): Record { +export function getParamsForString(string: string, params: Record): Record { const paramPattern = new RegExp(`\\${paramStart}(\\??[\\w-_]+)\\${paramEnd}`, 'g') const matches = Array.from(string.matchAll(paramPattern)) @@ -23,4 +23,4 @@ export function getParamsForString { vi.spyOn(utilities, 'getRouteScoreSortMethod').mockImplementation(() => { return (route: Route) => { @@ -253,4 +252,4 @@ test('given a route with hash, matches url with same hash', () => { const response = getResolvedRouteForUrl([noHashRoute, matchingRoute, differentHashRoute], '/foo#foo') expect(response?.name).toBe('matching-route') -}) \ No newline at end of file +}) diff --git a/src/services/getResolvedRouteForUrl.ts b/src/services/getResolvedRouteForUrl.ts index c6088128..bcd88d05 100644 --- a/src/services/getResolvedRouteForUrl.ts +++ b/src/services/getResolvedRouteForUrl.ts @@ -40,4 +40,4 @@ export function getResolvedRouteForUrl(routes: Routes, url: string, state?: unkn state: getStateValues(route.state, state), hash, } -} \ No newline at end of file +} diff --git a/src/services/getRouteHooks.spec.ts b/src/services/getRouteHooks.spec.ts index 675b037b..c9f34ab6 100644 --- a/src/services/getRouteHooks.spec.ts +++ b/src/services/getRouteHooks.spec.ts @@ -17,4 +17,4 @@ test('given two ResolvedRoutes returns before timing hooks in correct order', () expect(Array.from(hooks.onBeforeRouteEnter)).toMatchObject([childA.onBeforeRouteEnter, grandchildA.onBeforeRouteEnter]) expect(Array.from(hooks.onBeforeRouteUpdate)).toMatchObject([parent.onBeforeRouteUpdate]) expect(Array.from(hooks.onBeforeRouteLeave)).toMatchObject([childB.onBeforeRouteLeave, grandchildB.onBeforeRouteLeave]) -}) \ No newline at end of file +}) diff --git a/src/services/getRouteHooks.ts b/src/services/getRouteHooks.ts index 143d3eaf..2d3d4988 100644 --- a/src/services/getRouteHooks.ts +++ b/src/services/getRouteHooks.ts @@ -45,4 +45,4 @@ export function getAfterRouteHooksFromRoutes(to: ResolvedRoute, from: ResolvedRo }) return hooks -} \ No newline at end of file +} diff --git a/src/services/hooks.spec.ts b/src/services/hooks.spec.ts index af289739..ed1e7716 100644 --- a/src/services/hooks.spec.ts +++ b/src/services/hooks.spec.ts @@ -62,10 +62,22 @@ test('calls hook with correct routes', () => { }) test.each<{ type: string, status: string, hook: BeforeRouteHook }>([ - { type: 'reject', status: 'REJECT', hook: (_to, { reject }) => reject('NotFound') }, + { + type: 'reject', + status: 'REJECT', + hook: (_to, { reject }) => { + reject('NotFound') + }, + }, { type: 'push', status: 'PUSH', hook: (_to, { push }) => push('/') }, { type: 'replace', status: 'PUSH', hook: (_to, { replace }) => replace('/') }, - { type: 'abort', status: 'ABORT', hook: (_to, { abort }) => abort() }, + { + type: 'abort', + status: 'ABORT', + hook: (_to, { abort }) => { + abort() + }, + }, ])('Returns correct status when hook is called', async ({ status, hook }) => { const { runBeforeRouteHooks } = createRouteHookRunners() const { hooks } = createRouterHooks() @@ -112,7 +124,7 @@ test.each<{ type: string, status: string, hook: BeforeRouteHook }>([ hooks, }) - await expect(response.status).toBe(status) + expect(response.status).toBe(status) }) test('hook is called in order', async () => { @@ -171,4 +183,4 @@ test('hook is called in order', async () => { expect(orderA).toBeLessThan(orderB) expect(orderB).toBeLessThan(orderC) -}) \ No newline at end of file +}) diff --git a/src/services/hooks.ts b/src/services/hooks.ts index 61b62db2..e5609626 100644 --- a/src/services/hooks.ts +++ b/src/services/hooks.ts @@ -82,7 +82,6 @@ export function createRouteHookRunners(): RouteHookRunne })) await Promise.all(results) - } catch (error) { if (error instanceof RouterPushError) { return { @@ -137,7 +136,6 @@ export function createRouteHookRunners(): RouteHookRunne })) await Promise.all(results) - } catch (error) { if (error instanceof RouterPushError) { return { @@ -201,4 +199,4 @@ export function getRouteHookCondition(lifecycle: RouteHookLifecycle): RouteHookC default: throw new Error(`Switch is not exhaustive for lifecycle: ${lifecycle satisfies never}`) } -} \ No newline at end of file +} diff --git a/src/services/index.ts b/src/services/index.ts index 74e67410..c5e3be29 100644 --- a/src/services/index.ts +++ b/src/services/index.ts @@ -3,4 +3,4 @@ export * from './createParam' export * from './createRouter' export * from './path' export * from './query' -export * from './withDefault' \ No newline at end of file +export * from './withDefault' diff --git a/src/services/insertBaseRoute.spec.ts b/src/services/insertBaseRoute.spec.ts index 30d68aa8..35b49089 100644 --- a/src/services/insertBaseRoute.spec.ts +++ b/src/services/insertBaseRoute.spec.ts @@ -36,4 +36,4 @@ test('given value for base, returns routes with base prefixed', () => { const response = insertBaseRoute(routes, base) expect(response.every(route => route.path.toString().startsWith('/kitbag'))).toBe(true) -}) \ No newline at end of file +}) diff --git a/src/services/insertBaseRoute.ts b/src/services/insertBaseRoute.ts index d55382d1..9bc1beb6 100644 --- a/src/services/insertBaseRoute.ts +++ b/src/services/insertBaseRoute.ts @@ -13,4 +13,4 @@ export function insertBaseRoute(routes: Routes, base?: string): Routes { parent: baseRoute, ...route, })) -} \ No newline at end of file +} diff --git a/src/services/isRejectionRoute.ts b/src/services/isRejectionRoute.ts index 9fd4c1f1..983dc114 100644 --- a/src/services/isRejectionRoute.ts +++ b/src/services/isRejectionRoute.ts @@ -4,4 +4,4 @@ export const isRejectionRouteSymbol = Symbol() export function isRejectionRoute(route: ResolvedRoute): boolean { return isRejectionRouteSymbol in route && !!route[isRejectionRouteSymbol] -} \ No newline at end of file +} diff --git a/src/services/paramValidation.spec.ts b/src/services/paramValidation.spec.ts index e2023d15..91470922 100644 --- a/src/services/paramValidation.spec.ts +++ b/src/services/paramValidation.spec.ts @@ -195,4 +195,4 @@ describe('getRouteParamValues', () => { expect(response.inPath).toBe(output) expect(response.inQuery).toBe(output) }) -}) \ No newline at end of file +}) diff --git a/src/services/paramValidation.ts b/src/services/paramValidation.ts index 96030251..7e7cf8f4 100644 --- a/src/services/paramValidation.ts +++ b/src/services/paramValidation.ts @@ -55,4 +55,4 @@ function getQueryParams(query: Query, url: string): Record { } return values -} \ No newline at end of file +} diff --git a/src/services/params.spec.ts b/src/services/params.spec.ts index 083c6c12..bbf60b59 100644 --- a/src/services/params.spec.ts +++ b/src/services/params.spec.ts @@ -88,7 +88,6 @@ describe('getParamValue', () => { expect(() => getParamValue('no', getter)).toThrowError() expect(() => getParamValue('foo', getter)).toThrowError() }) - }) describe('setParamValue', () => { @@ -134,7 +133,6 @@ describe('setParamValue', () => { } }) - test('Given Getter Custom Param, returns value as String', () => { const param: ParamGetter = (value, { invalid }) => { if (value !== 'yes') { @@ -169,4 +167,4 @@ describe('setParamValue', () => { expect(() => setParamValue('no', param)).toThrowError() expect(() => setParamValue('foo', param)).toThrowError() }) -}) \ No newline at end of file +}) diff --git a/src/services/params.ts b/src/services/params.ts index 8e424984..8f5c6ada 100644 --- a/src/services/params.ts +++ b/src/services/params.ts @@ -4,7 +4,7 @@ import { ExtractParamType, isParamGetSet, isParamGetter } from '@/types/params' import { Param, ParamExtras, ParamGetSet } from '@/types/paramTypes' import { stringHasValue } from '@/utilities/guards' -export function getParam>(params: TParams, paramName: string): Param { +export function getParam(params: Record, paramName: string): Param { return params[paramName] ?? String } @@ -90,14 +90,14 @@ const jsonParam: ParamGetSet = { get: (value, { invalid }) => { try { return JSON.parse(value) - } catch (error) { + } catch { throw invalid() } }, set: (value, { invalid }) => { try { return JSON.stringify(value) - } catch (error) { + } catch { throw invalid() } }, @@ -187,7 +187,7 @@ export function setParamValue(value: unknown, param: Param, isOptional = false): try { return (value as any).toString() - } catch (error) { + } catch { throw new InvalidRouteParamValueError() } -} \ No newline at end of file +} diff --git a/src/services/paramsFinder.spec.ts b/src/services/paramsFinder.spec.ts index 4d30e3ba..b447fea9 100644 --- a/src/services/paramsFinder.spec.ts +++ b/src/services/paramsFinder.spec.ts @@ -58,4 +58,4 @@ describe('setParamValueOnUrl', () => { expect(action).toThrowError(InvalidRouteParamValueError) }) -}) \ No newline at end of file +}) diff --git a/src/services/paramsFinder.ts b/src/services/paramsFinder.ts index e7b02e74..bd99ba39 100644 --- a/src/services/paramsFinder.ts +++ b/src/services/paramsFinder.ts @@ -66,4 +66,4 @@ function replaceRequiredParamSyntaxWithCaptureGroup(path: string, paramName: str const requiredParamRegex = new RegExp(`\\${paramStart}${paramName}\\${paramEnd}`, 'g') return path.replace(requiredParamRegex, '(.+)') -} \ No newline at end of file +} diff --git a/src/services/path.spec.ts b/src/services/path.spec.ts index d465d98b..8668ac28 100644 --- a/src/services/path.spec.ts +++ b/src/services/path.spec.ts @@ -41,4 +41,4 @@ test('given path with the same param name, throws DuplicateParamsError', () => { const action: () => void = () => path('/foo/[foo]/sub/[?foo]', { }) expect(action).toThrowError(DuplicateParamsError) -}) \ No newline at end of file +}) diff --git a/src/services/query.spec.ts b/src/services/query.spec.ts index 9a9f3262..3d35f3ac 100644 --- a/src/services/query.spec.ts +++ b/src/services/query.spec.ts @@ -43,4 +43,4 @@ test('given query with the same param name, throws TS error', () => { }) expect(action).toThrowError(DuplicateParamsError) -}) \ No newline at end of file +}) diff --git a/src/services/routeMatchRules.spec.ts b/src/services/routeMatchRules.spec.ts index aaa4e09a..7ef4b8c0 100644 --- a/src/services/routeMatchRules.spec.ts +++ b/src/services/routeMatchRules.spec.ts @@ -241,4 +241,4 @@ describe('routeHashMatches', () => { expect(response).toBe(true) }) -}) \ No newline at end of file +}) diff --git a/src/services/routeMatchScore.spec.ts b/src/services/routeMatchScore.spec.ts index ab411a5c..b0a2386d 100644 --- a/src/services/routeMatchScore.spec.ts +++ b/src/services/routeMatchScore.spec.ts @@ -157,4 +157,4 @@ describe('getRouteScoreSortMethod', () => { expect(response.map(route => route.matched.name)).toMatchObject(['higher-depth-child', 'lower-depth', 'higher-depth']) }) -}) \ No newline at end of file +}) diff --git a/src/services/routeMatchScore.ts b/src/services/routeMatchScore.ts index 60c2f1d2..1c843948 100644 --- a/src/services/routeMatchScore.ts +++ b/src/services/routeMatchScore.ts @@ -43,8 +43,8 @@ export function getRouteScoreSortMethod(url: string): RouteSortMethod { export function countExpectedPathParams(route: Route, actualPath: string): number { const optionalParams = Object.keys(route.path.params) - .filter((key) => key.startsWith('?')) - .map((key) => key) + .filter(key => key.startsWith('?')) + .map(key => key) const missing = optionalParams.filter(expected => getParamValueFromUrl(actualPath, route.path.toString(), expected) === undefined) @@ -58,4 +58,4 @@ export function countExpectedQueryParams(route: Route, actualQuery: URLSearchPar const missing = expectedQueryKeys.filter(expected => !actualQuery.has(expected)) return expectedQueryKeys.length - missing.length -} \ No newline at end of file +} diff --git a/src/services/routeRegex.spec.ts b/src/services/routeRegex.spec.ts index 15b811f8..31facdb4 100644 --- a/src/services/routeRegex.spec.ts +++ b/src/services/routeRegex.spec.ts @@ -109,7 +109,6 @@ describe('generateRouteQueryRegexPatterns', () => { const result = generateRouteQueryRegexPatterns(route) - expect(result.map(pattern => pattern.toString())).toMatchObject([ '/query=\\$with(&|$)/i', '/normal=.+(&|$)/i', @@ -182,4 +181,4 @@ describe('splitByMatches', () => { expect(response).toMatchObject(['found-throughout', ' string ', 'found-throughout', ' with match ', 'found-throughout']) }) -}) \ No newline at end of file +}) diff --git a/src/services/routeRegex.ts b/src/services/routeRegex.ts index 397cb6b1..05544573 100644 --- a/src/services/routeRegex.ts +++ b/src/services/routeRegex.ts @@ -1,5 +1,5 @@ -import { Route } from '@/types' import { paramEnd, paramStart } from '@/types/params' +import { Route } from '@/types/route' import { stringHasValue } from '@/utilities/guards' export function escapeRegExp(string: string): string { @@ -57,7 +57,9 @@ export function generateRouteQueryRegexPatterns(route: Route): RegExp[] { export function replaceParamSyntaxWithCatchAllsAndEscapeRest(value: string): string { return splitByMatches(value, new RegExp(paramRegex, 'g')) - .map(slice => slice.startsWith(paramStart) ? replaceParamSyntaxWithCatchAlls(slice) : escapeRegExp(slice)) + .map((slice) => { + return slice.startsWith(paramStart) ? replaceParamSyntaxWithCatchAlls(slice) : escapeRegExp(slice) + }) .join('') } @@ -83,7 +85,6 @@ export function isOptionalParamSyntax(value: string): boolean { } function replaceRequiredParamSyntaxWithCatchAll(value: string): string { - return value.replace(new RegExp(requiredParamRegex, 'g'), '.+') } @@ -101,5 +102,7 @@ export function getParamName(value: string): string | undefined { export function getCaptureGroups(value: string, pattern: RegExp): (string | undefined)[] { const matches = Array.from(value.matchAll(pattern)) - return matches.flatMap(([, ...values]) => values.map(value => stringHasValue(value) ? value : '')) -} \ No newline at end of file + return matches.flatMap(([, ...values]) => values.map((value) => { + return stringHasValue(value) ? value : '' + })) +} diff --git a/src/services/state.spec.ts b/src/services/state.spec.ts index eabd72dd..0bedf058 100644 --- a/src/services/state.spec.ts +++ b/src/services/state.spec.ts @@ -109,4 +109,4 @@ describe('getStateValues', () => { foo: 456, }) }) -}) \ No newline at end of file +}) diff --git a/src/services/state.ts b/src/services/state.ts index d5b97316..de535947 100644 --- a/src/services/state.ts +++ b/src/services/state.ts @@ -51,4 +51,4 @@ export const setStateValues = (params: Record, state: unknown): R } return values -} \ No newline at end of file +} diff --git a/src/services/urlAssembly.spec.ts b/src/services/urlAssembly.spec.ts index 24eb7a8f..2920835b 100644 --- a/src/services/urlAssembly.spec.ts +++ b/src/services/urlAssembly.spec.ts @@ -153,7 +153,6 @@ describe('query params', () => { expect(url).toBe('/?simple=') }) - test('given route with default string param provided but empty, returns route Query with string without values interpolated', () => { const route = createRoute({ name: 'simple', @@ -185,7 +184,6 @@ describe('query params', () => { expect(url).toBe('/?simple=ABC') }) - test('given route with default string param provided, returns route Query with string with values interpolated', () => { const route = createRoute({ name: 'simple', @@ -314,7 +312,6 @@ describe('host params', () => { expect(url).toBe('ABC.kitbag.dev/') }) - test('given route with default string param provided, returns route Host with string with values interpolated', () => { const route = createExternalRoute({ name: 'simple', @@ -369,4 +366,4 @@ test('given route with hash, returns url with hash value interpolated', () => { const url = assembleUrl(route, { hash: 'foo' }) expect(url).toBe('/#foo') -}) \ No newline at end of file +}) diff --git a/src/services/withDefault.ts b/src/services/withDefault.ts index dd383300..06a4a222 100644 --- a/src/services/withDefault.ts +++ b/src/services/withDefault.ts @@ -10,4 +10,4 @@ export function isParamWithDefault(param: Param): param is ParamWithDefault { export function withDefault(param: TParam, defaultValue: ExtractParamType): ParamWithDefault { return createParam(param, defaultValue) -} \ No newline at end of file +} diff --git a/src/services/withQuery.spec.ts b/src/services/withQuery.spec.ts index d0d3390c..5591e260 100644 --- a/src/services/withQuery.spec.ts +++ b/src/services/withQuery.spec.ts @@ -31,4 +31,4 @@ test('given query with a url that existing query with same key, does nothing to const response = withQuery(url, { foo: 'foo', simple: 'ABC' }) expect(response).toBe(`${url}&foo=foo&simple=ABC`) -}) \ No newline at end of file +}) diff --git a/src/services/withQuery.ts b/src/services/withQuery.ts index 3a577aa6..c996500c 100644 --- a/src/services/withQuery.ts +++ b/src/services/withQuery.ts @@ -18,4 +18,4 @@ export function withQuery(url: string, ...queries: (string | URLSearchParams | Q return `${value}?${queryString}` }, url) -} \ No newline at end of file +} diff --git a/src/types/createRouteOptions.ts b/src/types/createRouteOptions.ts index e0d24d89..6e10405e 100644 --- a/src/types/createRouteOptions.ts +++ b/src/types/createRouteOptions.ts @@ -153,4 +153,4 @@ export function combineRoutes(parent: Route, child: Route): Route { host: parent.host, depth: parent.depth + 1, } -} \ No newline at end of file +} diff --git a/src/types/hash.ts b/src/types/hash.ts index a86c5c4e..e30b8a2e 100644 --- a/src/types/hash.ts +++ b/src/types/hash.ts @@ -31,4 +31,4 @@ export function toHash(value: T): Hash { } return hash(value) -} \ No newline at end of file +} diff --git a/src/types/hooks.ts b/src/types/hooks.ts index 5e2a80be..f34c05ee 100644 --- a/src/types/hooks.ts +++ b/src/types/hooks.ts @@ -76,7 +76,7 @@ export type RouteHookRemove = () => void /** * Enumerates the lifecycle events for before route hooks. */ -export type BeforeRouteHookLifecycle = 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' |'onBeforeRouteLeave' +export type BeforeRouteHookLifecycle = 'onBeforeRouteEnter' | 'onBeforeRouteUpdate' | 'onBeforeRouteLeave' /** * Enumerates the lifecycle events for after route hooks. diff --git a/src/types/host.ts b/src/types/host.ts index 28b6ab99..1cee0ade 100644 --- a/src/types/host.ts +++ b/src/types/host.ts @@ -8,7 +8,7 @@ type ExtractParamsFromHostString< THost extends string, TParams extends Record = Record > = THost extends `${string}${ParamStart}${infer Param}${ParamEnd}${infer Rest}` - ? { [P in Param]: ExtractPathParamType } & ExtractParamsFromHostString + ? Record> & ExtractParamsFromHostString : Record export type HostParams = { @@ -47,4 +47,4 @@ export function toHost(host: T): Host { } return createHost(host, {}) -} \ No newline at end of file +} diff --git a/src/types/injectionDepth.ts b/src/types/injectionDepth.ts index b12ecf4c..301add87 100644 --- a/src/types/injectionDepth.ts +++ b/src/types/injectionDepth.ts @@ -1,3 +1,3 @@ import { InjectionKey } from 'vue' -export const depthInjectionKey: InjectionKey = Symbol() \ No newline at end of file +export const depthInjectionKey: InjectionKey = Symbol() diff --git a/src/types/name.ts b/src/types/name.ts index 00026a90..730456e5 100644 --- a/src/types/name.ts +++ b/src/types/name.ts @@ -7,4 +7,4 @@ export function toName(value: T): string { } return value -} \ No newline at end of file +} diff --git a/src/types/params.ts b/src/types/params.ts index bef5e6e3..e213886c 100644 --- a/src/types/params.ts +++ b/src/types/params.ts @@ -32,11 +32,7 @@ export function isParamGetter(value: Param): value is ParamGetter { * @returns True if the value is an object with both 'get' and 'set' functions defined. */ export function isParamGetSet(value: Param): value is ParamGetSet { - return typeof value === 'object' - && 'get' in value - && typeof value.get === 'function' - && 'set' in value - && typeof value.set === 'function' + return typeof value === 'object' && 'get' in value && typeof value.get === 'function' && 'set' in value && typeof value.set === 'function' } /** @@ -117,4 +113,4 @@ export type ExtractParamType = T extends `?${infer TRest extends string}` ? TRest : T export type RemoveLeadingQuestionMarkFromKeys> = { [K in keyof T as RemoveLeadingQuestionMark]: T[K] -} \ No newline at end of file +} diff --git a/src/types/path.ts b/src/types/path.ts index 2a4a7e02..ca66398d 100644 --- a/src/types/path.ts +++ b/src/types/path.ts @@ -8,7 +8,7 @@ type ExtractParamsFromPathString< TPath extends string, TParams extends Record = Record > = TPath extends `${string}${ParamStart}${infer Param}${ParamEnd}${infer Rest}` - ? { [P in Param]: ExtractPathParamType } & ExtractParamsFromPathString + ? Record> & ExtractParamsFromPathString : Record export type PathParams = { @@ -50,4 +50,4 @@ export function toPath(path: T): Path { } return createPath(path, {}) -} \ No newline at end of file +} diff --git a/src/types/prefetch.ts b/src/types/prefetch.ts index 1e4227f9..a4c3da92 100644 --- a/src/types/prefetch.ts +++ b/src/types/prefetch.ts @@ -39,4 +39,4 @@ export function getPrefetchConfigValue(prefetch: PrefetchConfig | undefined, set } return prefetch -} \ No newline at end of file +} diff --git a/src/types/query.ts b/src/types/query.ts index b0e47f54..71d6c07f 100644 --- a/src/types/query.ts +++ b/src/types/query.ts @@ -8,7 +8,7 @@ type ExtractQueryParamsFromQueryString< TQuery extends string, TParams extends Record = Record > = TQuery extends `${string}=${ParamStart}${infer Param}${ParamEnd}${infer Rest}` - ? { [P in Param]: ExtractPathParamType } & ExtractQueryParamsFromQueryString + ? Record> & ExtractQueryParamsFromQueryString : Record export type QueryParams = { @@ -51,4 +51,4 @@ export function toQuery(query: T): Query { } return createQuery(query, {}) -} \ No newline at end of file +} diff --git a/src/types/register.ts b/src/types/register.ts index 551dbc63..c47e9884 100644 --- a/src/types/register.ts +++ b/src/types/register.ts @@ -72,4 +72,4 @@ export type RegisteredRouterPush = RouterPush /** * Represents the type for router `replace`, with types for routes registered within {@link Register} */ -export type RegisteredRouterReplace = RouterReplace \ No newline at end of file +export type RegisteredRouterReplace = RouterReplace diff --git a/src/types/resolved.spec-d.ts b/src/types/resolved.spec-d.ts index 1d7548b7..c361b26f 100644 --- a/src/types/resolved.spec-d.ts +++ b/src/types/resolved.spec-d.ts @@ -20,4 +20,4 @@ test('without a specific Route, params are Record', () => { type Expect = Record> expectTypeOf().toMatchTypeOf() -}) \ No newline at end of file +}) diff --git a/src/types/resolved.ts b/src/types/resolved.ts index c01e798e..8c1c8940 100644 --- a/src/types/resolved.ts +++ b/src/types/resolved.ts @@ -41,4 +41,4 @@ export type ResolvedRoute = Readonly<{ * Type for additional data intended to be stored in history state. */ state: ExtractRouteStateParamsAsOptional, -}> \ No newline at end of file +}> diff --git a/src/types/resolvedQuery.ts b/src/types/resolvedQuery.ts index 7d3a4093..a2c86259 100644 --- a/src/types/resolvedQuery.ts +++ b/src/types/resolvedQuery.ts @@ -1,4 +1,4 @@ export type ResolvedRouteQuery = { get: (key: string) => string | null, getAll: (key: string) => string[], -} \ No newline at end of file +} diff --git a/src/types/route.spec-d.ts b/src/types/route.spec-d.ts index 405c1a83..00bad121 100644 --- a/src/types/route.spec-d.ts +++ b/src/types/route.spec-d.ts @@ -14,4 +14,4 @@ describe('ExtractRouteParamTypes', () => { expectTypeOf().toEqualTypeOf() }) -}) \ No newline at end of file +}) diff --git a/src/types/route.ts b/src/types/route.ts index 3e6ea04f..4423a7fe 100644 --- a/src/types/route.ts +++ b/src/types/route.ts @@ -10,7 +10,7 @@ import { RouteMeta } from '@/types/register' /** * Represents an immutable array of Route instances. Return value of `createRoute`, expected param for `createRouter`. */ -export type Routes = Readonly +export type Routes = readonly Route[] /** * The Route properties originally provided to `createRoute`. The only change is normalizing meta to always default to an empty object. diff --git a/src/types/routeMatchRule.ts b/src/types/routeMatchRule.ts index 1bc6cbd9..e3a80df0 100644 --- a/src/types/routeMatchRule.ts +++ b/src/types/routeMatchRule.ts @@ -1,3 +1,3 @@ import { Route } from '@/types/route' -export type RouteMatchRule = (route: Route, url: string) => boolean \ No newline at end of file +export type RouteMatchRule = (route: Route, url: string) => boolean diff --git a/src/types/routeUpdate.ts b/src/types/routeUpdate.ts index 9e5cd90d..3d48d925 100644 --- a/src/types/routeUpdate.ts +++ b/src/types/routeUpdate.ts @@ -4,7 +4,7 @@ import { RouterPushOptions } from '@/types/routerPush' export type RouteUpdate = ResolvedRoute extends TRoute ? { (paramName: string, paramValue: unknown, options?: RouterPushOptions): Promise, (params: Partial, options?: RouterPushOptions): Promise, -}: { +} : { (paramName: TParamName, paramValue: TRoute['params'][TParamName], options?: RouterPushOptions): Promise, (params: Partial, options?: RouterPushOptions): Promise, -} \ No newline at end of file +} diff --git a/src/types/routeWithParams.ts b/src/types/routeWithParams.ts index ed031535..ef711e8a 100644 --- a/src/types/routeWithParams.ts +++ b/src/types/routeWithParams.ts @@ -34,4 +34,4 @@ type ExtractParamTypeWithoutLosingOptional : TParamKey extends `?${string}` ? string | undefined - : string \ No newline at end of file + : string diff --git a/src/types/router.ts b/src/types/router.ts index 5b9c2b70..f9984e37 100644 --- a/src/types/router.ts +++ b/src/types/router.ts @@ -132,4 +132,4 @@ export type Router< */ export type RouterRoutes = { [K in keyof TRoutes]: RouterRoute> -}[number] \ No newline at end of file +}[number] diff --git a/src/types/routerFind.ts b/src/types/routerFind.ts index 8e4d2c9c..15157a66 100644 --- a/src/types/routerFind.ts +++ b/src/types/routerFind.ts @@ -18,4 +18,4 @@ export type RouterFind< > = { >(name: TSource, ...args: RouterFindArgs): ResolvedRoute | undefined, (url: Url): ResolvedRoute | undefined, -} \ No newline at end of file +} diff --git a/src/types/routerPush.ts b/src/types/routerPush.ts index 74990865..b239078c 100644 --- a/src/types/routerPush.ts +++ b/src/types/routerPush.ts @@ -26,4 +26,4 @@ export type RouterPush< > = { >(name: TSource, ...args: RouterPushArgs): Promise, (url: Url, options?: RouterPushOptions): Promise, -} \ No newline at end of file +} diff --git a/src/types/routesMap.spec-ts.ts b/src/types/routesMap.spec-ts.ts index be563f51..cbf4ab92 100644 --- a/src/types/routesMap.spec-ts.ts +++ b/src/types/routesMap.spec-ts.ts @@ -38,6 +38,7 @@ test('RoutesMap given unnamed parents, removes them from return value and childr const zooBar = createRoute({ name: 'zoo', path: '/zoo', component, parent: bar }) + // eslint-disable-next-line @typescript-eslint/no-unused-vars const routes = [ root, foo, diff --git a/src/types/routesMap.ts b/src/types/routesMap.ts index c80a8502..d2c45c69 100644 --- a/src/types/routesMap.ts +++ b/src/types/routesMap.ts @@ -8,4 +8,4 @@ export type RoutesMap = { [K in TRoutes[number] as AsNamedRoute['name']]: AsNamedRoute } -export type RoutesName = string & keyof RoutesMap \ No newline at end of file +export type RoutesName = string & keyof RoutesMap diff --git a/src/types/state.ts b/src/types/state.ts index 0d3363a9..ec33bf82 100644 --- a/src/types/state.ts +++ b/src/types/state.ts @@ -16,4 +16,4 @@ type ExtractStateParams = TRoute extends { state: infer TState extends Record, } ? ExtractParamTypes - : Record \ No newline at end of file + : Record diff --git a/src/types/url.ts b/src/types/url.ts index ea08efbf..417a7b69 100644 --- a/src/types/url.ts +++ b/src/types/url.ts @@ -8,4 +8,4 @@ export function isUrl(value: unknown): value is Url { const regexPattern = /^(https?:\/\/|\/).*/g return regexPattern.test(value) -} \ No newline at end of file +} diff --git a/src/types/utilities.ts b/src/types/utilities.ts index 9b572cee..8acdc955 100644 --- a/src/types/utilities.ts +++ b/src/types/utilities.ts @@ -2,7 +2,6 @@ // into `{ foo: string, bar: string }` // // this is a magic type and don't wanna mess with the {} -// eslint-disable-next-line @typescript-eslint/ban-types export type Identity = T extends object ? {} & { [P in keyof T as T[P] extends never ? never : P]: T[P] } : T @@ -32,4 +31,4 @@ export type AllPropertiesAreOptional = Record extends T ? true : IsEmptyObject> -export type Writable = { -readonly [P in keyof T]: T[P] } \ No newline at end of file +export type Writable = { -readonly [P in keyof T]: T[P] } diff --git a/src/utilities/array.ts b/src/utilities/array.ts index 892c05f2..2886e2fc 100644 --- a/src/utilities/array.ts +++ b/src/utilities/array.ts @@ -4,4 +4,4 @@ export function asArray(value: Readonly): T[] { export function getCount(array: T[], item: T): number { return array.filter(itemAtIndex => item === itemAtIndex).length -} \ No newline at end of file +} diff --git a/src/utilities/checkDuplicateKeys.spec.ts b/src/utilities/checkDuplicateKeys.spec.ts index 2218e1a9..0b456d27 100644 --- a/src/utilities/checkDuplicateKeys.spec.ts +++ b/src/utilities/checkDuplicateKeys.spec.ts @@ -5,7 +5,9 @@ import { checkDuplicateParams } from '@/utilities/checkDuplicateKeys' test('given a single array without duplicates, does nothing', () => { const input = ['foo', 'bar', 'zoo'] - const action: () => void = () => checkDuplicateParams(input) + const action: () => void = () => { + checkDuplicateParams(input) + } expect(action).not.toThrow() }) @@ -15,7 +17,9 @@ test.each([ [['foo', 'bar', 'zoo'], ['jar', 'zoo']], [['foo', 'bar', 'zoo'], ['jar'], ['zoo']], ])('given a multiple arrays with duplicates, throws DuplicateParamsError', (...arrays) => { - const action: () => void = () => checkDuplicateParams(...arrays) + const action: () => void = () => { + checkDuplicateParams(...arrays) + } expect(action).toThrow(DuplicateParamsError) }) @@ -28,7 +32,9 @@ test.each([ const aArray = ['foo', 'bar', 'zoo'] const bArray = ['jar'] - const action: () => void = () => checkDuplicateParams(aArray, bArray) + const action: () => void = () => { + checkDuplicateParams(aArray, bArray) + } expect(action).not.toThrow() }) @@ -37,7 +43,9 @@ test.each([ [{ foo: 'foo', var: 'bar', zoo: 'zoo' }, { jar: 'jar', zoo: 'zoo' }], [{ foo: 'foo', var: 'bar', zoo: 'zoo' }, { jar: 'jar' }, { zoo: 'zoo' }], ])('given multiple records with duplicates keys, throws DuplicateParamsError', (...records) => { - const action: () => void = () => checkDuplicateParams(...records) + const action: () => void = () => { + checkDuplicateParams(...records) + } expect(action).toThrow(DuplicateParamsError) }) @@ -49,7 +57,9 @@ test.each([ const aRecord = { foo: 'foo', var: 'bar' } const bRecord = { jar: 'jar', zoo: 'zoo' } - const action: () => void = () => checkDuplicateParams(aRecord, bRecord) + const action: () => void = () => { + checkDuplicateParams(aRecord, bRecord) + } expect(action).not.toThrow() -}) \ No newline at end of file +}) diff --git a/src/utilities/checkDuplicateKeys.ts b/src/utilities/checkDuplicateKeys.ts index cc3af7af..dc0b669f 100644 --- a/src/utilities/checkDuplicateKeys.ts +++ b/src/utilities/checkDuplicateKeys.ts @@ -2,7 +2,9 @@ import { DuplicateParamsError } from '@/errors/duplicateParamsError' import { getCount } from '@/utilities/array' export function checkDuplicateParams(...withParams: (Record | string[])[]): void { - const paramNames = withParams.flatMap(params => Array.isArray(params) ? params : Object.keys(params).map(removeLeadingQuestionMark)) + const paramNames = withParams.flatMap((params) => { + return Array.isArray(params) ? params : Object.keys(params).map(removeLeadingQuestionMark) + }) for (const paramName of paramNames) { if (getCount(paramNames, paramName) > 1) { @@ -17,4 +19,4 @@ function removeLeadingQuestionMark(value: string): string { } return value -} \ No newline at end of file +} diff --git a/src/utilities/checkDuplicateNames.spec.ts b/src/utilities/checkDuplicateNames.spec.ts index cb2b46f7..e45f5412 100644 --- a/src/utilities/checkDuplicateNames.spec.ts +++ b/src/utilities/checkDuplicateNames.spec.ts @@ -10,7 +10,9 @@ test('given a single array without duplicates, does nothing', () => { createRoute({ name: 'zoo' }), ] - const action: () => void = () => checkDuplicateNames(routes) + const action: () => void = () => { + checkDuplicateNames(routes) + } expect(action).not.toThrow() }) @@ -23,7 +25,9 @@ test('given a multiple arrays with duplicates, throws DuplicateParamsError', () createRoute({ name: 'bar' }), createRoute({ name: 'foo' }), ] - const action: () => void = () => checkDuplicateNames(routes) + const action: () => void = () => { + checkDuplicateNames(routes) + } expect(action).toThrow(DuplicateNamesError) -}) \ No newline at end of file +}) diff --git a/src/utilities/checkDuplicateNames.ts b/src/utilities/checkDuplicateNames.ts index 7581a560..b75f1aa6 100644 --- a/src/utilities/checkDuplicateNames.ts +++ b/src/utilities/checkDuplicateNames.ts @@ -10,4 +10,4 @@ export function checkDuplicateNames(routes: Routes): void { throw new DuplicateNamesError(name) } } -} \ No newline at end of file +} diff --git a/src/utilities/components.spec.ts b/src/utilities/components.spec.ts index 7a8c682e..18c08eb2 100644 --- a/src/utilities/components.spec.ts +++ b/src/utilities/components.spec.ts @@ -8,4 +8,4 @@ test.each([ [defineAsyncComponent(() => import('@/components/helloWorld')), true], ])('isAsyncComponent returns correct value', (component, isAsync) => { expect(isAsyncComponent(component)).toBe(isAsync) -}) \ No newline at end of file +}) diff --git a/src/utilities/components.ts b/src/utilities/components.ts index 3ca5fab3..393591b5 100644 --- a/src/utilities/components.ts +++ b/src/utilities/components.ts @@ -5,7 +5,7 @@ import { Component, defineAsyncComponent } from 'vue' * if they were wrapped in vue's defineAsyncComponent utility */ const asyncComponent = defineAsyncComponent(() => { - return new Promise(resolve => { + return new Promise((resolve) => { resolve({ default: { template: 'foo' } }) }) }) @@ -14,4 +14,4 @@ type ComponentWithSetup = Component & { setup: () => void } export function isAsyncComponent(component: Component): component is ComponentWithSetup { return component.name === asyncComponent.name && 'setup' in component -} \ No newline at end of file +} diff --git a/src/utilities/guards.spec.ts b/src/utilities/guards.spec.ts index 8cd6b2d6..c137a029 100644 --- a/src/utilities/guards.spec.ts +++ b/src/utilities/guards.spec.ts @@ -2,7 +2,6 @@ import { describe, expect, expectTypeOf, test } from 'vitest' import { hasProperty, StringHasValue } from '@/utilities/guards' describe('hasProperty', () => { - test('returns true when property exists', () => { const source = hasProperty({ foo: true }, 'foo') @@ -26,7 +25,6 @@ describe('hasProperty', () => { expect(source).toBe(false) }) - }) describe('stringHasValue', () => { @@ -64,4 +62,4 @@ describe('stringHasValue', () => { expectTypeOf().toEqualTypeOf() }) -}) \ No newline at end of file +}) diff --git a/src/utilities/guards.ts b/src/utilities/guards.ts index dd3e53e8..b8dbd85a 100644 --- a/src/utilities/guards.ts +++ b/src/utilities/guards.ts @@ -34,4 +34,4 @@ export type StringHasValue = string extends T ? false : T extends string ? true - : false \ No newline at end of file + : false diff --git a/src/utilities/isBrowser.browser.spec.ts b/src/utilities/isBrowser.browser.spec.ts index 1fd8c384..3cc58d12 100644 --- a/src/utilities/isBrowser.browser.spec.ts +++ b/src/utilities/isBrowser.browser.spec.ts @@ -3,4 +3,4 @@ import { isBrowser } from '@/utilities/isBrowser' test('isBrowser returns true when environment is browser', () => { expect(isBrowser()).toBe(true) -}) \ No newline at end of file +}) diff --git a/src/utilities/isBrowser.spec.ts b/src/utilities/isBrowser.spec.ts index f7c89c66..0d32ec97 100644 --- a/src/utilities/isBrowser.spec.ts +++ b/src/utilities/isBrowser.spec.ts @@ -3,4 +3,4 @@ import { isBrowser } from '@/utilities/isBrowser' test('isBrowser returns false when environment is node', () => { expect(isBrowser()).toBe(false) -}) \ No newline at end of file +}) diff --git a/src/utilities/isBrowser.ts b/src/utilities/isBrowser.ts index dafce8df..2ae062b8 100644 --- a/src/utilities/isBrowser.ts +++ b/src/utilities/isBrowser.ts @@ -1,4 +1,3 @@ export function isBrowser(): boolean { - // eslint-disable-next-line @typescript-eslint/prefer-optional-chain return typeof window !== 'undefined' && typeof window.document !== 'undefined' } diff --git a/src/utilities/makeOptional.ts b/src/utilities/makeOptional.ts index f93346fb..02bd8564 100644 --- a/src/utilities/makeOptional.ts +++ b/src/utilities/makeOptional.ts @@ -6,4 +6,4 @@ export type MakeOptional = { [P in WithOptionalProperties]?: T[P]; } & { [P in Exclude>]: T[P]; -} \ No newline at end of file +} diff --git a/src/utilities/testHelpers.ts b/src/utilities/testHelpers.ts index b24f3124..7fded0af 100644 --- a/src/utilities/testHelpers.ts +++ b/src/utilities/testHelpers.ts @@ -67,7 +67,7 @@ export const routes = [ }), ] -export function mockRoute(name: TName): ResolvedRoute['matched'] { +export function mockRoute(name: string): ResolvedRoute['matched'] { return { id: Math.random().toString(), name, @@ -82,13 +82,17 @@ export function mockRoute(name: TName): ResolvedRoute['mat } export function mockResolvedRoute(matched: ResolvedRoute['matched'], matches: ResolvedRoute['matched'][]): ResolvedRoute { + if (!matched.name) { + throw new Error('name is required') + } + return { id: matched.id, matched, matches, - name: matched.name!, + name: matched.name, query: createResolvedRouteQuery(), params: {}, state: {}, } -} \ No newline at end of file +} From 2ed2835ff01ce3a17513a7a39f3fb557d06d3b09 Mon Sep 17 00:00:00 2001 From: Evan Sutherland Date: Tue, 5 Nov 2024 22:19:22 -0600 Subject: [PATCH 2/5] cleaned up testing in RouterLink --- src/components/routerLink.vue | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/src/components/routerLink.vue b/src/components/routerLink.vue index 1306e88d..1410330c 100644 --- a/src/components/routerLink.vue +++ b/src/components/routerLink.vue @@ -1,10 +1,5 @@ @@ -51,10 +46,6 @@ return isUrl(props.to) ? props.to : props.to(router.resolve) }) - const something_new = '123' - - console.log(something_new) - const options = computed(() => { const { to, ...options } = props From 292d4fb15af1c448f8f0723be68c4393eebd2cf3 Mon Sep 17 00:00:00 2001 From: Evan Sutherland Date: Wed, 6 Nov 2024 21:03:39 -0600 Subject: [PATCH 3/5] arrow-parens always --- eslint.config.js | 1 + src/components/routerLink.browser.spec.ts | 8 ++++---- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 91bf3677..4d117251 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -50,6 +50,7 @@ export default [ '@typescript-eslint/switch-exhaustiveness-check': ['warn'], '@typescript-eslint/unbound-method': ['off'], '@typescript-eslint/unified-signatures': ['off'], + '@stylistic/arrow-parens': ['warn', 'always'], '@stylistic/array-bracket-newline': ['warn', 'consistent'], '@stylistic/array-element-newline': ['warn', { consistent: true, multiline: true }], '@stylistic/brace-style': ['warn', '1tbs'], diff --git a/src/components/routerLink.browser.spec.ts b/src/components/routerLink.browser.spec.ts index 579baded..b1e2083c 100644 --- a/src/components/routerLink.browser.spec.ts +++ b/src/components/routerLink.browser.spec.ts @@ -26,7 +26,7 @@ test('renders an anchor tag with the correct href and slot content', () => { const wrapper = mount(routerLink, { props: { - to: resolve => resolve('parent', { paramName: paramValue }), + to: (resolve) => resolve('parent', { paramName: paramValue }), }, slots: { default: content, @@ -51,7 +51,7 @@ test.each([ createRoute({ name: 'routeA', path: '/routeA', - component: { render: () => h(routerLink, { to: resolve => resolve('routeB'), replace }) }, + component: { render: () => h(routerLink, { to: (resolve) => resolve('routeB'), replace }) }, }), createRoute({ name: 'routeB', @@ -499,7 +499,7 @@ describe('prefetch props', () => { const home = createRoute({ name: 'home', path: '/', - component: () => h(routerLink, { to: resolve => resolve('echo') }), + component: () => h(routerLink, { to: (resolve) => resolve('echo') }), }) const route = createRoute({ @@ -544,7 +544,7 @@ describe('prefetch props', () => { const home = createRoute({ name: 'home', path: '/', - component: () => h(routerLink, { to: resolve => resolve('child') }), + component: () => h(routerLink, { to: (resolve) => resolve('child') }), }) const parent = createRoute({ From 5337c56962d44e055223dea893dd77ee96ec6802 Mon Sep 17 00:00:00 2001 From: Evan Sutherland Date: Wed, 6 Nov 2024 21:11:22 -0600 Subject: [PATCH 4/5] run lint:fix --- src/guards/routes.ts | 2 +- src/services/createParam.ts | 4 ++-- src/services/createPropStore.ts | 4 ++-- src/services/createRouter.ts | 2 +- src/services/createRouterResolve.ts | 2 +- src/services/getResolvedRouteForUrl.ts | 2 +- src/services/getRouteHooks.ts | 12 ++++++------ src/services/hooks.ts | 4 ++-- src/services/insertBaseRoute.spec.ts | 2 +- src/services/insertBaseRoute.ts | 2 +- src/services/paramValidation.spec.ts | 4 ++-- src/services/params.spec.ts | 2 +- src/services/routeMatchRules.ts | 2 +- src/services/routeMatchScore.spec.ts | 4 ++-- src/services/routeMatchScore.ts | 8 ++++---- src/services/routeRegex.spec.ts | 2 +- src/utilities/array.ts | 2 +- src/utilities/guards.ts | 2 +- 18 files changed, 31 insertions(+), 31 deletions(-) diff --git a/src/guards/routes.ts b/src/guards/routes.ts index 354644a5..0e2af86d 100644 --- a/src/guards/routes.ts +++ b/src/guards/routes.ts @@ -37,7 +37,7 @@ export function isRoute(route: unknown, routeName?: string, { exact }: IsRouteOp return true } - const names = route.matches.map(route => toName(route.name)) + const names = route.matches.map((route) => toName(route.name)) if (exact) { const actualRouteName = names.at(-1) diff --git a/src/services/createParam.ts b/src/services/createParam.ts index 9a76c2c2..5107d362 100644 --- a/src/services/createParam.ts +++ b/src/services/createParam.ts @@ -12,8 +12,8 @@ export function createParam(param: TParam, defaultValue?: } return { - get: value => getParamValue(value, param), - set: value => setParamValue(value, param), + get: (value) => getParamValue(value, param), + set: (value) => setParamValue(value, param), defaultValue, } } diff --git a/src/services/createPropStore.ts b/src/services/createPropStore.ts index 84d3fbfb..f9206dac 100644 --- a/src/services/createPropStore.ts +++ b/src/services/createPropStore.ts @@ -20,8 +20,8 @@ export function createPropStore(): PropStore { const getPrefetchProps: PropStore['getPrefetchProps'] = (route, prefetch) => { return route.matches - .filter(match => getPrefetchOption({ ...prefetch, routePrefetch: match.prefetch }, 'props')) - .flatMap(match => getComponentProps(match)) + .filter((match) => getPrefetchOption({ ...prefetch, routePrefetch: match.prefetch }, 'props')) + .flatMap((match) => getComponentProps(match)) .reduce>((response, { id, name, props }) => { const key = getPropKey(id, name, route) diff --git a/src/services/createRouter.ts b/src/services/createRouter.ts index f4120677..aadde1d7 100644 --- a/src/services/createRouter.ts +++ b/src/services/createRouter.ts @@ -229,7 +229,7 @@ export function createRouter route.name === name) + return routes.find((route) => route.name === name) } function install(app: App): void { diff --git a/src/services/createRouterResolve.ts b/src/services/createRouterResolve.ts index 0d26025f..2fc3f4ca 100644 --- a/src/services/createRouterResolve.ts +++ b/src/services/createRouterResolve.ts @@ -42,7 +42,7 @@ export function createRouterResolve(routes: TRoute const params = paramsOrOptions ?? {} const options: RouterResolveOptions = maybeOptions ?? {} - const match = routes.find(route => route.name === source) + const match = routes.find((route) => route.name === source) if (!match) { throw new RouteNotFoundError(String(source)) diff --git a/src/services/getResolvedRouteForUrl.ts b/src/services/getResolvedRouteForUrl.ts index bcd88d05..cba4e3d2 100644 --- a/src/services/getResolvedRouteForUrl.ts +++ b/src/services/getResolvedRouteForUrl.ts @@ -20,7 +20,7 @@ export function getResolvedRouteForUrl(routes: Routes, url: string, state?: unkn const sortByRouteScore = getRouteScoreSortMethod(url) const matches = routes - .filter(route => rules.every(test => test(route, url))) + .filter((route) => rules.every((test) => test(route, url))) .sort(sortByRouteScore) if (matches.length === 0) { diff --git a/src/services/getRouteHooks.ts b/src/services/getRouteHooks.ts index 2d3d4988..fb00e520 100644 --- a/src/services/getRouteHooks.ts +++ b/src/services/getRouteHooks.ts @@ -8,17 +8,17 @@ export function getBeforeRouteHooksFromRoutes(to: ResolvedRoute, from: ResolvedR to.matches.forEach((route, depth) => { if (route.onBeforeRouteEnter && isRouteEnter(to, from, depth)) { - asArray(route.onBeforeRouteEnter).forEach(hook => hooks.onBeforeRouteEnter.add(hook)) + asArray(route.onBeforeRouteEnter).forEach((hook) => hooks.onBeforeRouteEnter.add(hook)) } if (route.onBeforeRouteUpdate && isRouteUpdate(to, from, depth)) { - asArray(route.onBeforeRouteUpdate).forEach(hook => hooks.onBeforeRouteUpdate.add(hook)) + asArray(route.onBeforeRouteUpdate).forEach((hook) => hooks.onBeforeRouteUpdate.add(hook)) } }) from.matches.forEach((route, depth) => { if (route.onBeforeRouteLeave && isRouteLeave(to, from, depth)) { - asArray(route.onBeforeRouteLeave).forEach(hook => hooks.onBeforeRouteLeave.add(hook)) + asArray(route.onBeforeRouteLeave).forEach((hook) => hooks.onBeforeRouteLeave.add(hook)) } }) @@ -30,17 +30,17 @@ export function getAfterRouteHooksFromRoutes(to: ResolvedRoute, from: ResolvedRo to.matches.forEach((route, depth) => { if (route.onAfterRouteEnter && isRouteEnter(to, from, depth)) { - asArray(route.onAfterRouteEnter).forEach(hook => hooks.onAfterRouteEnter.add(hook)) + asArray(route.onAfterRouteEnter).forEach((hook) => hooks.onAfterRouteEnter.add(hook)) } if (route.onAfterRouteUpdate && isRouteUpdate(to, from, depth)) { - asArray(route.onAfterRouteUpdate).forEach(hook => hooks.onAfterRouteUpdate.add(hook)) + asArray(route.onAfterRouteUpdate).forEach((hook) => hooks.onAfterRouteUpdate.add(hook)) } }) from.matches.forEach((route, depth) => { if (route.onAfterRouteLeave && isRouteLeave(to, from, depth)) { - asArray(route.onAfterRouteLeave).forEach(hook => hooks.onAfterRouteLeave.add(hook)) + asArray(route.onAfterRouteLeave).forEach((hook) => hooks.onAfterRouteLeave.add(hook)) } }) diff --git a/src/services/hooks.ts b/src/services/hooks.ts index e5609626..ffc0d840 100644 --- a/src/services/hooks.ts +++ b/src/services/hooks.ts @@ -73,7 +73,7 @@ export function createRouteHookRunners(): RouteHookRunne ] try { - const results = allHooks.map(callback => callback(to, { + const results = allHooks.map((callback) => callback(to, { from, reject, push: push as RegisteredRouterPush, @@ -128,7 +128,7 @@ export function createRouteHookRunners(): RouteHookRunne ] try { - const results = allHooks.map(callback => callback(to, { + const results = allHooks.map((callback) => callback(to, { from, reject, push: push as RegisteredRouterPush, diff --git a/src/services/insertBaseRoute.spec.ts b/src/services/insertBaseRoute.spec.ts index 35b49089..44d29afb 100644 --- a/src/services/insertBaseRoute.spec.ts +++ b/src/services/insertBaseRoute.spec.ts @@ -35,5 +35,5 @@ test('given value for base, returns routes with base prefixed', () => { const response = insertBaseRoute(routes, base) - expect(response.every(route => route.path.toString().startsWith('/kitbag'))).toBe(true) + expect(response.every((route) => route.path.toString().startsWith('/kitbag'))).toBe(true) }) diff --git a/src/services/insertBaseRoute.ts b/src/services/insertBaseRoute.ts index 9bc1beb6..02a1fe07 100644 --- a/src/services/insertBaseRoute.ts +++ b/src/services/insertBaseRoute.ts @@ -9,7 +9,7 @@ export function insertBaseRoute(routes: Routes, base?: string): Routes { const baseRoute = createRoute({ path: base }) - return routes.map(route => createRoute({ + return routes.map((route) => createRoute({ parent: baseRoute, ...route, })) diff --git a/src/services/paramValidation.spec.ts b/src/services/paramValidation.spec.ts index 91470922..9b67d996 100644 --- a/src/services/paramValidation.spec.ts +++ b/src/services/paramValidation.spec.ts @@ -186,8 +186,8 @@ describe('getRouteParamValues', () => { { decoded: '$', encoded: '%24' }, ] - const input = escapeCodes.map(code => code.encoded).join('') - const output = escapeCodes.map(code => code.decoded).join('') + const input = escapeCodes.map((code) => code.encoded).join('') + const output = escapeCodes.map((code) => code.decoded).join('') const route = createRoute({ name: 'test', path: '/[inPath]', query: 'inQuery=[inQuery]', component }) const response = getRouteParamValues(route, `/${input}?inQuery=${input}`) diff --git a/src/services/params.spec.ts b/src/services/params.spec.ts index bbf60b59..f0057881 100644 --- a/src/services/params.spec.ts +++ b/src/services/params.spec.ts @@ -81,7 +81,7 @@ describe('getParamValue', () => { return 'yes' }, - set: value => value, + set: (value) => value, } expect(getParamValue('yes', getter)).toBe('yes') diff --git a/src/services/routeMatchRules.ts b/src/services/routeMatchRules.ts index d1d68176..a605ef5e 100644 --- a/src/services/routeMatchRules.ts +++ b/src/services/routeMatchRules.ts @@ -17,7 +17,7 @@ export const routeQueryMatches: RouteMatchRule = (route, url) => { const { search } = createMaybeRelativeUrl(url) const queryPatterns = generateRouteQueryRegexPatterns(route) - return queryPatterns.every(pattern => pattern.test(search)) + return queryPatterns.every((pattern) => pattern.test(search)) } export const routeHashMatches: RouteMatchRule = (route, url) => { diff --git a/src/services/routeMatchScore.spec.ts b/src/services/routeMatchScore.spec.ts index b0a2386d..88c3cc8b 100644 --- a/src/services/routeMatchScore.spec.ts +++ b/src/services/routeMatchScore.spec.ts @@ -103,7 +103,7 @@ describe('getRouteScoreSortMethod', () => { const sortByRouteScore = getRouteScoreSortMethod('/red') const response = routes.sort(sortByRouteScore) - expect(response.map(route => route.matched.name)).toMatchObject(['higher-depth-child', 'lower-depth', 'higher-depth']) + expect(response.map((route) => route.matched.name)).toMatchObject(['higher-depth-child', 'lower-depth', 'higher-depth']) }) test('given routes with different query scores, returns them sorted by query score descending', () => { @@ -155,6 +155,6 @@ describe('getRouteScoreSortMethod', () => { const sortByRouteScore = getRouteScoreSortMethod('/?color=red&extra=ok') const response = routes.sort(sortByRouteScore) - expect(response.map(route => route.matched.name)).toMatchObject(['higher-depth-child', 'lower-depth', 'higher-depth']) + expect(response.map((route) => route.matched.name)).toMatchObject(['higher-depth-child', 'lower-depth', 'higher-depth']) }) }) diff --git a/src/services/routeMatchScore.ts b/src/services/routeMatchScore.ts index 1c843948..0f677d92 100644 --- a/src/services/routeMatchScore.ts +++ b/src/services/routeMatchScore.ts @@ -43,10 +43,10 @@ export function getRouteScoreSortMethod(url: string): RouteSortMethod { export function countExpectedPathParams(route: Route, actualPath: string): number { const optionalParams = Object.keys(route.path.params) - .filter(key => key.startsWith('?')) - .map(key => key) + .filter((key) => key.startsWith('?')) + .map((key) => key) - const missing = optionalParams.filter(expected => getParamValueFromUrl(actualPath, route.path.toString(), expected) === undefined) + const missing = optionalParams.filter((expected) => getParamValueFromUrl(actualPath, route.path.toString(), expected) === undefined) return optionalParams.length - missing.length } @@ -55,7 +55,7 @@ export function countExpectedQueryParams(route: Route, actualQuery: URLSearchPar const expectedQuery = new URLSearchParams(route.query.toString()) const expectedQueryKeys = Array.from(expectedQuery.keys()) - const missing = expectedQueryKeys.filter(expected => !actualQuery.has(expected)) + const missing = expectedQueryKeys.filter((expected) => !actualQuery.has(expected)) return expectedQueryKeys.length - missing.length } diff --git a/src/services/routeRegex.spec.ts b/src/services/routeRegex.spec.ts index 31facdb4..13205df4 100644 --- a/src/services/routeRegex.spec.ts +++ b/src/services/routeRegex.spec.ts @@ -109,7 +109,7 @@ describe('generateRouteQueryRegexPatterns', () => { const result = generateRouteQueryRegexPatterns(route) - expect(result.map(pattern => pattern.toString())).toMatchObject([ + expect(result.map((pattern) => pattern.toString())).toMatchObject([ '/query=\\$with(&|$)/i', '/normal=.+(&|$)/i', '/regex\\*chars=\\)throughout\\[(&|$)/i', diff --git a/src/utilities/array.ts b/src/utilities/array.ts index 2886e2fc..51115c8f 100644 --- a/src/utilities/array.ts +++ b/src/utilities/array.ts @@ -3,5 +3,5 @@ export function asArray(value: Readonly): T[] { } export function getCount(array: T[], item: T): number { - return array.filter(itemAtIndex => item === itemAtIndex).length + return array.filter((itemAtIndex) => item === itemAtIndex).length } diff --git a/src/utilities/guards.ts b/src/utilities/guards.ts index b8dbd85a..28416fed 100644 --- a/src/utilities/guards.ts +++ b/src/utilities/guards.ts @@ -21,7 +21,7 @@ export function hasProperty< } export function isNestedArray(value: T | T[]): value is T[] { - return value.every(item => Array.isArray(item)) + return value.every((item) => Array.isArray(item)) } export function stringHasValue(value: string | undefined): value is string { From 1a38302a23cf43fc948580258ad527bbe62bbba1 Mon Sep 17 00:00:00 2001 From: Evan Sutherland Date: Wed, 6 Nov 2024 21:11:41 -0600 Subject: [PATCH 5/5] add overrides for operator-linebreak --- eslint.config.js | 2 +- src/types/params.ts | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/eslint.config.js b/eslint.config.js index 4d117251..846f2cfb 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -68,7 +68,7 @@ export default [ '@stylistic/no-confusing-arrow': ['warn'], '@stylistic/object-curly-newline': ['warn', { multiline: true, consistent: true }], '@stylistic/object-curly-spacing': ['warn', 'always'], - '@stylistic/operator-linebreak': ['warn', 'none'], + '@stylistic/operator-linebreak': ['warn', 'none', { overrides: { '||': 'before', '&&': 'before' } }], '@stylistic/object-property-newline': ['warn', { allowAllPropertiesOnSameLine: true }], '@stylistic/one-var-declaration-per-line': ['warn'], '@stylistic/quotes': ['warn', 'single', { avoidEscape: true }], diff --git a/src/types/params.ts b/src/types/params.ts index e213886c..c4eddd56 100644 --- a/src/types/params.ts +++ b/src/types/params.ts @@ -32,7 +32,11 @@ export function isParamGetter(value: Param): value is ParamGetter { * @returns True if the value is an object with both 'get' and 'set' functions defined. */ export function isParamGetSet(value: Param): value is ParamGetSet { - return typeof value === 'object' && 'get' in value && typeof value.get === 'function' && 'set' in value && typeof value.set === 'function' + return typeof value === 'object' + && 'get' in value + && typeof value.get === 'function' + && 'set' in value + && typeof value.set === 'function' } /**