From e0f3d139507827616f991e3d775bd581de60ec3a Mon Sep 17 00:00:00 2001 From: Konstantinos Paparas Date: Wed, 17 Jan 2024 15:57:57 +0100 Subject: [PATCH] refactor: restructure scripts and remove the eslint compat type --- build.config.ts | 15 + docs/rules/no-deprecated-classes.md | 4 +- eslint.config.js | 6 +- package.json | 46 +- pnpm-lock.yaml | 2104 ++++++++++++++++---------- scripts/lib/eslint-compat.ts | 85 -- scripts/lib/rules.ts | 40 - scripts/lib/utils.ts | 50 - scripts/new-rule.ts | 36 +- scripts/update-docs-index.ts | 2 +- scripts/update-recommended-rules.ts | 40 - scripts/update-rule-docs.ts | 19 +- scripts/update.ts | 27 - scripts/utils/index.ts | 1 + scripts/utils/rules.ts | 46 + src/configs.ts | 8 - src/configs/base.ts | 4 - src/configs/index.ts | 7 + src/configs/recommended.ts | 18 - src/index.ts | 18 +- src/plugin.ts | 15 + src/rules.ts | 6 - src/rules/no-deprecated-classes.ts | 115 +- src/types/eslint.ts | 272 +--- src/types/index.ts | 2 +- src/types/types.ts | 98 -- src/types/vue-parser-services.ts | 319 +++- src/utils.ts | 8 - src/utils/compat.ts | 16 + src/utils/config.ts | 20 + src/utils/index.ts | 37 +- src/utils/rule.ts | 68 +- src/utils/visitor.ts | 41 + tests/rules/no-deprecated-classes.ts | 4 +- tsconfig.json | 19 +- vitest.config.ts | 9 + 36 files changed, 1954 insertions(+), 1671 deletions(-) create mode 100644 build.config.ts delete mode 100644 scripts/lib/eslint-compat.ts delete mode 100644 scripts/lib/rules.ts delete mode 100644 scripts/lib/utils.ts delete mode 100644 scripts/update-recommended-rules.ts delete mode 100644 scripts/update.ts create mode 100644 scripts/utils/index.ts create mode 100644 scripts/utils/rules.ts delete mode 100644 src/configs.ts delete mode 100644 src/configs/base.ts create mode 100644 src/configs/index.ts delete mode 100644 src/configs/recommended.ts create mode 100644 src/plugin.ts delete mode 100644 src/rules.ts delete mode 100644 src/types/types.ts delete mode 100644 src/utils.ts create mode 100644 src/utils/compat.ts create mode 100644 src/utils/config.ts create mode 100644 src/utils/visitor.ts create mode 100644 vitest.config.ts diff --git a/build.config.ts b/build.config.ts new file mode 100644 index 0000000..9eef6a7 --- /dev/null +++ b/build.config.ts @@ -0,0 +1,15 @@ +import { defineBuildConfig } from 'unbuild'; + +export default defineBuildConfig({ + entries: [ + 'src/index', + ], + declaration: true, + clean: true, + rollup: { + emitCJS: true, + }, + externals: [ + '@typescript-eslint/utils', + ], +}); diff --git a/docs/rules/no-deprecated-classes.md b/docs/rules/no-deprecated-classes.md index 34e895c..eca1ea8 100644 --- a/docs/rules/no-deprecated-classes.md +++ b/docs/rules/no-deprecated-classes.md @@ -1,7 +1,7 @@ --- title: '@rotki/no-deprecated-classes' description: disallow the usage of vuetify css classes since they are replaced with tailwindcss -since: 0.0.1 +since: v0.0.1 --- # @rotki/no-deprecated-classes @@ -65,7 +65,7 @@ This rule reports usages of deprecated css classes in the code. ## :rocket: Version -This rule was introduced in @rotki/eslint-plugin v0.0.1 +This rule was introduced in `@rotki/eslint-plugin` v0.0.1 ## :mag: Implementation diff --git a/eslint.config.js b/eslint.config.js index 7ff908a..e53b8aa 100644 --- a/eslint.config.js +++ b/eslint.config.js @@ -1,6 +1,6 @@ -const rotki = require('@rotki/eslint-config').default; +import rotki from '@rotki/eslint-config'; -module.exports = rotki({ +export default rotki({ typescript: { tsconfigPath: 'tsconfig.json', }, @@ -24,7 +24,7 @@ module.exports = rotki({ 'unicorn/prefer-top-level-await': 'off', }, }, { - files: ['**/.vitepress/config.mts'], + files: ['**/*.?([cm])ts'], rules: { 'import/no-default-export': 'off', }, diff --git a/package.json b/package.json index 0eac176..fc9b05e 100644 --- a/package.json +++ b/package.json @@ -2,7 +2,7 @@ "name": "@rotki/eslint-plugin", "version": "0.0.3", "packageManager": "pnpm@8.14.1", - "type": "commonjs", + "type": "module", "license": "AGPL-3.0", "bugs": { "url": "https://github.com/rotki/eslint-plugin/issues" @@ -15,53 +15,63 @@ "files": [ "dist" ], - "main": "dist/index.js", - "types": "dist/index.d.ts", + "main": "./dist/index.mjs", + "module": "./dist/index.mjs", + "types": "./dist/index.d.ts", + "exports": { + ".": { + "types": "./dist/index.d.ts", + "require": "./dist/index.cjs", + "import": "./dist/index.mjs" + } + }, + "sideEffects": false, "scripts": { "clean": "rimraf .nyc_output coverage dist docs/.vitepress/dist", "coverage": "nyc report --reporter lcov && opener coverage/lcov-report/index.html", - "generate": "ts-node scripts/update.ts", + "generate": "node --experimental-specifier-resolution=node --loader ts-node/esm scripts/update-rule-docs.ts", "lint": "eslint .", "lint:fix": "eslint . --fix", - "build": "tsc --project ./tsconfig.build.json", + "build": "unbuild", + "dev": "unbuild --stub", "prepublishOnly": "pnpm run build", - "test": "mocha --require ts-node/register/transpile-only \"./tests/**/*.ts\"", - "test:debug": "mocha --require ts-node/register/transpile-only \"./tests/**/*.ts\"", - "test:coverage": "nyc mocha --require ts-node/register/transpile-only \"./tests/**/*.ts\" --timeout 60000", - "new": "ts-node ./scripts/new-rule.ts", + "test": "vitest", + "new": "node --experimental-specifier-resolution=node --loader ts-node/esm ./scripts/new-rule.ts", "docs": "vitepress dev docs", "docs:build": "vitepress build docs", "prepare": "husky install", + "typecheck": "tsc --noEmit", "release": "bumpp -r --no-push" }, "peerDependencies": { - "eslint": "^8.0.0" + "eslint": "^8.0.0 || ^9.0.0" }, "dependencies": { "@typescript-eslint/utils": "6.19.0", + "eslint-compat-utils": "0.4.1", "jsonc-eslint-parser": "2.4.0", - "vue-eslint-parser": "9.4.0", + "vue-eslint-parser": "9.4.1", "yaml-eslint-parser": "1.2.2" }, "devDependencies": { - "@commitlint/cli": "18.4.4", - "@commitlint/config-conventional": "18.4.4", - "@rotki/eslint-config": "2.2.0", + "@commitlint/cli": "18.5.0", + "@commitlint/config-conventional": "18.5.0", + "@rotki/eslint-config": "2.3.0", "@types/eslint": "8.56.2", "@types/node": "20", "@typescript-eslint/eslint-plugin": "6.19.0", "@typescript-eslint/parser": "6.19.0", "@typescript-eslint/rule-tester": "6.19.0", - "bumpp": "9.2.1", + "bumpp": "9.3.0", "eslint": "8.56.0", "husky": "8.0.3", "lint-staged": "15.2.0", - "mocha": "10.2.0", - "nyc": "15.1.0", "rimraf": "5.0.5", "ts-node": "10.9.2", "typescript": "5.3.3", - "vitepress": "1.0.0-rc.39" + "unbuild": "2.0.0", + "vitepress": "1.0.0-rc.40", + "vitest": "1.2.1" }, "engines": { "node": ">=18.0.0", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 5d2217b..4401873 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,26 +8,29 @@ dependencies: '@typescript-eslint/utils': specifier: 6.19.0 version: 6.19.0(eslint@8.56.0)(typescript@5.3.3) + eslint-compat-utils: + specifier: 0.4.1 + version: 0.4.1(eslint@8.56.0) jsonc-eslint-parser: specifier: 2.4.0 version: 2.4.0 vue-eslint-parser: - specifier: 9.4.0 - version: 9.4.0(eslint@8.56.0) + specifier: 9.4.1 + version: 9.4.1(eslint@8.56.0) yaml-eslint-parser: specifier: 1.2.2 version: 1.2.2 devDependencies: '@commitlint/cli': - specifier: 18.4.4 - version: 18.4.4(@types/node@20.11.4)(typescript@5.3.3) + specifier: 18.5.0 + version: 18.5.0(@types/node@20.11.4)(typescript@5.3.3) '@commitlint/config-conventional': - specifier: 18.4.4 - version: 18.4.4 + specifier: 18.5.0 + version: 18.5.0 '@rotki/eslint-config': - specifier: 2.2.0 - version: 2.2.0(@types/eslint@8.56.2)(@vue/compiler-sfc@3.4.14)(eslint@8.56.0)(typescript@5.3.3) + specifier: 2.3.0 + version: 2.3.0(@types/eslint@8.56.2)(@vue/compiler-sfc@3.4.14)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1) '@types/eslint': specifier: 8.56.2 version: 8.56.2 @@ -44,8 +47,8 @@ devDependencies: specifier: 6.19.0 version: 6.19.0(@eslint/eslintrc@2.1.4)(eslint@8.56.0)(typescript@5.3.3) bumpp: - specifier: 9.2.1 - version: 9.2.1 + specifier: 9.3.0 + version: 9.3.0 eslint: specifier: 8.56.0 version: 8.56.0 @@ -55,12 +58,6 @@ devDependencies: lint-staged: specifier: 15.2.0 version: 15.2.0 - mocha: - specifier: 10.2.0 - version: 10.2.0 - nyc: - specifier: 15.1.0 - version: 15.1.0 rimraf: specifier: 5.0.5 version: 5.0.5 @@ -70,9 +67,15 @@ devDependencies: typescript: specifier: 5.3.3 version: 5.3.3 + unbuild: + specifier: 2.0.0 + version: 2.0.0(typescript@5.3.3) vitepress: - specifier: 1.0.0-rc.39 - version: 1.0.0-rc.39(@algolia/client-search@4.20.0)(@types/node@20.11.4)(search-insights@2.8.3)(typescript@5.3.3) + specifier: 1.0.0-rc.40 + version: 1.0.0-rc.40(@algolia/client-search@4.20.0)(@types/node@20.11.4)(postcss@8.4.33)(search-insights@2.8.3)(typescript@5.3.3) + vitest: + specifier: 1.2.1 + version: 1.2.1(@types/node@20.11.4) packages: @@ -261,7 +264,7 @@ packages: '@babel/traverse': 7.22.17 '@babel/types': 7.22.17 convert-source-map: 1.9.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 @@ -402,6 +405,11 @@ packages: '@babel/types': 7.22.17 dev: true + /@babel/standalone@7.23.8: + resolution: {integrity: sha512-i0tPn3dyKHbEZPDV66ry/7baC1pznRU02R8sU6eJSBfTOwMkukRdYuT3ks/j/cvTl4YkHMRmhTejET+iyPZVvQ==} + engines: {node: '>=6.9.0'} + dev: true + /@babel/template@7.22.15: resolution: {integrity: sha512-QPErUVm4uyJa60rkI73qneDacvdvzxshT3kksGqlGWYdOTIUOwJ7RDUL8sGqslY1uXWSL6xMFKEXDS3ox2uF0w==} engines: {node: '>=6.9.0'} @@ -423,7 +431,7 @@ packages: '@babel/helper-split-export-declaration': 7.22.6 '@babel/parser': 7.22.16 '@babel/types': 7.22.17 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -438,14 +446,14 @@ packages: to-fast-properties: 2.0.0 dev: true - /@commitlint/cli@18.4.4(@types/node@20.11.4)(typescript@5.3.3): - resolution: {integrity: sha512-Ro3wIo//fV3XiV1EkdpHog6huaEyNcUAVrSmtgKqYM5g982wOWmP4FXvEDFwRMVgz878CNBvvCc33dMZ5AQJ/g==} + /@commitlint/cli@18.5.0(@types/node@20.11.4)(typescript@5.3.3): + resolution: {integrity: sha512-g/N0mJBrHcTdiccUpJknS6/ru45eIEAZyhEy9sL2ILjzK2IVNrpzlAPtxEr8bZCZLGwPBUrQ5UCIIu4uebhImw==} engines: {node: '>=v18'} hasBin: true dependencies: '@commitlint/format': 18.4.4 - '@commitlint/lint': 18.4.4 - '@commitlint/load': 18.4.4(@types/node@20.11.4)(typescript@5.3.3) + '@commitlint/lint': 18.5.0 + '@commitlint/load': 18.5.0(@types/node@20.11.4)(typescript@5.3.3) '@commitlint/read': 18.4.4 '@commitlint/types': 18.4.4 execa: 5.1.1 @@ -458,15 +466,15 @@ packages: - typescript dev: true - /@commitlint/config-conventional@18.4.4: - resolution: {integrity: sha512-Bz3sPQSboBN+Et/KyZrR+OJ3z9PrHDw7Bls0/hv94PmuHBtMq1dCGxS9XzTGzxeMNlytCC4kxF083tbhPljl3Q==} + /@commitlint/config-conventional@18.5.0: + resolution: {integrity: sha512-XGmU4u3Z7bCn0H0nTEG9LUn6hMDUIPP4P6dun7PKFhtnt/wwiKAqmPj+QRmFiqWjkOWcmrh7w7xRiDL32cWS5g==} engines: {node: '>=v18'} dependencies: conventional-changelog-conventionalcommits: 7.0.2 dev: true - /@commitlint/config-validator@18.4.4: - resolution: {integrity: sha512-/QI8KIg/h7O0Eus36fPcEcO3QPBcdXuGfZeCF5m15k0EB2bcU8s6pHNTNEa6xz9PrAefHCL+yzRJj7w20T6Mow==} + /@commitlint/config-validator@18.5.0: + resolution: {integrity: sha512-mDAA6WQPjh9Ida8ACdInDylBQcqeUD2gBHE+dQu+B3OIHiWiSSrq4F2+wg3nDU9EzfcQSwPwYL+QbMmiW5SmLA==} engines: {node: '>=v18'} dependencies: '@commitlint/types': 18.4.4 @@ -506,8 +514,8 @@ packages: semver: 7.5.4 dev: true - /@commitlint/lint@18.4.4: - resolution: {integrity: sha512-SoyQstVxMY5Z4GnFRtRzy+NWYb+yVseXgir+7BxnpB59oH05C9XztRrhDw6OnkNeXhjINTpi1HLnuY7So+CaAQ==} + /@commitlint/lint@18.5.0: + resolution: {integrity: sha512-4VbfTGTZf/aDaOn+vednMQFu5EIKfERvv7j8La3etQCra0O2QMrZL28xugTroYekawpTkiWWvLswtpVfabIbgw==} engines: {node: '>=v18'} dependencies: '@commitlint/is-ignored': 18.4.4 @@ -516,13 +524,13 @@ packages: '@commitlint/types': 18.4.4 dev: true - /@commitlint/load@18.4.4(@types/node@20.11.4)(typescript@5.3.3): - resolution: {integrity: sha512-RaDIa9qwOw2xRJ3Jr2DBXd14rmnHJIX2XdZF4kmoF1rgsg/+7cvrExLSUNAkQUNimyjCn1b/bKX2Omm+GdY0XQ==} + /@commitlint/load@18.5.0(@types/node@20.11.4)(typescript@5.3.3): + resolution: {integrity: sha512-vpyGgk7rzbFsU01NVwPNC/WetHFP0EwSYnQ1R833SJFHkEo+cWvqoVlw/VoZwBMoI6sF5/lwEdKzFDr1DHJ6+A==} engines: {node: '>=v18'} dependencies: - '@commitlint/config-validator': 18.4.4 + '@commitlint/config-validator': 18.5.0 '@commitlint/execute-rule': 18.4.4 - '@commitlint/resolve-extends': 18.4.4 + '@commitlint/resolve-extends': 18.5.0 '@commitlint/types': 18.4.4 chalk: 4.1.2 cosmiconfig: 8.3.6(typescript@5.3.3) @@ -560,11 +568,11 @@ packages: minimist: 1.2.8 dev: true - /@commitlint/resolve-extends@18.4.4: - resolution: {integrity: sha512-RRpIHSbRnFvmGifVk21Gqazf1QF/yeP+Kkg/e3PlkegcOKd/FGOXp/Kx9cvSO2K7ucSn4GD/oBvgasFoy+NCAw==} + /@commitlint/resolve-extends@18.5.0: + resolution: {integrity: sha512-OxCYOMnlkOEEIkwTaRiFjHyuWBq962WBZQVHfMHej8tr3d+SfjznvqZhPmW8/SuqtfmGEiJPGWUNOxgwH+O0MA==} engines: {node: '>=v18'} dependencies: - '@commitlint/config-validator': 18.4.4 + '@commitlint/config-validator': 18.5.0 '@commitlint/types': 18.4.4 import-fresh: 3.3.0 lodash.mergewith: 4.6.2 @@ -897,7 +905,7 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: ajv: 6.12.6 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 espree: 9.6.1 globals: 13.21.0 ignore: 5.2.4 @@ -917,7 +925,7 @@ packages: engines: {node: '>=10.10.0'} dependencies: '@humanwhocodes/object-schema': 2.0.1 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -941,20 +949,11 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true - /@istanbuljs/load-nyc-config@1.1.0: - resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} - engines: {node: '>=8'} + /@jest/schemas@29.6.3: + resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - camelcase: 5.3.1 - find-up: 4.1.0 - get-package-type: 0.1.0 - js-yaml: 3.14.1 - resolve-from: 5.0.0 - dev: true - - /@istanbuljs/schema@0.1.3: - resolution: {integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA==} - engines: {node: '>=8'} + '@sinclair/typebox': 0.27.8 dev: true /@jridgewell/gen-mapping@0.3.3: @@ -1034,6 +1033,97 @@ packages: engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} dev: true + /@rollup/plugin-alias@5.1.0(rollup@3.29.4): + resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + rollup: 3.29.4 + slash: 4.0.0 + dev: true + + /@rollup/plugin-commonjs@25.0.7(rollup@3.29.4): + resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.68.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + commondir: 1.0.1 + estree-walker: 2.0.2 + glob: 8.1.0 + is-reference: 1.2.1 + magic-string: 0.30.5 + rollup: 3.29.4 + dev: true + + /@rollup/plugin-json@6.1.0(rollup@3.29.4): + resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + rollup: 3.29.4 + dev: true + + /@rollup/plugin-node-resolve@15.2.3(rollup@3.29.4): + resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^2.78.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + '@types/resolve': 1.20.2 + deepmerge: 4.3.1 + is-builtin-module: 3.2.1 + is-module: 1.0.0 + resolve: 1.22.4 + rollup: 3.29.4 + dev: true + + /@rollup/plugin-replace@5.0.5(rollup@3.29.4): + resolution: {integrity: sha512-rYO4fOi8lMaTg/z5Jb+hKnrHHVn8j2lwkqwyS4kTRhKyWOLf2wST2sWXr4WzWiTcoHTp2sTjqUbqIj2E39slKQ==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + magic-string: 0.30.5 + rollup: 3.29.4 + dev: true + + /@rollup/pluginutils@5.1.0(rollup@3.29.4): + resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + dependencies: + '@types/estree': 1.0.5 + estree-walker: 2.0.2 + picomatch: 2.3.1 + rollup: 3.29.4 + dev: true + /@rollup/rollup-android-arm-eabi@4.9.4: resolution: {integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==} cpu: [arm] @@ -1138,14 +1228,15 @@ packages: dev: true optional: true - /@rotki/eslint-config@2.2.0(@types/eslint@8.56.2)(@vue/compiler-sfc@3.4.14)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-6c/4ivMTXNeCTfREJ2JasCE1wG5F35vFn72x6RVGZoe7t2KeSJVEGKjnco7S16xdEs1WmjwP5tae/yIjpPxvQA==} + /@rotki/eslint-config@2.3.0(@types/eslint@8.56.2)(@vue/compiler-sfc@3.4.14)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1): + resolution: {integrity: sha512-cqGXa2ptNeO2NduEBX1tMR8ixdPNJN06iDK6u23TcvmPkKIEdZFnnkZyT+5GzcsN9ecDvADN6uIAdZ+OFGAwew==} engines: {node: '>=16 <19', pnpm: '>=8 <9'} peerDependencies: '@intlify/eslint-plugin-vue-i18n': ^2.0.0 '@rotki/eslint-plugin': '>=0.0.3' eslint: '>=8.56.0' eslint-plugin-cypress: '>=2.15.0' + eslint-plugin-storybook: ^0.6.15 eslint-plugin-vuetify: ^1 || ^2 peerDependenciesMeta: '@intlify/eslint-plugin-vue-i18n': @@ -1154,6 +1245,8 @@ packages: optional: true eslint-plugin-cypress: optional: true + eslint-plugin-storybook: + optional: true eslint-plugin-vuetify: optional: true dependencies: @@ -1161,36 +1254,36 @@ packages: '@antfu/install-pkg': 0.3.1 '@eslint-types/typescript-eslint': 6.18.1 '@eslint-types/unicorn': 50.0.1 - '@stylistic/eslint-plugin': 1.5.3(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin': 1.5.4(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-config-flat-gitignore: 0.1.2 eslint-config-prettier: 9.1.0(eslint@8.56.0) eslint-merge-processors: 0.1.0(eslint@8.56.0) - eslint-plugin-antfu: 2.1.1(eslint@8.56.0) + eslint-plugin-antfu: 2.1.2(eslint@8.56.0) eslint-plugin-eslint-comments: 3.2.0(eslint@8.56.0) eslint-plugin-format: 0.1.0(eslint@8.56.0) eslint-plugin-html: 7.1.0 - eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0) - eslint-plugin-jsonc: 2.11.2(eslint@8.56.0) + eslint-plugin-i: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0) + eslint-plugin-jsonc: 2.12.2(eslint@8.56.0) eslint-plugin-markdown: 3.0.1(eslint@8.56.0) eslint-plugin-n: 16.6.2(eslint@8.56.0) eslint-plugin-no-only-tests: 3.1.0 - eslint-plugin-perfectionist: 2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.0) - eslint-plugin-prettier: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.2) + eslint-plugin-perfectionist: 2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.1) + eslint-plugin-prettier: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4) eslint-plugin-unicorn: 50.0.1(eslint@8.56.0) - eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0) - eslint-plugin-vitest: 0.3.20(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + eslint-plugin-unused-imports: 3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0) + eslint-plugin-vitest: 0.3.20(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1) eslint-plugin-vue: 9.20.1(eslint@8.56.0) - eslint-plugin-yml: 1.11.0(eslint@8.56.0) + eslint-plugin-yml: 1.12.2(eslint@8.56.0) eslint-processor-vue-blocks: 0.1.1(@vue/compiler-sfc@3.4.14)(eslint@8.56.0) globals: 13.24.0 jsonc-eslint-parser: 2.4.0 local-pkg: 0.5.0 - prettier: 3.2.2 + prettier: 3.2.4 prompts: 2.4.2 - vue-eslint-parser: 9.4.0(eslint@8.56.0) + vue-eslint-parser: 9.4.1(eslint@8.56.0) yaml-eslint-parser: 1.2.2 transitivePeerDependencies: - '@types/eslint' @@ -1205,8 +1298,12 @@ packages: - vitest dev: true - /@stylistic/eslint-plugin-js@1.5.3(eslint@8.56.0): - resolution: {integrity: sha512-XlKnm82fD7Sw9kQ6FFigE0tobvptNBXZWsdfoKmUyK7bNxHsAHOFT8zJGY3j3MjZ0Fe7rLTu86hX/vOl0bRRdQ==} + /@sinclair/typebox@0.27.8: + resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} + dev: true + + /@stylistic/eslint-plugin-js@1.5.4(eslint@8.56.0): + resolution: {integrity: sha512-3ctWb3NvJNV1MsrZN91cYp2EGInLPSoZKphXIbIRx/zjZxKwLDr9z4LMOWtqjq14li/OgqUUcMq5pj8fgbLoTw==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' @@ -1218,19 +1315,19 @@ packages: espree: 9.6.1 dev: true - /@stylistic/eslint-plugin-jsx@1.5.3(eslint@8.56.0): - resolution: {integrity: sha512-gKXWFmvg3B4e6G+bVz2p37icjj3gS5lzazZD6oLjmQ2b0Lw527VpnxGjWxQ16keKXtrVzUfebakjskOoALg3CQ==} + /@stylistic/eslint-plugin-jsx@1.5.4(eslint@8.56.0): + resolution: {integrity: sha512-JUfrpCkeBCqt1IZ4QsP4WgxGza4PhK4LPbc0VnCjHKygl+rgqoDAovqOuzFJ49wJ4Ix3r6OIHFuwiBGswZEVvg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) eslint: 8.56.0 estraverse: 5.3.0 dev: true - /@stylistic/eslint-plugin-plus@1.5.3(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-fuOBySbH4dbfY4Dwvu+zg5y+e0lALHTyQske5+a2zNC8Ejnx4rFlVjYOmaVFtxFhTD4V0vM7o21Ozci0igcxKg==} + /@stylistic/eslint-plugin-plus@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-dI0Cs5vYX/0uMhQDY+NK0cKQ0Pe9B6jWYxd0Ndud+mNloDaVLrsmJocK4zn+YfhGEDs1E4Nk5uAPZEumIpDuSg==} peerDependencies: eslint: '*' dependencies: @@ -1241,13 +1338,13 @@ packages: - typescript dev: true - /@stylistic/eslint-plugin-ts@1.5.3(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-/gUEqGo0gpFeu220YmC0788VliKnmTaAz4pI82KA5cUuCp6OzEhGlrNkb1eevMwH0RRgyND20HJxOYvEGlwu+w==} + /@stylistic/eslint-plugin-ts@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-NZDFVIlVNjuPvhT+0Cidm5IS3emtx338xbJTqs2xfOVRDGTpYwRHhNVEGa1rFOpYHmv0sAj6+OXbMDn7ul0K/g==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: @@ -1255,22 +1352,27 @@ packages: - typescript dev: true - /@stylistic/eslint-plugin@1.5.3(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-Vee+hHKaCd8DPRoRJTCV+mOFz+zFIaA9QiNJaAvgBzmPkcDnSC7Ewh518fN6SSNe9psS8TDIpcxd1g5v4MSY5A==} + /@stylistic/eslint-plugin@1.5.4(eslint@8.56.0)(typescript@5.3.3): + resolution: {integrity: sha512-zWPXr+O67GC9KDAFkbL1U9UVqE6Iv69YMKhkIECCmE0GvClUJwdfsimm4XebEDondV7kfjMrTDZaYfrI5aS0Jg==} engines: {node: ^16.0.0 || >=18.0.0} peerDependencies: eslint: '>=8.40.0' dependencies: - '@stylistic/eslint-plugin-js': 1.5.3(eslint@8.56.0) - '@stylistic/eslint-plugin-jsx': 1.5.3(eslint@8.56.0) - '@stylistic/eslint-plugin-plus': 1.5.3(eslint@8.56.0)(typescript@5.3.3) - '@stylistic/eslint-plugin-ts': 1.5.3(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin-js': 1.5.4(eslint@8.56.0) + '@stylistic/eslint-plugin-jsx': 1.5.4(eslint@8.56.0) + '@stylistic/eslint-plugin-plus': 1.5.4(eslint@8.56.0)(typescript@5.3.3) + '@stylistic/eslint-plugin-ts': 1.5.4(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 transitivePeerDependencies: - supports-color - typescript dev: true + /@trysound/sax@0.2.0: + resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} + engines: {node: '>=10.13.0'} + dev: true + /@tsconfig/node10@1.0.9: resolution: {integrity: sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA==} dev: true @@ -1336,6 +1438,10 @@ packages: resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} dev: true + /@types/resolve@1.20.2: + resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} + dev: true + /@types/semver@7.5.1: resolution: {integrity: sha512-cJRQXpObxfNKkFAZbJl2yjWtJCqELQIdShsogr1d2MilP8dKD9TE/nEKHkJgUNHdGKCQaf9HbIynuV2csLGVLg==} @@ -1347,35 +1453,6 @@ packages: resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} dev: true - /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@eslint-community/regexpp': 4.8.0 - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.56.0 - graphemer: 1.4.0 - ignore: 5.2.4 - natural-compare: 1.4.0 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1393,7 +1470,7 @@ packages: '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 graphemer: 1.4.0 ignore: 5.2.4 @@ -1405,27 +1482,6 @@ packages: - supports-color dev: true - /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 6.18.1 - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.56.0 - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1440,7 +1496,7 @@ packages: '@typescript-eslint/types': 6.19.0 '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 typescript: 5.3.3 transitivePeerDependencies: @@ -1466,14 +1522,6 @@ packages: - typescript dev: true - /@typescript-eslint/scope-manager@6.18.1: - resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 - dev: true - /@typescript-eslint/scope-manager@6.19.0: resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1481,26 +1529,6 @@ packages: '@typescript-eslint/types': 6.19.0 '@typescript-eslint/visitor-keys': 6.19.0 - /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) - eslint: 8.56.0 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1513,7 +1541,7 @@ packages: dependencies: '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3) '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 ts-api-utils: 1.0.3(typescript@5.3.3) typescript: 5.3.3 @@ -1521,37 +1549,10 @@ packages: - supports-color dev: true - /@typescript-eslint/types@6.18.1: - resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==} - engines: {node: ^16.0.0 || >=18.0.0} - dev: true - /@typescript-eslint/types@6.19.0: resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==} engines: {node: ^16.0.0 || >=18.0.0} - /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3): - resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - dependencies: - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/visitor-keys': 6.18.1 - debug: 4.3.4(supports-color@8.1.1) - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.3 - semver: 7.5.4 - ts-api-utils: 1.0.3(typescript@5.3.3) - typescript: 5.3.3 - transitivePeerDependencies: - - supports-color - dev: true - /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3): resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1563,7 +1564,7 @@ packages: dependencies: '@typescript-eslint/types': 6.19.0 '@typescript-eslint/visitor-keys': 6.19.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 minimatch: 9.0.3 @@ -1573,25 +1574,6 @@ packages: transitivePeerDependencies: - supports-color - /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3): - resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==} - engines: {node: ^16.0.0 || >=18.0.0} - peerDependencies: - eslint: ^7.0.0 || ^8.0.0 - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) - '@types/json-schema': 7.0.12 - '@types/semver': 7.5.1 - '@typescript-eslint/scope-manager': 6.18.1 - '@typescript-eslint/types': 6.18.1 - '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3) - eslint: 8.56.0 - semver: 7.5.4 - transitivePeerDependencies: - - supports-color - - typescript - dev: true - /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3): resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1610,14 +1592,6 @@ packages: - supports-color - typescript - /@typescript-eslint/visitor-keys@6.18.1: - resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==} - engines: {node: ^16.0.0 || >=18.0.0} - dependencies: - '@typescript-eslint/types': 6.18.1 - eslint-visitor-keys: 3.4.3 - dev: true - /@typescript-eslint/visitor-keys@6.19.0: resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==} engines: {node: ^16.0.0 || >=18.0.0} @@ -1628,15 +1602,54 @@ packages: /@ungap/structured-clone@1.2.0: resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - /@vitejs/plugin-vue@5.0.3(vite@5.0.11)(vue@3.4.14): + /@vitejs/plugin-vue@5.0.3(vite@5.0.12)(vue@3.4.15): resolution: {integrity: sha512-b8S5dVS40rgHdDrw+DQi/xOM9ed+kSRZzfm1T74bMmBDCd8XO87NKlFYInzCtwvtWwXZvo1QxE2OSspTATWrbA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.0.11(@types/node@20.11.4) - vue: 3.4.14(typescript@5.3.3) + vite: 5.0.12(@types/node@20.11.4) + vue: 3.4.15(typescript@5.3.3) + dev: true + + /@vitest/expect@1.2.1: + resolution: {integrity: sha512-/bqGXcHfyKgFWYwIgFr1QYDaR9e64pRKxgBNWNXPefPFRhgm+K3+a/dS0cUGEreWngets3dlr8w8SBRw2fCfFQ==} + dependencies: + '@vitest/spy': 1.2.1 + '@vitest/utils': 1.2.1 + chai: 4.4.1 + dev: true + + /@vitest/runner@1.2.1: + resolution: {integrity: sha512-zc2dP5LQpzNzbpaBt7OeYAvmIsRS1KpZQw4G3WM/yqSV1cQKNKwLGmnm79GyZZjMhQGlRcSFMImLjZaUQvNVZQ==} + dependencies: + '@vitest/utils': 1.2.1 + p-limit: 5.0.0 + pathe: 1.1.1 + dev: true + + /@vitest/snapshot@1.2.1: + resolution: {integrity: sha512-Tmp/IcYEemKaqAYCS08sh0vORLJkMr0NRV76Gl8sHGxXT5151cITJCET20063wk0Yr/1koQ6dnmP6eEqezmd/Q==} + dependencies: + magic-string: 0.30.5 + pathe: 1.1.1 + pretty-format: 29.7.0 + dev: true + + /@vitest/spy@1.2.1: + resolution: {integrity: sha512-vG3a/b7INKH7L49Lbp0IWrG6sw9j4waWAucwnksPB1r1FTJgV7nkBByd9ufzu6VWya/QTvQW4V9FShZbZIB2UQ==} + dependencies: + tinyspy: 2.2.0 + dev: true + + /@vitest/utils@1.2.1: + resolution: {integrity: sha512-bsH6WVZYe/J2v3+81M5LDU8kW76xWObKIURpPrOXm2pjBniBu2MERI/XP60GpS4PHU3jyK50LUutOwrx4CyHUg==} + dependencies: + diff-sequences: 29.6.3 + estree-walker: 3.0.3 + loupe: 2.3.7 + pretty-format: 29.7.0 dev: true /@vue/compiler-core@3.4.14: @@ -1649,6 +1662,16 @@ packages: source-map-js: 1.0.2 dev: true + /@vue/compiler-core@3.4.15: + resolution: {integrity: sha512-XcJQVOaxTKCnth1vCxEChteGuwG6wqnUHxAm1DO3gCz0+uXKaJNx8/digSz4dLALCy8n2lKq24jSUs8segoqIw==} + dependencies: + '@babel/parser': 7.23.6 + '@vue/shared': 3.4.15 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.0.2 + dev: true + /@vue/compiler-dom@3.4.14: resolution: {integrity: sha512-nOZTY+veWNa0DKAceNWxorAbWm0INHdQq7cejFaWM1WYnoNSJbSEKYtE7Ir6lR/+mo9fttZpPVI9ZFGJ1juUEQ==} dependencies: @@ -1656,6 +1679,13 @@ packages: '@vue/shared': 3.4.14 dev: true + /@vue/compiler-dom@3.4.15: + resolution: {integrity: sha512-wox0aasVV74zoXyblarOM3AZQz/Z+OunYcIHe1OsGclCHt8RsRm04DObjefaI82u6XDzv+qGWZ24tIsRAIi5MQ==} + dependencies: + '@vue/compiler-core': 3.4.15 + '@vue/shared': 3.4.15 + dev: true + /@vue/compiler-sfc@3.4.14: resolution: {integrity: sha512-1vHc9Kv1jV+YBZC/RJxQJ9JCxildTI+qrhtDh6tPkR1O8S+olBUekimY0km0ZNn8nG1wjtFAe9XHij+YLR8cRQ==} dependencies: @@ -1670,6 +1700,20 @@ packages: source-map-js: 1.0.2 dev: true + /@vue/compiler-sfc@3.4.15: + resolution: {integrity: sha512-LCn5M6QpkpFsh3GQvs2mJUOAlBQcCco8D60Bcqmf3O3w5a+KWS5GvYbrrJBkgvL1BDnTp+e8q0lXCLgHhKguBA==} + dependencies: + '@babel/parser': 7.23.6 + '@vue/compiler-core': 3.4.15 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 + estree-walker: 2.0.2 + magic-string: 0.30.5 + postcss: 8.4.33 + source-map-js: 1.0.2 + dev: true + /@vue/compiler-ssr@3.4.14: resolution: {integrity: sha512-bXT6+oAGlFjTYVOTtFJ4l4Jab1wjsC0cfSfOe2B4Z0N2vD2zOBSQ9w694RsCfhjk+bC2DY5Gubb1rHZVii107Q==} dependencies: @@ -1677,58 +1721,69 @@ packages: '@vue/shared': 3.4.14 dev: true + /@vue/compiler-ssr@3.4.15: + resolution: {integrity: sha512-1jdeQyiGznr8gjFDadVmOJqZiLNSsMa5ZgqavkPZ8O2wjHv0tVuAEsw5hTdUoUW4232vpBbL/wJhzVW/JwY1Uw==} + dependencies: + '@vue/compiler-dom': 3.4.15 + '@vue/shared': 3.4.15 + dev: true + /@vue/devtools-api@6.5.1: resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} dev: true - /@vue/reactivity@3.4.14: - resolution: {integrity: sha512-xRYwze5Q4tK7tT2J4uy4XLhK/AIXdU5EBUu9PLnIHcOKXO0uyXpNNMzlQKuq7B+zwtq6K2wuUL39pHA6ZQzObw==} + /@vue/reactivity@3.4.15: + resolution: {integrity: sha512-55yJh2bsff20K5O84MxSvXKPHHt17I2EomHznvFiJCAZpJTNW8IuLj1xZWMLELRhBK3kkFV/1ErZGHJfah7i7w==} dependencies: - '@vue/shared': 3.4.14 + '@vue/shared': 3.4.15 dev: true - /@vue/runtime-core@3.4.14: - resolution: {integrity: sha512-qu+NMkfujCoZL6cfqK5NOfxgXJROSlP2ZPs4CTcVR+mLrwl4TtycF5Tgo0QupkdBL+2kigc6EsJlTcuuZC1NaQ==} + /@vue/runtime-core@3.4.15: + resolution: {integrity: sha512-6E3by5m6v1AkW0McCeAyhHTw+3y17YCOKG0U0HDKDscV4Hs0kgNT5G+GCHak16jKgcCDHpI9xe5NKb8sdLCLdw==} dependencies: - '@vue/reactivity': 3.4.14 - '@vue/shared': 3.4.14 + '@vue/reactivity': 3.4.15 + '@vue/shared': 3.4.15 dev: true - /@vue/runtime-dom@3.4.14: - resolution: {integrity: sha512-B85XmcR4E7XsirEHVqhmy4HPbRT9WLFWV9Uhie3OapV9m1MEN9+Er6hmUIE6d8/l2sUygpK9RstFM2bmHEUigA==} + /@vue/runtime-dom@3.4.15: + resolution: {integrity: sha512-EVW8D6vfFVq3V/yDKNPBFkZKGMFSvZrUQmx196o/v2tHKdwWdiZjYUBS+0Ez3+ohRyF8Njwy/6FH5gYJ75liUw==} dependencies: - '@vue/runtime-core': 3.4.14 - '@vue/shared': 3.4.14 + '@vue/runtime-core': 3.4.15 + '@vue/shared': 3.4.15 csstype: 3.1.3 dev: true - /@vue/server-renderer@3.4.14(vue@3.4.14): - resolution: {integrity: sha512-pwSKXQfYdJBTpvWHGEYI+akDE18TXAiLcGn+Q/2Fj8wQSHWztoo7PSvfMNqu6NDhp309QXXbPFEGCU5p85HqkA==} + /@vue/server-renderer@3.4.15(vue@3.4.15): + resolution: {integrity: sha512-3HYzaidu9cHjrT+qGUuDhFYvF/j643bHC6uUN9BgM11DVy+pM6ATsG6uPBLnkwOgs7BpJABReLmpL3ZPAsUaqw==} peerDependencies: - vue: 3.4.14 + vue: 3.4.15 dependencies: - '@vue/compiler-ssr': 3.4.14 - '@vue/shared': 3.4.14 - vue: 3.4.14(typescript@5.3.3) + '@vue/compiler-ssr': 3.4.15 + '@vue/shared': 3.4.15 + vue: 3.4.15(typescript@5.3.3) dev: true /@vue/shared@3.4.14: resolution: {integrity: sha512-nmi3BtLpvqXAWoRZ6HQ+pFJOHBU4UnH3vD3opgmwXac7vhaHKA9nj1VeGjMggdB9eLtW83eHyPCmOU1qzdsC7Q==} dev: true - /@vueuse/core@10.7.2(vue@3.4.14): + /@vue/shared@3.4.15: + resolution: {integrity: sha512-KzfPTxVaWfB+eGcGdbSf4CWdaXcGDqckoeXUh7SB3fZdEtzPCK2Vq9B/lRRL3yutax/LWITz+SwvgyOxz5V75g==} + dev: true + + /@vueuse/core@10.7.2(vue@3.4.15): resolution: {integrity: sha512-AOyAL2rK0By62Hm+iqQn6Rbu8bfmbgaIMXcE3TSr7BdQ42wnSFlwIdPjInO62onYsEMK/yDMU8C6oGfDAtZ2qQ==} dependencies: '@types/web-bluetooth': 0.0.20 '@vueuse/metadata': 10.7.2 - '@vueuse/shared': 10.7.2(vue@3.4.14) - vue-demi: 0.14.6(vue@3.4.14) + '@vueuse/shared': 10.7.2(vue@3.4.15) + vue-demi: 0.14.6(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/integrations@10.7.2(focus-trap@7.5.4)(vue@3.4.14): + /@vueuse/integrations@10.7.2(focus-trap@7.5.4)(vue@3.4.15): resolution: {integrity: sha512-+u3RLPFedjASs5EKPc69Ge49WNgqeMfSxFn+qrQTzblPXZg6+EFzhjarS5edj2qAf6xQ93f95TUxRwKStXj/sQ==} peerDependencies: async-validator: '*' @@ -1769,10 +1824,10 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.7.2(vue@3.4.14) - '@vueuse/shared': 10.7.2(vue@3.4.14) + '@vueuse/core': 10.7.2(vue@3.4.15) + '@vueuse/shared': 10.7.2(vue@3.4.15) focus-trap: 7.5.4 - vue-demi: 0.14.6(vue@3.4.14) + vue-demi: 0.14.6(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -1782,10 +1837,10 @@ packages: resolution: {integrity: sha512-kCWPb4J2KGrwLtn1eJwaJD742u1k5h6v/St5wFe8Quih90+k2a0JP8BS4Zp34XUuJqS2AxFYMb1wjUL8HfhWsQ==} dev: true - /@vueuse/shared@10.7.2(vue@3.4.14): + /@vueuse/shared@10.7.2(vue@3.4.15): resolution: {integrity: sha512-qFbXoxS44pi2FkgFjPvF4h7c9oMDutpyBdcJdMYIMg9XyXli2meFMuaKn+UMgsClo//Th6+beeCgqweT/79BVA==} dependencies: - vue-demi: 0.14.6(vue@3.4.14) + vue-demi: 0.14.6(vue@3.4.15) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -1811,6 +1866,11 @@ packages: engines: {node: '>=0.4.0'} dev: true + /acorn-walk@8.3.2: + resolution: {integrity: sha512-cjkyv4OtNCIeqhHrfS81QWXoCBPExR/J62oyEqepVw8WaQeSqpW2uhuLPh1m9eWhDuOo/jUXVTlifvesOWp/4A==} + engines: {node: '>=0.4.0'} + dev: true + /acorn@8.10.0: resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==} engines: {node: '>=0.4.0'} @@ -1822,14 +1882,6 @@ packages: hasBin: true dev: true - /aggregate-error@3.1.0: - resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} - engines: {node: '>=8'} - dependencies: - clean-stack: 2.2.0 - indent-string: 4.0.0 - dev: true - /ajv@6.12.6: resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} dependencies: @@ -1866,11 +1918,6 @@ packages: '@algolia/transporter': 4.20.0 dev: true - /ansi-colors@4.1.1: - resolution: {integrity: sha512-JoX0apGbHaUJBNl6yF+p6JAFYZ666/hhCGKN5t9QFjbJQKUU/g8MNbFDbvfrgKXvI1QpZplPOnwIo99lX/AAmA==} - engines: {node: '>=6'} - dev: true - /ansi-escapes@6.2.0: resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} engines: {node: '>=14.16'} @@ -1901,6 +1948,11 @@ packages: dependencies: color-convert: 2.0.1 + /ansi-styles@5.2.0: + resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} + engines: {node: '>=10'} + dev: true + /ansi-styles@6.2.1: resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} engines: {node: '>=12'} @@ -1914,27 +1966,10 @@ packages: picomatch: 2.3.1 dev: true - /append-transform@2.0.0: - resolution: {integrity: sha512-7yeyCEurROLQJFv5Xj4lEGTy0borxepjFv1g22oAdqFu//SrAlDl1O1Nxx15SH1RoliUml6p8dwJW9jvZughhg==} - engines: {node: '>=8'} - dependencies: - default-require-extensions: 3.0.1 - dev: true - - /archy@1.0.0: - resolution: {integrity: sha512-Xg+9RwCg/0p32teKdGMPTPnVXKD0w3DfHnFTficozsAgsvq2XenPJq/MYpzzQ/v8zrOyJn6Ds39VA4JIDwFfqw==} - dev: true - /arg@4.1.3: resolution: {integrity: sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA==} dev: true - /argparse@1.0.10: - resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} - dependencies: - sprintf-js: 1.0.3 - dev: true - /argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} @@ -1951,6 +1986,26 @@ packages: engines: {node: '>=0.10.0'} dev: true + /assertion-error@1.1.0: + resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==} + dev: true + + /autoprefixer@10.4.17(postcss@8.4.33): + resolution: {integrity: sha512-/cpVNRLSfhOtcGflT13P2794gVSgmPgTR+erw5ifnMLZb0UnSlkK4tquLmkd3BhA+nLo5tX8Cu0upUsGKvKbmg==} + engines: {node: ^10 || ^12 || >=14} + hasBin: true + peerDependencies: + postcss: ^8.1.0 + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001579 + fraction.js: 4.3.7 + normalize-range: 0.1.2 + picocolors: 1.0.0 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + /balanced-match@1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1980,10 +2035,6 @@ packages: dependencies: fill-range: 7.0.1 - /browser-stdout@1.3.1: - resolution: {integrity: sha512-qhAVI1+Av2X7qelOfAIYwXONood6XlZE/fXaBSmW/T5SzLAmCgzi+eiWE7fUvbHaeNBQH13UftjpXxsfLkMpgw==} - dev: true - /browserslist@4.21.10: resolution: {integrity: sha512-bipEBdZfVH5/pwrvqc+Ub0kUPVfGUhlKxbvfD+z1BDnPEO/X98ruXGA1WP5ASpAFKan7Qr6j736IacbZQuAlKQ==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} @@ -2017,8 +2068,8 @@ packages: semver: 7.5.4 dev: true - /bumpp@9.2.1: - resolution: {integrity: sha512-mq6/e8+bnIsOMy1VceTLC49WucMIZqd2nYn0e7Et5LhTO3yYQ8OWJsTl/B+uJDs5eywZmJ4Yt1WTEd2HCI35pw==} + /bumpp@9.3.0: + resolution: {integrity: sha512-P46VikoEZadYCqx7mbClKlaJnOyvc+JfRJPRf1YwlOjwqeYmutgFe1w9hvfXe819VhpU0N0TNXtxyVAUlAgaNA==} engines: {node: '>=10'} hasBin: true dependencies: @@ -2026,6 +2077,7 @@ packages: c12: 1.6.1 cac: 6.7.14 fast-glob: 3.3.2 + js-yaml: 4.1.0 prompts: 2.4.2 semver: 7.5.4 dev: true @@ -2051,16 +2103,6 @@ packages: engines: {node: '>=8'} dev: true - /caching-transform@4.0.0: - resolution: {integrity: sha512-kpqOvwXnjjN44D89K5ccQC+RUrsy7jB/XLlRrx0D7/2HNcTPqzsb6XgYoErwko6QsV184CA2YgS1fxDiiDZMWA==} - engines: {node: '>=8'} - dependencies: - hasha: 5.2.2 - make-dir: 3.1.0 - package-hash: 4.0.0 - write-file-atomic: 3.0.3 - dev: true - /call-me-maybe@1.0.2: resolution: {integrity: sha512-HpX65o1Hnr9HH25ojC1YGs7HCQLq0GCOibSaWER0eNpgJ/Z1MZv2mTc7+xh6WOPxbRVcmgbv4hGU+uSQ/2xFZQ==} dev: true @@ -2083,9 +2125,13 @@ packages: engines: {node: '>=6'} dev: true - /camelcase@6.3.0: - resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} - engines: {node: '>=10'} + /caniuse-api@3.0.0: + resolution: {integrity: sha512-bsTwuIg/BZZK/vreVTYYbSWoe2F+71P7K5QGEX+pT250DZbfU1MQ5prOKpPR+LL6uWKK3KMwMCAS74QB3Um1uw==} + dependencies: + browserslist: 4.22.2 + caniuse-lite: 1.0.30001577 + lodash.memoize: 4.1.2 + lodash.uniq: 4.5.0 dev: true /caniuse-lite@1.0.30001532: @@ -2096,12 +2142,29 @@ packages: resolution: {integrity: sha512-rs2ZygrG1PNXMfmncM0B5H1hndY5ZCC9b5TkFaVNfZ+AUlyqcMyVIQtc3fsezi0NUCk5XZfDf9WS6WxMxnfdrg==} dev: true - /chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + /caniuse-lite@1.0.30001579: + resolution: {integrity: sha512-u5AUVkixruKHJjw/pj9wISlcMpgFWzSrczLZbrqBSxukQixmg0SJ5sZTpvaFvxU0HoQKd4yoyAogyrAz9pzJnA==} + dev: true + + /chai@4.4.1: + resolution: {integrity: sha512-13sOfMv2+DWduEU+/xbun3LScLoqN17nBeTLUsmDfKdoiC1fr0n9PU4guu4AhRcOVFk/sW8LyZWHuhWtQZiF+g==} engines: {node: '>=4'} - requiresBuild: true dependencies: - ansi-styles: 3.2.1 + assertion-error: 1.1.0 + check-error: 1.0.3 + deep-eql: 4.1.3 + get-func-name: 2.0.2 + loupe: 2.3.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + + /chalk@2.4.2: + resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} + engines: {node: '>=4'} + requiresBuild: true + dependencies: + ansi-styles: 3.2.1 escape-string-regexp: 1.0.5 supports-color: 5.5.0 dev: true @@ -2130,6 +2193,12 @@ packages: resolution: {integrity: sha512-mKKUkUbhPpQlCOfIuZkvSEgktjPFIsZKRRbC6KWVEMvlzblj3i3asQv5ODsrwt0N3pHAEvjP8KTQPHkp0+6jOg==} dev: true + /check-error@1.0.3: + resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==} + dependencies: + get-func-name: 2.0.2 + dev: true + /chokidar@3.5.3: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} @@ -2168,11 +2237,6 @@ packages: escape-string-regexp: 1.0.5 dev: true - /clean-stack@2.2.0: - resolution: {integrity: sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A==} - engines: {node: '>=6'} - dev: true - /cli-cursor@4.0.0: resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} @@ -2188,22 +2252,6 @@ packages: string-width: 7.0.0 dev: true - /cliui@6.0.0: - resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 6.2.0 - dev: true - - /cliui@7.0.4: - resolution: {integrity: sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==} - dependencies: - string-width: 4.2.3 - strip-ansi: 6.0.1 - wrap-ansi: 7.0.0 - dev: true - /cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -2234,6 +2282,10 @@ packages: /color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} + /colord@2.9.3: + resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} + dev: true + /colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} dev: true @@ -2243,6 +2295,11 @@ packages: engines: {node: '>=16'} dev: true + /commander@7.2.0: + resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} + engines: {node: '>= 10'} + dev: true + /commondir@1.0.1: resolution: {integrity: sha512-W9pAhw0ja1Edb5GVdIF1mjZw/ASI0AlShXM83UUGe2DVr5TdAPEA1OA8m/g8zWp9x6On7gqufY+FatDbC3MDQg==} dev: true @@ -2307,7 +2364,7 @@ packages: dependencies: '@types/node': 20.11.4 cosmiconfig: 8.3.6(typescript@5.3.3) - jiti: 1.20.0 + jiti: 1.21.0 typescript: 5.3.3 dev: true @@ -2339,12 +2396,117 @@ packages: shebang-command: 2.0.0 which: 2.0.2 + /css-declaration-sorter@7.1.1(postcss@8.4.33): + resolution: {integrity: sha512-dZ3bVTEEc1vxr3Bek9vGwfB5Z6ESPULhcRvO472mfjVnj8jRcTnKO8/JTczlvxM10Myb+wBM++1MtdO76eWcaQ==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss: ^8.0.9 + dependencies: + postcss: 8.4.33 + dev: true + + /css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.1.0 + nth-check: 2.1.1 + dev: true + + /css-tree@2.2.1: + resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + mdn-data: 2.0.28 + source-map-js: 1.0.2 + dev: true + + /css-tree@2.3.1: + resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} + dependencies: + mdn-data: 2.0.30 + source-map-js: 1.0.2 + dev: true + + /css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + dev: true + /cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} hasBin: true dev: true + /cssnano-preset-default@6.0.3(postcss@8.4.33): + resolution: {integrity: sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + css-declaration-sorter: 7.1.1(postcss@8.4.33) + cssnano-utils: 4.0.1(postcss@8.4.33) + postcss: 8.4.33 + postcss-calc: 9.0.1(postcss@8.4.33) + postcss-colormin: 6.0.2(postcss@8.4.33) + postcss-convert-values: 6.0.2(postcss@8.4.33) + postcss-discard-comments: 6.0.1(postcss@8.4.33) + postcss-discard-duplicates: 6.0.1(postcss@8.4.33) + postcss-discard-empty: 6.0.1(postcss@8.4.33) + postcss-discard-overridden: 6.0.1(postcss@8.4.33) + postcss-merge-longhand: 6.0.2(postcss@8.4.33) + postcss-merge-rules: 6.0.3(postcss@8.4.33) + postcss-minify-font-values: 6.0.1(postcss@8.4.33) + postcss-minify-gradients: 6.0.1(postcss@8.4.33) + postcss-minify-params: 6.0.2(postcss@8.4.33) + postcss-minify-selectors: 6.0.2(postcss@8.4.33) + postcss-normalize-charset: 6.0.1(postcss@8.4.33) + postcss-normalize-display-values: 6.0.1(postcss@8.4.33) + postcss-normalize-positions: 6.0.1(postcss@8.4.33) + postcss-normalize-repeat-style: 6.0.1(postcss@8.4.33) + postcss-normalize-string: 6.0.1(postcss@8.4.33) + postcss-normalize-timing-functions: 6.0.1(postcss@8.4.33) + postcss-normalize-unicode: 6.0.2(postcss@8.4.33) + postcss-normalize-url: 6.0.1(postcss@8.4.33) + postcss-normalize-whitespace: 6.0.1(postcss@8.4.33) + postcss-ordered-values: 6.0.1(postcss@8.4.33) + postcss-reduce-initial: 6.0.2(postcss@8.4.33) + postcss-reduce-transforms: 6.0.1(postcss@8.4.33) + postcss-svgo: 6.0.2(postcss@8.4.33) + postcss-unique-selectors: 6.0.2(postcss@8.4.33) + dev: true + + /cssnano-utils@4.0.1(postcss@8.4.33): + resolution: {integrity: sha512-6qQuYDqsGoiXssZ3zct6dcMxiqfT6epy7x4R0TQJadd4LWO3sPR6JH6ZByOvVLoZ6EdwPGgd7+DR1EmX3tiXQQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + dev: true + + /cssnano@6.0.3(postcss@8.4.33): + resolution: {integrity: sha512-MRq4CIj8pnyZpcI2qs6wswoYoDD1t0aL28n+41c1Ukcpm56m1h6mCexIHBGjfZfnTqtGSSCP4/fB1ovxgjBOiw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + cssnano-preset-default: 6.0.3(postcss@8.4.33) + lilconfig: 3.0.0 + postcss: 8.4.33 + dev: true + + /csso@5.0.5: + resolution: {integrity: sha512-0LrrStPOdJj+SPCCrGhzryycLjwcgUSHBtxNA8aIDxf0GLsRh1cKYhB00Gd1lDOS4yGH69+SNn13+TWbVHETFQ==} + engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} + dependencies: + css-tree: 2.2.1 + dev: true + /csstype@3.1.3: resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} dev: true @@ -2365,7 +2527,7 @@ packages: ms: 2.1.3 dev: true - /debug@4.3.4(supports-color@8.1.1): + /debug@4.3.4: resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} engines: {node: '>=6.0'} peerDependencies: @@ -2375,7 +2537,6 @@ packages: optional: true dependencies: ms: 2.1.2 - supports-color: 8.1.1 /decamelize-keys@1.1.1: resolution: {integrity: sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==} @@ -2390,19 +2551,19 @@ packages: engines: {node: '>=0.10.0'} dev: true - /decamelize@4.0.0: - resolution: {integrity: sha512-9iE1PgSik9HeIIw2JO94IidnE3eBoQrFJ3w7sFuzSX4DpmZ3v5sZpUiV5Swcf6mQEF+Y0ru8Neo+p+nyh2J+hQ==} - engines: {node: '>=10'} + /deep-eql@4.1.3: + resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==} + engines: {node: '>=6'} + dependencies: + type-detect: 4.0.8 dev: true /deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} - /default-require-extensions@3.0.1: - resolution: {integrity: sha512-eXTJmRbm2TIt9MgWTsOH1wEuhew6XGZcMeGKCtLedIg/NCsg1iBePXkceTdK4Fii7pzmN9tGsZhKzZ4h7O/fxw==} - engines: {node: '>=8'} - dependencies: - strip-bom: 4.0.0 + /deepmerge@4.3.1: + resolution: {integrity: sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==} + engines: {node: '>=0.10.0'} dev: true /defu@6.1.4: @@ -2413,13 +2574,13 @@ packages: resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==} dev: true - /diff@4.0.2: - resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} - engines: {node: '>=0.3.1'} + /diff-sequences@29.6.3: + resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dev: true - /diff@5.0.0: - resolution: {integrity: sha512-/VTCrvm5Z0JGty/BWHljh+BAiw3IK+2j87NGMu8Nwc/f48WoDAC395uomO9ZD117ZOBaHmkX1oyLvkVM/aIT3w==} + /diff@4.0.2: + resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==} engines: {node: '>=0.3.1'} dev: true @@ -2509,10 +2670,6 @@ packages: is-arrayish: 0.2.1 dev: true - /es6-error@4.1.1: - resolution: {integrity: sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg==} - dev: true - /esbuild@0.19.11: resolution: {integrity: sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==} engines: {node: '>=12'} @@ -2567,6 +2724,15 @@ packages: eslint: 8.56.0 dev: true + /eslint-compat-utils@0.4.1(eslint@8.56.0): + resolution: {integrity: sha512-5N7ZaJG5pZxUeNNJfUchurLVrunD1xJvyg5kYOIVF8kg1f3ajTikmAu/5fZ9w100omNPOoMjngRszh/Q/uFGMg==} + engines: {node: '>=12'} + peerDependencies: + eslint: '>=6.0.0' + dependencies: + eslint: 8.56.0 + semver: 7.5.4 + /eslint-config-flat-gitignore@0.1.2: resolution: {integrity: sha512-PcBsqtd5QHEZH4ROvpnRN4EP0qcHh9voCCHgtyHxnJZHGspJREcZn7oPqRG/GfWt9m3C0fkC2l5CuBtMig2wXQ==} dependencies: @@ -2609,7 +2775,7 @@ packages: eslint: 8.56.0 dev: true - /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): + /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0): resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==} engines: {node: '>=4'} peerDependencies: @@ -2630,7 +2796,7 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3) debug: 3.2.7 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 @@ -2642,8 +2808,8 @@ packages: resolution: {integrity: sha512-oOeA6FWU0UJT/Rxc3XF5Cq0nbIZbylm7j8+plqq0CZoE6m4u32OXJrR+9iy4srGMmF6v6pmgvP1zPxSRIGh3sg==} dev: true - /eslint-plugin-antfu@2.1.1(eslint@8.56.0): - resolution: {integrity: sha512-HCPo3IP15/gOaruIb1ce6R4LUv/MKBZCmWzqYiLGDFW43WW4juPURnjaQIE3AgWNSoCURqD3wxerXYKzokKTgA==} + /eslint-plugin-antfu@2.1.2(eslint@8.56.0): + resolution: {integrity: sha512-s7ZTOM3uq0iqpp6gF0UEotnvup7f2PHBUftCytLZX0+6C9j9KadKZQh6bVVngAyFgsmeD9+gcBopOYLClb2oDg==} peerDependencies: eslint: '*' dependencies: @@ -2684,7 +2850,7 @@ packages: eslint: 8.56.0 eslint-formatting-reporter: 0.0.0(eslint@8.56.0) eslint-parser-plain: 0.1.0 - prettier: 3.2.2 + prettier: 3.2.4 synckit: 0.8.8 dev: true @@ -2694,17 +2860,17 @@ packages: htmlparser2: 8.0.2 dev: true - /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0): + /eslint-plugin-i@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0): resolution: {integrity: sha512-ORizX37MelIWLbMyqI7hi8VJMf7A0CskMmYkB+lkCX3aF4pkGV7kwx5bSEb4qx7Yce2rAf9s34HqDRPjGRZPNQ==} engines: {node: '>=12'} peerDependencies: eslint: ^7.2.0 || ^8 dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 eslint: 8.56.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) + eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0) get-tsconfig: 4.7.2 is-glob: 4.0.3 minimatch: 3.1.2 @@ -2716,15 +2882,15 @@ packages: - supports-color dev: true - /eslint-plugin-jsonc@2.11.2(eslint@8.56.0): - resolution: {integrity: sha512-F6A0MZhIGRBPOswzzn4tJFXXkPLiLwJaMlQwz/Qj1qx+bV5MCn79vBeJh2ynMmtqqHloi54KDCnsT/KWrcCcnQ==} + /eslint-plugin-jsonc@2.12.2(eslint@8.56.0): + resolution: {integrity: sha512-iv2BLi1bqkSxCPEvDOY6xiBXzAFi5iS2gTOU8fnXGfKxkC6MvC5Tw2XAgbP6R6WRlqV7AtFItx4Xb7mCONtmmw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0) eslint: 8.56.0 - eslint-compat-utils: 0.1.2(eslint@8.56.0) + eslint-compat-utils: 0.4.1(eslint@8.56.0) espree: 9.6.1 graphemer: 1.4.0 jsonc-eslint-parser: 2.4.0 @@ -2768,7 +2934,7 @@ packages: engines: {node: '>=5.0.0'} dev: true - /eslint-plugin-perfectionist@2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.0): + /eslint-plugin-perfectionist@2.5.0(eslint@8.56.0)(typescript@5.3.3)(vue-eslint-parser@9.4.1): resolution: {integrity: sha512-F6XXcq4mKKUe/SREoMGQqzgw6cgCgf3pFzkFfQVIGtqD1yXVpQjnhTepzhBeZfxZwgMzR9HO4yH4CUhIQ2WBcQ==} peerDependencies: astro-eslint-parser: ^0.16.0 @@ -2790,13 +2956,13 @@ packages: eslint: 8.56.0 minimatch: 9.0.3 natural-compare-lite: 1.4.0 - vue-eslint-parser: 9.4.0(eslint@8.56.0) + vue-eslint-parser: 9.4.1(eslint@8.56.0) transitivePeerDependencies: - supports-color - typescript dev: true - /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.2): + /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4): resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: @@ -2813,7 +2979,7 @@ packages: '@types/eslint': 8.56.2 eslint: 8.56.0 eslint-config-prettier: 9.1.0(eslint@8.56.0) - prettier: 3.2.2 + prettier: 3.2.4 prettier-linter-helpers: 1.0.0 synckit: 0.8.8 dev: true @@ -2845,7 +3011,7 @@ packages: - supports-color dev: true - /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0): + /eslint-plugin-unused-imports@3.0.0(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0): resolution: {integrity: sha512-sduiswLJfZHeeBJ+MQaG+xYzSWdRXoSw61DpU13mzWumCkR0ufD0HmO4kdNokjrkluMHpj/7PJeN35pgbhW3kw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: @@ -2855,12 +3021,12 @@ packages: '@typescript-eslint/eslint-plugin': optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 eslint-rule-composer: 0.3.0 dev: true - /eslint-plugin-vitest@0.3.20(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0)(typescript@5.3.3): + /eslint-plugin-vitest@0.3.20(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(typescript@5.3.3)(vitest@1.2.1): resolution: {integrity: sha512-O05k4j9TGMOkkghj9dRgpeLDyOSiVIxQWgNDPfhYPm5ioJsehcYV/zkRLekQs+c8+RBCVXucSED3fYOyy2EoWA==} engines: {node: ^18.0.0 || >= 20.0.0} peerDependencies: @@ -2873,9 +3039,10 @@ packages: vitest: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3) + '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3) '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3) eslint: 8.56.0 + vitest: 1.2.1(@types/node@20.11.4) transitivePeerDependencies: - supports-color - typescript @@ -2891,23 +3058,23 @@ packages: eslint: 8.56.0 natural-compare: 1.4.0 nth-check: 2.1.1 - postcss-selector-parser: 6.0.13 + postcss-selector-parser: 6.0.15 semver: 7.5.4 - vue-eslint-parser: 9.4.0(eslint@8.56.0) + vue-eslint-parser: 9.4.1(eslint@8.56.0) xml-name-validator: 4.0.0 transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-yml@1.11.0(eslint@8.56.0): - resolution: {integrity: sha512-NBZP1NDGy0u38pY5ieix75jxS9GNOJy9xd4gQa0rU4gWbfEsVhKDwuFaQ6RJpDbv6Lq5TtcAZS/YnAc0oeRw0w==} + /eslint-plugin-yml@1.12.2(eslint@8.56.0): + resolution: {integrity: sha512-hvS9p08FhPT7i/ynwl7/Wt7ke7Rf4P2D6fT8lZlL43peZDTsHtH2A0SIFQ7Kt7+mJ6if6P+FX3iJhMkdnxQwpg==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 - eslint-compat-utils: 0.1.2(eslint@8.56.0) + eslint-compat-utils: 0.4.1(eslint@8.56.0) lodash: 4.17.21 natural-compare: 1.4.0 yaml-eslint-parser: 1.2.2 @@ -2957,7 +3124,7 @@ packages: ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -2995,12 +3162,6 @@ packages: acorn-jsx: 5.3.2(acorn@8.10.0) eslint-visitor-keys: 3.4.3 - /esprima@4.0.1: - resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} - engines: {node: '>=4'} - hasBin: true - dev: true - /esquery@1.5.0: resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} engines: {node: '>=0.10'} @@ -3021,6 +3182,12 @@ packages: resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} dev: true + /estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + dependencies: + '@types/estree': 1.0.5 + dev: true + /esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} @@ -3099,15 +3266,6 @@ packages: dependencies: to-regex-range: 5.0.1 - /find-cache-dir@3.3.2: - resolution: {integrity: sha512-wXZV5emFEjrridIgED11OoUKLxiYjAcqot/NJdAkOhlJ+vGzwhOAfcG5OX1jP+S0PcjEn8bdMJv+g2jwQ3Onig==} - engines: {node: '>=8'} - dependencies: - commondir: 1.0.1 - make-dir: 3.1.0 - pkg-dir: 4.2.0 - dev: true - /find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -3145,14 +3303,6 @@ packages: tabbable: 6.2.0 dev: true - /foreground-child@2.0.0: - resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} - engines: {node: '>=8.0.0'} - dependencies: - cross-spawn: 7.0.3 - signal-exit: 3.0.7 - dev: true - /foreground-child@3.1.1: resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} engines: {node: '>=14'} @@ -3161,8 +3311,17 @@ packages: signal-exit: 4.1.0 dev: true - /fromentries@1.3.2: - resolution: {integrity: sha512-cHEpEQHUg0f8XdtZCc2ZAhrHzKzT0MrFUTcvx+hfxYu7rGMDc5SKoXFh+n4YigxsHXRzc6OrCshdR1bWH6HHyg==} + /fraction.js@4.3.7: + resolution: {integrity: sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==} + dev: true + + /fs-extra@11.2.0: + resolution: {integrity: sha512-PmDi3uwK5nFuXh7XDTlVnS17xJS7vW36is2+w3xcv8SVxiB4NyATf4ctkVY5bkSjX0Y4nbvZCq1/EjtEyr9ktw==} + engines: {node: '>=14.14'} + dependencies: + graceful-fs: 4.2.11 + jsonfile: 6.1.0 + universalify: 2.0.1 dev: true /fs-minipass@2.1.0: @@ -3202,9 +3361,8 @@ packages: engines: {node: '>=18'} dev: true - /get-package-type@0.1.0: - resolution: {integrity: sha512-pjzuKtY64GYfWizNAJ0fr9VqttZkNiK2iS430LtIHzjBEr6bX8Am2zm4sW4Ro5wjWW5cAlRL1qAMTcXbjNAO2Q==} - engines: {node: '>=8.0.0'} + /get-func-name@2.0.2: + resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} dev: true /get-stream@6.0.1: @@ -3273,8 +3431,8 @@ packages: path-scurry: 1.10.1 dev: true - /glob@7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + /glob@7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3282,17 +3440,17 @@ packages: minimatch: 3.1.2 once: 1.4.0 path-is-absolute: 1.0.1 - dev: true - /glob@7.2.3: - resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} + /glob@8.1.0: + resolution: {integrity: sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==} + engines: {node: '>=12'} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 3.1.2 + minimatch: 5.0.1 once: 1.4.0 - path-is-absolute: 1.0.1 + dev: true /global-dirs@0.1.1: resolution: {integrity: sha512-NknMLn7F2J7aflwFOlGdNIuCDpN3VGoSoB+aap3KABFWbHVn1TCgFC+np23J8W2BiZbjfEw3BFBycSMv1AFblg==} @@ -3330,6 +3488,17 @@ packages: merge2: 1.4.1 slash: 3.0.0 + /globby@13.2.2: + resolution: {integrity: sha512-Y1zNGV+pzQdh7H39l9zgB4PJqjRNqydvdYCDG4HFXM4XuvSaQQlEc91IU1yALL8gUTDomgBAfz3XJdmUS+oo0w==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + dependencies: + dir-glob: 3.0.1 + fast-glob: 3.3.2 + ignore: 5.2.4 + merge2: 1.4.1 + slash: 4.0.0 + dev: true + /graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} dev: true @@ -3359,17 +3528,8 @@ packages: function-bind: 1.1.1 dev: true - /hasha@5.2.2: - resolution: {integrity: sha512-Hrp5vIK/xr5SkeN2onO32H0MgNZ0f17HRNH39WfL0SYUNOTZ5Lz1TJ8Pajo/87dYGEFlLMm7mIc/k/s6Bvz9HQ==} - engines: {node: '>=8'} - dependencies: - is-stream: 2.0.1 - type-fest: 0.8.1 - dev: true - - /he@1.2.0: - resolution: {integrity: sha512-F/1DnUGPopORZi0ni+CvrCgHQ5FyEAHRLSApuYWMmrbSwoN2Mn/7k+Gl38gJnR7yyDZk6WLXwiGod1JOWNDKGw==} - hasBin: true + /hookable@5.5.3: + resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} dev: true /hosted-git-info@2.8.9: @@ -3383,10 +3543,6 @@ packages: lru-cache: 6.0.0 dev: true - /html-escaper@2.0.2: - resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} - dev: true - /htmlparser2@8.0.2: resolution: {integrity: sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==} dependencies: @@ -3515,6 +3671,10 @@ packages: resolution: {integrity: sha512-gyPJuv83bHMpocVYoqof5VDiZveEoGoFL8m3BXNb2VW8Xs+rz9kqO8LOQ5DH6EsuvilT1ApazU0pyl+ytbPtlw==} dev: true + /is-module@1.0.0: + resolution: {integrity: sha512-51ypPSPCoTEIN9dy5Oy+h4pShgJmPCygKfyRCISBI+JoWT/2oJvK8QPxmwv7b/p239jXrm9M1mlQbyKJ5A152g==} + dev: true + /is-number@7.0.0: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} @@ -3533,9 +3693,10 @@ packages: engines: {node: '>=0.10.0'} dev: true - /is-plain-obj@2.1.0: - resolution: {integrity: sha512-YWnfyRwxL/+SsrWYfOpUtz5b3YD+nyfkHvjbcanzk8zgyO4ASD67uVMRt8k5bM4lLMDnXfriRhOpemw+NfT1eA==} - engines: {node: '>=8'} + /is-reference@1.2.1: + resolution: {integrity: sha512-U82MsXXiFIrjCK4otLT+o2NA2Cd2g5MLoOVXUZjIOhLurrRxpEXzI8O0KZHr3IjLvlAH1kTPYSuqer5T9ZVBKQ==} + dependencies: + '@types/estree': 1.0.5 dev: true /is-stream@2.0.1: @@ -3555,87 +3716,9 @@ packages: text-extensions: 2.4.0 dev: true - /is-typedarray@1.0.0: - resolution: {integrity: sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA==} - dev: true - - /is-unicode-supported@0.1.0: - resolution: {integrity: sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw==} - engines: {node: '>=10'} - dev: true - - /is-windows@1.0.2: - resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} - engines: {node: '>=0.10.0'} - dev: true - /isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - /istanbul-lib-coverage@3.2.0: - resolution: {integrity: sha512-eOeJ5BHCmHYvQK7xt9GkdHuzuCGS1Y6g9Gvnx3Ym33fz/HpLRYxiS0wHNr+m/MBC8B647Xt608vCDEvhl9c6Mw==} - engines: {node: '>=8'} - dev: true - - /istanbul-lib-hook@3.0.0: - resolution: {integrity: sha512-Pt/uge1Q9s+5VAZ+pCo16TYMWPBIl+oaNIjgLQxcX0itS6ueeaA+pEfThZpH8WxhFgCiEb8sAJY6MdUKgiIWaQ==} - engines: {node: '>=8'} - dependencies: - append-transform: 2.0.0 - dev: true - - /istanbul-lib-instrument@4.0.3: - resolution: {integrity: sha512-BXgQl9kf4WTCPCCpmFGoJkz/+uhvm7h7PFKUYxh7qarQd3ER33vHG//qaE8eN25l07YqZPpHXU9I09l/RD5aGQ==} - engines: {node: '>=8'} - dependencies: - '@babel/core': 7.22.17 - '@istanbuljs/schema': 0.1.3 - istanbul-lib-coverage: 3.2.0 - semver: 6.3.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-lib-processinfo@2.0.3: - resolution: {integrity: sha512-NkwHbo3E00oybX6NGJi6ar0B29vxyvNwoC7eJ4G4Yq28UfY758Hgn/heV8VRFhevPED4LXfFz0DQ8z/0kw9zMg==} - engines: {node: '>=8'} - dependencies: - archy: 1.0.0 - cross-spawn: 7.0.3 - istanbul-lib-coverage: 3.2.0 - p-map: 3.0.0 - rimraf: 3.0.2 - uuid: 8.3.2 - dev: true - - /istanbul-lib-report@3.0.1: - resolution: {integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw==} - engines: {node: '>=10'} - dependencies: - istanbul-lib-coverage: 3.2.0 - make-dir: 4.0.0 - supports-color: 7.2.0 - dev: true - - /istanbul-lib-source-maps@4.0.1: - resolution: {integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==} - engines: {node: '>=10'} - dependencies: - debug: 4.3.4(supports-color@8.1.1) - istanbul-lib-coverage: 3.2.0 - source-map: 0.6.1 - transitivePeerDependencies: - - supports-color - dev: true - - /istanbul-reports@3.1.6: - resolution: {integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==} - engines: {node: '>=8'} - dependencies: - html-escaper: 2.0.2 - istanbul-lib-report: 3.0.1 - dev: true - /jackspeak@2.3.5: resolution: {integrity: sha512-Ratx+B8WeXLAtRJn26hrhY8S1+Jz6pxPMrkrdkgb/NstTNiqMhX0/oFVu5wX+g5n6JlEu2LPsDJmY8nRP4+alw==} engines: {node: '>=14'} @@ -3645,11 +3728,6 @@ packages: '@pkgjs/parseargs': 0.11.0 dev: true - /jiti@1.20.0: - resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==} - hasBin: true - dev: true - /jiti@1.21.0: resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} hasBin: true @@ -3660,14 +3738,6 @@ packages: requiresBuild: true dev: true - /js-yaml@3.14.1: - resolution: {integrity: sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==} - hasBin: true - dependencies: - argparse: 1.0.10 - esprima: 4.0.1 - dev: true - /js-yaml@4.1.0: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true @@ -3727,6 +3797,14 @@ packages: resolution: {integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w==} dev: true + /jsonfile@6.1.0: + resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} + dependencies: + universalify: 2.0.1 + optionalDependencies: + graceful-fs: 4.2.11 + dev: true + /jsonparse@1.3.1: resolution: {integrity: sha512-POQXvpdL69+CluYsillJ7SUhKvytYjW9vG/GKpnf+xP8UWgYEM/RaMzHHofbALDiKbbP1W8UEYmgGl39WkPZsg==} engines: {'0': node >= 0.2.0} @@ -3770,7 +3848,7 @@ packages: dependencies: chalk: 5.3.0 commander: 11.1.0 - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 execa: 8.0.1 lilconfig: 3.0.0 listr2: 8.0.0 @@ -3819,10 +3897,6 @@ packages: resolution: {integrity: sha512-TwuEnCnxbc3rAvhf/LbG7tJUDzhqXyFnv3dtzLOPgCG/hODL7WFnsbwktkD7yUV0RrreP/l1PALq/YSg6VvjlA==} dev: true - /lodash.flattendeep@4.4.0: - resolution: {integrity: sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==} - dev: true - /lodash.isfunction@3.0.9: resolution: {integrity: sha512-AirXNj15uRIMMPihnkInB4i3NHeb4iBtNg9WRWuK2o31S+ePwwNmDPaTL3o7dTJ+VXNZim7rFs4rxN4YU1oUJw==} dev: true @@ -3835,6 +3909,10 @@ packages: resolution: {integrity: sha512-N8XRTIMMqqDgSy4VLKPnJ/+hpGZN+PHQiJnSenYqPaVV/NCqEogTnAdZLQiGKhxX+JCs8waWq2t1XHWKOmlY8g==} dev: true + /lodash.memoize@4.1.2: + resolution: {integrity: sha512-t7j+NzmgnQzTAYXcsHYLgimltOV1MXHtlOWf6GjL9Kj8GK5FInw5JotxvbOs+IvV1/Dzo04/fCGfLVs7aXb4Ag==} + dev: true + /lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -3861,14 +3939,6 @@ packages: /lodash@4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} - /log-symbols@4.1.0: - resolution: {integrity: sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg==} - engines: {node: '>=10'} - dependencies: - chalk: 4.1.2 - is-unicode-supported: 0.1.0 - dev: true - /log-update@6.0.0: resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} engines: {node: '>=18'} @@ -3880,6 +3950,12 @@ packages: wrap-ansi: 9.0.0 dev: true + /loupe@2.3.7: + resolution: {integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA==} + dependencies: + get-func-name: 2.0.2 + dev: true + /lru-cache@10.0.1: resolution: {integrity: sha512-IJ4uwUTi2qCccrioU6g9g/5rvvVl13bsdczUUcqbciD9iLr095yj8DQKdObriEvuNSx325N1rV1O0sJFszx75g==} engines: {node: 14 || >=16.14} @@ -3904,20 +3980,6 @@ packages: '@jridgewell/sourcemap-codec': 1.4.15 dev: true - /make-dir@3.1.0: - resolution: {integrity: sha512-g3FeP20LNwhALb/6Cz6Dd4F2ngze0jz7tbzrD2wAV+o9FeNHe4rL+yK2md0J/fiSf1sa1ADhXqi5+oVwOM/eGw==} - engines: {node: '>=8'} - dependencies: - semver: 6.3.1 - dev: true - - /make-dir@4.0.0: - resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} - engines: {node: '>=10'} - dependencies: - semver: 7.5.4 - dev: true - /make-error@1.3.6: resolution: {integrity: sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw==} dev: true @@ -3952,6 +4014,14 @@ packages: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} dev: true + /mdn-data@2.0.28: + resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} + dev: true + + /mdn-data@2.0.30: + resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} + dev: true + /meow@12.1.1: resolution: {integrity: sha512-BhXM0Au22RwUneMPwSCnyhTOizdWoIEPU9sp0Aqa1PnDMR5Wv2FGXYDjuzJEIX+Eo2Rb8xuYe5jrnm5QowQFkw==} engines: {node: '>=16.10'} @@ -3985,7 +4055,7 @@ packages: /micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 parse-entities: 2.0.0 transitivePeerDependencies: - supports-color @@ -4079,6 +4149,34 @@ packages: hasBin: true dev: true + /mkdist@1.4.0(typescript@5.3.3): + resolution: {integrity: sha512-LzzdzWDx6cWWPd8saIoO+kT5jnbijfeDaE6jZfmCYEi3YL2aJSyF23/tCFee/mDuh/ek1UQeSYdLeSa6oesdiw==} + hasBin: true + peerDependencies: + sass: ^1.69.5 + typescript: '>=5.3.2' + peerDependenciesMeta: + sass: + optional: true + typescript: + optional: true + dependencies: + autoprefixer: 10.4.17(postcss@8.4.33) + citty: 0.1.5 + cssnano: 6.0.3(postcss@8.4.33) + defu: 6.1.4 + esbuild: 0.19.11 + fs-extra: 11.2.0 + globby: 13.2.2 + jiti: 1.21.0 + mlly: 1.4.2 + mri: 1.2.0 + pathe: 1.1.1 + postcss: 8.4.33 + postcss-nested: 6.0.1(postcss@8.4.33) + typescript: 5.3.3 + dev: true + /mlly@1.4.2: resolution: {integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg==} dependencies: @@ -4088,32 +4186,9 @@ packages: ufo: 1.3.1 dev: true - /mocha@10.2.0: - resolution: {integrity: sha512-IDY7fl/BecMwFHzoqF2sg/SHHANeBoMMXFlS9r0OXKDssYE1M5O43wUY/9BVPeIvfH2zmEbBfseqN9gBQZzXkg==} - engines: {node: '>= 14.0.0'} - hasBin: true - dependencies: - ansi-colors: 4.1.1 - browser-stdout: 1.3.1 - chokidar: 3.5.3 - debug: 4.3.4(supports-color@8.1.1) - diff: 5.0.0 - escape-string-regexp: 4.0.0 - find-up: 5.0.0 - glob: 7.2.0 - he: 1.2.0 - js-yaml: 4.1.0 - log-symbols: 4.1.0 - minimatch: 5.0.1 - ms: 2.1.3 - nanoid: 3.3.3 - serialize-javascript: 6.0.0 - strip-json-comments: 3.1.1 - supports-color: 8.1.1 - workerpool: 6.2.1 - yargs: 16.2.0 - yargs-parser: 20.2.4 - yargs-unparser: 2.0.0 + /mri@1.2.0: + resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} + engines: {node: '>=4'} dev: true /ms@2.1.2: @@ -4123,12 +4198,6 @@ packages: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} dev: true - /nanoid@3.3.3: - resolution: {integrity: sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - dev: true - /nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -4146,13 +4215,6 @@ packages: resolution: {integrity: sha512-bW9T/uJDPAJB2YNYEpWzE54U5O3MQidXsOyTfnbKYtTtFexRvGzb1waphBN4ZwP6EcIvYYEOwW0b72BpAqydTw==} dev: true - /node-preload@0.2.1: - resolution: {integrity: sha512-RM5oyBy45cLEoHqCeh+MNuFAxO0vTFBLskvQbOKnEE7YTTSN4tbN8QWDIPQ6L+WvKsB/qLEGpYe2ZZ9d4W9OIQ==} - engines: {node: '>=8'} - dependencies: - process-on-spawn: 1.0.0 - dev: true - /node-releases@2.0.13: resolution: {integrity: sha512-uYr7J37ae/ORWdZeQ1xxMJe3NtdmqMC/JZK+geofDrkLUApKRHPd18/TxtBOJ4A0/+uUIliorNrfYV6s1b02eQ==} dev: true @@ -4185,6 +4247,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /normalize-range@0.1.2: + resolution: {integrity: sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==} + engines: {node: '>=0.10.0'} + dev: true + /npm-run-path@4.0.1: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} @@ -4205,42 +4272,6 @@ packages: boolbase: 1.0.0 dev: true - /nyc@15.1.0: - resolution: {integrity: sha512-jMW04n9SxKdKi1ZMGhvUTHBN0EICCRkHemEoE5jm6mTYcqcdas0ATzgUgejlQUHMvpnOZqGB5Xxsv9KxJW1j8A==} - engines: {node: '>=8.9'} - hasBin: true - dependencies: - '@istanbuljs/load-nyc-config': 1.1.0 - '@istanbuljs/schema': 0.1.3 - caching-transform: 4.0.0 - convert-source-map: 1.9.0 - decamelize: 1.2.0 - find-cache-dir: 3.3.2 - find-up: 4.1.0 - foreground-child: 2.0.0 - get-package-type: 0.1.0 - glob: 7.2.3 - istanbul-lib-coverage: 3.2.0 - istanbul-lib-hook: 3.0.0 - istanbul-lib-instrument: 4.0.3 - istanbul-lib-processinfo: 2.0.3 - istanbul-lib-report: 3.0.1 - istanbul-lib-source-maps: 4.0.1 - istanbul-reports: 3.1.6 - make-dir: 3.1.0 - node-preload: 0.2.1 - p-map: 3.0.0 - process-on-spawn: 1.0.0 - resolve-from: 5.0.0 - rimraf: 3.0.2 - signal-exit: 3.0.7 - spawn-wrap: 2.0.0 - test-exclude: 6.0.0 - yargs: 15.4.1 - transitivePeerDependencies: - - supports-color - dev: true - /nypm@0.3.4: resolution: {integrity: sha512-1JLkp/zHBrkS3pZ692IqOaIKSYHmQXgqfELk6YTOfVBnwealAmPA1q2kKK7PHJAHSMBozerThEFZXP3G6o7Ukg==} engines: {node: ^14.16.0 || >=16.10.0} @@ -4299,6 +4330,13 @@ packages: dependencies: yocto-queue: 0.1.0 + /p-limit@5.0.0: + resolution: {integrity: sha512-/Eaoq+QyLSiXQ4lyYV23f14mZRQcXnxfHrN0vCai+ak9G0pp9iEQukIIZq5NccEvwRB8PUnZT0KsOoDCINS1qQ==} + engines: {node: '>=18'} + dependencies: + yocto-queue: 1.0.0 + dev: true + /p-locate@4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4312,28 +4350,11 @@ packages: dependencies: p-limit: 3.1.0 - /p-map@3.0.0: - resolution: {integrity: sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ==} - engines: {node: '>=8'} - dependencies: - aggregate-error: 3.1.0 - dev: true - /p-try@2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} dev: true - /package-hash@4.0.0: - resolution: {integrity: sha512-whdkPIooSu/bASggZ96BWVvZTRMOFxnyUG5PnTSGKoJE2gd5mbVNmR2Nj20QFzxYYgAXpoqC+AiXzl+UMRh7zQ==} - engines: {node: '>=8'} - dependencies: - graceful-fs: 4.2.11 - hasha: 5.2.2 - lodash.flattendeep: 4.4.0 - release-zalgo: 1.0.0 - dev: true - /parent-module@1.0.1: resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} engines: {node: '>=6'} @@ -4403,6 +4424,10 @@ packages: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} dev: true + /pathval@1.1.1: + resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} + dev: true + /perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} dev: true @@ -4421,13 +4446,6 @@ packages: hasBin: true dev: true - /pkg-dir@4.2.0: - resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} - engines: {node: '>=8'} - dependencies: - find-up: 4.1.0 - dev: true - /pkg-types@1.0.3: resolution: {integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A==} dependencies: @@ -4441,6 +4459,277 @@ packages: engines: {node: '>=4'} dev: true + /postcss-calc@9.0.1(postcss@8.4.33): + resolution: {integrity: sha512-TipgjGyzP5QzEhsOZUaIkeO5mKeMFpebWzRogWG/ysonUlnHcq5aJe0jOjpfzUU8PeSaBQnrE8ehR0QA5vs8PQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.2.2 + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.0.13 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-colormin@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + colord: 2.9.3 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-convert-values@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-discard-comments@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-f1KYNPtqYLUeZGCHQPKzzFtsHaRuECe6jLakf/RjSRqvF5XHLZnM2+fXLhb8Qh/HBFHs3M4cSLb1k3B899RYIg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + dev: true + + /postcss-discard-duplicates@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + dev: true + + /postcss-discard-empty@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + dev: true + + /postcss-discard-overridden@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-qs0ehZMMZpSESbRkw1+inkf51kak6OOzNRaoLd/U7Fatp0aN2HQ1rxGOrJvYcRAN9VpX8kUF13R2ofn8OlvFVA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + dev: true + + /postcss-merge-longhand@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + stylehacks: 6.0.2(postcss@8.4.33) + dev: true + + /postcss-merge-rules@6.0.3(postcss@8.4.33): + resolution: {integrity: sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + cssnano-utils: 4.0.1(postcss@8.4.33) + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-minify-font-values@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-gradients@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + colord: 2.9.3 + cssnano-utils: 4.0.1(postcss@8.4.33) + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-params@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + cssnano-utils: 4.0.1(postcss@8.4.33) + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-minify-selectors@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-0b+m+w7OAvZejPQdN2GjsXLv5o0jqYHX3aoV0e7RBKPCsB7TYG5KKWBFhGnB/iP3213Ts8c5H4wLPLMm7z28Sg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-nested@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + engines: {node: '>=12.0'} + peerDependencies: + postcss: ^8.2.14 + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.0.13 + dev: true + + /postcss-normalize-charset@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-aW5LbMNRZ+oDV57PF9K+WI1Z8MPnF+A8qbajg/T8PP126YrGX1f9IQx21GI2OlGz7XFJi/fNi0GTbY948XJtXg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + dev: true + + /postcss-normalize-display-values@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-mc3vxp2bEuCb4LgCcmG1y6lKJu1Co8T+rKHrcbShJwUmKJiEl761qb/QQCfFwlrvSeET3jksolCR/RZuMURudw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-positions@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-HRsq8u/0unKNvm0cvwxcOUEcakFXqZ41fv3FOdPn916XFUrympjr+03oaLkuZENz3HE9RrQE9yU0Xv43ThWjQg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-repeat-style@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-Gbb2nmCy6tTiA7Sh2MBs3fj9W8swonk6lw+dFFeQT68B0Pzwp1kvisJQkdV6rbbMSd9brMlS8I8ts52tAGWmGQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-string@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-5Fhx/+xzALJD9EI26Aq23hXwmv97Zfy2VFrt5PLT8lAhnBIZvmaT5pQk+NuJ/GWj/QWaKSKbnoKDGLbV6qnhXg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-timing-functions@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-4zcczzHqmCU7L5dqTB9rzeqPWRMc0K2HoR+Bfl+FSMbqGBUcP5LRfgcH4BdRtLuzVQK1/FHdFoGT3F7rkEnY+g==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-unicode@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-url@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-jEXL15tXSvbjm0yzUV7FBiEXwhIa9H88JOXDGQzmcWoB4mSjZIsmtto066s2iW9FYuIrIF4k04HA2BKAOpbsaQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-normalize-whitespace@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-76i3NpWf6bB8UHlVuLRxG4zW2YykF9CTEcq/9LGAiz2qBuX5cBStadkk0jSkg9a9TCIXbMQz7yzrygKoCW9JuA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-ordered-values@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-XXbb1O/MW9HdEhnBxitZpPFbIvDgbo9NK4c/5bOfiKpnIGZDoL2xd7/e6jW5DYLsWxBbs+1nZEnVgnjnlFViaA==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + cssnano-utils: 4.0.1(postcss@8.4.33) + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + + /postcss-reduce-initial@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + caniuse-api: 3.0.0 + postcss: 8.4.33 + dev: true + + /postcss-reduce-transforms@6.0.1(postcss@8.4.33): + resolution: {integrity: sha512-fUbV81OkUe75JM+VYO1gr/IoA2b/dRiH6HvMwhrIBSUrxq3jNZQZitSnugcTLDi1KkQh1eR/zi+iyxviUNBkcQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + dev: true + /postcss-selector-parser@6.0.13: resolution: {integrity: sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==} engines: {node: '>=4'} @@ -4449,6 +4738,39 @@ packages: util-deprecate: 1.0.2 dev: true + /postcss-selector-parser@6.0.15: + resolution: {integrity: sha512-rEYkQOMUCEMhsKbK66tbEU9QVIxbhN18YiniAwA7XQYTVBqrBy+P2p5JcdqsHgKM2zWylp8d7J6eszocfds5Sw==} + engines: {node: '>=4'} + dependencies: + cssesc: 3.0.0 + util-deprecate: 1.0.2 + dev: true + + /postcss-svgo@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-IH5R9SjkTkh0kfFOQDImyy1+mTCb+E830+9SV1O+AaDcoHTvfsvt6WwJeo7KwcHbFnevZVCsXhDmjFiGVuwqFQ==} + engines: {node: ^14 || ^16 || >= 18} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-value-parser: 4.2.0 + svgo: 3.2.0 + dev: true + + /postcss-unique-selectors@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-8IZGQ94nechdG7Y9Sh9FlIY2b4uS8/k8kdKRX040XHsS3B6d1HrJAkXrBSsSu4SuARruSsUjW3nlSw8BHkaAYQ==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true + + /postcss-value-parser@4.2.0: + resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} + dev: true + /postcss@8.4.33: resolution: {integrity: sha512-Kkpbhhdjw2qQs2O2DGX+8m5OVqEcbB9HRBvuYM9pgrjEFUg30A9LmXNlTAUj4S9kgtGyrMbTzVjH7E+s5Re2yg==} engines: {node: ^10 || ^12 || >=14} @@ -4473,17 +4795,24 @@ packages: fast-diff: 1.3.0 dev: true - /prettier@3.2.2: - resolution: {integrity: sha512-HTByuKZzw7utPiDO523Tt2pLtEyK7OibUD9suEJQrPUCYQqrHr74GGX6VidMrovbf/I50mPqr8j/II6oBAuc5A==} + /prettier@3.2.4: + resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==} engines: {node: '>=14'} hasBin: true dev: true - /process-on-spawn@1.0.0: - resolution: {integrity: sha512-1WsPDsUSMmZH5LeMLegqkPDrsGgsWwk1Exipy2hvB0o/F0ASzbpIctSCcZIK1ykJvtTJULEH+20WOFjMvGnCTg==} - engines: {node: '>=8'} + /pretty-bytes@6.1.1: + resolution: {integrity: sha512-mQUvGU6aUFQ+rNvTIAcZuWGRT9a6f6Yrg9bHs4ImKF+HZCEK+plBvnAZYSIQztknZF2qnzNtr6F8s0+IuptdlQ==} + engines: {node: ^14.13.1 || >=16.0.0} + dev: true + + /pretty-format@29.7.0: + resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==} + engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} dependencies: - fromentries: 1.3.2 + '@jest/schemas': 29.6.3 + ansi-styles: 5.2.0 + react-is: 18.2.0 dev: true /prompts@2.4.2: @@ -4506,12 +4835,6 @@ packages: engines: {node: '>=8'} dev: true - /randombytes@2.1.0: - resolution: {integrity: sha512-vYl3iOX+4CKUWuxGi9Ukhie6fsqXqS9FE2Zaic4tNFD2N2QQaXOMFbuKK4QmDHC0JO6B1Zp41J0LpT0oR68amQ==} - dependencies: - safe-buffer: 5.2.1 - dev: true - /rc9@2.1.1: resolution: {integrity: sha512-lNeOl38Ws0eNxpO3+wD1I9rkHGQyj1NU1jlzv4go2CtEnEQEUfqnIvZG7W+bC/aXdJ27n5x/yUjb6RoT9tko+Q==} dependencies: @@ -4520,6 +4843,10 @@ packages: flat: 5.0.2 dev: true + /react-is@18.2.0: + resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==} + dev: true + /read-pkg-up@7.0.1: resolution: {integrity: sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==} engines: {node: '>=8'} @@ -4575,13 +4902,6 @@ packages: jsesc: 0.5.0 dev: true - /release-zalgo@1.0.0: - resolution: {integrity: sha512-gUAyHVHPPC5wdqX/LG4LWtRYtgjxyX78oanFNTMMyFEfOqdC54s3eE82imuWKbOeqYht2CrNf64Qb8vgmmtZGA==} - engines: {node: '>=4'} - dependencies: - es6-error: 4.1.1 - dev: true - /require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} engines: {node: '>=0.10.0'} @@ -4592,10 +4912,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /require-main-filename@2.0.0: - resolution: {integrity: sha512-NKN5kMDylKuldxYLSUfrbo5Tuzh4hd+2E8NPPX02mZtn1VuREQToYe/ZdlJy+J3uCpfaiGF05e7B8W0iXbQHmg==} - dev: true - /resolve-from@4.0.0: resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} engines: {node: '>=4'} @@ -4655,6 +4971,28 @@ packages: glob: 10.3.10 dev: true + /rollup-plugin-dts@6.1.0(rollup@3.29.4)(typescript@5.3.3): + resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==} + engines: {node: '>=16'} + peerDependencies: + rollup: ^3.29.4 || ^4 + typescript: ^4.5 || ^5.0 + dependencies: + magic-string: 0.30.5 + rollup: 3.29.4 + typescript: 5.3.3 + optionalDependencies: + '@babel/code-frame': 7.22.13 + dev: true + + /rollup@3.29.4: + resolution: {integrity: sha512-oWzmBZwvYrU0iJHtDmhsm662rC15FRXmcjCk1xD771dFDx5jJ02ufAQQTn0etB2emNk4J9EZg/yWKpsn9BWGRw==} + engines: {node: '>=14.18.0', npm: '>=8.0.0'} + hasBin: true + optionalDependencies: + fsevents: 2.3.3 + dev: true + /rollup@4.9.4: resolution: {integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} @@ -4687,6 +5025,10 @@ packages: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} dev: true + /scule@1.2.0: + resolution: {integrity: sha512-CRCmi5zHQnSoeCik9565PONMg0kfkvYmcSqrbOJY4txFfy1wvVULV4FDaiXhUblUgahdqz3F2NwHZ8i4eBTwUw==} + dev: true + /search-insights@2.8.3: resolution: {integrity: sha512-W9rZfQ9XEfF0O6ntgQOTI7Txc8nkZrO4eJ/pTHK0Br6wWND2sPGPoWg+yGhdIW7wMbLqk8dc23IyEtLlNGpeNw==} dev: true @@ -4708,16 +5050,6 @@ packages: dependencies: lru-cache: 6.0.0 - /serialize-javascript@6.0.0: - resolution: {integrity: sha512-Qr3TosvguFt8ePWqsvRfrKyQXIiW+nGbYpy8XK24NQHE83caxWt+mIymTT19DGFbNWNLfEwsrkSmN64lVWB9ag==} - dependencies: - randombytes: 2.1.0 - dev: true - - /set-blocking@2.0.0: - resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} - dev: true - /shebang-command@2.0.0: resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} engines: {node: '>=8'} @@ -4728,20 +5060,24 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - /shikiji-core@0.9.19: - resolution: {integrity: sha512-AFJu/vcNT21t0e6YrfadZ+9q86gvPum6iywRyt1OtIPjPFe25RQnYJyxHQPMLKCCWA992TPxmEmbNcOZCAJclw==} + /shikiji-core@0.10.0: + resolution: {integrity: sha512-imG+bvRkuNlZUi2q9tMVfegRRouTpDxMFejpfF/6J+bFX3NDKtlW9T9iIAkBYnw4pcCtSwirW0AvkwlQR4wyxg==} dev: true - /shikiji-transformers@0.9.19: - resolution: {integrity: sha512-lGLI7Z8frQrIBbhZ74/eiJtxMoCQRbpaHEB+gcfvdIy+ZFaAtXncJGnc52932/UET+Y4GyKtwwC/vjWUCp+c/Q==} + /shikiji-transformers@0.10.0: + resolution: {integrity: sha512-x9oYybeF/XOrIc6Mm8G1gU5ezunMxdgD4WwBTKrZ5tAmFFaNIWCjwZENgRt1uR4iMi0+pGH0g9bmrbraSC41nA==} dependencies: - shikiji: 0.9.19 + shikiji: 0.10.0 dev: true - /shikiji@0.9.19: - resolution: {integrity: sha512-Kw2NHWktdcdypCj1GkKpXH4o6Vxz8B8TykPlPuLHOGSV8VkhoCLcFOH4k19K4LXAQYRQmxg+0X/eM+m2sLhAkg==} + /shikiji@0.10.0: + resolution: {integrity: sha512-1dAzIOWbtM7B4Sem5BvE+CEdsebDsRA34SfCxM4qJ4PLgR73ZD92VEtNfbcoZ3xOLSqvtV0J9i4WpCgVsmQteg==} dependencies: - shikiji-core: 0.9.19 + shikiji-core: 0.10.0 + dev: true + + /siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true /signal-exit@3.0.7: @@ -4761,6 +5097,11 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + /slash@4.0.0: + resolution: {integrity: sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==} + engines: {node: '>=12'} + dev: true + /slice-ansi@5.0.0: resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} engines: {node: '>=12'} @@ -4782,23 +5123,6 @@ packages: engines: {node: '>=0.10.0'} dev: true - /source-map@0.6.1: - resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} - engines: {node: '>=0.10.0'} - dev: true - - /spawn-wrap@2.0.0: - resolution: {integrity: sha512-EeajNjfN9zMnULLwhZZQU3GWBoFNkbngTUPfaawT4RkMiviTxcX0qfhVbGey39mfctfDHkWtuecgQ8NJcyQWHg==} - engines: {node: '>=8'} - dependencies: - foreground-child: 2.0.0 - is-windows: 1.0.2 - make-dir: 3.1.0 - rimraf: 3.0.2 - signal-exit: 3.0.7 - which: 2.0.2 - dev: true - /spdx-correct@3.2.0: resolution: {integrity: sha512-kN9dJbvnySHULIluDHy32WHRUu3Og7B9sbY7tsFLctQkIqnMh3hErYgdMjTYuqmcXX+lK5T1lnUt3G7zNswmZA==} dependencies: @@ -4832,8 +5156,12 @@ packages: engines: {node: '>= 10.x'} dev: true - /sprintf-js@1.0.3: - resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + /stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + + /std-env@3.7.0: + resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} dev: true /string-argv@0.3.2: @@ -4887,11 +5215,6 @@ packages: ansi-regex: 6.0.1 dev: true - /strip-bom@4.0.0: - resolution: {integrity: sha512-3xurFv5tEgii33Zi8Jtp55wEIILR9eh34FAW00PZf+JnSsTmV/ioewSgQl97JHvgjoRGwPShsWm+IdrxB35d0w==} - engines: {node: '>=8'} - dev: true - /strip-final-newline@2.0.0: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} @@ -4913,6 +5236,23 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} + /strip-literal@1.3.0: + resolution: {integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg==} + dependencies: + acorn: 8.11.3 + dev: true + + /stylehacks@6.0.2(postcss@8.4.33): + resolution: {integrity: sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg==} + engines: {node: ^14 || ^16 || >=18.0} + peerDependencies: + postcss: ^8.4.31 + dependencies: + browserslist: 4.22.2 + postcss: 8.4.33 + postcss-selector-parser: 6.0.15 + dev: true + /supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -4927,17 +5267,25 @@ packages: dependencies: has-flag: 4.0.0 - /supports-color@8.1.1: - resolution: {integrity: sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==} - engines: {node: '>=10'} - dependencies: - has-flag: 4.0.0 - /supports-preserve-symlinks-flag@1.0.0: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} dev: true + /svgo@3.2.0: + resolution: {integrity: sha512-4PP6CMW/V7l/GmKRKzsLR8xxjdHTV4IMvhTnpuHwwBazSIlw5W/5SmPjN8Dwyt7lKbSJrRDgp4t9ph0HgChFBQ==} + engines: {node: '>=14.0.0'} + hasBin: true + dependencies: + '@trysound/sax': 0.2.0 + commander: 7.2.0 + css-select: 5.1.0 + css-tree: 2.3.1 + css-what: 6.1.0 + csso: 5.0.5 + picocolors: 1.0.0 + dev: true + /synckit@0.8.8: resolution: {integrity: sha512-HwOKAP7Wc5aRGYdKH+dw0PRRpbO841v2DENBtjnR5HFWoiNByAl7vrx3p0G/rCyYXQsrxqtX48TImFtPcIHSpQ==} engines: {node: ^14.18.0 || >=16.0.0} @@ -4962,15 +5310,6 @@ packages: yallist: 4.0.0 dev: true - /test-exclude@6.0.0: - resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} - engines: {node: '>=8'} - dependencies: - '@istanbuljs/schema': 0.1.3 - glob: 7.2.3 - minimatch: 3.1.2 - dev: true - /text-extensions@2.4.0: resolution: {integrity: sha512-te/NtwBwfiNRLf9Ijqx3T0nlqZiQ2XrrtBvu+cLL8ZRrGkO0NHTug8MYFKyoSrv/sHTaSKfilUkizV6XhxMJ3g==} engines: {node: '>=8'} @@ -4989,6 +5328,20 @@ packages: resolution: {integrity: sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg==} dev: true + /tinybench@2.6.0: + resolution: {integrity: sha512-N8hW3PG/3aOoZAN5V/NSAEDz0ZixDSSt5b/a05iqtpgfLWMSVuCo7w0k2vVvEjdrIoeGqZzweX2WlyioNIHchA==} + dev: true + + /tinypool@0.8.2: + resolution: {integrity: sha512-SUszKYe5wgsxnNOVlBYO6IC+8VGWdVGZWAqUxp3UErNBtptZvWbwyUOyzNL59zigz2rCA92QiL3wvG+JDSdJdQ==} + engines: {node: '>=14.0.0'} + dev: true + + /tinyspy@2.2.0: + resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==} + engines: {node: '>=14.0.0'} + dev: true + /to-fast-properties@2.0.0: resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} engines: {node: '>=4'} @@ -5083,12 +5436,6 @@ packages: engines: {node: '>=14.16'} dev: true - /typedarray-to-buffer@3.1.5: - resolution: {integrity: sha512-zdu8XMNEDepKKR+XYOXAVPtWui0ly0NtohUscw+UmaHiAWT8hrV1rr//H6V+0DvJ3OQ19S979M0laLfX8rm82Q==} - dependencies: - is-typedarray: 1.0.0 - dev: true - /typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -5102,6 +5449,45 @@ packages: resolution: {integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA==} dev: true + /unbuild@2.0.0(typescript@5.3.3): + resolution: {integrity: sha512-JWCUYx3Oxdzvw2J9kTAp+DKE8df/BnH/JTSj6JyA4SH40ECdFu7FoJJcrm8G92B7TjofQ6GZGjJs50TRxoH6Wg==} + hasBin: true + peerDependencies: + typescript: ^5.1.6 + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@rollup/plugin-alias': 5.1.0(rollup@3.29.4) + '@rollup/plugin-commonjs': 25.0.7(rollup@3.29.4) + '@rollup/plugin-json': 6.1.0(rollup@3.29.4) + '@rollup/plugin-node-resolve': 15.2.3(rollup@3.29.4) + '@rollup/plugin-replace': 5.0.5(rollup@3.29.4) + '@rollup/pluginutils': 5.1.0(rollup@3.29.4) + chalk: 5.3.0 + citty: 0.1.5 + consola: 3.2.3 + defu: 6.1.4 + esbuild: 0.19.11 + globby: 13.2.2 + hookable: 5.5.3 + jiti: 1.21.0 + magic-string: 0.30.5 + mkdist: 1.4.0(typescript@5.3.3) + mlly: 1.4.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + pretty-bytes: 6.1.1 + rollup: 3.29.4 + rollup-plugin-dts: 6.1.0(rollup@3.29.4)(typescript@5.3.3) + scule: 1.2.0 + typescript: 5.3.3 + untyped: 1.4.0 + transitivePeerDependencies: + - sass + - supports-color + dev: true + /undici-types@5.26.5: resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} dev: true @@ -5112,6 +5498,26 @@ packages: '@types/unist': 2.0.8 dev: true + /universalify@2.0.1: + resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} + engines: {node: '>= 10.0.0'} + dev: true + + /untyped@1.4.0: + resolution: {integrity: sha512-Egkr/s4zcMTEuulcIb7dgURS6QpN7DyqQYdf+jBtiaJvQ+eRsrtWUoX84SbvQWuLkXsOjM+8sJC9u6KoMK/U7Q==} + hasBin: true + dependencies: + '@babel/core': 7.22.17 + '@babel/standalone': 7.23.8 + '@babel/types': 7.22.17 + defu: 6.1.4 + jiti: 1.21.0 + mri: 1.2.0 + scule: 1.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /update-browserslist-db@1.0.11(browserslist@4.21.10): resolution: {integrity: sha512-dCwEFf0/oT85M1fHBg4F0jtLwJrutGoHSQXCh7u4o2t1drG+c0a9Flnqww6XUKSfQMPpJBRjU8d4RXB09qtvaA==} hasBin: true @@ -5143,11 +5549,6 @@ packages: resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: true - /uuid@8.3.2: - resolution: {integrity: sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg==} - hasBin: true - dev: true - /v8-compile-cache-lib@3.0.1: resolution: {integrity: sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==} dev: true @@ -5159,6 +5560,27 @@ packages: spdx-expression-parse: 3.0.1 dev: true + /vite-node@1.2.1(@types/node@20.11.4): + resolution: {integrity: sha512-fNzHmQUSOY+y30naohBvSW7pPn/xn3Ib/uqm+5wAJQJiqQsU0NBR78XdRJb04l4bOFKjpTWld0XAfkKlrDbySg==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 5.0.11(@types/node@20.11.4) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite@5.0.11(@types/node@20.11.4): resolution: {integrity: sha512-XBMnDjZcNAw/G1gEiskiM1v6yzM4GE5aMGvhWTlHAYYhxb7S3/V1s3m2LDHa8Vh6yIWYYB0iJwsEaS523c4oYA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -5195,8 +5617,44 @@ packages: fsevents: 2.3.3 dev: true - /vitepress@1.0.0-rc.39(@algolia/client-search@4.20.0)(@types/node@20.11.4)(search-insights@2.8.3)(typescript@5.3.3): - resolution: {integrity: sha512-EcgoRlAAp37WOxUOYv45oxyhLrcy3Upey+mKpqW3ldsg6Ol4trPndRBk2GO0QiSvEKlb9BMerk49D/bFICN6kg==} + /vite@5.0.12(@types/node@20.11.4): + resolution: {integrity: sha512-4hsnEkG3q0N4Tzf1+t6NdN9dg/L3BM+q8SWgbSPnJvrgH2kgdyzfVJwbR1ic69/4uMJJ/3dqDZZE5/WwqW8U1w==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 20.11.4 + esbuild: 0.19.11 + postcss: 8.4.33 + rollup: 4.9.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true + + /vitepress@1.0.0-rc.40(@algolia/client-search@4.20.0)(@types/node@20.11.4)(postcss@8.4.33)(search-insights@2.8.3)(typescript@5.3.3): + resolution: {integrity: sha512-1x9PCrcsJwqhpccyTR93uD6jpiPDeRC98CBCAQLLBb44a3VSXYBPzhCahi+2kwAYylu49p0XhseMPVM4IVcWcw==} hasBin: true peerDependencies: markdown-it-mathjax3: ^4.3.2 @@ -5210,18 +5668,19 @@ packages: '@docsearch/css': 3.5.2 '@docsearch/js': 3.5.2(@algolia/client-search@4.20.0)(search-insights@2.8.3) '@types/markdown-it': 13.0.7 - '@vitejs/plugin-vue': 5.0.3(vite@5.0.11)(vue@3.4.14) + '@vitejs/plugin-vue': 5.0.3(vite@5.0.12)(vue@3.4.15) '@vue/devtools-api': 6.5.1 - '@vueuse/core': 10.7.2(vue@3.4.14) - '@vueuse/integrations': 10.7.2(focus-trap@7.5.4)(vue@3.4.14) + '@vueuse/core': 10.7.2(vue@3.4.15) + '@vueuse/integrations': 10.7.2(focus-trap@7.5.4)(vue@3.4.15) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 - shikiji: 0.9.19 - shikiji-core: 0.9.19 - shikiji-transformers: 0.9.19 - vite: 5.0.11(@types/node@20.11.4) - vue: 3.4.14(typescript@5.3.3) + postcss: 8.4.33 + shikiji: 0.10.0 + shikiji-core: 0.10.0 + shikiji-transformers: 0.10.0 + vite: 5.0.12(@types/node@20.11.4) + vue: 3.4.15(typescript@5.3.3) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -5250,7 +5709,64 @@ packages: - universal-cookie dev: true - /vue-demi@0.14.6(vue@3.4.14): + /vitest@1.2.1(@types/node@20.11.4): + resolution: {integrity: sha512-TRph8N8rnSDa5M2wKWJCMnztCZS9cDcgVTQ6tsTFTG/odHJ4l5yNVqvbeDJYJRZ6is3uxaEpFs8LL6QM+YFSdA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': ^1.0.0 + '@vitest/ui': ^1.0.0 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + dependencies: + '@types/node': 20.11.4 + '@vitest/expect': 1.2.1 + '@vitest/runner': 1.2.1 + '@vitest/snapshot': 1.2.1 + '@vitest/spy': 1.2.1 + '@vitest/utils': 1.2.1 + acorn-walk: 8.3.2 + cac: 6.7.14 + chai: 4.4.1 + debug: 4.3.4 + execa: 8.0.1 + local-pkg: 0.5.0 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.7.0 + strip-literal: 1.3.0 + tinybench: 2.6.0 + tinypool: 0.8.2 + vite: 5.0.11(@types/node@20.11.4) + vite-node: 1.2.1(@types/node@20.11.4) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + + /vue-demi@0.14.6(vue@3.4.15): resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} hasBin: true @@ -5262,16 +5778,16 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.4.14(typescript@5.3.3) + vue: 3.4.15(typescript@5.3.3) dev: true - /vue-eslint-parser@9.4.0(eslint@8.56.0): - resolution: {integrity: sha512-7KsNBb6gHFA75BtneJsoK/dbZ281whUIwFYdQxA68QrCrGMXYzUMbPDHGcOQ0OocIVKrWSKWXZ4mL7tonCXoUw==} + /vue-eslint-parser@9.4.1(eslint@8.56.0): + resolution: {integrity: sha512-EmIbJ5cCI/E06SlI8K5sldVZ+Ef5vy26Ck0lNALxgY7FEAMOjNR32qcsVM3FUJUbvVWTBEiOy5lQvbhPK/ynBw==} engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: eslint: '>=6.0.0' dependencies: - debug: 4.3.4(supports-color@8.1.1) + debug: 4.3.4 eslint: 8.56.0 eslint-scope: 7.2.2 eslint-visitor-keys: 3.4.3 @@ -5282,26 +5798,22 @@ packages: transitivePeerDependencies: - supports-color - /vue@3.4.14(typescript@5.3.3): - resolution: {integrity: sha512-Rop5Al/ZcBbBz+KjPZaZDgHDX0kUP4duEzDbm+1o91uxYUNmJrZSBuegsNIJvUGy+epLevNRNhLjm08VKTgGyw==} + /vue@3.4.15(typescript@5.3.3): + resolution: {integrity: sha512-jC0GH4KkWLWJOEQjOpkqU1bQsBwf4R1rsFtw5GQJbjHVKWDzO6P0nWWBTmjp1xSemAioDFj1jdaK1qa3DnMQoQ==} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true dependencies: - '@vue/compiler-dom': 3.4.14 - '@vue/compiler-sfc': 3.4.14 - '@vue/runtime-dom': 3.4.14 - '@vue/server-renderer': 3.4.14(vue@3.4.14) - '@vue/shared': 3.4.14 + '@vue/compiler-dom': 3.4.15 + '@vue/compiler-sfc': 3.4.15 + '@vue/runtime-dom': 3.4.15 + '@vue/server-renderer': 3.4.15(vue@3.4.15) + '@vue/shared': 3.4.15 typescript: 5.3.3 dev: true - /which-module@2.0.1: - resolution: {integrity: sha512-iBdZ57RDvnOR9AGBhML2vFZf7h8vmBjhoaZqODJBFWHVtKkDmKuHai3cx5PgVMrX5YDNp27AofYbAwctSS+vhQ==} - dev: true - /which@2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5309,17 +5821,13 @@ packages: dependencies: isexe: 2.0.0 - /workerpool@6.2.1: - resolution: {integrity: sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==} - dev: true - - /wrap-ansi@6.2.0: - resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} + /why-is-node-running@2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} engines: {node: '>=8'} + hasBin: true dependencies: - ansi-styles: 4.3.0 - string-width: 4.2.3 - strip-ansi: 6.0.1 + siginfo: 2.0.0 + stackback: 0.0.2 dev: true /wrap-ansi@7.0.0: @@ -5352,24 +5860,11 @@ packages: /wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /write-file-atomic@3.0.3: - resolution: {integrity: sha512-AvHcyZ5JnSfq3ioSyjrBkH9yW4m7Ayk8/9My/DD9onKeu/94fwrMocemO2QAJFAlnnDN+ZDS+ZjAR5ua1/PV/Q==} - dependencies: - imurmurhash: 0.1.4 - is-typedarray: 1.0.0 - signal-exit: 3.0.7 - typedarray-to-buffer: 3.1.5 - dev: true - /xml-name-validator@4.0.0: resolution: {integrity: sha512-ICP2e+jsHvAj2E2lIHxa5tjXRlKDJo4IdvPvCXbXQGdzSfmSpNVyIKMvoZHjDY9DP0zV17iI85o90vRFXNccRw==} engines: {node: '>=12'} dev: true - /y18n@4.0.3: - resolution: {integrity: sha512-JKhqTOwSrqNA1NY5lSztJ1GrBiUodLMmIZuLiDaMRJ+itFd+ABVE8XBjOvIWL+rSqNDC74LCSFmlb/U4UZ4hJQ==} - dev: true - /y18n@5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} @@ -5399,14 +5894,6 @@ packages: engines: {node: '>= 14'} dev: true - /yargs-parser@18.1.3: - resolution: {integrity: sha512-o50j0JeToy/4K6OZcaQmW6lyXXKhq7csREXcDwk2omFPJEwUNOVtJKvmDr9EI1fAJZUyZcRF7kxGBWmRXudrCQ==} - engines: {node: '>=6'} - dependencies: - camelcase: 5.3.1 - decamelize: 1.2.0 - dev: true - /yargs-parser@20.2.4: resolution: {integrity: sha512-WOkpgNhPTlE73h4VFAFsOnomJVaovO8VqLDzy5saChRBFQFBoMYirowyW+Q9HB4HFF4Z7VZTiG3iSzJJA29yRA==} engines: {node: '>=10'} @@ -5417,46 +5904,6 @@ packages: engines: {node: '>=12'} dev: true - /yargs-unparser@2.0.0: - resolution: {integrity: sha512-7pRTIA9Qc1caZ0bZ6RYRGbHJthJWuakf+WmHK0rVeLkNrrGhfoabBNdue6kdINI6r4if7ocq9aD/n7xwKOdzOA==} - engines: {node: '>=10'} - dependencies: - camelcase: 6.3.0 - decamelize: 4.0.0 - flat: 5.0.2 - is-plain-obj: 2.1.0 - dev: true - - /yargs@15.4.1: - resolution: {integrity: sha512-aePbxDmcYW++PaqBsJ+HYUFwCdv4LVvdnhBy78E57PIor8/OVvhMrADFFEDh8DHDFRv/O9i3lPhsENjO7QX0+A==} - engines: {node: '>=8'} - dependencies: - cliui: 6.0.0 - decamelize: 1.2.0 - find-up: 4.1.0 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - require-main-filename: 2.0.0 - set-blocking: 2.0.0 - string-width: 4.2.3 - which-module: 2.0.1 - y18n: 4.0.3 - yargs-parser: 18.1.3 - dev: true - - /yargs@16.2.0: - resolution: {integrity: sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==} - engines: {node: '>=10'} - dependencies: - cliui: 7.0.4 - escalade: 3.1.1 - get-caller-file: 2.0.5 - require-directory: 2.1.1 - string-width: 4.2.3 - y18n: 5.0.8 - yargs-parser: 20.2.4 - dev: true - /yargs@17.7.2: resolution: {integrity: sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==} engines: {node: '>=12'} @@ -5478,3 +5925,8 @@ packages: /yocto-queue@0.1.0: resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} engines: {node: '>=10'} + + /yocto-queue@1.0.0: + resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} + engines: {node: '>=12.20'} + dev: true diff --git a/scripts/lib/eslint-compat.ts b/scripts/lib/eslint-compat.ts deleted file mode 100644 index 36478c6..0000000 --- a/scripts/lib/eslint-compat.ts +++ /dev/null @@ -1,85 +0,0 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/scripts/lib/eslint-compat.ts - */ -// @ts-check -import * as eslint from 'eslint'; - -// eslint-disable-next-line @typescript-eslint/no-namespace -- ignore -export namespace ESLint { - export type LintResult = eslint.ESLint.LintResult -} -export const ESLint = eslint.ESLint || getESLintClassForV6() - -// eslint-disable-next-line @typescript-eslint/no-explicit-any -type ESLintCLIEngine = any - -function getESLintClassForV6(): typeof eslint.ESLint { - const CLIEngine: ESLintCLIEngine = - // eslint-disable-next-line @typescript-eslint/no-explicit-any - (eslint as any).CLIEngine - class ESLintForV6 { - private engine: ESLintCLIEngine - static get version() { - return CLIEngine.version - } - - constructor(options?: eslint.ESLint.Options) { - const { - overrideConfig: { plugins, globals, rules, ...overrideConfig } = { - plugins: [], - globals: {}, - rules: {} - }, - fix, - reportUnusedDisableDirectives, - plugins: pluginsMap, - ...otherOptions - } = options || {} - const newOptions: ESLintCLIEngine['Options'] = { - fix: Boolean(fix), - reportUnusedDisableDirectives: reportUnusedDisableDirectives - ? reportUnusedDisableDirectives !== 'off' - : undefined, - ...otherOptions, - - globals: globals - ? Object.keys(globals).filter(n => globals[n]) - : undefined, - plugins: plugins || [], - rules: rules - ? Object.entries(rules).reduce((o, [ruleId, opt]) => { - if (opt) { - o[ruleId] = opt - } - return o - }, {} as NonNullable) - : undefined, - ...overrideConfig - } - this.engine = new CLIEngine(newOptions) - - for (const [name, plugin] of Object.entries(pluginsMap || {})) { - this.engine.addPlugin(name, plugin) - } - } - - async lintText( - ...params: Parameters - ): ReturnType { - const result = this.engine.executeOnText(params[0], params[1]?.filePath) - return result.results - } - - async lintFiles( - ...params: Parameters - ): ReturnType { - const result = this.engine.executeOnFiles( - Array.isArray(params[0]) ? params[0] : [params[0]] - ) - return result.results - } - } - - - return ESLintForV6 as never -} diff --git a/scripts/lib/rules.ts b/scripts/lib/rules.ts deleted file mode 100644 index e6f7ed8..0000000 --- a/scripts/lib/rules.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/scripts/lib/rules.ts - */ -import rulesImported from '../../src/rules' - -export type RuleInfo = { - id: string - name: string - category: string - description: string - recommended: boolean - fixable: boolean - deprecated: boolean - replacedBy: string[] | null -} - -const rules = Object.entries(rulesImported).map(rule => { - const name = rule[0] - const meta = rule[1].meta - return { - id: `@rotki/${name}`, - name, - category: String(meta.docs.category), - description: String(meta.docs.description), - recommended: Boolean(meta.docs.recommended), - fixable: Boolean(meta.fixable), - deprecated: Boolean(meta.deprecated), - replacedBy: meta.docs.replacedBy - } as RuleInfo -}) - -export default rules -export const withCategories = [ - 'Recommended', - 'Best Practices', - 'Stylistic Issues' -].map(category => ({ - category, - rules: rules.filter(rule => rule.category === category && !rule.deprecated) -})) diff --git a/scripts/lib/utils.ts b/scripts/lib/utils.ts deleted file mode 100644 index dbe5f75..0000000 --- a/scripts/lib/utils.ts +++ /dev/null @@ -1,50 +0,0 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/scripts/lib/utils.ts - */ -import { readdirSync, existsSync } from 'fs' -import { basename, extname, join } from 'path' -import { ESLint } from './eslint-compat' -const eslint = new ESLint({ fix: true }) - -async function format(text: string, filename: string): Promise { - const lintResults = await eslint.lintText(text, { filePath: filename }) - return lintResults[0].output || text -} - -/** - * Convert text to camelCase - */ -function camelCase(str: string) { - return str.replace(/[-_](\w)/gu, (_, c) => (c ? c.toUpperCase() : '')) -} - -async function createIndex( - dirPath: string, - prefix = '', - all = false -): Promise { - const dirName = basename(dirPath) - const tsFiles = readdirSync(dirPath) - .filter( - file => - file.endsWith('.ts') || existsSync(join(dirPath, file, 'index.ts')) - ) - .map(file => basename(file, extname(file))) - return format( - `/** DON'T EDIT THIS FILE; was created by scripts. */ -${tsFiles - .map( - id => - `import ${all ? '* as ' : ''}${camelCase(id)} from './${dirName}/${id}';` - ) - .join('\n')} - -export = { - ${tsFiles.map(id => `'${prefix}${id}': ${camelCase(id)},`).join('\n ')} - } - `, - 'input.ts' - ) -} - -export { createIndex, format } \ No newline at end of file diff --git a/scripts/new-rule.ts b/scripts/new-rule.ts index 4f6e600..b9d6d39 100644 --- a/scripts/new-rule.ts +++ b/scripts/new-rule.ts @@ -5,6 +5,7 @@ import { resolve } from 'node:path'; import { writeFileSync } from 'node:fs'; import { execSync } from 'node:child_process'; import process from 'node:process'; +import url from 'node:url'; const logger = console; @@ -21,28 +22,32 @@ const logger = console; return; } - const ruleFile = resolve(__dirname, `../src/rules/${ruleId}.ts`); - const testFile = resolve(__dirname, `../tests/rules/${ruleId}.ts`); - const docFile = resolve(__dirname, `../docs/rules/${ruleId}.md`); + const dirname = url.fileURLToPath(new URL('.', import.meta.url)); + + const ruleFile = resolve(dirname, `../src/rules/${ruleId}.ts`); + const testFile = resolve(dirname, `../tests/rules/${ruleId}.ts`); + const docFile = resolve(dirname, `../docs/rules/${ruleId}.md`); writeFileSync( ruleFile, - `import type { RuleContext, RuleListener } from '../types' -import { createRule } from '../utils/rule' + `import { createEslintRule } from '../utils' + +export const RULE_NAME='${ruleId}'; +export type MessageIds=''; +export type Options = []; -export = createRule({ +export default createEslintRule({ + name: RULE_NAME, meta: { type: '...', docs: { description: '...', - category: 'Best Practices', - url: 'https://rotki.github.io/eslint-plugin/rules/${ruleId}.html', - recommended: false }, fixable: null, schema: [] }, - create(context: RuleContext): RuleListener { + defaultOptions: [], + create(context) { return {} } }) @@ -51,7 +56,7 @@ export = createRule({ writeFileSync( testFile, `import { RuleTester } from 'eslint' -import rule from '../../../src/rules/${ruleId}' +import rule from '../../src/rules/${ruleId}' const vueParser = require.resolve('vue-eslint-parser') @@ -132,7 +137,10 @@ This rule reports ???. `, ); - execSync(`code "${ruleFile}"`); - execSync(`code "${testFile}"`); - execSync(`code "${docFile}"`); + const editor = process.env.LAUNCH_EDITOR; + if (editor) { + execSync(`${editor} "${ruleFile}"`); + execSync(`${editor} "${testFile}"`); + execSync(`${editor} "${docFile}"`); + } })(process.argv[2]); diff --git a/scripts/update-docs-index.ts b/scripts/update-docs-index.ts index cf23807..7e4e963 100644 --- a/scripts/update-docs-index.ts +++ b/scripts/update-docs-index.ts @@ -4,7 +4,7 @@ import { writeFileSync } from 'node:fs'; import { resolve } from 'node:path'; import { type Options, format } from 'prettier'; -import { type RuleInfo, withCategories } from './lib/rules'; +import { type RuleInfo, withCategories } from './utils'; const prettierrc: Options = { semi: true, diff --git a/scripts/update-recommended-rules.ts b/scripts/update-recommended-rules.ts deleted file mode 100644 index 46f444f..0000000 --- a/scripts/update-recommended-rules.ts +++ /dev/null @@ -1,40 +0,0 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/scripts/update-recommended-rules.ts - */ -import { writeFileSync } from 'node:fs'; -import { resolve } from 'node:path'; -import rules from './lib/rules'; -import { format } from './lib/utils'; - -main(); - -async function main() { - // recommended.ts - writeFileSync( - resolve(__dirname, '../src/configs/recommended.ts'), - await format( - `/** DON'T EDIT THIS FILE; was created by scripts. */ -export = { - extends: [require.resolve('./base')], - parserOptions: { - ecmaVersion: 2022, - sourceType: 'module', - ecmaFeatures: { - jsx: true - } - }, - env: { - browser: true, - es6: true - }, - rules: { - ${rules - .filter(rule => rule.recommended) - .map(rule => `'${rule.id}': 'warn' as const,`) - .join('\n ')} - }, -}`, - resolve(__dirname, '../src/configs/recommended.ts'), - ), - ); -} diff --git a/scripts/update-rule-docs.ts b/scripts/update-rule-docs.ts index 4cc31dd..99068b7 100644 --- a/scripts/update-rule-docs.ts +++ b/scripts/update-rule-docs.ts @@ -3,8 +3,9 @@ */ import { readFileSync, writeFileSync } from 'node:fs'; import { join } from 'node:path'; +import * as url from 'node:url'; import { type Options, format } from 'prettier'; -import rules, { type RuleInfo } from './lib/rules'; +import { type RuleInfo, rules } from './utils'; const PLACE_HOLDER = /#[^\n]*\n+> .+\n+(?:- .+\n)*\n*/u; @@ -13,7 +14,7 @@ const prettierrc: Options = { singleQuote: true, }; -async function pickSince(content: string): Promise { +function pickSince(content: string): string | null { const fileIntro = /^---\n(?[\s\S]+?)---\n*/u.exec(content); if (fileIntro) { const since = /since: "?(?v\d+\.\d+\.\d+)"?/u.exec( @@ -22,9 +23,6 @@ async function pickSince(content: string): Promise { if (since) return since.groups!.version; } - // if (process.env.IN_VERSION_CI_SCRIPT) { - // return getNewVersion().then((v) => `v${v}`); - // } return null; } @@ -35,12 +33,13 @@ class DocFile { private since: string | null = null; constructor(rule: RuleInfo) { this.rule = rule; - this.filePath = join(__dirname, `../docs/rules/${rule.name}.md`); + const dirname = url.fileURLToPath(new URL('.', import.meta.url)); + this.filePath = join(dirname, `../docs/rules/${rule.name}.md`); this.content = readFileSync(this.filePath, 'utf8'); } - async init() { - this.since = await pickSince(this.content); + init() { + this.since = pickSince(this.content); return this; } @@ -162,7 +161,7 @@ This rule was introduced in \`@rotki/eslint-plugin\` ${this.since} export async function updateRuleDocs(): Promise { for (const rule of rules) { - const doc = await new DocFile(rule).init(); + const doc = new DocFile(rule).init(); await doc .updateFileIntro() .updateHeader() @@ -171,3 +170,5 @@ export async function updateRuleDocs(): Promise { .write(); } } + +await updateRuleDocs(); diff --git a/scripts/update.ts b/scripts/update.ts deleted file mode 100644 index 1cdf49b..0000000 --- a/scripts/update.ts +++ /dev/null @@ -1,27 +0,0 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/scripts/update.ts - */ -import { writeFileSync } from 'node:fs'; -import { resolve } from 'node:path'; -import { createIndex } from './lib/utils'; -import { updateRuleDocs } from './update-rule-docs'; -import './update-docs-index'; - -// recommended rules. -import './update-recommended-rules'; - -updateRuleDocs(); - -main(); - -async function main() { - // indices. - for (const pairs of [ - [resolve(__dirname, '../src/configs')], - [resolve(__dirname, '../src/rules')], - [resolve(__dirname, '../src/utils'), '', true], - ] as const) { - const [dirPath, prefix, all] = pairs; - writeFileSync(`${dirPath}.ts`, await createIndex(dirPath, prefix, all)); - } -} diff --git a/scripts/utils/index.ts b/scripts/utils/index.ts new file mode 100644 index 0000000..6a37aaa --- /dev/null +++ b/scripts/utils/index.ts @@ -0,0 +1 @@ +export * from './rules'; diff --git a/scripts/utils/rules.ts b/scripts/utils/rules.ts new file mode 100644 index 0000000..e83a26e --- /dev/null +++ b/scripts/utils/rules.ts @@ -0,0 +1,46 @@ +/** + * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/scripts/lib/rules.ts + */ + +import plugin from '../../src/plugin'; +import type { RuleMetaData } from '@typescript-eslint/utils/ts-eslint'; + +export interface RuleInfo { + id: string; + name: string; + category: string; + description: string; + recommended: boolean; + fixable: boolean; + deprecated: boolean; + replacedBy: string[] | null; +}; + +export const rules = Object.entries(plugin.rules).map((rule) => { + const name = rule[0]; + // todo, maybe adjust the type and remove the cast? + const meta = rule[1].meta as RuleMetaData<''> | undefined; + + if (!meta || !meta.docs) + throw new Error('meta and meta.docs are not supposed to be missing did you forget to add them'); + + return { + id: `@rotki/${name}`, + name, + description: String(meta.docs.description), + category: String(meta.docs.recommended), + recommended: meta.docs.recommended === 'recommended', + fixable: Boolean(meta.fixable), + deprecated: Boolean(meta.deprecated), + replacedBy: meta.replacedBy ? [...meta.replacedBy] : null, + } satisfies RuleInfo; +}); + +export const withCategories = [ + 'recommended', + 'strict', + 'stylistic', +].map(category => ({ + category, + rules: rules.filter(rule => rule.category === category && !rule.deprecated), +})); diff --git a/src/configs.ts b/src/configs.ts deleted file mode 100644 index ea4f1ff..0000000 --- a/src/configs.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** DON'T EDIT THIS FILE; was created by scripts. */ -import base from './configs/base'; -import recommended from './configs/recommended'; - -export = { - base, - recommended, -}; diff --git a/src/configs/base.ts b/src/configs/base.ts deleted file mode 100644 index 5e7a950..0000000 --- a/src/configs/base.ts +++ /dev/null @@ -1,4 +0,0 @@ -export = { - parser: require.resolve('vue-eslint-parser'), - plugins: ['@rotki'], -}; diff --git a/src/configs/index.ts b/src/configs/index.ts new file mode 100644 index 0000000..583930b --- /dev/null +++ b/src/configs/index.ts @@ -0,0 +1,7 @@ +import plugin from '../plugin'; +import { createRecommended } from '../utils/config'; + +export const configs = { + 'recommended': createRecommended(plugin, '@rotki', false), + 'recommended-flat': createRecommended(plugin, '@rotki', true), +}; diff --git a/src/configs/recommended.ts b/src/configs/recommended.ts deleted file mode 100644 index fe2c25e..0000000 --- a/src/configs/recommended.ts +++ /dev/null @@ -1,18 +0,0 @@ -/** DON'T EDIT THIS FILE; was created by scripts. */ -export = { - env: { - browser: true, - es6: true, - }, - extends: [require.resolve('./base')], - parserOptions: { - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 2022, - sourceType: 'module', - }, - rules: { - '@rotki/no-deprecated-classes': 'warn' as const, - }, -}; diff --git a/src/index.ts b/src/index.ts index e288411..63e20c9 100644 --- a/src/index.ts +++ b/src/index.ts @@ -1,7 +1,15 @@ -import configs from './configs'; -import rules from './rules'; +import { configs } from './configs'; +import plugin from './plugin'; +import type { Linter } from 'eslint'; -export = { - configs, - rules, +export default Object.assign(plugin, { configs }); + +type RuleDefinitions = typeof plugin['rules']; + +export type RuleOptions = { + [K in keyof RuleDefinitions]: RuleDefinitions[K]['defaultOptions'] +}; + +export type Rules = { + [K in keyof RuleOptions]: Linter.RuleEntry }; diff --git a/src/plugin.ts b/src/plugin.ts new file mode 100644 index 0000000..f34f85c --- /dev/null +++ b/src/plugin.ts @@ -0,0 +1,15 @@ +import pkg from '../package.json' assert { type: 'json' }; +import noDeprecatedClasses from './rules/no-deprecated-classes'; +import type { ESLint } from 'eslint'; + +const plugin = { + meta: { + name: '@rotki/eslint-plugin', + version: pkg.version, + }, + rules: { + 'no-deprecated-classes': noDeprecatedClasses, + }, +} satisfies ESLint.Plugin; + +export default plugin; diff --git a/src/rules.ts b/src/rules.ts deleted file mode 100644 index 816be61..0000000 --- a/src/rules.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** DON'T EDIT THIS FILE; was created by scripts. */ -import noDeprecatedClasses from './rules/no-deprecated-classes'; - -export = { - 'no-deprecated-classes': noDeprecatedClasses, -}; diff --git a/src/rules/no-deprecated-classes.ts b/src/rules/no-deprecated-classes.ts index 042d1e9..e36c665 100644 --- a/src/rules/no-deprecated-classes.ts +++ b/src/rules/no-deprecated-classes.ts @@ -1,8 +1,13 @@ -import { defineTemplateBodyVisitor } from '../utils/index'; -import { createRule } from '../utils/rule'; -import type { Range, RuleContext, RuleListener } from '../types'; +import { createEslintRule, defineTemplateBodyVisitor, getSourceCode } from '../utils'; +import type { Range } from '../types'; import type { AST as VAST } from 'vue-eslint-parser'; +export const RULE_NAME = 'no-deprecated-classes'; + +export type MessageIds = 'replacedWith'; + +export type Options = []; + type StringReplacer = [string, string]; type RegexReplacer = [RegExp, (args: string[]) => string]; @@ -41,74 +46,72 @@ function isRegex(replacement: Replacer): replacement is RegexReplacer { return replacement[0] instanceof RegExp; } -function create(context: RuleContext): RuleListener { - return defineTemplateBodyVisitor(context, { - 'VAttribute[key.name="class"]': function (node: VAST.VAttribute) { - if (!node.value || !node.value.value) - return; +export default createEslintRule({ + create(context) { + return defineTemplateBodyVisitor(context, { + 'VAttribute[key.name="class"]': function (node: VAST.VAttribute) { + if (!node.value || !node.value.value) + return; - const classes = node.value.value.split(/\s+/).filter(s => !!s); - const source = context.getSourceCode(); + const classes = node.value.value.split(/\s+/).filter(s => !!s); + const source = getSourceCode(context); - const replaced: StringReplacer[] = []; + const replaced: StringReplacer[] = []; - classes.forEach((className) => { - for (const replacement of replacements) { - if (isString(replacement) && replacement[0] === className) - replaced.push([className, replacement[1]]); + classes.forEach((className) => { + for (const replacement of replacements) { + if (isString(replacement) && replacement[0] === className) + replaced.push([className, replacement[1]]); - if (isRegex(replacement)) { - const matches = (replacement[0].exec(className) || []).slice(1); - const replace = replacement[1]; - if (matches.length > 0 && typeof replace === 'function') - return replaced.push([className, replace(matches)]); + if (isRegex(replacement)) { + const matches = (replacement[0].exec(className) || []).slice(1); + const replace = replacement[1]; + if (matches.length > 0 && typeof replace === 'function') + return replaced.push([className, replace(matches)]); + } } - } - }); + }); - replaced.forEach((replacement) => { - if (!node.value) - return; + replaced.forEach((replacement) => { + if (!node.value) + return; - const idx = node.value.value.indexOf(replacement[0]) + 1; - const range: Range = [ - node.value.range[0] + idx, - node.value.range[0] + idx + replacement[0].length, - ]; - const loc = { - end: source.getLocFromIndex(range[1]), - start: source.getLocFromIndex(range[0]), - }; - context.report({ - data: { - a: replacement[0], - b: replacement[1], - }, - fix(fixer) { - return fixer.replaceTextRange(range, replacement[1]); - }, - loc, - messageId: 'replacedWith', + const idx = node.value.value.indexOf(replacement[0]) + 1; + const range: Range = [ + node.value.range[0] + idx, + node.value.range[0] + idx + replacement[0].length, + ]; + const loc = { + end: source.getLocFromIndex(range[1]), + start: source.getLocFromIndex(range[0]), + }; + context.report({ + data: { + a: replacement[0], + b: replacement[1], + }, + fix(fixer) { + return fixer.replaceTextRange(range, replacement[1]); + }, + loc, + messageId: 'replacedWith', + }); }); - }); - }, - }); -} - -export = createRule({ - create, + }, + }); + }, + defaultOptions: [], meta: { docs: { - category: 'Recommended', - description: - 'disallow the usage of vuetify css classes since they are replaced with tailwindcss', - recommended: true, - url: 'https://rotki.github.io/eslint-plugin/rules/no-deprecated-classes', + description: 'disallow the usage of vuetify css classes since they are replaced with tailwindcss', + recommended: 'recommended', }, fixable: 'code', messages: { replacedWith: `'{{ a }}' has been replaced with '{{ b }}'`, }, + schema: [], type: 'problem', }, + name: RULE_NAME, }); diff --git a/src/types/eslint.ts b/src/types/eslint.ts index 8d4175e..ad1c1de 100644 --- a/src/types/eslint.ts +++ b/src/types/eslint.ts @@ -1,264 +1,16 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/lib/types/eslint.ts - */ -import type { AST as JSONAST } from 'jsonc-eslint-parser'; -import type { AST as YAMLAST } from 'yaml-eslint-parser'; -import type { AST as VAST } from 'vue-eslint-parser'; -import type { RuleListener, VueParserServices } from './vue-parser-services'; -import type { TokenStore } from './types'; +import type { SourceCode } from './vue-parser-services'; +import type { Rule } from 'eslint'; +import type { RuleContext as TSESLintRuleContext } from '@typescript-eslint/utils/ts-eslint'; -export interface Position { - /** >= 1 */ - line: number; - /** >= 0 */ - column: number; +export interface RuleModule< + T extends readonly unknown[], +> extends Rule.RuleModule { + defaultOptions: T; } -export type Range = [number, number]; - -export interface SourceLocation { - start: Position; - end: Position; -} - -export interface MaybeNode { - type: string; - range: Range; - loc: SourceLocation; -} - -export interface MaybeToken extends MaybeNode { - value: string; -} - -export interface RuleContext { - id: string; - - options: any[]; - settings: object; - parserPath: string; - parserServices: { - isYAML?: true; - isJSON?: true; - } & VueParserServices; - getFilename(): string; - getSourceCode(): SourceCode; - getScope(): Scope; - report(descriptor: ReportDescriptor): void; - getCwd?: () => string; -} - -interface ReportDescriptorOptionsBase { - data?: { [key: string]: string }; - - fix?: - | null - | ((fixer: RuleFixer) => null | Fix | IterableIterator | Fix[]); -} - -type SuggestionDescriptorMessage = { desc: string } | { messageId: string }; - -export type SuggestionReportDescriptor = SuggestionDescriptorMessage & - ReportDescriptorOptionsBase; - -interface ReportDescriptorOptions extends ReportDescriptorOptionsBase { - suggest?: SuggestionReportDescriptor[] | null; -} - -type ReportDescriptor = ReportDescriptorMessage & - ReportDescriptorLocation & - ReportDescriptorOptions; - -type ReportDescriptorMessage = { message: string } | { messageId: string }; - -type ReportDescriptorLocation = - | { node: MaybeNode } - | { loc: SourceLocation | { line: number; column: number } }; - -export interface RuleFixer { - insertTextAfter(nodeOrToken: MaybeNode, text: string): Fix; - - insertTextAfterRange(range: Range, text: string): Fix; - - insertTextBefore(nodeOrToken: MaybeNode, text: string): Fix; - - insertTextBeforeRange(range: Range, text: string): Fix; - - remove(nodeOrToken: MaybeNode): Fix; - - removeRange(range: Range): Fix; - - replaceText(nodeOrToken: MaybeNode, text: string): Fix; - - replaceTextRange(range: Range, text: string): Fix; -} - -export interface Fix { - range: Range; - text: string; -} - -export type FilterPredicate = (tokenOrComment: MaybeToken) => boolean; - -export type CursorWithSkipOptions = - | number - | FilterPredicate - | { - includeComments?: boolean; - filter?: FilterPredicate; - skip?: number; - }; - -export type CursorWithCountOptions = - | number - | FilterPredicate - | { - includeComments?: boolean; - filter?: FilterPredicate; - count?: number; - }; - -export interface SourceCode extends TokenStore { - text: string; - ast: VAST.ESLintProgram | JSONAST.JSONProgram | YAMLAST.YAMLProgram; - lines: string[]; - hasBOM: boolean; - scopeManager: ScopeManager; - visitorKeys: VisitorKeys; - - parserServices: { - isYAML?: true; - isJSON?: true; - } & VueParserServices; - - getText(node?: MaybeNode, beforeCount?: number, afterCount?: number): string; - getLines(): string[]; - getAllComments(): MaybeToken[]; - getComments(node: MaybeNode): { - leading: MaybeToken[]; - trailing: MaybeToken[]; - }; - getJSDocComment(node: MaybeNode): MaybeToken | null; - getNodeByRangeIndex(index: number): MaybeNode; - isSpaceBetweenTokens(first: MaybeToken, second: MaybeToken): boolean; - getLocFromIndex(index: number): Position; - getIndexFromLoc(location: Position): number; -} - -export interface ScopeManager { - scopes: Scope[]; - globalScope: Scope | null; - acquire( - node: VAST.ESLintNode | VAST.ESLintProgram, - inner?: boolean, - ): Scope | null; - getDeclaredVariables(node: VAST.ESLintNode): Variable[]; -} - -export interface Scope { - type: - | 'block' - | 'catch' - | 'class' - | 'for' - | 'function' - | 'function-expression-name' - | 'global' - | 'module' - | 'switch' - | 'with' - | 'TDZ'; - isStrict: boolean; - upper: Scope | null; - childScopes: Scope[]; - variableScope: Scope; - block: VAST.ESLintNode; - variables: Variable[]; - set: Map; - references: Reference[]; - through: Reference[]; - functionExpressionScope: boolean; -} - -export interface Variable { - name: string; - identifiers: VAST.ESLintIdentifier[]; - references: Reference[]; - defs: Definition[]; -} - -export interface Reference { - identifier: VAST.ESLintIdentifier; - from: Scope; - resolved: Variable | null; - writeExpr: VAST.ESLintNode | null; - init: boolean; - isWrite(): boolean; - isRead(): boolean; - isWriteOnly(): boolean; - isReadOnly(): boolean; - isReadWrite(): boolean; -} - -export type DefinitionType = - | { type: 'CatchClause'; node: VAST.ESLintCatchClause; parent: null } - | { - type: 'ClassName'; - node: VAST.ESLintClassDeclaration | VAST.ESLintClassExpression; - parent: null; - } - | { - type: 'FunctionName'; - node: VAST.ESLintFunctionDeclaration | VAST.ESLintFunctionExpression; - parent: null; - } - | { type: 'ImplicitGlobalVariable'; node: VAST.ESLintProgram; parent: null } - | { - type: 'ImportBinding'; - node: - | VAST.ESLintImportSpecifier - | VAST.ESLintImportDefaultSpecifier - | VAST.ESLintImportNamespaceSpecifier; - parent: VAST.ESLintImportDeclaration; - } - | { - type: 'Parameter'; - node: - | VAST.ESLintFunctionDeclaration - | VAST.ESLintFunctionExpression - | VAST.ESLintArrowFunctionExpression; - parent: null; - } - - | { type: 'TDZ'; node: any; parent: null } - | { - type: 'Variable'; - node: VAST.ESLintVariableDeclarator; - parent: VAST.ESLintVariableDeclaration; - }; - -export type Definition = DefinitionType & { name: VAST.ESLintIdentifier }; - -export interface VisitorKeys { - [type: string]: string[]; -} - -export interface RuleModule { - create(context: RuleContext): RuleListener; - meta: RuleMetaData; -} - -export interface RuleMetaData { - docs: { - description: string; - category: 'Recommended' | 'Best Practices' | 'Stylistic Issues'; - recommended?: boolean; - replacedBy?: string[]; - url: string; - }; - messages?: { [messageId: string]: string }; - fixable: 'code' | 'whitespace' | null; - hasSuggestions?: true; - deprecated?: boolean; - type: 'problem' | 'suggestion' | 'layout'; +export interface RuleContext< + TMessageIds extends string, + TOptions extends readonly unknown[], +> extends Omit, 'sourceCode'> { + sourceCode: Readonly; } diff --git a/src/types/index.ts b/src/types/index.ts index 598d8cc..5c89206 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -1,3 +1,3 @@ -export * from './types'; export * from './eslint'; + export * from './vue-parser-services'; diff --git a/src/types/types.ts b/src/types/types.ts deleted file mode 100644 index f893208..0000000 --- a/src/types/types.ts +++ /dev/null @@ -1,98 +0,0 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/lib/types/types.ts - */ -import type { - CursorWithCountOptions, - CursorWithSkipOptions, - MaybeNode, - MaybeToken, -} from './eslint'; - -export interface TokenStore { - getTokenByRangeStart( - offset: number, - options?: { includeComments: boolean }, - ): MaybeToken | null; - getFirstToken(node: MaybeNode): MaybeToken; - getFirstToken(node: MaybeNode, options: number): MaybeToken; - getFirstToken( - node: MaybeNode, - options: CursorWithSkipOptions, - ): MaybeToken | null; - getLastToken(node: MaybeNode): MaybeToken; - getLastToken(node: MaybeNode, options: number): MaybeToken; - getLastToken( - node: MaybeNode, - options: CursorWithSkipOptions, - ): MaybeToken | null; - getTokenBefore(node: MaybeNode): MaybeToken; - getTokenBefore(node: MaybeNode, options: number): MaybeToken; - getTokenBefore( - node: MaybeNode, - options: { includeComments: boolean }, - ): MaybeToken; - getTokenBefore( - node: MaybeNode, - options: CursorWithSkipOptions, - ): MaybeToken | null; - getTokenAfter(node: MaybeNode): MaybeToken; - getTokenAfter(node: MaybeNode, options: number): MaybeToken; - getTokenAfter( - node: MaybeNode, - options: { includeComments: boolean }, - ): MaybeToken; - getTokenAfter( - node: MaybeNode, - options: CursorWithSkipOptions, - ): MaybeToken | null; - getFirstTokenBetween( - left: MaybeNode, - right: MaybeNode, - options?: CursorWithSkipOptions, - ): MaybeToken | null; - getLastTokenBetween( - left: MaybeNode, - right: MaybeNode, - options?: CursorWithSkipOptions, - ): MaybeToken | null; - getFirstTokens( - node: MaybeNode, - options?: CursorWithCountOptions, - ): MaybeToken[]; - getLastTokens( - node: MaybeNode, - options?: CursorWithCountOptions, - ): MaybeToken[]; - getTokensBefore( - node: MaybeNode, - options?: CursorWithCountOptions, - ): MaybeToken[]; - getTokensAfter( - node: MaybeNode, - options?: CursorWithCountOptions, - ): MaybeToken[]; - getFirstTokensBetween( - left: MaybeNode, - right: MaybeNode, - options?: CursorWithCountOptions, - ): MaybeToken[]; - getLastTokensBetween( - left: MaybeNode, - right: MaybeNode, - options?: CursorWithCountOptions, - ): MaybeToken[]; - getTokens( - node: MaybeNode, - beforeCount?: CursorWithCountOptions, - afterCount?: number, - ): MaybeToken[]; - getTokensBetween( - left: MaybeNode, - right: MaybeNode, - padding?: CursorWithCountOptions, - ): MaybeToken[]; - commentsExistBetween(left: MaybeNode, right: MaybeNode): boolean; - getCommentsBefore(nodeOrToken: MaybeNode): MaybeToken[]; - getCommentsAfter(nodeOrToken: MaybeNode): MaybeToken[]; - getCommentsInside(node: MaybeNode): MaybeToken[]; -} diff --git a/src/types/vue-parser-services.ts b/src/types/vue-parser-services.ts index 9a17f1c..6185441 100644 --- a/src/types/vue-parser-services.ts +++ b/src/types/vue-parser-services.ts @@ -1,62 +1,285 @@ -/** - * Forked from https://github.com/intlify/eslint-plugin-vue-i18n/blob/master/lib/types/vue-parser-services.ts - */ -import type { Rule } from 'eslint'; -import type { RuleContext } from './eslint'; -import type { AST as VAST } from 'vue-eslint-parser'; -import type { TokenStore } from './types'; +import type { AST, Rule } from 'eslint'; +import type { HasLocation } from 'vue-eslint-parser/ast/locations'; +import type { Token } from 'vue-eslint-parser/ast/tokens'; import type { VElement } from 'vue-eslint-parser/ast'; +import type { ESLintExtendedProgram, ESLintProgram, VDocumentFragment } from 'vue-eslint-parser/ast/nodes'; +import type { RuleListener as TSRuleListener, SourceCode as TSSourceCode } from '@typescript-eslint/utils/ts-eslint'; -export interface TemplateListener { - [key: string]: ((node: never) => void) | undefined; -} +export type SkipOptions = number | ((token: Token) => boolean) | { + includeComments?: boolean; + filter?: (token: Token) => boolean; + skip?: number; +}; -export interface RuleListener { - onCodePathStart?(codePath: Rule.CodePath, node: never): void; - onCodePathEnd?(codePath: Rule.CodePath, node: never): void; - onCodePathSegmentStart?(segment: Rule.CodePathSegment, node: never): void; - onCodePathSegmentEnd?(segment: Rule.CodePathSegment, node: never): void; - onCodePathSegmentLoop?( - fromSegment: Rule.CodePathSegment, - toSegment: Rule.CodePathSegment, - node: never, - ): void; - [key: string]: - | ((node: never) => void) - | ((codePath: Rule.CodePath, node: never) => void) - | ((segment: Rule.CodePathSegment, node: never) => void) - | (( - fromSegment: Rule.CodePathSegment, - toSegment: Rule.CodePathSegment, - node: never, - ) => void) - | undefined; +export type CountOptions = number | ((token: Token) => boolean) | { + includeComments?: boolean; + filter?: (token: Token) => boolean; + count?: number; +}; + +export interface TokenStore { + /** + * Gets the token starting at the specified index. + * @param offset - Index of the start of the token's range. + * @param options - The option object. + * @returns The token starting at index, or null if no such token. + */ + getTokenByRangeStart( + offset: number, + options?: { includeComments: boolean }, + ): Token | null; + /** + * Gets the first token of the given node. + * @param node - The AST node. + * @param options - The option object. + * @returns An object representing the token. + */ + getFirstToken(node: HasLocation, options?: SkipOptions): Token | null; + /** + * Gets the last token of the given node. + * @param node - The AST node. + * @param options - The option object. + * @returns An object representing the token. + */ + getLastToken(node: HasLocation, options?: SkipOptions): Token | null; + /** + * Gets the token that precedes a given node or token. + * @param node - The AST node or token. + * @param options - The option object. + * @returns An object representing the token. + */ + getTokenBefore(node: HasLocation, options?: SkipOptions): Token | null; + /** + * Gets the token that follows a given node or token. + * @param node - The AST node or token. + * @param options - The option object. + * @returns An object representing the token. + */ + getTokenAfter(node: HasLocation, options?: SkipOptions): Token | null; + /** + * Gets the first token between two non-overlapping nodes. + * @param left - Node before the desired token range. + * @param right - Node after the desired token range. + * @param options - The option object. + * @returns An object representing the token. + */ + getFirstTokenBetween(left: HasLocation, right: HasLocation, options?: SkipOptions): Token | null; + /** + * Gets the last token between two non-overlapping nodes. + * @param left Node before the desired token range. + * @param right Node after the desired token range. + * @param options - The option object. + * @returns An object representing the token. + */ + getLastTokenBetween(left: HasLocation, right: HasLocation, options?: SkipOptions): Token | null; + /** + * Gets the first `count` tokens of the given node. + * @param node - The AST node. + * @param [options=0] - The option object. If this is a number then it's `options.count`. If this is a function then it's `options.filter`. + * @param [options.includeComments=false] - The flag to iterate comments as well. + * @param [options.filter=null] - The predicate function to choose tokens. + * @param [options.count=0] - The maximum count of tokens the cursor iterates. + * @returns Tokens. + */ + getFirstTokens(node: HasLocation, options?: CountOptions): Token[]; + /** + * Gets the last `count` tokens of the given node. + * @param node - The AST node. + * @param [options=0] - The option object. Same options as getFirstTokens() + * @returns Tokens. + */ + getLastTokens(node: HasLocation, options?: CountOptions): Token[]; + /** + * Gets the `count` tokens that precedes a given node or token. + * @param node - The AST node or token. + * @param [options=0] - The option object. Same options as getFirstTokens() + * @returns Tokens. + */ + getTokensBefore(node: HasLocation, options?: CountOptions): Token[]; + /** + * Gets the `count` tokens that follows a given node or token. + * @param node - The AST node or token. + * @param [options=0] - The option object. Same options as getFirstTokens() + * @returns Tokens. + */ + getTokensAfter(node: HasLocation, options?: CountOptions): Token[]; + /** + * Gets the first `count` tokens between two non-overlapping nodes. + * @param left - Node before the desired token range. + * @param right - Node after the desired token range. + * @param [options=0] - The option object. Same options as getFirstTokens() + * @returns Tokens between left and right. + */ + getFirstTokensBetween(left: HasLocation, right: HasLocation, options?: CountOptions): Token[]; + /** + * Gets the last `count` tokens between two non-overlapping nodes. + * @param left Node before the desired token range. + * @param right Node after the desired token range. + * @param [options=0] - The option object. Same options as getFirstTokens() + * @returns Tokens between left and right. + */ + getLastTokensBetween(left: HasLocation, right: HasLocation, options?: CountOptions): Token[]; + /** + * Gets all tokens that are related to the given node. + * @param node - The AST node. + * @param beforeCount - The number of tokens before the node to retrieve. + * @param afterCount - The number of tokens after the node to retrieve. + * @returns Array of objects representing tokens. + */ + getTokens(node: HasLocation, beforeCount?: CountOptions, afterCount?: number): Token[]; + /** + * Gets all of the tokens between two non-overlapping nodes. + * @param left Node before the desired token range. + * @param right Node after the desired token range. + * @param padding Number of extra tokens on either side of center. + * @returns Tokens between left and right. + */ + getTokensBetween(left: HasLocation, right: HasLocation, padding?: CountOptions): Token[]; + /** + * Checks whether any comments exist or not between the given 2 nodes. + * + * @param left - The node to check. + * @param right - The node to check. + * @returns `true` if one or more comments exist. + */ + commentsExistBetween(left: HasLocation, right: HasLocation): boolean; + /** + * Gets all comment tokens directly before the given node or token. + * @param nodeOrToken The AST node or token to check for adjacent comment tokens. + * @returns An array of comments in occurrence order. + */ + getCommentsBefore(nodeOrToken: HasLocation): Token[]; + /** + * Gets all comment tokens directly after the given node or token. + * @param nodeOrToken The AST node or token to check for adjacent comment tokens. + * @returns An array of comments in occurrence order. + */ + getCommentsAfter(nodeOrToken: HasLocation): Token[]; + /** + * Gets all comment tokens inside the given node. + * @param node The AST node to get the comments for. + * @returns An array of comments in occurrence order. + */ + getCommentsInside(node: HasLocation): Token[]; } -export interface VueParserServices { - getTemplateBodyTokenStore: () => TokenStore; - defineTemplateBodyVisitor?: ( - templateBodyVisitor: TemplateListener, - scriptVisitor?: RuleListener, - ) => RuleListener; - defineCustomBlocksVisitor?: ( - context: RuleContext, +/** + * The type of basic ESLint custom parser. + * e.g. espree + */ +export interface BasicParserObject { + parse(code: string, options: any): R; + parseForESLint: undefined; +}; + +/** + * The type of ESLint custom parser enhanced for ESLint. + * e.g. @babel/eslint-parser, @typescript-eslint/parser + */ +export interface EnhancedParserObject { + parseForESLint(code: string, options: any): R; + parse: undefined; +}; + +/** + * The type of ESLint (custom) parsers. + */ +export type ParserObject = + | EnhancedParserObject + | BasicParserObject; + +export type ESLintCustomBlockParser = ParserObject; + +export interface CustomBlockContext { + getSourceCode(): SourceCode; + sourceCode: SourceCode; + parserServices: any; + getAncestors(): any[]; + getDeclaredVariables(node: any): any[]; + getScope(): any; + markVariableAsUsed(name: string): boolean; + + // Same as the original context. + id: string; + options: any[]; + settings: { [name: string]: any }; + parserPath: string; + parserOptions: any; + getFilename(): string; + report(descriptor: Rule.ReportDescriptor): void; +}; + +type CustomBlockVisitorFactory = (context: CustomBlockContext) => + | { + [key: string]: (...args: any) => void; + } + | null + | undefined; + +export interface ParserServices { + /** + * Define handlers to traverse the template body. + * @param templateBodyVisitor The template body handlers. + * @param scriptVisitor The script handlers. This is optional. + * @param options The options. This is optional. + */ + defineTemplateBodyVisitor( + templateBodyVisitor: { [key: string]: (...args: any) => void }, + scriptVisitor?: { [key: string]: (...args: any) => void }, + options?: { templateBodyTriggerSelector: 'Program' | 'Program:exit' }, + ): RuleListener; + + /** + * Define handlers to traverse the document. + * @param documentVisitor The document handlers. + * @param options The options. This is optional. + */ + defineDocumentVisitor( + documentVisitor: { [key: string]: (...args: any) => void }, + options?: { triggerSelector: 'Program' | 'Program:exit' }, + ): object; - parser: { parseForESLint: (code: string, options: any) => any }, + /** + * Define handlers to traverse custom blocks. + * @param context The rule context. + * @param parser The custom parser. + * @param rule The custom block rule definition + * @param scriptVisitor The script handlers. This is optional. + */ + defineCustomBlocksVisitor( + context: Rule.RuleContext, + parser: ESLintCustomBlockParser, rule: { target: | string | string[] - | ((lang: string | null, customBlock: VAST.VElement) => boolean); + | ((lang: string | null, customBlock: VElement) => boolean); create: CustomBlockVisitorFactory; }, - scriptVisitor?: RuleListener, - ) => RuleListener; - getDocumentFragment?: () => VAST.VDocumentFragment | null; + scriptVisitor: { [key: string]: (...args: any) => void }, + ): { [key: string]: (...args: any) => void }; + + /** + * Get the token store of the template body. + * @returns The token store of template body. + */ + getTemplateBodyTokenStore(): TokenStore; + + /** + * Get the root document fragment. + * @returns The root document fragment. + */ + getDocumentFragment(): VDocumentFragment | null; +} + +export type SourceCode = TokenStore & Omit & { + parserServices: ParserServices | TSSourceCode['parserServices']; +}; + +export interface TemplateBodyVisitor { + [key: string]: (...args: any) => void; } -export type CustomBlockVisitorFactory = ( - context: RuleContext & { - parserServices: RuleContext['parserServices'] & { customBlock: VElement }; - }, -) => RuleListener | null; +export type RuleListener = TSRuleListener; + +export type Range = AST.Range; diff --git a/src/utils.ts b/src/utils.ts deleted file mode 100644 index 94e71ef..0000000 --- a/src/utils.ts +++ /dev/null @@ -1,8 +0,0 @@ -/** DON'T EDIT THIS FILE; was created by scripts. */ -import * as index from './utils/index'; -import * as rule from './utils/rule'; - -export = { - index, - rule, -}; diff --git a/src/utils/compat.ts b/src/utils/compat.ts new file mode 100644 index 0000000..e59a7e7 --- /dev/null +++ b/src/utils/compat.ts @@ -0,0 +1,16 @@ +import * as compat from 'eslint-compat-utils'; +import type { RuleContext, SourceCode } from '../types'; + +export function getFilename< + TMessageIds extends string, + TOptions extends readonly unknown[], +>(context: RuleContext): string { + return compat.getFilename(context as never); +} + +export function getSourceCode< + TMessageIds extends string, + TOptions extends readonly unknown[], +>(context: RuleContext): SourceCode { + return compat.getSourceCode(context as never) as never; +} diff --git a/src/utils/config.ts b/src/utils/config.ts new file mode 100644 index 0000000..8b95cfb --- /dev/null +++ b/src/utils/config.ts @@ -0,0 +1,20 @@ +export function createRecommended }>(plugin: T, name: string, flat: boolean) { + const rules = Object.fromEntries(Object.entries(plugin.rules) + .filter(([_key, rule]) => rule.meta.recommended === 'recommended' && !rule.meta.deprecated) + .map(([key]) => [`${name}/${key}`, 2])); + + if (flat) { + return { + plugins: { + [name]: plugin, + }, + rules, + }; + } + else { + return { + plugins: [name], + rules, + }; + } +} diff --git a/src/utils/index.ts b/src/utils/index.ts index ec3293a..5fd93ea 100644 --- a/src/utils/index.ts +++ b/src/utils/index.ts @@ -1,36 +1,5 @@ -import { extname } from 'node:path'; -import type { - RuleContext, - RuleListener, - TemplateListener, -} from '../types'; +export * from './compat'; -const UNEXPECTED_ERROR_LOCATION = { column: 0, line: 1 }; +export * from './rule'; -/** - * Register the given visitor to parser services. - * Borrow from GitHub `vuejs/eslint-plugin-vue` repo - * @see https://github.com/vuejs/eslint-plugin-vue/blob/master/lib/utils/index.js#L54 - */ -export function defineTemplateBodyVisitor( - context: RuleContext, - templateBodyVisitor: TemplateListener, - scriptVisitor?: RuleListener, -): RuleListener { - const sourceCode = context.getSourceCode(); - if (sourceCode.parserServices.defineTemplateBodyVisitor == null) { - const filename = context.getFilename(); - if (extname(filename) === '.vue') { - context.report({ - loc: UNEXPECTED_ERROR_LOCATION, - message: - 'Use the latest vue-eslint-parser. See also https://github.com/vuejs/eslint-plugin-vue#what-is-the-use-the-latest-vue-eslint-parser-error', - }); - } - return {}; - } - return sourceCode.parserServices.defineTemplateBodyVisitor( - templateBodyVisitor, - scriptVisitor, - ); -} +export * from './visitor'; diff --git a/src/utils/rule.ts b/src/utils/rule.ts index 0779249..94376a7 100644 --- a/src/utils/rule.ts +++ b/src/utils/rule.ts @@ -1,5 +1,67 @@ -import type { RuleModule } from '../types'; +import type { RuleContext, RuleListener, RuleModule } from '../types'; +import type { RuleWithMeta, RuleWithMetaAndName } from '@typescript-eslint/utils/eslint-utils'; -export function createRule(module: RuleModule) { - return module; +const blobUrl = 'https://rotki.github.io/eslint-plugin/rules/'; + +/** + * Creates reusable function to create rules with default options and docs URLs. + * + * @param urlCreator Creates a documentation URL for a given rule name. + * @returns Function to create a rule with the docs URL format. + */ +function RuleCreator(urlCreator: (ruleName: string) => string) { + // This function will get much easier to call when this is merged https://github.com/Microsoft/TypeScript/pull/26349 + // TODO - when the above PR lands; add type checking for the context.report `data` property + return function createNamedRule< + TOptions extends readonly unknown[], + TMessageIds extends string, + >({ + meta, + name, + ...rule + }: Readonly>): RuleModule { + return createRule({ + meta: { + ...meta, + docs: { + ...meta.docs, + url: urlCreator(name), + }, + }, + ...rule, + }); + }; +} + +/** + * Creates a well-typed TSESLint custom ESLint rule without a docs URL. + * + * @returns Well-typed TSESLint custom ESLint rule. + * @remarks It is generally better to provide a docs URL function to RuleCreator. + */ +function createRule< + TOptions extends readonly unknown[], + TMessageIds extends string, +>({ + create, + defaultOptions, + meta, +}: Readonly>): RuleModule { + return { + create: (( + context: Readonly>, + ): RuleListener => { + const optionsWithDefault = context.options.map((options, index) => ({ + ...defaultOptions[index] || {}, + ...options || {}, + })) as unknown as TOptions; + return create(context as any, optionsWithDefault); + }) as any, + defaultOptions, + meta: meta as any, + }; } + +export const createEslintRule = RuleCreator( + ruleName => `${blobUrl}${ruleName}`, +) as any as ({ meta, name, ...rule }: Readonly>) => RuleModule; diff --git a/src/utils/visitor.ts b/src/utils/visitor.ts new file mode 100644 index 0000000..286c60f --- /dev/null +++ b/src/utils/visitor.ts @@ -0,0 +1,41 @@ +import { extname } from 'node:path'; +import { getFilename, getSourceCode } from './compat'; +import type { RuleContext, RuleListener, TemplateBodyVisitor } from '../types'; +import type { ReportDescriptor } from '@typescript-eslint/utils/ts-eslint'; + +/** + * Register the given visitor to parser services. from GitHub `vuejs/eslint-plugin-vue` repo + * + * @see https://github.com/vuejs/eslint-plugin-vue/blob/959858c877b4192cb3b289aaeb010e9355211306/lib/utils/index.js#L2223 + */ +export function defineTemplateBodyVisitor< + TMessageIds extends string, + TOptions extends readonly unknown[], +>( + context: RuleContext, + templateBodyVisitor: TemplateBodyVisitor, + scriptVisitor?: TemplateBodyVisitor, + options?: { templateBodyTriggerSelector: 'Program' | 'Program:exit' }, +): RuleListener { + const sourceCode = getSourceCode(context); + const parserServices = sourceCode.parserServices; + if ( + !('defineTemplateBodyVisitor' in parserServices) + || parserServices.defineTemplateBodyVisitor == null + ) { + const filename = getFilename(context); + if (extname(filename) === '.vue') { + context.report({ + loc: { column: 0, line: 1 }, + message: + 'Use the latest vue-eslint-parser. See also https://github.com/vuejs/eslint-plugin-vue#what-is-the-use-the-latest-vue-eslint-parser-error', + } as unknown as ReportDescriptor); + } + return {}; + } + return parserServices.defineTemplateBodyVisitor( + templateBodyVisitor, + scriptVisitor, + options, + ); +} diff --git a/tests/rules/no-deprecated-classes.ts b/tests/rules/no-deprecated-classes.ts index 715e2b3..fbe7821 100644 --- a/tests/rules/no-deprecated-classes.ts +++ b/tests/rules/no-deprecated-classes.ts @@ -1,5 +1,5 @@ import { RuleTester } from 'eslint'; -import rule from '../../src/rules/no-deprecated-classes'; +import rule, { RULE_NAME } from '../../src/rules/no-deprecated-classes'; const vueParser = require.resolve('vue-eslint-parser'); @@ -8,7 +8,7 @@ const tester = new RuleTester({ parserOptions: { ecmaVersion: 2015 }, }); -tester.run('no-deprecated-classes', rule as never, { +tester.run(RULE_NAME, rule as never, { valid: [ '', '', diff --git a/tsconfig.json b/tsconfig.json index b34e91f..a76866d 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,10 +1,13 @@ { "compilerOptions": { - "target": "es2021", - "lib": ["es2021"], - "module": "Node16", - "moduleResolution": "node16", + "target": "es2020", + "lib": ["esnext"], + "module": "esnext", + "moduleResolution": "Bundler", "resolveJsonModule": true, + "types": [ + "vitest/globals" + ], "strict": true, "outDir": "./dist", "sourceMap": true, @@ -12,5 +15,11 @@ "forceConsistentCasingInFileNames": true, "skipLibCheck": true }, - "include": ["src", "tests/rules/**/*", "scripts", "docs/.vitepress/config.mts"] + "include": [ + "src", + "tests/rules/**/*", + "scripts", + "docs/.vitepress/config.mts", + "*.config.ts" + ] } diff --git a/vitest.config.ts b/vitest.config.ts new file mode 100644 index 0000000..ab921bc --- /dev/null +++ b/vitest.config.ts @@ -0,0 +1,9 @@ +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + test: { + globals: true, + reporters: 'dot', + include: ['tests/**/*.ts'], + }, +});