diff --git a/.changeset/cg-eslint-config.md b/.changeset/cg-eslint-config.md new file mode 100644 index 0000000..6497cf8 --- /dev/null +++ b/.changeset/cg-eslint-config.md @@ -0,0 +1,13 @@ +--- +"@naverpay/eslint-config": major +--- + +- Support ESLint 9 and Flat Config +- **Config Changes**: + - Renamed `front` to `react` + - Removed `typescript/next` config + - Added `strict` config that extends `unicorn` and `sonarjs` + - Added YAML lint in `node` and `react` configs + - Disallowed unused imports in `node` and `react` configs + - Enforced consistent usage of type imports in `typescript` and `react` configs +- diff --git a/.changeset/cg-eslint-plugin.md b/.changeset/cg-eslint-plugin.md new file mode 100644 index 0000000..61f8335 --- /dev/null +++ b/.changeset/cg-eslint-plugin.md @@ -0,0 +1,6 @@ +--- +"@naverpay/eslint-plugin": major +--- + +- Support ESLint 9 and Flat Config +- diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 88ea040..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: '@naverpay/eslint-config/node', -} diff --git a/.github/workflows/add-assignee.yml b/.github/workflows/add-assignee.yml index 66b6b5b..5cb5038 100644 --- a/.github/workflows/add-assignee.yml +++ b/.github/workflows/add-assignee.yml @@ -1,36 +1,35 @@ name: 'add assignee to pull request automatically' on: - pull_request: - types: [ opened, ready_for_review, synchronize, reopened ] - branches: - - '**' - - '!main' + pull_request: + types: [opened, ready_for_review, synchronize, reopened] + branches: + - '**' + - '!main' jobs: - ADD_ASSIGNEE_TO_PULL_REQUEST: - runs-on: ubuntu-latest - steps: - - name: Add Assignee to pr - uses: actions/github-script@v3 - with: - script: | - try { - const result = await github.pulls.get({ - owner: context.repo.owner, - repo: context.repo.repo, - pull_number: context.payload.number, - }) + ADD_ASSIGNEE_TO_PULL_REQUEST: + runs-on: ubuntu-latest + steps: + - name: Add Assignee to pr + uses: actions/github-script@v3 + with: + script: | + try { + const result = await github.pulls.get({ + owner: context.repo.owner, + repo: context.repo.repo, + pull_number: context.payload.number, + }) - console.log(result) - - if (result.data.assignee === null) { - await github.issues.addAssignees({ - owner: context.repo.owner, - repo: context.repo.repo, - issue_number: context.issue.number, - assignees: context.actor, - }) - } - } catch (err) { - console.error(`Check Pull Request Error ${err}`) - } + console.log(result) + if (result.data.assignee === null) { + await github.issues.addAssignees({ + owner: context.repo.owner, + repo: context.repo.repo, + issue_number: context.issue.number, + assignees: context.actor, + }) + } + } catch (err) { + console.error(`Check Pull Request Error ${err}`) + } diff --git a/.github/workflows/changeset-publish.yml b/.github/workflows/changeset-publish.yml index a8892de..6434aec 100644 --- a/.github/workflows/changeset-publish.yml +++ b/.github/workflows/changeset-publish.yml @@ -1,9 +1,9 @@ name: changeset-publish on: - push: - branches: - - main + push: + branches: + - main concurrency: ${{ github.workflow }}-${{ github.ref }} diff --git a/.github/workflows/changesets-detect-add.yml b/.github/workflows/changesets-detect-add.yml index e4be61b..e4d65db 100644 --- a/.github/workflows/changesets-detect-add.yml +++ b/.github/workflows/changesets-detect-add.yml @@ -3,7 +3,7 @@ on: pull_request: branches: - '**' - types: [opened, reopened, synchronize] + types: [opened, reopened, synchronize, labeled, unlabeled] jobs: detect-add: diff --git a/.gitignore b/.gitignore index 3dfecc0..7c6d9c0 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,5 @@ # etc .idea -.vscode # Dependency directories node_modules/ diff --git a/.husky/commit-msg b/.husky/commit-msg deleted file mode 100755 index 48bfb59..0000000 --- a/.husky/commit-msg +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -. "$(dirname "$0")/_/husky.sh" - -npx --yes @naverpay/commit-helper@latest $1 diff --git a/.husky/pre-commit b/.husky/pre-commit deleted file mode 100755 index 0312b76..0000000 --- a/.husky/pre-commit +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env sh -. "$(dirname -- "$0")/_/husky.sh" - -npx lint-staged \ No newline at end of file diff --git a/.npmignore b/.npmignore index d2c749b..fee2c9e 100644 --- a/.npmignore +++ b/.npmignore @@ -1,3 +1,2 @@ .github -.changeset -.husky \ No newline at end of file +.changeset \ No newline at end of file diff --git a/.vscode/extensions.json b/.vscode/extensions.json new file mode 100644 index 0000000..03bdb9e --- /dev/null +++ b/.vscode/extensions.json @@ -0,0 +1,8 @@ +{ + "recommendations": [ + "esbenp.prettier-vscode", + "dbaeumer.vscode-eslint", + "editorconfig.editorconfig", + "DavidAnson.vscode-markdownlint" + ] +} diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..b1c37a2 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,10 @@ +{ + "editor.codeActionsOnSave": { + "source.fixAll.eslint": "explicit", + "source.fixAll.markdownlint": "explicit" + }, + "editor.defaultFormatter": "esbenp.prettier-vscode", + "editor.formatOnSave": true, + "typescript.tsdk": "node_modules/typescript/lib", + "typescript.preferences.importModuleSpecifier": "non-relative" +} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 0000000..be6dfe1 --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,8 @@ +import naverpay from '@naverpay/eslint-config' + +export default [ + { + ignores: ['**/dist/**'], + }, + ...naverpay.configs.node, +] diff --git a/lefthook.yml b/lefthook.yml new file mode 100644 index 0000000..aca98c6 --- /dev/null +++ b/lefthook.yml @@ -0,0 +1,23 @@ +# Configure lefthook +# @see https://github.com/evilmartians/lefthook/blob/master/docs/configuration.md + +# Note: commit-msg hook takes a single parameter, +# the name of the file that holds the proposed commit log message. +# @see https://github.com/evilmartians/lefthook/blob/master/docs/configuration.md#git-arguments +commit-msg: + commands: + commit-helper: + run: 'npx --yes @naverpay/commit-helper {1}' + +pre-commit: + parallel: true + commands: + lint: + glob: '*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,yaml,yml}' + run: pnpm eslint {staged_files} + prettier: + glob: '*.{js,cjs,mjs,jsx,ts,cts,mts,tsx,json,yaml,yml}' + run: pnpm prettier --check {staged_files} + markdownlit: + glob: '*.md' + run: pnpm markdownlint {staged_files} diff --git a/package.json b/package.json index 52bda80..0548162 100644 --- a/package.json +++ b/package.json @@ -8,35 +8,29 @@ }, "description": "code-style for naverpay", "scripts": { - "prepare": "husky install", - "lint": "eslint '**/*.{js,jsx,ts,tsx}'", - "lint:fix": "pnpm run lint --fix", - "prettier": "prettier --check '**/*.{json,yaml,md,ts,tsx,js,jsx}'", - "prettier:fix": "prettier --write '**/*.{json,yaml,md,ts,tsx,js,jsx}'", + "postinstall": "lefthook install", + "build": "turbo build", + "prelint": "pnpm run build", + "lint": "eslint", + "lint:fix": "eslint --fix", + "prettier": "prettier --check '**/*.{json,yaml,yml,md,ts,tsx,js,jsx}'", + "prettier:fix": "prettier --write '**/*.{json,yaml,yml,md,ts,tsx,js,jsx}'", "markdownlint": "markdownlint '**/*.md' '#.changeset' '#**/CHANGELOG.md'", "markdownlint:fix": "markdownlint --fix '**/*.md' '#.changeset' '#**/CHANGELOG.md'", - "test": "turbo run test", - "release": "changeset publish" - }, - "lint-staged": { - "**/*.{json,yaml,md,ts,tsx,js,jsx}": "prettier --check", - "**/*.{ts,tsx,js,jsx}": "eslint", - "**/*.{css,scss}": "stylelint" + "test": "turbo test", + "test:watch": "turbo test:watch", + "release": "pnpm build && changeset publish", + "release:canary": "pnpm build && changeset publish --tag canary" }, "devDependencies": { - "@babel/preset-react": "^7.24.7", "@changesets/cli": "^2.26.2", "@naverpay/eslint-config": "workspace:*", - "@naverpay/eslint-plugin": "workspace:*", "@naverpay/markdown-lint": "workspace:*", "@naverpay/prettier-config": "workspace:*", "@naverpay/stylelint-config": "workspace:*", - "glob": "^9.3.4", - "husky": "^8.0.3", - "jest": "^29.5.0", - "lint-staged": "^15.0.1", + "lefthook": "^1.9.3", "prettier": "^3.2.5", - "turbo": "^1.10.16", + "turbo": "^2.3.3", "typescript": "^5.2.2" }, "packageManager": "pnpm@9.1.3", diff --git a/packages/editorconfig/package.json b/packages/editorconfig/package.json index 80a72d5..8d7badd 100644 --- a/packages/editorconfig/package.json +++ b/packages/editorconfig/package.json @@ -3,8 +3,6 @@ "version": "0.0.4", "description": "editorconfig for naverpay", "scripts": { - "version": "pnpm version", - "deploy": "pnpm publish", "postinstall": "node index.js" }, "author": "@NaverPayDev/frontend", diff --git a/packages/eslint-config/README.md b/packages/eslint-config/README.md index 06bf940..35f4cfe 100644 --- a/packages/eslint-config/README.md +++ b/packages/eslint-config/README.md @@ -2,30 +2,33 @@ 네이버페이 스타일 가이드에 맞게 lint rule을 커스텀하여 제공합니다. -## 설치 방법 +## 사용 방법 ```bash npm install @naverpay/eslint-config -D ``` -## 사용 방법 +프로젝트 환경에 알맞는 config를 import해 사용합니다. -프로젝트 환경에 알맞는 config를 extend 합니다. +- `node` - JS로 작성된 node 환경에서 사용 +- `typescript` - TS로 작성된 환경에서 사용 + [Note: `@typescript-eslint` 룰 중 일부는 `yaml`룰과 충돌할 수 있으니 유의하시기 바랍니다.](https://github.com/NaverPayDev/code-style/commit/948890376bb250d975e50d5f82e418a3eb50bb7c#diff-d6e0200228324b775c1bd5390161c9d64f8a4581b542d5e93463abe457cd73caR6-R15) +- `react` - TS로 작성된 react17+ 환경에서 사용 +- `strict` - 보다 엄격한 룰을 원하는 환경에서 위 config와 함께 사용 -- **@naverpay/eslint-config/front** - - JS로 작성된 react17+ 환경에서 사용합니다. -- **@naverpay/eslint-config/node** - - JS로 작성된 node 환경에서 사용합니다. -- **@naverpay/eslint-config/typescript** - - TS로 작성된 react17+ 환경에서 사용합니다. -- **@naverpay/eslint-config/typescript/next** - - TS로 작성된 Next12+ 환경에서 사용합니다. +예시 `eslint.config.js` -```jsonc -// .eslintrc -{ - "extends": ["@naverpay/eslint-config/typescript"] -} +```js +import naverpay from '@naverpay/eslint-config' + +export default [ + { + ignores: ['**/dist/**'], + }, + ...naverpay.configs.node, + ...naverpay.configs.typescript, + ...naverpay.configs.strict, +] ``` ## CLI @@ -36,13 +39,13 @@ package.json에 스크립트를 추가하여 lint 검사를 할 수 있습니다 // package.json { "scripts": { - "lint": "eslint '**/*.{js,jsx,ts,tsx}'", - "lint:fix": "eslint '**/*.{js,jsx,ts,tsx}' --fix", + "lint": "eslint '**/*.{js,jsx,ts,tsx,yaml,yml}'", + "lint:fix": "eslint '**/*.{js,jsx,ts,tsx,yaml,yml}' --fix", } } ``` -> [husky](https://github.com/typicode/husky) & [lint-staged](https://github.com/lint-staged/lint-staged)를 사용해서 commit 또는 push 전에 스타일 확인을 자동화할 것을 권장합니다. +> [lefthook](https://github.com/evilmartians/lefthook)을 사용해서 commit 또는 push 전에 스타일 확인을 자동화할 것을 권장합니다. ## Integrating with IDE @@ -64,6 +67,16 @@ package.json에 스크립트를 추가하여 lint 검사를 할 수 있습니다 } ``` +#### Typescript + +만약 typescript 를 사용 중이라면 아래의 설정을 활성화해주세요. + +```json +{ + "typescript.preferences.preferTypeOnlyAutoImports": true +} +``` + ### WebStorm Settings > Language > JavaScript > Code Quality > ESLint > Automatic ESLint configuration 을 설정합니다. diff --git a/packages/eslint-config/custom/index.js b/packages/eslint-config/custom/index.js index 02416f3..97f2f57 100644 --- a/packages/eslint-config/custom/index.js +++ b/packages/eslint-config/custom/index.js @@ -1,4 +1,6 @@ -const importOrder = ({ruleSeverities = 'error', pathGroups = []} = {}) => [ +import {commonBaseRules, commonExcludes} from './typescript/naming-convention.js' + +export const importOrder = ({ruleSeverities = 'error', pathGroups = []} = {}) => [ ruleSeverities, { groups: ['builtin', 'external', 'internal', ['parent', 'sibling'], 'index', 'type'], // 그룹간 require/import 순서 @@ -24,8 +26,7 @@ const importOrder = ({ruleSeverities = 'error', pathGroups = []} = {}) => [ }, ] -const {commonBaseRules, commonExcludes} = require('./typescript/naming-convention') -const typescriptNamingConvention = ({ +export const typescriptNamingConvention = ({ ruleSeverities = 'warn', customRules = [], baseRules = commonBaseRules, @@ -52,8 +53,3 @@ const typescriptNamingConvention = ({ return [ruleSeverities, ...rules] } - -module.exports = { - importOrder, - typescriptNamingConvention, -} diff --git a/packages/eslint-config/custom/typescript/naming-convention.js b/packages/eslint-config/custom/typescript/naming-convention.js index ac0bc85..90f6017 100644 --- a/packages/eslint-config/custom/typescript/naming-convention.js +++ b/packages/eslint-config/custom/typescript/naming-convention.js @@ -1,5 +1,6 @@ -const commonExcludes = ['_*', '__html', 'Component'] -const commonBaseRules = [ +export const commonExcludes = ['_*', '__html', 'Component'] + +export const commonBaseRules = [ { selector: 'default', format: ['camelCase'], @@ -66,8 +67,3 @@ const commonBaseRules = [ modifiers: ['requiresQuotes'], }, ] - -module.exports = { - commonExcludes, - commonBaseRules, -} diff --git a/packages/eslint-config/front.js b/packages/eslint-config/front.js deleted file mode 100644 index f72670d..0000000 --- a/packages/eslint-config/front.js +++ /dev/null @@ -1,25 +0,0 @@ -module.exports = { - parser: '@babel/eslint-parser', - extends: ['./recommends', './recommends/react', './rules/front'].map(require.resolve), - env: { - browser: true, - jest: true, - es2023: true, - }, - parserOptions: { - allowImportExportEverywhere: true, - sourceType: 'module', - requireConfigFile: false, - babelOptions: { - plugins: ['@babel/plugin-proposal-class-properties', '@babel/plugin-transform-react-jsx'], - }, - }, - settings: { - 'import/resolver': { - node: { - moduleDirectory: ['node_modules', 'src'], - }, - }, - }, - reportUnusedDisableDirectives: true, -} diff --git a/packages/eslint-config/index.js b/packages/eslint-config/index.js new file mode 100644 index 0000000..b310eba --- /dev/null +++ b/packages/eslint-config/index.js @@ -0,0 +1,18 @@ +import node from './node/index.js' +import pkg from './package.json' +import react from './react/index.js' +import strict from './strict/index.js' +import typescript from './typescript/index.js' + +export default { + meta: { + name: pkg.name, + version: pkg.version, + }, + configs: { + node, + react, + typescript, + strict, + }, +} diff --git a/packages/eslint-config/node.js b/packages/eslint-config/node.js deleted file mode 100644 index 20c0b19..0000000 --- a/packages/eslint-config/node.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = { - parser: '@babel/eslint-parser', - extends: ['./recommends', './rules/node'].map(require.resolve), - env: { - commonjs: true, - node: true, - jest: true, - es2023: true, - }, - globals: { - Atomics: 'readonly', - SharedArrayBuffer: 'readonly', - }, - parserOptions: { - requireConfigFile: false, - }, - reportUnusedDisableDirectives: true, -} diff --git a/packages/eslint-config/node/configs.js b/packages/eslint-config/node/configs.js new file mode 100644 index 0000000..58b4b91 --- /dev/null +++ b/packages/eslint-config/node/configs.js @@ -0,0 +1,12 @@ +import js from '@eslint/js' +import eslintConfigPrettier from 'eslint-config-prettier' +import eslintPluginYml from 'eslint-plugin-yml' +import neostandard from 'neostandard' + +export default [ + js.configs.recommended, + ...neostandard({noStyle: true}), + eslintConfigPrettier, + ...eslintPluginYml.configs['flat/recommended'], + ...eslintPluginYml.configs['flat/prettier'], +] diff --git a/packages/eslint-config/node/index.js b/packages/eslint-config/node/index.js new file mode 100644 index 0000000..43d87be --- /dev/null +++ b/packages/eslint-config/node/index.js @@ -0,0 +1,25 @@ +import globals from 'globals' + +import configs from './configs.js' +import rules from './rules/index.js' + +export default [ + ...configs, + ...rules, + { + languageOptions: { + globals: { + ...globals.commonjs, + ...globals.node, + ...globals.jest, + ...globals.vitest, + ...globals.es2023, + Atomics: 'readonly', + SharedArrayBuffer: 'readonly', + }, + }, + linterOptions: { + reportUnusedDisableDirectives: true, + }, + }, +] diff --git a/packages/eslint-config/node/rules/import.js b/packages/eslint-config/node/rules/import.js new file mode 100644 index 0000000..27ecb1b --- /dev/null +++ b/packages/eslint-config/node/rules/import.js @@ -0,0 +1,21 @@ +import importPlugin from 'eslint-plugin-import' +import unusedImports from 'eslint-plugin-unused-imports' + +import {importOrder} from '../../custom/index.js' + +export default { + plugins: {import: importPlugin, 'unused-imports': unusedImports}, + rules: { + /** + * Enforce a convention in the order of require() / import statements + * @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md + */ + 'import/order': importOrder(), + + /** + * Disallow unused imports + * @see https://github.com/sweepline/eslint-plugin-unused-imports/blob/master/docs/rules/no-unused-imports.md + */ + 'unused-imports/no-unused-imports': 'error', + }, +} diff --git a/packages/eslint-config/node/rules/index.js b/packages/eslint-config/node/rules/index.js new file mode 100644 index 0000000..0569a06 --- /dev/null +++ b/packages/eslint-config/node/rules/index.js @@ -0,0 +1,5 @@ +import importConfig from './import.js' +import style from './style.js' +import variable from './variable.js' + +export default [style, variable, importConfig] diff --git a/packages/eslint-config/node/rules/style.js b/packages/eslint-config/node/rules/style.js new file mode 100644 index 0000000..3459e10 --- /dev/null +++ b/packages/eslint-config/node/rules/style.js @@ -0,0 +1,62 @@ +import nodePlugin from 'eslint-plugin-n' + +export default { + plugins: { + n: nodePlugin, + }, + rules: { + /** + * Require the use of === and !== + * @see https://eslint.org/docs/latest/rules/eqeqeq + */ + eqeqeq: ['error', 'smart'], + + /** + * Disallow the use of console + * @see https://eslint.org/docs/latest/rules/no-console + */ + 'no-console': 'error', + + /** + * Disallow variable declarations from shadowing variables declared in the outer scope + * @see https://eslint.org/docs/latest/rules/no-shadow + */ + 'no-shadow': 'error', + + /** + * Enforce consistent spacing inside braces + * @see https://eslint.org/docs/latest/rules/object-curly-spacing + */ + 'object-curly-spacing': ['error', 'never'], + + /** + * Require quotes around object literal property names + * @see https://eslint.org/docs/latest/rules/quote-props + */ + 'quote-props': ['warn', 'as-needed'], + + /** + * Disallow assignments that can lead to race conditions due to usage of await or yield + * @see https://eslint.org/docs/latest/rules/require-atomic-updates + */ + 'require-atomic-updates': 'off', + + /** + * Enforce dot notation except snakecase + * @see https://eslint.org/docs/latest/rules/dot-notation + */ + 'dot-notation': ['error', {allowPattern: '^[a-zA-Z]+(_[a-zA-Z]+)+$'}], + + /** + * Require error handling in callbacks + * @see https://eslint.org/docs/latest/rules/handle-callback-err + */ + 'n/handle-callback-err': ['error', '^(err|error)$'], + + /** + * Disallow string concatenation with __dirname and __filename + * @see https://eslint.org/docs/latest/rules/no-path-concat + */ + 'n/no-path-concat': 'error', + }, +} diff --git a/packages/eslint-config/node/rules/variable.js b/packages/eslint-config/node/rules/variable.js new file mode 100644 index 0000000..c816b54 --- /dev/null +++ b/packages/eslint-config/node/rules/variable.js @@ -0,0 +1,27 @@ +export default { + rules: { + /** + * Enforce camelcase naming convention + * @see https://eslint.org/docs/latest/rules/camelcase + */ + camelcase: 'off', + + /** + * Disallow reassigning function parameters + * @see https://eslint.org/docs/latest/rules/no-param-reassign + */ + 'no-param-reassign': 'error', + + /** + * Disallow unused variables + * @see https://eslint.org/docs/latest/rules/no-unused-vars + */ + 'no-unused-vars': ['error', {ignoreRestSiblings: true, argsIgnorePattern: '^_', varsIgnorePattern: '^_'}], + + /** + * Disallow the use of undeclared variables unless mentioned in global comments + * @see https://eslint.org/docs/latest/rules/no-undef + */ + 'no-undef': ['error'], + }, +} diff --git a/packages/eslint-config/package.json b/packages/eslint-config/package.json index b65d770..70c9634 100644 --- a/packages/eslint-config/package.json +++ b/packages/eslint-config/package.json @@ -2,33 +2,25 @@ "name": "@naverpay/eslint-config", "version": "1.0.8", "description": "eslint config for naverpay", - "main": "typescript/index.js", - "scripts": { - "test": "jest --config ./jest.config.js", - "version": "pnpm version", - "deploy": "pnpm publish" - }, - "dependencies": { - "eslint-plugin-import": ">=2.25 <2.27" + "type": "module", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.mjs", + "exports": { + ".": { + "import": "./dist/esm/index.mjs", + "require": "./dist/cjs/index.js", + "default": "./dist/cjs/index.js" + } }, - "peerDependencies": { - "@babel/core": "^7.14.6", - "@babel/eslint-parser": "^7.14.7", - "@babel/plugin-proposal-class-properties": "^7.14.5", - "@babel/plugin-transform-react-jsx": "^7.14.5", - "@next/eslint-plugin-next": ">=12", - "@typescript-eslint/eslint-plugin": ">=7", - "@typescript-eslint/parser": ">=7", - "eslint": ">=8 <9", - "eslint-config-eslint": "^7.0.0", - "eslint-config-prettier": "^9.0.0", - "eslint-config-standard": "^17.1.0", - "eslint-plugin-jsx-a11y": "^6.7.1", - "eslint-plugin-node": "^11.1.0", - "eslint-plugin-promise": "^6.1.1", - "eslint-plugin-react": "^7.33.2", - "eslint-plugin-react-hooks": "^4.6.0", - "@naverpay/eslint-plugin": "workspace:*" + "files": [ + "dist" + ], + "scripts": { + "clean": "rm -rf dist", + "prebuild": "pnpm run clean", + "build": "rollup -c", + "test": "vitest run", + "test:watch": "vitest watch" }, "author": "@NaverPayDev/frontend", "repository": { @@ -40,7 +32,36 @@ "keywords": [ "naverpay", "eslint", - "eslintconfig" + "eslintconfig", + "eslint-config" ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "@eslint/eslintrc": "^3.2.0", + "@eslint/js": "^9.15.0", + "@naverpay/eslint-plugin": "workspace:*", + "eslint-config-prettier": "^9.1.0", + "eslint-plugin-import": ">=2.31.0", + "eslint-plugin-jsx-a11y": "^6.10.2", + "eslint-plugin-n": "^17.14.0", + "eslint-plugin-react": "^7.37.2", + "eslint-plugin-react-hooks": "^5.0.0", + "eslint-plugin-sonarjs": "^3.0.1", + "eslint-plugin-unicorn": "^56.0.1", + "eslint-plugin-unused-imports": "^4.1.4", + "eslint-plugin-yml": "^1.16.0", + "globals": "^15.14.0", + "neostandard": "^0.11.9", + "typescript-eslint": "^8.18.0" + }, + "devDependencies": { + "@rollup/plugin-json": "^6.1.0", + "builtin-modules": "^4.0.0", + "eslint": "^9.17.0", + "rollup": "^4.27.4", + "vitest": "^2.1.5" + }, + "peerDependencies": { + "eslint": ">=9" + } } diff --git a/packages/eslint-config/react/configs.js b/packages/eslint-config/react/configs.js new file mode 100644 index 0000000..d64bce7 --- /dev/null +++ b/packages/eslint-config/react/configs.js @@ -0,0 +1,22 @@ +import path from 'path' +import {fileURLToPath} from 'url' + +import {FlatCompat} from '@eslint/eslintrc' +import js from '@eslint/js' +import eslintConfigPrettier from 'eslint-config-prettier' +import neostandard from 'neostandard' + +// mimic CommonJS variables -- not needed if using CommonJS +const __filename = fileURLToPath(import.meta.url) +const __dirname = path.dirname(__filename) + +const compat = new FlatCompat({ + baseDirectory: __dirname, +}) + +export default [ + js.configs.recommended, + ...neostandard({noStyle: true}), + eslintConfigPrettier, + ...compat.extends('plugin:react/recommended', 'plugin:react/jsx-runtime', 'plugin:react-hooks/recommended'), +] diff --git a/packages/eslint-config/react/index.js b/packages/eslint-config/react/index.js new file mode 100644 index 0000000..0d34f76 --- /dev/null +++ b/packages/eslint-config/react/index.js @@ -0,0 +1,26 @@ +import globals from 'globals' + +import configs from './configs.js' +import rules from './rules/index.js' +import typescript from '../typescript/index.js' +import yaml from '../yaml/index.js' + +export default [ + ...configs, + ...typescript, + ...rules, + ...yaml, + { + languageOptions: { + globals: { + ...globals.browser, + ...globals.jest, + ...globals.vitest, + ...globals.es2023, + }, + }, + linterOptions: { + reportUnusedDisableDirectives: true, + }, + }, +] diff --git a/packages/eslint-config/react/rules/import.js b/packages/eslint-config/react/rules/import.js new file mode 100644 index 0000000..dde038c --- /dev/null +++ b/packages/eslint-config/react/rules/import.js @@ -0,0 +1,47 @@ +import naverpay from '@naverpay/eslint-plugin' +import importPlugin from 'eslint-plugin-import' +import unusedImports from 'eslint-plugin-unused-imports' + +import {importOrder} from '../../custom/index.js' + +export default { + plugins: {naverpay, import: importPlugin, 'unused-imports': unusedImports}, + rules: { + /** + * Enforce a convention in the order of require() / import statements + * @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md + */ + 'import/order': importOrder(), + + /** + * In exporting files, this rule checks if there is default export or not + * @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/prefer-default-export.md + */ + 'import/prefer-default-export': 'off', + + /** + * Disallow default import + * @see https://github.com/NaverPayDev/code-style/blob/main/packages/eslint-plugin/docs/prevent-default-import.md + */ + 'naverpay/prevent-default-import': ['error', {packages: ['react']}], + + /** + * Disallow specified modules when loaded by import + * @see https://eslint.org/docs/latest/rules/no-restricted-imports + */ + 'no-restricted-imports': [ + 'error', + { + name: 'lodash', + message: + 'lodash는 CommonJS로 작성되어 있어 트리쉐이킹이 되지 않아 번들 사이즈를 크게 합니다. lodash/* 형식으로 import 해주세요.', + }, + ], + + /** + * Disallow unused imports + * @see https://github.com/sweepline/eslint-plugin-unused-imports/blob/master/docs/rules/no-unused-imports.md + */ + 'unused-imports/no-unused-imports': 'error', + }, +} diff --git a/packages/eslint-config/react/rules/index.js b/packages/eslint-config/react/rules/index.js new file mode 100644 index 0000000..953fc23 --- /dev/null +++ b/packages/eslint-config/react/rules/index.js @@ -0,0 +1,9 @@ +import importConfig from './import.js' +import jsxA11y from './jsx-a11y.js' +import node from './node.js' +import reactHooks from './react-hooks.js' +import react from './react.js' +import style from './style.js' +import variable from './variable.js' + +export default [style, variable, react, reactHooks, jsxA11y, importConfig, node] diff --git a/packages/eslint-config/react/rules/jsx-a11y.js b/packages/eslint-config/react/rules/jsx-a11y.js new file mode 100644 index 0000000..fd836ba --- /dev/null +++ b/packages/eslint-config/react/rules/jsx-a11y.js @@ -0,0 +1,36 @@ +import jsxA11ly from 'eslint-plugin-jsx-a11y' + +export default { + plugins: {'jsx-a11y': jsxA11ly}, + rules: { + /** + * Enforce that all elements that require alternative text have meaningful information to relay back to the end user + * @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md + */ + 'jsx-a11y/alt-text': 'error', + + /** + * Enforce onClick is accompanied by at least one of the following: onKeyUp, onKeyDown, onKeyPress + * @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md + */ + 'jsx-a11y/click-events-have-key-events': 'off', + + /** + * The semantic value can then be expressed to a user via assistive technology + * @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-static-element-interactions.md + */ + 'jsx-a11y/no-static-element-interactions': 'off', + + /** + * A non-interactive element does not support event handlers (mouse and key handlers) + * @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-interactions.md + */ + 'jsx-a11y/no-noninteractive-element-interactions': 'off', + + /** + * Enforce that a label tag has a text label and an associated control + * @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-associated-control.md + */ + 'jsx-a11y/label-has-associated-control': 'error', + }, +} diff --git a/packages/eslint-config/react/rules/node.js b/packages/eslint-config/react/rules/node.js new file mode 100644 index 0000000..a9f1c47 --- /dev/null +++ b/packages/eslint-config/react/rules/node.js @@ -0,0 +1,14 @@ +import nodePlugin from 'eslint-plugin-n' + +export default { + plugins: { + n: nodePlugin, + }, + rules: { + /** + * When a function is named cb or callback, then it must be invoked with a first argument that is undefined, null, an Error class, or a subclass or Error + * @see https://github.com/eslint-community/eslint-plugin-n/blob/master/docs/rules/no-callback-literal.md + */ + 'n/no-callback-literal': 'off', + }, +} diff --git a/packages/eslint-config/react/rules/react-hooks.js b/packages/eslint-config/react/rules/react-hooks.js new file mode 100644 index 0000000..bf21689 --- /dev/null +++ b/packages/eslint-config/react/rules/react-hooks.js @@ -0,0 +1,14 @@ +import reactHooks from 'eslint-plugin-react-hooks' + +export default { + plugins: { + 'react-hooks': reactHooks, + }, + rules: { + /** + * Checks effect dependencies + * @see https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md + */ + 'react-hooks/exhaustive-deps': 'error', + }, +} diff --git a/packages/eslint-config/react/rules/react.js b/packages/eslint-config/react/rules/react.js new file mode 100644 index 0000000..f6d3d3e --- /dev/null +++ b/packages/eslint-config/react/rules/react.js @@ -0,0 +1,173 @@ +import react from 'eslint-plugin-react' + +export default { + plugins: { + react, + }, + rules: { + /** + * Disallow missing displayName in a React component definition + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md + */ + 'react/display-name': 'off', + + /** + * Enforce or disallow spaces inside of curly braces in JSX attributes and expressions + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-child-element-spacing.md + */ + 'react/jsx-child-element-spacing': 'off', + + /** + * Enforce closing bracket location in JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md + */ + 'react/jsx-closing-bracket-location': 'off', + + /** + * Enforce closing tag location for multiline JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md + */ + 'react/jsx-closing-tag-location': 'off', + + /** + * Enforce consistent linebreaks in curly braces in JSX attributes and expressions + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md + */ + 'react/jsx-curly-newline': 'off', + + /** + * Enforce or disallow spaces inside of curly braces in JSX attributes and expressions + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md + */ + 'react/jsx-curly-spacing': 'off', + + /** + * Enforce or disallow spaces around equal signs in JSX attributes + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md + */ + 'react/jsx-equals-spacing': 'off', + + /** + * Enforce proper position of the first property in JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md + */ + 'react/jsx-first-prop-new-line': 'off', + + /** + * Enforce JSX indentation + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md + */ + 'react/jsx-indent': 'off', + + /** + * Enforce props indentation in JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md + */ + 'react/jsx-indent-props': 'off', + + /** + * Enforce maximum of props on a single line in JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md + */ + 'react/jsx-max-props-per-line': 'off', + + /** + * Require one JSX element per line + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-one-expression-per-line.md + */ + 'react/jsx-one-expression-per-line': 'off', + + /** + * Disallow multiple spaces between inline JSX props + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-multi-spaces.md + */ + 'react/jsx-props-no-multi-spaces': 'off', + + /** + * Enforce spacing before closing bracket in JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md + */ + 'react/jsx-space-before-closing': 'off', + + /** + * Enforce whitespace in and around the JSX opening and closing brackets + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md + */ + 'react/jsx-tag-spacing': 'off', + + /** + * Disallow missing parentheses around multiline JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md + */ + 'react/jsx-wrap-multilines': 'off', + + /** + * Disallow file extensions that may contain JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md + */ + 'react/jsx-filename-extension': 'off', + + /** + * Disallow JSX prop spreading + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md + */ + 'react/jsx-props-no-spreading': 'off', + + /** + * Enforce props alphabetical sorting + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md + */ + 'react/jsx-sort-props': [ + 'warn', + { + noSortAlphabetically: true, + shorthandFirst: false, + callbacksLast: false, + reservedFirst: true, + }, + ], + + /** + * Disallow missing props validation in a React component definition + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prop-types.md + */ + 'react/prop-types': 'off', + + /** + * Enforce class component state initialization style + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md + */ + 'react/state-in-constructor': 'off', + + /** + * Enforces where React component static properties should be positioned + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md + */ + 'react/static-property-placement': 'off', + + /** + * Disallow usage of Array index in keys + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md + */ + 'react/no-array-index-key': 'off', + + /** + * Enforce event handler naming conventions in JSX + * @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md + */ + 'react/jsx-handler-names': [ + 'warn', + { + eventHandlerPrefix: '(on|handle)', + eventHandlerPropPrefix: '(on|handle)', + checkLocalVariables: true, + checkInlineFunction: false, + }, + ], + }, + settings: { + react: { + version: 'detect', + }, + }, +} diff --git a/packages/eslint-config/react/rules/style.js b/packages/eslint-config/react/rules/style.js new file mode 100644 index 0000000..9aa1909 --- /dev/null +++ b/packages/eslint-config/react/rules/style.js @@ -0,0 +1,56 @@ +export default { + rules: { + /** + * Require return statements to either always or never specify values + * @see https://eslint.org/docs/latest/rules/consistent-return + */ + 'consistent-return': 'off', + + /** + * Enforce consistent brace style for all control statements + * @see https://eslint.org/docs/latest/rules/curly + */ + curly: ['error', 'all'], + + /** + * Disallow the use of console + * @see https://eslint.org/docs/latest/rules/no-console + */ + 'no-console': 'error', + + /** + * Disallow if statements as the only statement in else blocks + * @see https://eslint.org/docs/latest/rules/no-lonely-if + */ + 'no-lonely-if': 'off', + + /** + * Disallow specified modules when loaded by import + * @see https://eslint.org/docs/latest/rules/no-restricted-imports + */ + 'no-restricted-imports': [ + 'warn', + { + patterns: ['../*', './*', '!*.scss'], + }, + ], + + /** + * Disallow variable declarations from shadowing variables declared in the outer scope + * @see https://eslint.org/docs/latest/rules/no-shadow + */ + 'no-shadow': 'error', + + /** + * Disallow assignments that can lead to race conditions due to usage of await or yield + * @see https://eslint.org/docs/latest/rules/require-atomic-updates + */ + 'require-atomic-updates': 'off', + + /** + * Enforce dot notation except snakecase + * @see https://eslint.org/docs/latest/rules/dot-notation + */ + 'dot-notation': ['error', {allowPattern: '^[a-zA-Z]+(_[a-zA-Z]+)+$'}], + }, +} diff --git a/packages/eslint-config/react/rules/variable.js b/packages/eslint-config/react/rules/variable.js new file mode 100644 index 0000000..bc01973 --- /dev/null +++ b/packages/eslint-config/react/rules/variable.js @@ -0,0 +1,21 @@ +export default { + rules: { + /** + * Enforce camelcase naming convention + * @see https://eslint.org/docs/latest/rules/camelcase + */ + camelcase: 'off', + + /** + * Disallow reassigning function parameters + * @see https://eslint.org/docs/latest/rules/no-param-reassign + */ + 'no-param-reassign': 'error', + + /** + * Disallow the use of variables before they are defined + * @see https://eslint.org/docs/latest/rules/no-use-before-define + */ + 'no-use-before-define': ['error', {functions: false, classes: true, variables: true}], + }, +} diff --git a/packages/eslint-config/recommends/index.js b/packages/eslint-config/recommends/index.js deleted file mode 100644 index 9b28dd8..0000000 --- a/packages/eslint-config/recommends/index.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - extends: [ - 'eslint:recommended', // https://github.com/eslint/eslint/blob/main/packages/js/src/configs/eslint-recommended.js (Enables the rules recommended by the ESLint team) - 'standard', // https://github.com/standard/eslint-config-standard/blob/v16.0.3/eslintrc.json (JavaScript Standard Style) - 'prettier', // https://github.com/prettier/eslint-config-prettier/blob/main/index.js (Turns off all rules relative with Prettier) - ], -} diff --git a/packages/eslint-config/recommends/next.js b/packages/eslint-config/recommends/next.js deleted file mode 100644 index 4a26656..0000000 --- a/packages/eslint-config/recommends/next.js +++ /dev/null @@ -1,5 +0,0 @@ -module.exports = { - extends: [ - 'plugin:@next/next/recommended', // https://github.com/vercel/next.js/blob/canary/packages/eslint-plugin-next/src/index.ts#L27-L52 - ], -} diff --git a/packages/eslint-config/recommends/react.js b/packages/eslint-config/recommends/react.js deleted file mode 100644 index 87ec225..0000000 --- a/packages/eslint-config/recommends/react.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - extends: [ - 'plugin:react/recommended', // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/configs/recommended.js (React specific linting rules for eslint) - 'plugin:react/jsx-runtime', // https://github.com/jsx-eslint/eslint-plugin-react/blob/master/configs/jsx-runtime.js (Disable new JSX transform from React 17 relevant rules) - 'plugin:react-hooks/recommended', // https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/src/index.js#L14-L21 (enforces the Rules of Hooks) - ], -} diff --git a/packages/eslint-config/recommends/typescript.js b/packages/eslint-config/recommends/typescript.js deleted file mode 100644 index d78a85e..0000000 --- a/packages/eslint-config/recommends/typescript.js +++ /dev/null @@ -1,6 +0,0 @@ -module.exports = { - extends: [ - 'plugin:@typescript-eslint/recommended', // https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/recommended.ts - 'plugin:@typescript-eslint/stylistic', // https://github.com/typescript-eslint/typescript-eslint/blob/main/packages/eslint-plugin/src/configs/stylistic.ts - ], -} diff --git a/packages/eslint-config/rollup.config.js b/packages/eslint-config/rollup.config.js new file mode 100644 index 0000000..a11cba2 --- /dev/null +++ b/packages/eslint-config/rollup.config.js @@ -0,0 +1,33 @@ +import fs from 'fs' +import path from 'path' + +import json from '@rollup/plugin-json' +import builtins from 'builtin-modules' + +/** + * @type {import('rollup').RollupOptions} + */ +export default ['esm', 'cjs'].map((module) => { + const pkg = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf8')) + + return { + input: 'index.js', + output: { + format: module, + dir: 'dist/' + module, + ...(module === 'esm' + ? { + entryFileNames: `[name]${path.extname('./dist/' + module + '/index.mjs')}`, + preserveModulesRoot: path.dirname('index.js'), + preserveModules: true, + interop: 'esModule', + } + : { + exports: 'auto', + interop: 'auto', + }), + }, + external: [...Object.keys(pkg?.dependencies || []), ...Object.keys(pkg?.peerDependencies || []), ...builtins], + plugins: [json()], + } +}) diff --git a/packages/eslint-config/rules/front/import.js b/packages/eslint-config/rules/front/import.js deleted file mode 100644 index 4757596..0000000 --- a/packages/eslint-config/rules/front/import.js +++ /dev/null @@ -1,29 +0,0 @@ -const {importOrder} = require('../../custom') - -module.exports = { - plugins: ['@naverpay/eslint-plugin'], - rules: { - /** Enforce a convention in the order of require() / import statements - @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/order.md */ - 'import/order': importOrder(), - - /** In exporting files, this rule checks if there is default export or not - @see https://github.com/import-js/eslint-plugin-import/blob/main/docs/rules/prefer-default-export.md */ - 'import/prefer-default-export': 'off', - - /** - * @see https://github.com/NaverPayDev/code-style/blob/main/packages/eslint-plugin/docs/prevent-default-import.md */ - '@naverpay/prevent-default-import': ['error', {packages: ['react']}], - - /** Disallow specified modules when loaded by import - @see https://eslint.org/docs/latest/rules/no-restricted-imports */ - 'no-restricted-imports': [ - 'error', - { - name: 'lodash', - message: - 'lodash는 CommonJS로 작성되어 있어 트리쉐이킹이 되지 않아 번들 사이즈를 크게 합니다. lodash/* 형식으로 import 해주세요.', - }, - ], - }, -} diff --git a/packages/eslint-config/rules/front/index.js b/packages/eslint-config/rules/front/index.js deleted file mode 100644 index 04c3527..0000000 --- a/packages/eslint-config/rules/front/index.js +++ /dev/null @@ -1,11 +0,0 @@ -module.exports = { - extends: [ - './style', - './variable', - './react.js', - './react-hooks.js', - './jsx-a11y.js', - './import.js', - './node.js', - ].map(require.resolve), -} diff --git a/packages/eslint-config/rules/front/jsx-a11y.js b/packages/eslint-config/rules/front/jsx-a11y.js deleted file mode 100644 index 7dbf017..0000000 --- a/packages/eslint-config/rules/front/jsx-a11y.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - plugins: ['jsx-a11y'], - rules: { - /** Enforce that all elements that require alternative text have meaningful information to relay back to the end user - @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/alt-text.md */ - 'jsx-a11y/alt-text': 'error', - - /** Enforce onClick is accompanied by at least one of the following: onKeyUp, onKeyDown, onKeyPress - @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/click-events-have-key-events.md */ - 'jsx-a11y/click-events-have-key-events': 'off', - - /** The semantic value can then be expressed to a user via assistive technology - @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-static-element-interactions.md */ - 'jsx-a11y/no-static-element-interactions': 'off', - - /** A non-interactive element does not support event handlers (mouse and key handlers) - @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/no-noninteractive-element-interactions.md */ - 'jsx-a11y/no-noninteractive-element-interactions': 'off', - - /** Enforce that a label tag has a text label and an associated control - @see https://github.com/jsx-eslint/eslint-plugin-jsx-a11y/blob/main/docs/rules/label-has-associated-control.md */ - 'jsx-a11y/label-has-associated-control': 'error', - }, -} diff --git a/packages/eslint-config/rules/front/node.js b/packages/eslint-config/rules/front/node.js deleted file mode 100644 index dad0ed3..0000000 --- a/packages/eslint-config/rules/front/node.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - rules: { - /** When a function is named cb or callback, then it must be invoked with a first argument that is undefined, null, an Error class, or a subclass or Error - @see https://github.com/eslint-community/eslint-plugin-n/blob/master/docs/rules/no-callback-literal.md */ - 'n/no-callback-literal': 'off', - }, -} diff --git a/packages/eslint-config/rules/front/react-hooks.js b/packages/eslint-config/rules/front/react-hooks.js deleted file mode 100644 index 2e7fecd..0000000 --- a/packages/eslint-config/rules/front/react-hooks.js +++ /dev/null @@ -1,7 +0,0 @@ -module.exports = { - rules: { - /** Checks effect dependencies - @see https://github.com/facebook/react/blob/main/packages/eslint-plugin-react-hooks/README.md */ - 'react-hooks/exhaustive-deps': 'error', - }, -} diff --git a/packages/eslint-config/rules/front/react.js b/packages/eslint-config/rules/front/react.js deleted file mode 100644 index b792c78..0000000 --- a/packages/eslint-config/rules/front/react.js +++ /dev/null @@ -1,120 +0,0 @@ -module.exports = { - rules: { - /** Disallow missing displayName in a React component definition - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/display-name.md */ - 'react/display-name': 'off', - - /** Enforce or disallow spaces inside of curly braces in JSX attributes and expressions - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-child-element-spacing.md */ - 'react/jsx-child-element-spacing': 'off', - - /** Enforce closing bracket location in JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-bracket-location.md */ - 'react/jsx-closing-bracket-location': 'off', - - /** Enforce closing tag location for multiline JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-closing-tag-location.md */ - 'react/jsx-closing-tag-location': 'off', - - /** Enforce consistent linebreaks in curly braces in JSX attributes and expressions - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-newline.md */ - 'react/jsx-curly-newline': 'off', - - /** Enforce or disallow spaces inside of curly braces in JSX attributes and expressions - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-curly-spacing.md */ - 'react/jsx-curly-spacing': 'off', - - /** Enforce or disallow spaces around equal signs in JSX attributes - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-equals-spacing.md */ - 'react/jsx-equals-spacing': 'off', - - /** Enforce proper position of the first property in JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-first-prop-new-line.md */ - 'react/jsx-first-prop-new-line': 'off', - - /** Enforce JSX indentation - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent.md */ - 'react/jsx-indent': 'off', - - /** Enforce props indentation in JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-indent-props.md */ - 'react/jsx-indent-props': 'off', - - /** Enforce maximum of props on a single line in JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-max-props-per-line.md */ - 'react/jsx-max-props-per-line': 'off', - - /** Require one JSX element per line - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-one-expression-per-line.md */ - 'react/jsx-one-expression-per-line': 'off', - - /** Disallow multiple spaces between inline JSX props - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-multi-spaces.md */ - 'react/jsx-props-no-multi-spaces': 'off', - - /** Enforce spacing before closing bracket in JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-space-before-closing.md */ - 'react/jsx-space-before-closing': 'off', - - /** Enforce whitespace in and around the JSX opening and closing brackets - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-tag-spacing.md */ - 'react/jsx-tag-spacing': 'off', - - /** Disallow missing parentheses around multiline JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-wrap-multilines.md */ - 'react/jsx-wrap-multilines': 'off', - - /** Disallow file extensions that may contain JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-filename-extension.md */ - 'react/jsx-filename-extension': 'off', - - /** Disallow JSX prop spreading - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-props-no-spreading.md */ - 'react/jsx-props-no-spreading': 'off', - - /** Enforce props alphabetical sorting - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-sort-props.md */ - 'react/jsx-sort-props': [ - 'warn', - { - noSortAlphabetically: true, - shorthandFirst: false, - callbacksLast: false, - reservedFirst: true, - }, - ], - - /** Disallow missing props validation in a React component definition - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/prop-types.md */ - 'react/prop-types': 'off', - - /** Enforce class component state initialization style - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/state-in-constructor.md */ - 'react/state-in-constructor': 'off', - - /** Enforces where React component static properties should be positioned - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/static-property-placement.md */ - 'react/static-property-placement': 'off', - - /** Disallow usage of Array index in keys - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/no-array-index-key.md */ - 'react/no-array-index-key': 'off', - - /** Enforce event handler naming conventions in JSX - @see https://github.com/jsx-eslint/eslint-plugin-react/blob/master/docs/rules/jsx-handler-names.md */ - 'react/jsx-handler-names': [ - 'warn', - { - eventHandlerPrefix: '(on|handle)', - eventHandlerPropPrefix: '(on|handle)', - checkLocalVariables: true, - checkInlineFunction: false, - }, - ], - }, - settings: { - react: { - version: 'detect', - }, - }, -} diff --git a/packages/eslint-config/rules/front/style.js b/packages/eslint-config/rules/front/style.js deleted file mode 100644 index fe3e763..0000000 --- a/packages/eslint-config/rules/front/style.js +++ /dev/null @@ -1,40 +0,0 @@ -module.exports = { - rules: { - /** Require return statements to either always or never specify values - @see https://eslint.org/docs/latest/rules/consistent-return */ - 'consistent-return': 'off', - - /** Enforce consistent brace style for all control statements - @see https://eslint.org/docs/latest/rules/curly */ - curly: ['error', 'all'], - - /** Disallow the use of console - @see https://eslint.org/docs/latest/rules/no-console */ - 'no-console': 'error', - - /** Disallow if statements as the only statement in else blocks - @see https://eslint.org/docs/latest/rules/no-lonely-if */ - 'no-lonely-if': 'off', - - /** Disallow specified modules when loaded by import - @see https://eslint.org/docs/latest/rules/no-restricted-imports */ - 'no-restricted-imports': [ - 'warn', - { - patterns: ['../*', './*', '!*.scss'], - }, - ], - - /** Disallow variable declarations from shadowing variables declared in the outer scope - @see https://eslint.org/docs/latest/rules/no-shadow */ - 'no-shadow': 'error', - - /** Disallow assignments that can lead to race conditions due to usage of await or yield - @see https://eslint.org/docs/latest/rules/require-atomic-updates */ - 'require-atomic-updates': 'off', - - /** Enforce dot notation except snakecase - @see https://eslint.org/docs/latest/rules/dot-notation */ - 'dot-notation': ['error', {allowPattern: '^[a-zA-Z]+(_[a-zA-Z]+)+$'}], - }, -} diff --git a/packages/eslint-config/rules/front/variable.js b/packages/eslint-config/rules/front/variable.js deleted file mode 100644 index a7bb18e..0000000 --- a/packages/eslint-config/rules/front/variable.js +++ /dev/null @@ -1,23 +0,0 @@ -module.exports = { - rules: { - /** Enforce camelcase naming convention - @see https://eslint.org/docs/latest/rules/camelcase */ - camelcase: 'off', - - /** Disallow reassigning function parameters - @see https://eslint.org/docs/latest/rules/no-param-reassign */ - 'no-param-reassign': 'error', - - /** Disallow the use of variables before they are defined - @see https://eslint.org/docs/latest/rules/no-use-before-define */ - 'no-use-before-define': ['error', {functions: false, classes: true, variables: true}], - - /** Disallow unused variables - @see https://eslint.org/docs/latest/rules/no-unused-vars - @see https://www.npmjs.com/package/eslint-plugin-unused-imports */ - 'no-unused-vars': [ - 'error', - {ignoreRestSiblings: true, argsIgnorePattern: '^_', varsIgnorePattern: '(React|^_)'}, - ], - }, -} diff --git a/packages/eslint-config/rules/node/index.js b/packages/eslint-config/rules/node/index.js deleted file mode 100644 index 7a6ce59..0000000 --- a/packages/eslint-config/rules/node/index.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - extends: ['./style', './variable'].map(require.resolve), -} diff --git a/packages/eslint-config/rules/node/style.js b/packages/eslint-config/rules/node/style.js deleted file mode 100644 index c290d54..0000000 --- a/packages/eslint-config/rules/node/style.js +++ /dev/null @@ -1,38 +0,0 @@ -module.exports = { - rules: { - /** Require the use of === and !== - @see https://eslint.org/docs/latest/rules/eqeqeq */ - eqeqeq: ['error', 'smart'], - - /** Disallow the use of console - @see https://eslint.org/docs/latest/rules/no-console */ - 'no-console': 'error', - - /** Disallow variable declarations from shadowing variables declared in the outer scope - @see https://eslint.org/docs/latest/rules/no-shadow */ - 'no-shadow': 'error', - - /** Enforce consistent spacing inside braces - @see https://eslint.org/docs/latest/rules/object-curly-spacing */ - 'object-curly-spacing': ['error', 'never'], - - /** Require quotes around object literal property names - @see https://eslint.org/docs/latest/rules/quote-props */ - 'quote-props': 'warn', - - /** Disallow assignments that can lead to race conditions due to usage of await or yield - @see https://eslint.org/docs/latest/rules/require-atomic-updates */ - 'require-atomic-updates': 'off', - - /** Enforce dot notation except snakecase - @see https://eslint.org/docs/latest/rules/dot-notation */ - 'dot-notation': ['error', {allowPattern: '^[a-zA-Z]+(_[a-zA-Z]+)+$'}], - /** Require error handling in callbacks - @see https://eslint.org/docs/latest/rules/handle-callback-err */ - 'n/handle-callback-err': ['error', '^(err|error)$'], - - /** Disallow string concatenation with __dirname and __filename - @see https://eslint.org/docs/latest/rules/no-path-concat */ - 'n/no-path-concat': 'error', - }, -} diff --git a/packages/eslint-config/rules/node/variable.js b/packages/eslint-config/rules/node/variable.js deleted file mode 100644 index fe0c68a..0000000 --- a/packages/eslint-config/rules/node/variable.js +++ /dev/null @@ -1,28 +0,0 @@ -module.exports = { - plugins: ['@naverpay/eslint-plugin'], - rules: { - /** Enforce camelcase naming convention - @see https://eslint.org/docs/latest/rules/camelcase */ - camelcase: 'off', - - /** Disallow reassigning function parameters - @see https://eslint.org/docs/latest/rules/no-param-reassign */ - 'no-param-reassign': 'error', - - /** Disallow unused variables - @see https://eslint.org/docs/latest/rules/no-unused-vars - @see https://www.npmjs.com/package/eslint-plugin-unused-imports */ - 'no-unused-vars': [ - 'error', - {ignoreRestSiblings: true, argsIgnorePattern: '^_', varsIgnorePattern: '(React|^_)'}, - ], - - /** - * @see https://github.com/NaverPayDev/code-style/blob/main/packages/eslint-plugin/docs/prevent-default-import.md */ - '@naverpay/prevent-default-import': ['error', {packages: ['react']}], - - /** Disallow the use of undeclared variables unless mentioned in global comments - @see https://eslint.org/docs/latest/rules/no-undef */ - 'no-undef': ['error'], - }, -} diff --git a/packages/eslint-config/rules/typescript/index.js b/packages/eslint-config/rules/typescript/index.js deleted file mode 100644 index 737d9ae..0000000 --- a/packages/eslint-config/rules/typescript/index.js +++ /dev/null @@ -1,91 +0,0 @@ -const {typescriptNamingConvention} = require('../../custom') - -module.exports = { - plugins: ['@naverpay/eslint-plugin'], - rules: { - /** Require let or const instead of var - @see https://eslint.org/docs/latest/rules/no-var */ - 'no-var': 'off', - - /** Disallow variable declarations from shadowing variables declared in the outer scope - @see https://eslint.org/docs/latest/rules/no-shadow */ - 'no-shadow': 'off', - - /** Disallow variable declarations from shadowing variables declared in the outer scope - @see https://typescript-eslint.io/rules/no-shadow */ - '@typescript-eslint/no-shadow': 'error', - - /** Disallow explicit type declarations for variables or parameters initialized to a number, string, or boolean - @see https://typescript-eslint.io/rules/no-inferrable-types */ - '@typescript-eslint/no-inferrable-types': 'off', - - /** Require explicit return types on functions and class methods - @see https://typescript-eslint.io/rules/explicit-function-return-type */ - '@typescript-eslint/explicit-function-return-type': 'off', - - /** Require explicit accessibility modifiers on class properties and methods - @see https://typescript-eslint.io/rules/explicit-member-accessibility */ - '@typescript-eslint/explicit-member-accessibility': ['error', {accessibility: 'no-public'}], - - /** Disallow require statements except in import statements - @see https://typescript-eslint.io/rules/no-var-requires */ - '@typescript-eslint/no-var-requires': 'off', - - /** Disallow the use of variables before they are defined - @see https://eslint.org/docs/latest/rules/no-use-before-define */ - 'no-use-before-define': 'off', - - /** Disallow the use of variables before they are defined - @see https://typescript-eslint.io/rules/no-use-before-define */ - '@typescript-eslint/no-use-before-define': ['error', {functions: false, classes: true}], - - /** Enforce camelcase naming convention - @see https://eslint.org/docs/latest/rules/camelcase */ - camelcase: 'off', - - /** Disallow empty functions - @see https://typescript-eslint.io/rules/no-empty-function */ - '@typescript-eslint/no-empty-function': 'off', - - /** Disallow unused expressions - @see https://eslint.org/docs/latest/rules/no-unused-expressions */ - 'no-unused-expressions': 'off', - - /** Disallow unused expressions - @see https://typescript-eslint.io/rules/no-unused-expressions */ - '@typescript-eslint/no-unused-expressions': [ - 'error', - { - allowShortCircuit: true, - allowTernary: true, - allowTaggedTemplates: true, - }, - ], - - /** Disallow unused variables - @see https://eslint.org/docs/latest/rules/no-unused-vars - @see https://typescript-eslint.io/rules/no-unused-vars - @see https://www.npmjs.com/package/eslint-plugin-unused-imports */ - 'no-unused-vars': 'off', - '@typescript-eslint/no-unused-vars': [ - 'error', - {ignoreRestSiblings: true, argsIgnorePattern: '^_', varsIgnorePattern: '(React|^_)'}, - ], - - /** Disallow the use of undeclared variables unless mentioned in global comments - @see https://eslint.org/docs/latest/rules/no-undef */ - 'no-undef': 'off', - - /** Enforce naming conventions for everything across a codebase - @see https://typescript-eslint.io/rules/naming-convention */ - '@typescript-eslint/naming-convention': typescriptNamingConvention({ - customRules: [ - { - selector: 'parameter', - format: ['camelCase', 'PascalCase', 'snake_case'], - leadingUnderscore: 'allow', - }, - ], - }), - }, -} diff --git a/packages/eslint-config/strict/index.js b/packages/eslint-config/strict/index.js new file mode 100644 index 0000000..87d00e2 --- /dev/null +++ b/packages/eslint-config/strict/index.js @@ -0,0 +1,4 @@ +import sonarjs from 'eslint-plugin-sonarjs' +import unicorn from 'eslint-plugin-unicorn' + +export default [sonarjs.configs.recommended, unicorn.configs['flat/recommended']] diff --git a/packages/eslint-config/tests/custom.test.js b/packages/eslint-config/tests/custom.test.js index b66f114..4ff9337 100644 --- a/packages/eslint-config/tests/custom.test.js +++ b/packages/eslint-config/tests/custom.test.js @@ -1,10 +1,16 @@ -const {importOrder} = require('../custom') -const {checkErrorRule, createLinter} = require('./utils') +import importPlugin from 'eslint-plugin-import' +import {describe, test, expect} from 'vitest' + +import {importOrder} from '../custom/index.js' +import {checkErrorRule, createLinter} from './utils/index.js' describe('custom', () => { describe('import/order', function () { const ruleId = 'import/order' const config = { + plugins: { + import: importPlugin, + }, rules: { 'import/order': importOrder({ ruleSeverities: 'warn', diff --git a/packages/eslint-config/tests/node.test.js b/packages/eslint-config/tests/node.test.js index 82565f2..22c1e56 100644 --- a/packages/eslint-config/tests/node.test.js +++ b/packages/eslint-config/tests/node.test.js @@ -1,5 +1,7 @@ -const config = require('../node') -const {checkErrorRule, createLinter} = require('./utils') +import {describe, test, expect} from 'vitest' + +import config from '../node/index.js' +import {checkErrorRule, createLinter} from './utils/index.js' describe('node', () => { describe('object-curly-spacing', function () { @@ -124,4 +126,28 @@ describe('node', () => { expect(checkErrorRule(result, ruleId)).toBe(true) }) }) + + describe('unused-imports/no-unused-importst', function () { + const ruleId = 'unused-imports/no-unused-importst' + const {lintText} = createLinter({ruleId, config}) + + test('right', async () => { + const result = await lintText(` + import {useEffect} from 'react' + + useEffect(() => { + + }, []) + `) + + expect(result).toHaveLength(0) + }) + test('wrong', async () => { + const result = await lintText(` + import {useEffect} from 'react' + `) + + expect(checkErrorRule(result, ruleId)).toBe(true) + }) + }) }) diff --git a/packages/eslint-config/tests/front.test.js b/packages/eslint-config/tests/react.test.js similarity index 96% rename from packages/eslint-config/tests/front.test.js rename to packages/eslint-config/tests/react.test.js index bc66f0f..502458c 100644 --- a/packages/eslint-config/tests/front.test.js +++ b/packages/eslint-config/tests/react.test.js @@ -1,5 +1,7 @@ -const config = require('../front') -const {checkErrorRule, createLinter} = require('./utils') +import {describe, test, expect} from 'vitest' + +import config from '../react/index.js' +import {checkErrorRule, createLinter} from './utils/index.js' describe('front', () => { describe('jsx-a11y/alt-text', function () { @@ -138,7 +140,6 @@ describe('front', () => { test('right', async () => { const result = await lintText(` import {createReactClass} from 'react' - createReactClass({ // displayName: 'Hello', render: function () { @@ -624,6 +625,29 @@ describe('front', () => { }, []) `) + expect(checkErrorRule(result, ruleId)).toBe(true) + }) + }) + describe('unused-imports/no-unused-importst', function () { + const ruleId = 'unused-imports/no-unused-importst' + const {lintText} = createLinter({ruleId, config}) + + test('right', async () => { + const result = await lintText(` + import {useEffect} from 'react' + + useEffect(() => { + + }, []) + `) + + expect(result).toHaveLength(0) + }) + test('wrong', async () => { + const result = await lintText(` + import {useEffect} from 'react' + `) + expect(checkErrorRule(result, ruleId)).toBe(true) }) }) diff --git a/packages/eslint-config/tests/typescript.test.js b/packages/eslint-config/tests/typescript.test.js index 6ede9a2..e7fb3d1 100644 --- a/packages/eslint-config/tests/typescript.test.js +++ b/packages/eslint-config/tests/typescript.test.js @@ -1,5 +1,7 @@ -const config = require('../typescript') -const {checkErrorRule, createLinter} = require('./utils') +import {describe, test, expect} from 'vitest' + +import config from '../typescript/index.js' +import {checkErrorRule, createLinter} from './utils/index.js' describe('typescript', () => { describe('@typescript-eslint/naming-convention', function () { @@ -319,6 +321,29 @@ describe('typescript', () => { }, []) `) + expect(checkErrorRule(result, ruleId)).toBe(true) + }) + }) + describe('@typescript-eslint/consistent-type-imports', function () { + const ruleId = '@typescript-eslint/consistent-type-imports' + const {lintText} = createLinter({ruleId, config}) + + test('right', async () => { + const result = await lintText(` + import type {ReactNode} from 'react' + + const node: ReactNode | null = null + `) + + expect(result).toHaveLength(0) + }) + test('wrong', async () => { + const result = await lintText(` + import {ReactNode} from 'react' + + const node: ReactNode | null = null + `) + expect(checkErrorRule(result, ruleId)).toBe(true) }) }) diff --git a/packages/eslint-config/tests/utils/index.js b/packages/eslint-config/tests/utils/index.js index 9b01c39..717e7fb 100644 --- a/packages/eslint-config/tests/utils/index.js +++ b/packages/eslint-config/tests/utils/index.js @@ -1,18 +1,8 @@ -const {ESLint} = require('eslint') +import {ESLint} from 'eslint' -const baseConfig = { - root: true, - parser: '@babel/eslint-parser', - env: { - browser: true, - jest: true, - es2023: true, - }, -} - -const createLinter = ({ruleId, config}) => { +export const createLinter = ({ruleId, config}) => { const eslint = new ESLint({ - baseConfig, + overrideConfigFile: true, overrideConfig: config, ignore: false, }) @@ -33,9 +23,7 @@ const createLinter = ({ruleId, config}) => { } } -const checkErrorRule = (messages, ruleId) => messages.every((message) => message.ruleId === ruleId) - -module.exports = { - createLinter, - checkErrorRule, -} +/** + * 빈배열이면 문제 있음 + */ +export const checkErrorRule = (messages, ruleId) => messages.every((message) => message.ruleId === ruleId) diff --git a/packages/eslint-config/typescript/index.js b/packages/eslint-config/typescript/index.js index fa930c7..9dcddfa 100644 --- a/packages/eslint-config/typescript/index.js +++ b/packages/eslint-config/typescript/index.js @@ -1,23 +1,5 @@ -module.exports = { - extends: [ - '../recommends', - '../recommends/react', - '../recommends/typescript', - '../rules/front', - '../rules/typescript', - ].map(require.resolve), - env: { - node: true, - browser: true, - jest: true, - }, - overrides: [ - { - files: ['*.js', '*.jsx'], - rules: { - 'no-undef': 'error', - }, - }, - ], - reportUnusedDisableDirectives: true, -} +import tseslint from 'typescript-eslint' + +import rules from './rules/index.js' + +export default tseslint.config(rules, tseslint.configs.recommended, tseslint.configs.stylistic) diff --git a/packages/eslint-config/typescript/next.js b/packages/eslint-config/typescript/next.js deleted file mode 100644 index b968659..0000000 --- a/packages/eslint-config/typescript/next.js +++ /dev/null @@ -1,24 +0,0 @@ -module.exports = { - extends: [ - '../recommends', - '../recommends/react', - '../recommends/typescript', - '../recommends/next', - '../rules/front', - '../rules/typescript', - ].map(require.resolve), - env: { - node: true, - browser: true, - jest: true, - }, - overrides: [ - { - files: ['*.js', '*.jsx'], - rules: { - 'no-undef': 'error', - }, - }, - ], - reportUnusedDisableDirectives: true, -} diff --git a/packages/eslint-config/typescript/rules/index.js b/packages/eslint-config/typescript/rules/index.js new file mode 100644 index 0000000..912ca9e --- /dev/null +++ b/packages/eslint-config/typescript/rules/index.js @@ -0,0 +1,128 @@ +import tseslint from 'typescript-eslint' + +import {typescriptNamingConvention} from '../../custom/index.js' + +export default [ + { + plugins: { + '@typescript-eslint': tseslint.plugin, + }, + rules: { + /** + * Require let or const instead of var + * @see https://eslint.org/docs/latest/rules/no-var + */ + 'no-var': 'off', + + /** + * Disallow variable declarations from shadowing variables declared in the outer scope + * @see https://typescript-eslint.io/rules/no-shadow + */ + 'no-shadow': 'off', + '@typescript-eslint/no-shadow': 'error', + + /** + * Disallow explicit type declarations for variables or parameters initialized to a number, string, or boolean + * @see https://typescript-eslint.io/rules/no-inferrable-types + */ + '@typescript-eslint/no-inferrable-types': 'off', + + /** + * Require explicit return types on functions and class methods + * @see https://typescript-eslint.io/rules/explicit-function-return-type + */ + '@typescript-eslint/explicit-function-return-type': 'off', + + /** + * Require explicit accessibility modifiers on class properties and methods + * @see https://typescript-eslint.io/rules/explicit-member-accessibility + */ + '@typescript-eslint/explicit-member-accessibility': ['error', {accessibility: 'no-public'}], + + /** + * Disallow require statements except in import statements + * @see https://typescript-eslint.io/rules/no-var-requires + */ + '@typescript-eslint/no-var-requires': 'off', + + /** + * Disallow the use of variables before they are defined + * @see https://eslint.org/docs/latest/rules/no-use-before-define + */ + 'no-use-before-define': 'off', + + /** + * Disallow the use of variables before they are defined + * @see https://typescript-eslint.io/rules/no-use-before-define + */ + '@typescript-eslint/no-use-before-define': ['error', {functions: false, classes: true}], + + /** + * Enforce camelcase naming convention + * @see https://eslint.org/docs/latest/rules/camelcase + */ + camelcase: 'off', + + /** + * Disallow empty functions + * @see https://typescript-eslint.io/rules/no-empty-function + */ + '@typescript-eslint/no-empty-function': 'off', + + /** + * Disallow unused expressions + * @see https://eslint.org/docs/latest/rules/no-unused-expressions + */ + 'no-unused-expressions': 'off', + + /** + * Disallow unused expressions + * @see https://typescript-eslint.io/rules/no-unused-expressions + */ + '@typescript-eslint/no-unused-expressions': [ + 'error', + { + allowShortCircuit: true, + allowTernary: true, + allowTaggedTemplates: true, + }, + ], + + /** + * Disallow unused variables + * @see https://typescript-eslint.io/rules/no-unused-vars + */ + 'no-unused-vars': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + {ignoreRestSiblings: true, argsIgnorePattern: '^_', varsIgnorePattern: '^_'}, + ], + + /** + * Disallow the use of undeclared variables unless mentioned in global comments + * @see https://eslint.org/docs/latest/rules/no-undef + */ + 'no-undef': 'off', + + /** + * Enforce naming conventions for everything across a codebase + * @see https://typescript-eslint.io/rules/naming-convention + */ + '@typescript-eslint/naming-convention': typescriptNamingConvention({ + customRules: [ + { + selector: 'parameter', + format: ['camelCase', 'PascalCase', 'snake_case'], + leadingUnderscore: 'allow', + }, + ], + }), + + /** + * Enforce consistent usage of type imports + * @see https://typescript-eslint.io/rules/consistent-type-imports/ + */ + '@typescript-eslint/consistent-type-imports': ['error'], + }, + }, +] diff --git a/packages/eslint-config/yaml/index.js b/packages/eslint-config/yaml/index.js new file mode 100644 index 0000000..696ccdd --- /dev/null +++ b/packages/eslint-config/yaml/index.js @@ -0,0 +1,16 @@ +import eslintPluginYml from 'eslint-plugin-yml' + +export default [ + ...eslintPluginYml.configs['flat/recommended'], + ...eslintPluginYml.configs['flat/prettier'], + /** + * Disable rules that cause problems with YAML files requiring type information + */ + { + files: ['**/*.yaml', '**/*.yml'], + rules: { + '@typescript-eslint/naming-convention': 'off', + '@typescript-eslint/consistent-type-imports': 'off', + }, + }, +] diff --git a/packages/eslint-plugin/README.md b/packages/eslint-plugin/README.md index 286d2c5..996c4a7 100644 --- a/packages/eslint-plugin/README.md +++ b/packages/eslint-plugin/README.md @@ -10,24 +10,26 @@ npm install @naverpay/eslint-plugin -D ## 사용 방법 -사용하고 싶은 plugin이 있다면 eslint config 파일에서 `@naverpay/eslint-plugin`을 `plugins`에 추가하세요. - -```jsonc -// .eslintrc -{ - "plugins": ["@naverpay/eslint-plugin"] -} -``` - -사용하고 싶은 plugin은 rules에 적용해주세요. - -```jsonc -// .eslintrc -{ - "rules": { - "@naverpay/prevent-default-import": ["error", {"packages": ["react"]}], - } -} +사용하고 싶은 rule이 있다면 eslint.config.js에 아래와 같이 설정해주세요: + +1. plugins에 @naverpay/eslint-plugin을 추가합니다. +2. rules에 사용하고 싶은 규칙을 설정합니다. + +```js +// eslint.config.js +import naverpay from "@naverpay/eslint-plugin"; + +export default [ + { + plugins: { + naverpay + }, + rules: { + // react 패키지에 대해 default import를 금지하는 규칙 + "naverpay/prevent-default-import": ["error", {"packages": ["react"]}] + } + } +]; ``` ## 규칙 diff --git a/packages/eslint-plugin/jest.config.js b/packages/eslint-plugin/jest.config.js deleted file mode 100644 index 1b92b07..0000000 --- a/packages/eslint-plugin/jest.config.js +++ /dev/null @@ -1,4 +0,0 @@ -module.exports = { - rootDir: '../../', - testMatch: ['/packages/eslint-plugin/**/*.test.[jt]s?(x)'], -} diff --git a/packages/eslint-plugin/lib/constants/index.js b/packages/eslint-plugin/lib/constants/index.js index 411b3fe..5270953 100644 --- a/packages/eslint-plugin/lib/constants/index.js +++ b/packages/eslint-plugin/lib/constants/index.js @@ -1,11 +1,5 @@ -const SVG_OPTIMIZED_COMMENT_CONTENT = '@autogenerated optimization completed by @naverpay/optimize-svg-components' -const SVG_OPTIMIZE_COMPLETED_COMMENT = `/* ${SVG_OPTIMIZED_COMMENT_CONTENT} */` -const PROPS_IDENTIFIER_NAME = 'props' -const FIRST_RANGE = [0, 0] - -module.exports = { - PROPS_IDENTIFIER_NAME, - SVG_OPTIMIZED_COMMENT_CONTENT, - SVG_OPTIMIZE_COMPLETED_COMMENT, - FIRST_RANGE, -} +export const SVG_OPTIMIZED_COMMENT_CONTENT = + '@autogenerated optimization completed by @naverpay/optimize-svg-components' +export const SVG_OPTIMIZE_COMPLETED_COMMENT = `/* ${SVG_OPTIMIZED_COMMENT_CONTENT} */` +export const PROPS_IDENTIFIER_NAME = 'props' +export const FIRST_RANGE = [0, 0] diff --git a/packages/eslint-plugin/lib/constants/test-data.js b/packages/eslint-plugin/lib/constants/test-data.js index 5f7aa9d..2859f0b 100644 --- a/packages/eslint-plugin/lib/constants/test-data.js +++ b/packages/eslint-plugin/lib/constants/test-data.js @@ -1,4 +1,4 @@ -const 메모이제이션_컴포넌트 = { +export const 메모이제이션_컴포넌트 = { 컴포넌트_코드: ` import React, {memo} from 'react' import type {SVGStyleProps} from '@naverpay/svg-manager' @@ -80,7 +80,7 @@ const 메모이제이션_컴포넌트 = { 완료된_SVG_코드: '', } -const 다수_FILL_PROPS가_존재하는_컴포넌트 = { +export const 다수_FILL_PROPS가_존재하는_컴포넌트 = { 컴포넌트_코드: ` import React, {memo} from 'react' import type {SVGStyleProps} from '@naverpay/svg-manager' @@ -197,7 +197,7 @@ const 다수_FILL_PROPS가_존재하는_컴포넌트 = { `, } -const PROPS_변수_컴포넌트 = { +export const PROPS_변수_컴포넌트 = { 컴포넌트_코드: ` import React, {memo} from 'react' import type {SVGStyleProps} from '@naverpay/svg-manager' @@ -299,7 +299,7 @@ const PROPS_변수_컴포넌트 = { `, } -const 복잡한_HTML_컴포넌트 = { +export const 복잡한_HTML_컴포넌트 = { 컴포넌트_코드: ` import React, {memo} from 'react' import type {SVGStyleProps} from '@naverpay/svg-manager' @@ -387,7 +387,7 @@ const 복잡한_HTML_컴포넌트 = { `, } -const STROKE에_FILL이_쓰인_컴포넌트 = { +export const STROKE에_FILL이_쓰인_컴포넌트 = { 컴포넌트_코드: ` import {memo} from 'react'; import type {SVGStyleProps} from '@naverpay/svg-manager'; @@ -465,7 +465,7 @@ const STROKE에_FILL이_쓰인_컴포넌트 = { `, } -const ID_PROPS_있는_컴포넌트 = { +export const ID_PROPS_있는_컴포넌트 = { 컴포넌트_코드: ` import {memo} from 'react'; import type {SVGStyleProps} from '@naverpay/svg-manager'; @@ -564,7 +564,7 @@ const ID_PROPS_있는_컴포넌트 = { `, } -const STYLE_OBJECT를_포함한_컴포넌트 = { +export const STYLE_OBJECT를_포함한_컴포넌트 = { 컴포넌트_코드: ` import React, {memo} from 'react' import type {SVGStyleProps} from '@naverpay/svg-manager' @@ -784,7 +784,7 @@ const STYLE_OBJECT를_포함한_컴포넌트 = { `, } -const 함수형_컴포넌트 = { +export const 함수형_컴포넌트 = { 컴포넌트_코드: ` import type {SVGStyleProps} from '@naverpay/svg-manager'; import {getRandomString} from 'getRandomString'; @@ -898,10 +898,10 @@ const 함수형_컴포넌트 = { `, } -const EXPORT_DEFAULT_함수형_컴포넌트 = { +export const EXPORT_DEFAULT_함수형_컴포넌트 = { 컴포넌트_코드: `import React from 'react' import * as CSS from 'csstype' - + export default function IconExample({ fill = '#222', width = '100%', @@ -946,25 +946,13 @@ const EXPORT_DEFAULT_함수형_컴포넌트 = { /> `, 완료된_SVG_코드: ` - `, } - -module.exports = { - 메모이제이션_컴포넌트, - 다수_FILL_PROPS가_존재하는_컴포넌트, - PROPS_변수_컴포넌트, - 복잡한_HTML_컴포넌트, - STROKE에_FILL이_쓰인_컴포넌트, - ID_PROPS_있는_컴포넌트, - STYLE_OBJECT를_포함한_컴포넌트, - 함수형_컴포넌트, - EXPORT_DEFAULT_함수형_컴포넌트, -} diff --git a/packages/eslint-plugin/lib/index.js b/packages/eslint-plugin/lib/index.js index ca892c7..cb66792 100644 --- a/packages/eslint-plugin/lib/index.js +++ b/packages/eslint-plugin/lib/index.js @@ -1,13 +1,24 @@ -'use strict' +import pkg from '../package.json' +import importServerOnly from './rules/import-server-only' +import memoReactComponents from './rules/memo-react-components.js' +import optimizeSvgComponents from './rules/optimize-svg-components.js' +import preventDefaultImport from './rules/prevent-default-import.js' +import sortExports from './rules/sort-exports.js' +import svgUniqueId from './rules/svg-unique-id.js' -// import all rules in lib/rules -module.exports.rules = { - 'memo-react-components': require('./rules/memo-react-components'), - 'optimize-svg-components': require('./rules/optimize-svg-components'), - 'prevent-default-import': require('./rules/prevent-default-import'), - /** @deprecated */ - 'typescript/prevent-default-import': require('./rules/typescript/prevent-default-import'), - 'sort-exports': require('./rules/sort-exports'), - 'svg-unique-id': require('./rules/svg-unique-id'), - 'import-server-only': require('./rules/import-server-only'), +const plugin = { + meta: { + name: pkg.name, + version: pkg.version, + }, + rules: { + 'memo-react-components': memoReactComponents, + 'optimize-svg-components': optimizeSvgComponents, + 'prevent-default-import': preventDefaultImport, + 'sort-exports': sortExports, + 'svg-unique-id': svgUniqueId, + 'import-server-only': importServerOnly, + }, } + +export default plugin diff --git a/packages/eslint-plugin/lib/rules/import-server-only.js b/packages/eslint-plugin/lib/rules/import-server-only.js index 01da7c6..a1181eb 100644 --- a/packages/eslint-plugin/lib/rules/import-server-only.js +++ b/packages/eslint-plugin/lib/rules/import-server-only.js @@ -1,8 +1,8 @@ -const path = require('path') +import path from 'path' -const micromatch = require('micromatch') +import micromatch from 'micromatch' -module.exports = { +export default { meta: { type: 'problem', docs: { diff --git a/packages/eslint-plugin/lib/rules/memo-react-components.js b/packages/eslint-plugin/lib/rules/memo-react-components.js index b1faac2..c99b087 100644 --- a/packages/eslint-plugin/lib/rules/memo-react-components.js +++ b/packages/eslint-plugin/lib/rules/memo-react-components.js @@ -1,7 +1,10 @@ -const {getExportDefaultDeclaration} = require('@naverpay/ast-parser') -const {minimatch} = require('minimatch') +import {getExportDefaultDeclaration} from '@naverpay/ast-parser' +import {minimatch} from 'minimatch' -module.exports = { +/** + * @type {import('eslint').Rule.RuleModule} + */ +export default { meta: { type: 'suggestion', docs: { @@ -20,9 +23,7 @@ module.exports = { ], }, create: function (context) { - const rawFilename = context.getFilename() - const cwd = context.getCwd() - const filename = rawFilename.replace(cwd, '') + const filename = context.filename.replace(context.cwd, '') const isMatched = context.options[0].path.some((pattern) => minimatch(filename, pattern)) diff --git a/packages/eslint-plugin/lib/rules/optimize-svg-components.js b/packages/eslint-plugin/lib/rules/optimize-svg-components.js index 4936a0e..cd52fdc 100644 --- a/packages/eslint-plugin/lib/rules/optimize-svg-components.js +++ b/packages/eslint-plugin/lib/rules/optimize-svg-components.js @@ -1,15 +1,15 @@ -const {getJSXElement, getImportDeclarations, extractComponentProps} = require('@naverpay/ast-parser') -const {minimatch} = require('minimatch') +import {getJSXElement, getImportDeclarations, extractComponentProps} from '@naverpay/ast-parser' +import {minimatch} from 'minimatch' -const {SVG_OPTIMIZED_COMMENT_CONTENT} = require('../constants') -const {isEmpty} = require('../utils') -const {findSpecificImportDeclaration, hasSpecificReturnStatement, getAllComments} = require('../utils/astParser') -const { +import {SVG_OPTIMIZED_COMMENT_CONTENT} from '../constants/index.js' +import {findSpecificImportDeclaration, hasSpecificReturnStatement, getAllComments} from '../utils/astParser.js' +import {isEmpty} from '../utils/index.js' +import { insertCustomImport, svgoOptimize, replacePropsTypeDeclaration, parseSvgComponent, -} = require('../utils/svg/transform') +} from '../utils/svg/transform.js' /** * @@ -97,7 +97,7 @@ const properties = { /** * @type {import('eslint').Rule.RuleModule} */ -module.exports = { +export default { meta: { type: 'suggestion', docs: { @@ -122,9 +122,7 @@ module.exports = { ], }, create: function (context) { - const rawFilename = context.getFilename() - const cwd = context.getCwd() - const filenameWithPath = rawFilename.replace(cwd, '') + const filenameWithPath = context.filename.replace(context.cwd, '') const [filename] = filenameWithPath.split('/').reverse() diff --git a/packages/eslint-plugin/lib/rules/prevent-default-import.js b/packages/eslint-plugin/lib/rules/prevent-default-import.js index 5892849..cdee6cf 100644 --- a/packages/eslint-plugin/lib/rules/prevent-default-import.js +++ b/packages/eslint-plugin/lib/rules/prevent-default-import.js @@ -1,4 +1,4 @@ -const {traverseAllNodes} = require('../utils/astParser') +import {traverseAllNodes} from '../utils/astParser.js' /** 특정 ImportDefaultSpecifier의 멤버변수를 참조하는 노드 목록을 반환 */ const getImportDefaultSpecifierReferences = (importDefaultSpecifier, allNodes) => { @@ -88,7 +88,10 @@ const fixDefaultToNamedImport = ({fixer, memberName, importDefaultSpecifier, imp return fixed } -module.exports = { +/** + * @type {import('eslint').Rule.RuleModule} + */ +export default { meta: { type: 'problem', docs: { diff --git a/packages/eslint-plugin/lib/rules/prevent-default-import.test.js b/packages/eslint-plugin/lib/rules/prevent-default-import.test.js index d212e93..399aaf3 100644 --- a/packages/eslint-plugin/lib/rules/prevent-default-import.test.js +++ b/packages/eslint-plugin/lib/rules/prevent-default-import.test.js @@ -1,858 +1,851 @@ -const {RuleTester} = require('eslint') +import babelParser from '@babel/eslint-parser' +import typescriptParser from '@typescript-eslint/parser' +import {RuleTester} from 'eslint' +import {describe, it} from 'vitest' -const rule = require('./prevent-default-import') +import rule from './prevent-default-import' describe('prevent-default-import', () => { - new RuleTester({ - parserOptions: { - ecmaVersion: 'latest', - sourceType: 'module', - }, - }).run('javascript/prevent-default-import', rule, { - valid: [ - { - code: ` - import {useEffect} from 'react' - import {eq} from 'lodash' - `, - options: [{packages: ['react', 'lodash']}], - }, - ], - invalid: [ - { - // DefaultSpecifier 사용처가 없고 - // ImportSpecifier가 없는 경우 - code: `import React from 'react'`, - options: [{packages: ['react']}], - errors: [ - { - message: "'react' should use named import instead of default import.", - }, - ], - output: ``, - }, - { - // DefaultSpecifier 사용처가 없고 - // ImportSpecifier는 있는 경우 - code: ` - import React, {useEffect, useCallback} from 'react' - - useEffect(() => {}, []) - useCallback(() => {}, []) - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React' is not being used.", - }, - ], - output: ` - import {useEffect, useCallback} from 'react' - - useEffect(() => {}, []) - useCallback(() => {}, []) - `, - }, - { - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하고 있을 경우 - // 이미 ImportSpecifier가 있다면 안에 추가 - code: ` - import React, {memo} from 'react' - - React.useEffect - React.useCallback - memo - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - { - message: "'React.useCallback' should be used as 'useCallback'", - }, - ], - output: ` - import React, {memo, useEffect} from 'react' + it('validates javascript imports', () => { + const tester = new RuleTester({ + languageOptions: { + ecmaVersion: 'latest', + sourceType: 'module', + }, + }) + + tester.run('javascript/prevent-default-import', rule, { + valid: [ + { + code: ` + import {useEffect} from 'react' + import {eq} from 'lodash' + `, + options: [{packages: ['react', 'lodash']}], + }, + ], + invalid: [ + { + // DefaultSpecifier 사용처가 없고 + // ImportSpecifier가 없는 경우 + code: `import React from 'react'`, + options: [{packages: ['react']}], + errors: [ + { + message: "'react' should use named import instead of default import.", + }, + ], + output: ``, + }, + { + // DefaultSpecifier 사용처가 없고 + // ImportSpecifier는 있는 경우 + code: ` + import React, {useEffect, useCallback} from 'react' + + useEffect(() => {}, []) + useCallback(() => {}, []) + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React' is not being used.", + }, + ], + output: ` + import {useEffect, useCallback} from 'react' + + useEffect(() => {}, []) + useCallback(() => {}, []) + `, + }, + { + // DefaultSpecifier를 현재 MemberExpression 외에서 사용하고 있을 경우 + // 이미 ImportSpecifier가 있다면 안에 추가 + code: ` + import React, {memo} from 'react' + + React.useEffect + React.useCallback + memo + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + { + message: "'React.useCallback' should be used as 'useCallback'", + }, + ], + output: ` + import React, {memo, useEffect} from 'react' + + useEffect + React.useCallback + memo + `, + }, + { + // DefaultSpecifier를 현재 MemberExpression 외에서 사용하고 있을 경우 + // 이전에 ImportSpecifier가 없었다면 + code: ` + import React from 'react' - useEffect - React.useCallback - memo - `, - }, - { - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하고 있을 경우 - // 이전에 ImportSpecifier가 없었다면 - code: ` - import React from 'react' - - React.useEffect - React.useCallback - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - { - message: "'React.useCallback' should be used as 'useCallback'", - }, - ], - output: ` - import React, {useEffect} from 'react' + React.useEffect + React.useCallback + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + { + message: "'React.useCallback' should be used as 'useCallback'", + }, + ], + output: ` + import React, {useEffect} from 'react' - useEffect - React.useCallback - `, - }, - { - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하지 않는 경우 - // 이미 ImportSpecifier가 있다면 안에 추가 - code: ` - import React, {memo} from 'react' - - React.useEffect - memo - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - ], - output: ` - import {memo, useEffect} from 'react' + useEffect + React.useCallback + `, + }, + { + // DefaultSpecifier를 현재 MemberExpression 외에서 사용하지 않는 경우 + // 이미 ImportSpecifier가 있다면 안에 추가 + code: ` + import React, {memo} from 'react' + + React.useEffect + memo + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + ], + output: ` + import {memo, useEffect} from 'react' + + useEffect + memo + `, + }, + { + // DefaultSpecifier를 현재 MemberExpression 외에서 사용하지 않는 경우 + // ImportSpecifier가 없으면 새로 추가 + code: ` + import React from 'react' - useEffect - memo - `, - }, - { - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하지 않는 경우 - // ImportSpecifier가 없으면 새로 추가 - code: ` - import React from 'react' + React.useEffect + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + ], + output: ` + import {useEffect} from 'react' + + useEffect + `, + }, + { + code: ` + import React from 'react' - React.useEffect - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - ], - output: ` - import {useEffect} from 'react' + React.useEffect(() => { + console.log(data) + }, [data]) + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + ], + output: ` + import {useEffect} from 'react' - useEffect - `, - }, - { - code: ` - import React from 'react' - - React.useEffect(() => { - console.log(data) - }, [data]) - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - ], - output: ` - import {useEffect} from 'react' + useEffect(() => { + console.log(data) + }, [data]) + `, + }, + { + code: ` + import React from 'react' + import lodash from 'lodash' + + React.useCallback(() => {}, []) + lodash.eq() + `, + options: [{packages: ['react', 'lodash']}], + errors: [ + { + message: "'React.useCallback' should be used as 'useCallback'", + }, + { + message: "'lodash.eq' should be used as 'eq'", + }, + ], + output: ` + import {useCallback} from 'react' + import lodash from 'lodash' + + useCallback(() => {}, []) + lodash.eq() + `, + }, + { + code: ` + import React, {useEffect} from 'react' - useEffect(() => { - console.log(data) - }, [data]) - `, - }, - { - code: ` - import React from 'react' - import lodash from 'lodash' + React.useEffect(() => {}, []) + useEffect(() => {}, []) + `, + options: [{packages: ['react', 'lodash']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + ], + output: ` + import {useEffect} from 'react' + + useEffect(() => {}, []) + useEffect(() => {}, []) + `, + }, + { + code: ` + import React, {useEffect} from 'react' - React.useCallback(() => {}, []) - lodash.eq() - `, - options: [{packages: ['react', 'lodash']}], - errors: [ - { - message: "'React.useCallback' should be used as 'useCallback'", - }, - { - message: "'lodash.eq' should be used as 'eq'", - }, - ], - output: ` - import {useCallback} from 'react' - import lodash from 'lodash' + React.useEffect(() => {}, []) + React.useEffect(() => {}, []) + useEffect(() => {}, []) + `, + options: [{packages: ['react', 'lodash']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + ], + output: ` + import React, {useEffect} from 'react' - useCallback(() => {}, []) - lodash.eq() - `, - }, - { - code: ` - import React, {useEffect} from 'react' + useEffect(() => {}, []) + useEffect(() => {}, []) + useEffect(() => {}, []) + `, + }, + ], + }) + }) - React.useEffect(() => {}, []) - useEffect(() => {}, []) - `, - options: [{packages: ['react', 'lodash']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - ], - output: ` - import {useEffect} from 'react' + it('validates typescript imports', () => { + const tester = new RuleTester({ + languageOptions: { + parser: typescriptParser, + }, + }) + + tester.run('typescript/prevent-default-import', rule, { + valid: [ + ` + import {ReactNode} from 'react' + interface ComponentProps { + children: ReactNode + } + const Component = (props: ComponentProps) => {} + `, + ], + invalid: [ + { + code: ` + import React, {FC} from 'react' - useEffect(() => {}, []) - useEffect(() => {}, []) - `, - }, - { - code: ` - import React, {useEffect} from 'react' + interface Props { + children: React.ReactNode + } - React.useEffect(() => {}, []) - React.useEffect(() => {}, []) - useEffect(() => {}, []) - `, - options: [{packages: ['react', 'lodash']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - ], - output: ` - import React, {useEffect} from 'react' + const Component: FC = () => {} + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + ], + output: ` + import {FC, ReactNode} from 'react' + + interface Props { + children: ReactNode + } - useEffect(() => {}, []) - useEffect(() => {}, []) - useEffect(() => {}, []) - `, - }, - ], - }) + const Component: FC = () => {} + `, + }, + { + code: ` + import React from 'react' - new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - }).run('typescript/prevent-default-import', rule, { - valid: [ - ` - import {ReactNode} from 'react' - - interface ComponentProps { - children: ReactNode - } - - const Component = (props: ComponentProps) => {} - `, - ], - invalid: [ - { - // [1] - code: ` - import React, {FC} from 'react' - - interface Props { - children: React.ReactNode - } - - const Component: FC = () => {} - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - ], - output: ` - import {FC, ReactNode} from 'react' + interface Props { + children: React.ReactNode + } - interface Props { - children: ReactNode - } + const Component: React.FC = () => {} + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + { + message: "'React.FC' should be used as 'FC'", + }, + ], + output: ` + import React, {ReactNode} from 'react' + + interface Props { + children: ReactNode + } - const Component: FC = () => {} - `, - }, - { - // [2] - code: ` - import React from 'react' + const Component: React.FC = () => {} + `, + }, + { + code: ` + import React from 'react' - interface Props { - children: React.ReactNode - } + interface Props { + children: React.ReactNode + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + ], + output: ` + import {ReactNode} from 'react' + + interface Props { + children: ReactNode + } + `, + }, + { + code: ` + import React, {ReactNode} from 'react' + + interface Props { + child1: React.ReactNode + child2: ReactNode + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + ], + output: ` + import {ReactNode} from 'react' + + interface Props { + child1: ReactNode + child2: ReactNode + } + `, + }, + { + code: ` + import React, {ReactNode} from 'react' + + interface Props { + child1: React.ReactNode + child2: React.ReactNode + child3: ReactNode + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + ], + output: ` + import React, {ReactNode} from 'react' + + interface Props { + child1: ReactNode + child2: ReactNode + child3: ReactNode + } + `, + }, + { + code: ` + import React, {ReactNode, FC} from 'react' + + interface Props { + child1: React.ReactNode + child2: React.FC + child3: ReactNode + child4: FC + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.ReactNode' should be used as 'ReactNode'", + }, + { + message: "'React.FC' should be used as 'FC'", + }, + ], + output: ` + import React, {ReactNode, FC} from 'react' + + interface Props { + child1: ReactNode + child2: FC + child3: ReactNode + child4: FC + } + `, + }, + ], + }) + }) - const Component: React.FC = () => {} - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", + it('validates JSX imports', () => { + const tester = new RuleTester({ + languageOptions: { + parser: babelParser, + parserOptions: { + requireConfigFile: false, + babelOptions: { + presets: ['@babel/preset-react'], }, - { - message: "'React.FC' should be used as 'FC'", + ecmaFeatures: { + jsx: true, }, - ], - output: ` - import React, {ReactNode} from 'react' - - interface Props { - children: ReactNode - } - - const Component: React.FC = () => {} - `, + ecmaVersion: 'latest', + sourceType: 'module', + }, }, - { - // [3] - code: ` - import React, {FC} from 'react' - - interface Props { - children: React.ReactNode - } - - const Component: FC = () => {} - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - ], - output: ` - import {FC, ReactNode} from 'react' + }) - interface Props { - children: ReactNode - } + tester.run('jsx/prevent-default-import', rule, { + valid: [ + { + code: ` + import {StrictMode} from 'react' - const Component: FC = () => {} - `, - }, - { - // [4] - code: ` - import React from 'react' - - interface Props { - children: React.ReactNode - } + const Component = () => { + return + } `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - ], - output: ` - import {ReactNode} from 'react' + options: [{packages: ['react']}], + }, + { + code: ` + import {StrictMode} from 'react' - interface Props { - children: ReactNode - } - `, - }, - { - code: ` - import React, {ReactNode} from 'react' - - interface Props { - child1: React.ReactNode - child2: ReactNode - } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - ], - output: ` - import {ReactNode} from 'react' - - interface Props { - child1: ReactNode - child2: ReactNode - } - `, - }, - { - code: ` - import React, {ReactNode} from 'react' - - interface Props { - child1: React.ReactNode - child2: React.ReactNode - child3: ReactNode - } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - ], - output: ` - import React, {ReactNode} from 'react' - - interface Props { - child1: ReactNode - child2: ReactNode - child3: ReactNode - } - `, - }, - { - code: ` - import React, {ReactNode, FC} from 'react' - - interface Props { - child1: React.ReactNode - child2: React.FC - child3: ReactNode - child4: FC - } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.ReactNode' should be used as 'ReactNode'", - }, - { - message: "'React.FC' should be used as 'FC'", - }, - ], - output: ` - import React, {ReactNode, FC} from 'react' - - interface Props { - child1: ReactNode - child2: FC - child3: ReactNode - child4: FC - } + const Component = () => { + return + } `, - }, - ], - }) - - new RuleTester({ - parser: require.resolve('@babel/eslint-parser'), - parserOptions: { - requireConfigFile: false, - babelOptions: { - presets: ['@babel/preset-react'], - }, - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 'latest', - sourceType: 'module', - }, - }).run('jsx/prevent-default-import', rule, { - valid: [ - { - code: ` - import {StrictMode} from 'react' - - const Component = () => { - return - } - `, - options: [{packages: ['react']}], - }, - { - code: ` - import {StrictMode} from 'react' - - const Component = () => { - return - } - `, - options: [{packages: ['react']}], - }, - ], - invalid: [ - { - code: ` + options: [{packages: ['react']}], + }, + ], + invalid: [ + { + code: ` import React from 'react' const Component = () => { return } `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` + options: [{packages: ['react']}], + errors: [ + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` import {StrictMode} from 'react' const Component = () => { return } `, - }, - { - code: ` + }, + { + code: ` + import React from 'react' + + const Component = () => { + return + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import {StrictMode} from 'react' + + const Component = () => { + return + } + `, + }, + { + code: ` + import React, {useEffect} from 'react' + + const Component = () => { + useEffect(() => { + console.log() + }, []) + + return + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import {useEffect, StrictMode} from 'react' + + const Component = () => { + useEffect(() => { + console.log() + }, []) + + return + } + `, + }, + { + code: ` import React from 'react' const Component = () => { - return + return ( + + + + ) } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import {StrictMode} from 'react' + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.Fragment' should be used as 'Fragment'", + }, + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import React, {StrictMode} from 'react' const Component = () => { - return + return ( + + + + ) } - `, - }, - { - code: ` - import React, {useEffect} from 'react' + `, + }, + { + code: ` + import React, {StrictMode} from 'react' const Component = () => { - useEffect(() => { - console.log() - }, []) - - return + return ( + + + + ) } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import {useEffect, StrictMode} from 'react' + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.Fragment' should be used as 'Fragment'", + }, + ], + output: ` + import {StrictMode, Fragment} from 'react' const Component = () => { - useEffect(() => { - console.log() - }, []) - - return + return ( + + + + ) } - `, - }, - { - code: ` - import React from 'react' - - const Component = () => { - return ( - - - - ) - } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.Fragment' should be used as 'Fragment'", - }, - { - message: "'React.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import React, {StrictMode} from 'react' - - const Component = () => { - return ( - - - - ) - } - `, - }, - { - code: ` - import React, {StrictMode} from 'react' - - const Component = () => { - return ( - - - - ) - } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.Fragment' should be used as 'Fragment'", - }, - ], - output: ` - import {StrictMode, Fragment} from 'react' - - const Component = () => { - return ( - - - - ) - } - `, - }, - { - code: ` - import React from 'react' - import ReactBeta from 'react-beta' - - const Component = () => { - return ( - - - - ) - } - `, - options: [{packages: ['react', 'react-beta']}], - errors: [ - { - message: "'React.Fragment' should be used as 'Fragment'", - }, - { - message: "'ReactBeta.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import {Fragment} from 'react' - import ReactBeta from 'react-beta' - - const Component = () => { - return ( - - - - ) - } - `, - }, - { - code: ` - import {Fragment} from 'react' - import ReactBeta from 'react-beta' - - const Component = () => { - return ( - - - - ) - } - `, - options: [{packages: ['react', 'react-beta']}], - errors: [ - { - message: "'ReactBeta.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import {Fragment} from 'react' - import {StrictMode} from 'react-beta' - - const Component = () => { - return ( - - - - ) - } - `, - }, - { - code: ` - import React, {Fragment} from 'react' - - const Component = () => { - return ( - - - - ) - } - `, - options: [{packages: ['react', 'react-beta']}], - errors: [ - { - message: "'React.Fragment' should be used as 'Fragment'", - }, - ], - output: ` - import {Fragment} from 'react' - - const Component = () => { - return ( - - - - ) - } - `, - }, - ], - }) - - new RuleTester({ - parser: require.resolve('@typescript-eslint/parser'), - parserOptions: { - requireConfigFile: false, - babelOptions: { - presets: ['@babel/preset-react'], - }, - ecmaFeatures: { - jsx: true, - }, - ecmaVersion: 'latest', - sourceType: 'module', - }, - }).run('combined-case/prevent-default-import', rule, { - valid: [ - { - code: ` - import {FC, StrictMode, useEffect} from 'react' - - const Component: FC = () => { - useEffect(() => { - console.log() - }, []) - - return - } - `, - options: [{packages: ['react']}], - }, - ], - invalid: [ - { - code: ` + `, + }, + { + code: ` import React from 'react' + import ReactBeta from 'react-beta' - const Component: React.FC = () => { - React.useEffect(() => { - console.log() - }, []) + const Component = () => { + return ( + + + + ) + } + `, + options: [{packages: ['react', 'react-beta']}], + errors: [ + { + message: "'React.Fragment' should be used as 'Fragment'", + }, + { + message: "'ReactBeta.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import {Fragment} from 'react' + import ReactBeta from 'react-beta' - return + const Component = () => { + return ( + + + + ) } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.FC' should be used as 'FC'", - }, - { - message: "'React.useEffect' should be used as 'useEffect'", - }, - { - message: "'React.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import React, {FC} from 'react' + `, + }, + { + code: ` + import {Fragment} from 'react' + import ReactBeta from 'react-beta' - const Component: FC = () => { - React.useEffect(() => { - console.log() - }, []) + const Component = () => { + return ( + + + + ) + } + `, + options: [{packages: ['react', 'react-beta']}], + errors: [ + { + message: "'ReactBeta.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import {Fragment} from 'react' + import {StrictMode} from 'react-beta' - return + const Component = () => { + return ( + + + + ) } - `, - }, - { - code: ` - import React, {FC} from 'react' + `, + }, + { + code: ` + import React, {Fragment} from 'react' - const Component: FC = () => { - React.useEffect(() => { - console.log() - }, []) + const Component = () => { + return ( + + + + ) + } + `, + options: [{packages: ['react', 'react-beta']}], + errors: [ + { + message: "'React.Fragment' should be used as 'Fragment'", + }, + ], + output: ` + import {Fragment} from 'react' - return + const Component = () => { + return ( + + + + ) } - `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.useEffect' should be used as 'useEffect'", + `, + }, + ], + }) + }) + + it('validates combined cases', () => { + const tester = new RuleTester({ + languageOptions: { + parser: typescriptParser, + parserOptions: { + requireConfigFile: false, + babelOptions: { + presets: ['@babel/preset-react'], }, - { - message: "'React.StrictMode' should be used as 'StrictMode'", + ecmaFeatures: { + jsx: true, }, - ], - output: ` - import React, {FC, useEffect} from 'react' + ecmaVersion: 'latest', + sourceType: 'module', + }, + }, + }) + + tester.run('combined-case/prevent-default-import', rule, { + valid: [ + { + code: ` + import {FC, StrictMode, useEffect} from 'react' const Component: FC = () => { useEffect(() => { console.log() }, []) - return + return } `, - }, - { - code: ` - import React, {FC, useEffect} from 'react' + options: [{packages: ['react']}], + }, + ], + invalid: [ + { + code: ` + import React from 'react' - const Component: FC = () => { - useEffect(() => { + const Component: React.FC = () => { + React.useEffect(() => { console.log() }, []) + return } `, - options: [{packages: ['react']}], - errors: [ - { - message: "'React.StrictMode' should be used as 'StrictMode'", - }, - ], - output: ` - import {FC, useEffect, StrictMode} from 'react' + options: [{packages: ['react']}], + errors: [ + { + message: "'React.FC' should be used as 'FC'", + }, + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import React, {FC} from 'react' const Component: FC = () => { - useEffect(() => { + React.useEffect(() => { console.log() }, []) - return + + return } `, - }, - ], + }, + { + code: ` + import React, {FC} from 'react' + + const Component: FC = () => { + React.useEffect(() => { + console.log() + }, []) + + return + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.useEffect' should be used as 'useEffect'", + }, + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import React, {FC, useEffect} from 'react' + + const Component: FC = () => { + useEffect(() => { + console.log() + }, []) + + return + } + `, + }, + { + code: ` + import React, {FC, useEffect} from 'react' + + const Component: FC = () => { + useEffect(() => { + console.log() + }, []) + return + } + `, + options: [{packages: ['react']}], + errors: [ + { + message: "'React.StrictMode' should be used as 'StrictMode'", + }, + ], + output: ` + import {FC, useEffect, StrictMode} from 'react' + + const Component: FC = () => { + useEffect(() => { + console.log() + }, []) + return + } + `, + }, + ], + }) }) }) diff --git a/packages/eslint-plugin/lib/rules/sort-exports.js b/packages/eslint-plugin/lib/rules/sort-exports.js index bfa0ce7..ebf7415 100644 --- a/packages/eslint-plugin/lib/rules/sort-exports.js +++ b/packages/eslint-plugin/lib/rules/sort-exports.js @@ -1,4 +1,4 @@ -const {minimatch} = require('minimatch') +import {minimatch} from 'minimatch' function getCommentFromNode(context, node) { const beforeComments = context.getSourceCode().getCommentsBefore(node) @@ -110,7 +110,7 @@ function getIdentifier(node) { /** * @type {import('eslint').Rule.RuleModule} */ -module.exports = { +export default { meta: { type: 'suggestion', @@ -132,9 +132,7 @@ module.exports = { ], }, create: function (context) { - const rawFileName = context.getFilename() - const cwd = context.getCwd() - const filename = rawFileName.replace(cwd, '') + const filename = context.filename.replace(context.cwd, '') const { options: [config], } = context diff --git a/packages/eslint-plugin/lib/rules/svg-unique-id.js b/packages/eslint-plugin/lib/rules/svg-unique-id.js index 90b7f8f..5bdde55 100644 --- a/packages/eslint-plugin/lib/rules/svg-unique-id.js +++ b/packages/eslint-plugin/lib/rules/svg-unique-id.js @@ -1,10 +1,10 @@ -const {extractComponentProps, getImportDeclarations} = require('@naverpay/ast-parser') -const {minimatch} = require('minimatch') +import {extractComponentProps, getImportDeclarations} from '@naverpay/ast-parser' +import {minimatch} from 'minimatch' -const {FIRST_RANGE} = require('../constants') -const {findSpecificImportDeclaration, getJSXReturnStatement} = require('../utils/astParser') -const {isEmptyObject, has} = require('../utils/object') -const {getLatestRangeOfProps} = require('../utils/svg/props') +import {FIRST_RANGE} from '../constants/index.js' +import {findSpecificImportDeclaration, getJSXReturnStatement} from '../utils/astParser.js' +import {isEmptyObject, has} from '../utils/object.js' +import {getLatestRangeOfProps} from '../utils/svg/props.js' function insertCustomImport({fixer, scope}) { const result = [] @@ -75,7 +75,7 @@ function insertIdProps(props, globalScope, fixer) { /** * @type {import('eslint').Rule.RuleModule} */ -module.exports = { +export default { meta: { type: 'suggestion', @@ -98,9 +98,7 @@ module.exports = { ], }, create: function (context) { - const rawFileName = context.getFilename() - const cwd = context.getCwd() - const filename = rawFileName.replace(cwd, '') + const filename = context.filename.replace(context.cwd, '') const { options: [config], } = context diff --git a/packages/eslint-plugin/lib/rules/typescript/prevent-default-import.js b/packages/eslint-plugin/lib/rules/typescript/prevent-default-import.js deleted file mode 100644 index 8cd5511..0000000 --- a/packages/eslint-plugin/lib/rules/typescript/prevent-default-import.js +++ /dev/null @@ -1,221 +0,0 @@ -/** @deprecated */ -module.exports = { - meta: { - type: 'problem', - docs: { - description: 'receive a list of packages to prevent default import.', - }, - fixable: 'code', - schema: [ - { - type: 'object', - properties: { - packages: {type: 'array', items: {type: 'string'}}, - }, - }, - ], - }, - create(context) { - const packages = context.options[0]?.packages ?? [] - const allNodes = context.sourceCode.ast.body - - return { - ImportDeclaration(node) { - const defaultSpecifier = node.specifiers.find( - (specifier) => specifier.type === 'ImportDefaultSpecifier', - ) - const hasImportSpecifiers = node.specifiers.some((specifier) => specifier.type === 'ImportSpecifier') - const noDefaultSpecifierReference = - !!defaultSpecifier && - context.sourceCode.getDeclaredVariables(defaultSpecifier)[0]?.references.length === 0 - - packages.forEach((packageName) => { - // DefaultSpecifier 사용처가 없고 - if (packageName === node.source.value && noDefaultSpecifierReference) { - if (!hasImportSpecifiers) { - // ImportSpecifier가 없는 경우 - context.report({ - node, - message: `'${packageName}' should use named import instead of default import.`, - fix: (fixer) => fixer.remove(node), - }) - } else { - // ImportSpecifier는 있는 경우 - context.report({ - node, - message: `'${defaultSpecifier.local.name}' is not being used.`, - fix: (fixer) => { - const fixed = [] - - fixed.push( - fixer.removeRange([defaultSpecifier.range[1], defaultSpecifier.range[1] + 2]), - ) - fixed.push(fixer.remove(defaultSpecifier)) - - return fixed - }, - }) - } - } - }) - }, - MemberExpression(node) { - packages.forEach((packageName) => { - const importDeclaration = allNodes.find( - (currentNode) => - currentNode.type === 'ImportDeclaration' && currentNode.source.value === packageName, - ) - const defaultSpecifier = importDeclaration?.specifiers.find( - (specifier) => specifier.type === 'ImportDefaultSpecifier', - ) - const hasDefaultSpecifier = !!defaultSpecifier - const hasDefaultSpecifierReference = - hasDefaultSpecifier && - context.sourceCode.getDeclaredVariables(defaultSpecifier)[0]?.references.length >= 2 - - if (hasDefaultSpecifier && node.object.name === defaultSpecifier.local.name) { - const ImportSpecifiers = importDeclaration.specifiers.filter( - (specifier) => specifier.type === 'ImportSpecifier', - ) - - context.report({ - node, - message: `'${node.object.name}.${node.property.name}' should be used as '${node.property.name}'`, - fix: (fixer) => { - const fixed = [] - - fixed.push(fixer.replaceText(node, node.property.name)) - - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하고 있을 경우 - if (hasDefaultSpecifierReference) { - // 이미 ImportSpecifier가 있다면 안에 추가 - if (ImportSpecifiers.length > 0) { - const lastImportSpecifier = ImportSpecifiers[ImportSpecifiers.length - 1] - - const alreadyImported = ImportSpecifiers.some( - (importSpecifier) => importSpecifier.local.name === node.property.name, - ) - // ImportSpecifier 안에 이미 존재하는 모듈이면 pass - if (!alreadyImported) { - fixed.push( - fixer.insertTextAfter(lastImportSpecifier, ', ' + node.property.name), - ) - } - } else { - // 이전에 ImportSpecifier가 없었다면 - fixed.push(fixer.insertTextAfter(defaultSpecifier, `, {${node.property.name}}`)) - } - } - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하지 않는 경우 - else { - if (ImportSpecifiers.length > 0) { - // 이미 ImportSpecifier가 있다면 안에 추가 - const lastImportSpecifier = ImportSpecifiers[ImportSpecifiers.length - 1] - fixed.push( - fixer.removeRange([ - defaultSpecifier.range[1], - defaultSpecifier.range[1] + 2, - ]), - ) - fixed.push(fixer.remove(defaultSpecifier)) - - const alreadyImported = ImportSpecifiers.some( - (importSpecifier) => importSpecifier.local.name === node.property.name, - ) - // ImportSpecifier 안에 이미 존재하는 모듈이면 pass - if (!alreadyImported) { - fixed.push( - fixer.insertTextAfter(lastImportSpecifier, ', ' + node.property.name), - ) - } - } else { - // ImportSpecifier가 없으면 새로 추가 - fixed.push(fixer.replaceText(defaultSpecifier, `{${node.property.name}}`)) - } - } - - return fixed - }, - }) - } - }) - }, - TSQualifiedName(node) { - packages.forEach((packageName) => { - const importDeclaration = allNodes.find( - (currentNode) => - currentNode.type === 'ImportDeclaration' && currentNode.source.value === packageName, - ) - const defaultSpecifier = importDeclaration?.specifiers.find( - (specifier) => specifier.type === 'ImportDefaultSpecifier', - ) - const hasDefaultSpecifier = !!defaultSpecifier - const hasDefaultSpecifierReference = - hasDefaultSpecifier && - context.sourceCode.getDeclaredVariables(defaultSpecifier)[0]?.references.length >= 2 - if (hasDefaultSpecifier && node.left.name === defaultSpecifier.local.name) { - const ImportSpecifiers = importDeclaration.specifiers.filter( - (specifier) => specifier.type === 'ImportSpecifier', - ) - context.report({ - node, - message: `'${node.left.name}.${node.right.name}' should be used as '${node.right.name}'`, - fix: (fixer) => { - const fixed = [] - fixed.push(fixer.replaceText(node, node.right.name)) - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하고 있을 경우 - if (hasDefaultSpecifierReference) { - // 이미 ImportSpecifier가 있다면 안에 추가 - if (ImportSpecifiers.length > 0) { - const lastImportSpecifier = ImportSpecifiers[ImportSpecifiers.length - 1] - - const alreadyImported = ImportSpecifiers.some( - (importSpecifier) => importSpecifier.local.name === node.right.name, - ) - // ImportSpecifier 안에 이미 존재하는 모듈이면 pass - if (!alreadyImported) { - fixed.push( - fixer.insertTextAfter(lastImportSpecifier, ', ' + node.right.name), - ) - } - } else { - // 이전에 ImportSpecifier가 없었다면 - fixed.push(fixer.insertTextAfter(defaultSpecifier, `, {${node.right.name}}`)) - } - } - // DefaultSpecifier를 현재 MemberExpression 외에서 사용하지 않는 경우 - else { - if (ImportSpecifiers.length > 0) { - // 이미 ImportSpecifier가 있다면 안에 추가 - const lastImportSpecifier = ImportSpecifiers[ImportSpecifiers.length - 1] - fixed.push( - fixer.removeRange([ - defaultSpecifier.range[1], - defaultSpecifier.range[1] + 2, - ]), - ) - fixed.push(fixer.remove(defaultSpecifier)) - - const alreadyImported = ImportSpecifiers.some( - (importSpecifier) => importSpecifier.local.name === node.right.name, - ) - // ImportSpecifier 안에 이미 존재하는 모듈이면 pass - if (!alreadyImported) { - fixed.push( - fixer.insertTextAfter(lastImportSpecifier, ', ' + node.right.name), - ) - } - } else { - // ImportSpecifier가 없으면 새로 추가 - fixed.push(fixer.replaceText(defaultSpecifier, `{${node.right.name}}`)) - } - } - return fixed - }, - }) - } - }) - }, - } - }, -} diff --git a/packages/eslint-plugin/lib/utils/astParser.js b/packages/eslint-plugin/lib/utils/astParser.js index 61b5546..c8f15fd 100644 --- a/packages/eslint-plugin/lib/utils/astParser.js +++ b/packages/eslint-plugin/lib/utils/astParser.js @@ -1,11 +1,11 @@ -const {getReactComponentDeclaration, getImportDeclarations} = require('@naverpay/ast-parser') +import {getReactComponentDeclaration, getImportDeclarations} from '@naverpay/ast-parser' -const ReactComponentDeclarationType = { +export const ReactComponentDeclarationType = { VariableDeclaration: 'VariableDeclaration', FunctionDeclaration: 'FunctionDeclaration', } -const VariableDeclaratorType = { +export const VariableDeclaratorType = { CallExpression: 'CallExpression', ArrowFunctionExpression: 'ArrowFunctionExpression', } @@ -13,7 +13,7 @@ const VariableDeclaratorType = { /** * @see import('estree').ExpressionMap */ -const CallExpressionArgumentType = { +export const CallExpressionArgumentType = { ArrayExpression: 'ArrayExpression', ArrowFunctionExpression: 'ArrowFunctionExpression', AssignmentExpression: 'AssignmentExpression', @@ -60,7 +60,7 @@ function getObjectExpressionAttrs(attributes) { * @param {import('estree-jsx').JSXElement} jsxElement * @returns {[string, {range: [number, number]}][]} */ -function getRangesOfObjectExpressionAttrs(jsxElement) { +export function getRangesOfObjectExpressionAttrs(jsxElement) { const {children} = jsxElement if (children.length === 0) { @@ -86,7 +86,7 @@ function getRangesOfObjectExpressionAttrs(jsxElement) { * @param {import('estree').ImportDeclaration[]} importDeclarations * @param {{name?: string; from?: string}} param1 */ -function findSpecificImportDeclaration(importDeclarations, {name, from} = {}) { +export function findSpecificImportDeclaration(importDeclarations, {name, from} = {}) { const findName = (specifiers) => specifiers.some( ({type, local}) => (type === 'ImportSpecifier' || type === 'ImportDefaultSpecifier') && local.name === name, @@ -107,7 +107,7 @@ function findSpecificImportDeclaration(importDeclarations, {name, from} = {}) { * @param {import('estree').FunctionDeclaration} functionDeclaration * @param {import('estree').Expression['type']} returnType */ -function hasSpecificReturnStatement(functionDeclaration, returnType) { +export function hasSpecificReturnStatement(functionDeclaration, returnType) { return functionDeclaration.body.body.some( (item) => item.type === 'ReturnStatement' && item.argument.type === returnType, ) @@ -117,7 +117,7 @@ function hasSpecificReturnStatement(functionDeclaration, returnType) { * * @param {import('eslint').Rule.RuleContext} context */ -const getCommentsBeforeImportDeclaration = (context, {name, from}) => { +export const getCommentsBeforeImportDeclaration = (context, {name, from}) => { const globalScope = context.getScope() const importDeclarations = getImportDeclarations(globalScope.block) const styleImportDeclaration = findSpecificImportDeclaration(importDeclarations, { @@ -138,7 +138,7 @@ const getCommentsBeforeImportDeclaration = (context, {name, from}) => { * * @param {import('eslint').Rule.RuleContext} context */ -const getAllComments = (context) => { +export const getAllComments = (context) => { const sourceCode = context.getSourceCode() return sourceCode.getAllComments() } @@ -148,7 +148,7 @@ const getAllComments = (context) => { * @param {import('@babel/types').Node | undefined} node * @returns {import('@babel/types').TSTypeReference | import('@babel/types').TSTypeLiteral | undefined} */ -const getTypeAnnotation = (node) => { +export const getTypeAnnotation = (node) => { return node?.typeAnnotation?.typeAnnotation } @@ -190,7 +190,7 @@ function getReturnTypeOfArrowFunction(arrowFunction) { * @param {import('eslint').Scope.Scope} globalScope * @returns {import('estree-jsx').JSXElement | undefined} */ -const getJSXReturnStatement = (globalScope) => { +export const getJSXReturnStatement = (globalScope) => { const componentDeclaration = getReactComponentDeclaration(globalScope.block) if (componentDeclaration.type === ReactComponentDeclarationType.FunctionDeclaration) { @@ -221,7 +221,7 @@ const getJSXReturnStatement = (globalScope) => { } /** node를 순회해서 examine */ -const traverseNode = (node, examine, results) => { +export const traverseNode = (node, examine, results) => { // 조사할 필요 없는 노드 if (!node || typeof node !== 'object' || !node.type) { return @@ -248,7 +248,7 @@ const traverseNode = (node, examine, results) => { } /** ast의 모든 node를 순회해서 examine */ -const traverseAllNodes = (allNodes, examine) => { +export const traverseAllNodes = (allNodes, examine) => { const results = [] allNodes.forEach((node) => { @@ -257,18 +257,3 @@ const traverseAllNodes = (allNodes, examine) => { return results } - -module.exports = { - ReactComponentDeclarationType, - VariableDeclaratorType, - CallExpressionArgumentType, - findSpecificImportDeclaration, - hasSpecificReturnStatement, - getCommentsBeforeImportDeclaration, - getTypeAnnotation, - getRangesOfObjectExpressionAttrs, - getJSXReturnStatement, - getAllComments, - traverseNode, - traverseAllNodes, -} diff --git a/packages/eslint-plugin/lib/utils/astParser.test.js b/packages/eslint-plugin/lib/utils/astParser.test.js index 88d399a..bf9b621 100644 --- a/packages/eslint-plugin/lib/utils/astParser.test.js +++ b/packages/eslint-plugin/lib/utils/astParser.test.js @@ -1,6 +1,7 @@ -const {parseToAST} = require('@naverpay/ast-parser') +import {parseToAST} from '@naverpay/ast-parser' +import {describe, test, expect} from 'vitest' -const {getJSXReturnStatement} = require('./astParser') +import {getJSXReturnStatement} from './astParser' function parseCode(code) { const ast = parseToAST(code) diff --git a/packages/eslint-plugin/lib/utils/index.js b/packages/eslint-plugin/lib/utils/index.js index 5ef4ca3..6c165f2 100644 --- a/packages/eslint-plugin/lib/utils/index.js +++ b/packages/eslint-plugin/lib/utils/index.js @@ -1,8 +1,4 @@ -const {isEmptyObject} = require('./object') -const {isEmptyString} = require('./string') +import {isEmptyObject} from './object.js' +import {isEmptyString} from './string.js' -const isEmpty = (value) => isEmptyString(value) || isEmptyObject(value) || !value - -module.exports = { - isEmpty, -} +export const isEmpty = (value) => isEmptyString(value) || isEmptyObject(value) || !value diff --git a/packages/eslint-plugin/lib/utils/object.js b/packages/eslint-plugin/lib/utils/object.js index ffb4e22..4db2959 100644 --- a/packages/eslint-plugin/lib/utils/object.js +++ b/packages/eslint-plugin/lib/utils/object.js @@ -1,4 +1,4 @@ -const isEmptyObject = (value) => typeof value === 'object' && !!value && Object.keys(value).length === 0 +export const isEmptyObject = (value) => typeof value === 'object' && !!value && Object.keys(value).length === 0 /** * @@ -6,13 +6,8 @@ const isEmptyObject = (value) => typeof value === 'object' && !!value && Object. * @param {string} object * @returns */ -const has = (object, prop) => { +export const has = (object, prop) => { const hasOwnProperty = Object.prototype.hasOwnProperty return object != null && hasOwnProperty.call(object, prop) } - -module.exports = { - isEmptyObject, - has, -} diff --git a/packages/eslint-plugin/lib/utils/string.js b/packages/eslint-plugin/lib/utils/string.js index dfb31e9..b785fb5 100644 --- a/packages/eslint-plugin/lib/utils/string.js +++ b/packages/eslint-plugin/lib/utils/string.js @@ -1,10 +1,10 @@ -const indentString = (str, count, indent = ' ') => str.replace(/^/gm, indent.repeat(count)) +export const indentString = (str, count, indent = ' ') => str.replace(/^/gm, indent.repeat(count)) -const isValid = (str) => !['null', 'undefined', 'none'].includes(str) +export const isValid = (str) => !['null', 'undefined', 'none'].includes(str) -const isEmptyString = (str) => typeof str === 'string' && str.length === 0 +export const isEmptyString = (str) => typeof str === 'string' && str.length === 0 -const isStringObject = (str) => { +export const isStringObject = (str) => { try { JSON.parse(str) return true @@ -13,15 +13,6 @@ const isStringObject = (str) => { } } -const trimAll = (str) => str.replace(/[ \n]+/g, '') +export const trimAll = (str) => str.replace(/[ \n]+/g, '') -const numberReplacer = (str) => str.replace(/\{([0-9.-]+)\}/g, '"$1"') - -module.exports = { - indentString, - isValid, - isEmptyString, - isStringObject, - numberReplacer, - trimAll, -} +export const numberReplacer = (str) => str.replace(/\{([0-9.-]+)\}/g, '"$1"') diff --git a/packages/eslint-plugin/lib/utils/svg/props.js b/packages/eslint-plugin/lib/utils/svg/props.js index 14c2a5a..288d763 100644 --- a/packages/eslint-plugin/lib/utils/svg/props.js +++ b/packages/eslint-plugin/lib/utils/svg/props.js @@ -1,13 +1,13 @@ -const {getReactComponentDeclaration} = require('@naverpay/ast-parser') +import {getReactComponentDeclaration} from '@naverpay/ast-parser' -const {ReactComponentDeclarationType, VariableDeclaratorType} = require('../astParser') -const {isStringObject} = require('../string') +import {ReactComponentDeclarationType, VariableDeclaratorType} from '../astParser.js' +import {isStringObject} from '../string.js' /** * @description svgCode에서 React props를 default value로 대체 * @returns {string} */ -const replacePropsWithValue = (code, [propName, propValue]) => { +export const replacePropsWithValue = (code, [propName, propValue]) => { // id는 url(#id) || {id} 를 대체 if (propName === 'id') { return code @@ -29,7 +29,7 @@ const replacePropsWithValue = (code, [propName, propValue]) => { const removeExpandProps = (code) => code.replace('{...props}', '') -const replacePropsWithValueInSvgCode = (props, svgCode) => { +export const replacePropsWithValueInSvgCode = (props, svgCode) => { return removeExpandProps(Object.entries(props).reduce(replacePropsWithValue, svgCode)) } @@ -38,7 +38,7 @@ const replacePropsWithValueInSvgCode = (props, svgCode) => { * @description props 가 ObjectExpression이 아닌 props 변수명일 때는 svgCode에서 props value를 추출 * @returns {Record} */ -const extractPropsFromLiteralCode = (svgCode) => { +export const extractPropsFromLiteralCode = (svgCode) => { const propsToReplace = /(\{props\.?([A-Za-z0-9]+)( \|\| ['"]?([a-zA-Z0-9|#\-_%{};() ]*)['"]?)?\})+/g let matches @@ -70,7 +70,7 @@ const getPropsRange = (propsDeclaration, {defaultPosition}) => { * @param {import('eslint').Scope.Scope} globalScope * @returns {import('eslint').AST.Range | []} */ -const getLatestRangeOfProps = (globalScope) => { +export const getLatestRangeOfProps = (globalScope) => { const componentDeclaration = getReactComponentDeclaration(globalScope.block) // const Icon = () => {} or const Icon = memo(() => {}) @@ -106,10 +106,3 @@ const getLatestRangeOfProps = (globalScope) => { return null } - -module.exports = { - replacePropsWithValue, - replacePropsWithValueInSvgCode, - extractPropsFromLiteralCode, - getLatestRangeOfProps, -} diff --git a/packages/eslint-plugin/lib/utils/svg/props.test.js b/packages/eslint-plugin/lib/utils/svg/props.test.js index 79ffe24..05e7d46 100644 --- a/packages/eslint-plugin/lib/utils/svg/props.test.js +++ b/packages/eslint-plugin/lib/utils/svg/props.test.js @@ -1,6 +1,7 @@ -const {extractComponentProps, parseToAST} = require('@naverpay/ast-parser') +import {extractComponentProps, parseToAST} from '@naverpay/ast-parser' +import {describe, test, expect} from 'vitest' -const { +import { 메모이제이션_컴포넌트, 다수_FILL_PROPS가_존재하는_컴포넌트, PROPS_변수_컴포넌트, @@ -10,10 +11,10 @@ const { STYLE_OBJECT를_포함한_컴포넌트, 함수형_컴포넌트, EXPORT_DEFAULT_함수형_컴포넌트, -} = require('../../constants/test-data') -const {trimAll} = require('../string') -const {extractPropsFromLiteralCode} = require('./props') -const {parseSvgComponent} = require('./transform') +} from '../../constants/test-data' +import {trimAll} from '../string' +import {extractPropsFromLiteralCode} from './props' +import {parseSvgComponent} from './transform' function parseCode(code) { const ast = parseToAST(code) diff --git a/packages/eslint-plugin/lib/utils/svg/transform.js b/packages/eslint-plugin/lib/utils/svg/transform.js index cbf64f3..fb7d82a 100644 --- a/packages/eslint-plugin/lib/utils/svg/transform.js +++ b/packages/eslint-plugin/lib/utils/svg/transform.js @@ -1,27 +1,27 @@ -const { +import { getJSXElement, getImportDeclarations, getReactComponentDeclaration, extractComponentProps, -} = require('@naverpay/ast-parser') -const {optimize} = require('svgo') +} from '@naverpay/ast-parser' +import {optimize} from 'svgo' -const { +import {numberReplacer} from '../string.js' +import {extractPropsFromLiteralCode, replacePropsWithValueInSvgCode} from './props.js' +import { SVG_OPTIMIZE_COMPLETED_COMMENT, PROPS_IDENTIFIER_NAME, FIRST_RANGE, SVG_OPTIMIZED_COMMENT_CONTENT, -} = require('../../constants') -const { +} from '../../constants/index.js' +import { findSpecificImportDeclaration, ReactComponentDeclarationType, VariableDeclaratorType, getTypeAnnotation, getRangesOfObjectExpressionAttrs, getAllComments, -} = require('../astParser') -const {numberReplacer} = require('../string') -const {extractPropsFromLiteralCode, replacePropsWithValueInSvgCode} = require('./props') +} from '../astParser.js' /** * @typedef EslintComponent @@ -30,7 +30,7 @@ const {extractPropsFromLiteralCode, replacePropsWithValueInSvgCode} = require('. * @property {import('eslint').Rule.RuleContext} context */ -const parseSvgComponent = ({contents, globalScope}, componentName) => { +export const parseSvgComponent = ({contents, globalScope}, componentName) => { try { // (1) svg html 코드를 ast tree로부터 조회하여 저장 const jsxElement = getJSXElement(globalScope.block, 'svg') @@ -93,7 +93,7 @@ const parseSvgComponent = ({contents, globalScope}, componentName) => { * @param {EslintComponent} param1 * @returns {import('eslint').Rule.Fix[]} */ -function insertCustomImport({fixer, scope, context}) { +export function insertCustomImport({fixer, scope, context}) { const comments = getAllComments(context) if (comments.some(({value}) => value.includes(SVG_OPTIMIZED_COMMENT_CONTENT))) { @@ -150,7 +150,7 @@ function insertCustomImport({fixer, scope, context}) { * @param {NextSvgContent} param0 * @returns {string} */ -const svgoOptimize = ({svgCode, props, exceptAttr}) => { +export const svgoOptimize = ({svgCode, props, exceptAttr}) => { const {data} = optimize(svgCode, { plugins: [ { @@ -202,7 +202,7 @@ const svgoOptimize = ({svgCode, props, exceptAttr}) => { * @param {EslintComponent} param1 * @returns {import('eslint').Rule.Fix[]} */ -const replacePropsTypeDeclaration = ({fixer, scope}) => { +export const replacePropsTypeDeclaration = ({fixer, scope}) => { const getPropsDeclaration = () => { const componentDeclaration = getReactComponentDeclaration(scope.block) @@ -243,10 +243,3 @@ const replacePropsTypeDeclaration = ({fixer, scope}) => { return [] } - -module.exports = { - parseSvgComponent, - insertCustomImport, - svgoOptimize, - replacePropsTypeDeclaration, -} diff --git a/packages/eslint-plugin/lib/utils/svg/transform.test.js b/packages/eslint-plugin/lib/utils/svg/transform.test.js index 7e859f9..720cd1c 100644 --- a/packages/eslint-plugin/lib/utils/svg/transform.test.js +++ b/packages/eslint-plugin/lib/utils/svg/transform.test.js @@ -1,4 +1,6 @@ -const { +import {describe, test, expect} from 'vitest' + +import { 다수_FILL_PROPS가_존재하는_컴포넌트, 복잡한_HTML_컴포넌트, STROKE에_FILL이_쓰인_컴포넌트, @@ -7,9 +9,9 @@ const { PROPS_변수_컴포넌트, 함수형_컴포넌트, EXPORT_DEFAULT_함수형_컴포넌트, -} = require('../../constants/test-data') -const {trimAll} = require('../string') -const {svgoOptimize} = require('./transform') +} from '../../constants/test-data' +import {trimAll} from '../string' +import {svgoOptimize} from './transform' describe('transform', () => { test.each([ diff --git a/packages/eslint-plugin/lib/utils/svg/validator.test.js b/packages/eslint-plugin/lib/utils/svg/validator.test.js index 29f5e3f..95421bc 100644 --- a/packages/eslint-plugin/lib/utils/svg/validator.test.js +++ b/packages/eslint-plugin/lib/utils/svg/validator.test.js @@ -1,8 +1,9 @@ -const {extractComponentProps, parseToAST, getImportDeclarations} = require('@naverpay/ast-parser') +import {extractComponentProps, parseToAST, getImportDeclarations} from '@naverpay/ast-parser' +import {describe, test, expect} from 'vitest' -const {isEmpty} = require('..') -const {SVG_OPTIMIZED_COMMENT_CONTENT} = require('../../constants') -const {findSpecificImportDeclaration} = require('../astParser') +import {isEmpty} from '..' +import {SVG_OPTIMIZED_COMMENT_CONTENT} from '../../constants' +import {findSpecificImportDeclaration} from '../astParser' function parseCode(code) { const ast = parseToAST(code) diff --git a/packages/eslint-plugin/package.json b/packages/eslint-plugin/package.json index a9c644d..955cd2a 100644 --- a/packages/eslint-plugin/package.json +++ b/packages/eslint-plugin/package.json @@ -2,23 +2,25 @@ "name": "@naverpay/eslint-plugin", "version": "1.3.0", "description": "eslint plugin for naverpay", - "main": "./lib/index.js", - "scripts": { - "test": "jest --config ./jest.config.js", - "version": "pnpm version", - "deploy": "pnpm publish" - }, - "devDependencies": { - "@babel/eslint-parser": "^7.24.7", - "@typescript-eslint/parser": "^7.9.0" - }, - "peerDependencies": { - "eslint": "^8" + "type": "module", + "main": "./dist/cjs/index.js", + "module": "./dist/esm/index.mjs", + "exports": { + ".": { + "import": "./dist/esm/index.mjs", + "require": "./dist/cjs/index.js", + "default": "./dist/cjs/index.js" + } }, - "dependencies": { - "@naverpay/ast-parser": "^0.0.2", - "minimatch": "^9.0.4", - "svgo": "^3.3.2" + "files": [ + "dist" + ], + "scripts": { + "clean": "rm -rf dist", + "prebuild": "pnpm run clean", + "build": "rollup -c", + "test": "vitest run", + "test:watch": "vitest watch" }, "author": "@NaverPayDev/frontend", "repository": { @@ -30,8 +32,26 @@ "keywords": [ "naverpay", "eslint", - "plugin", + "eslintplugin", "eslint-plugin" ], - "license": "MIT" + "license": "MIT", + "dependencies": { + "@naverpay/ast-parser": "^0.0.2", + "micromatch": "^4.0.8", + "minimatch": "^9.0.4", + "svgo": "^3.3.2" + }, + "devDependencies": { + "@babel/eslint-parser": "^7.25.9", + "@babel/preset-react": "^7.24.7", + "@rollup/plugin-json": "^6.1.0", + "@typescript-eslint/parser": "^8.15.0", + "builtin-modules": "^4.0.0", + "rollup": "^4.27.4", + "vitest": "^2.1.5" + }, + "peerDependencies": { + "eslint": ">=8.57.0" + } } diff --git a/packages/eslint-plugin/rollup.config.js b/packages/eslint-plugin/rollup.config.js new file mode 100644 index 0000000..9244cc2 --- /dev/null +++ b/packages/eslint-plugin/rollup.config.js @@ -0,0 +1,33 @@ +import fs from 'fs' +import path from 'path' + +import json from '@rollup/plugin-json' +import builtins from 'builtin-modules' + +/** + * @type {import('rollup').RollupOptions} + */ +export default ['esm', 'cjs'].map((module) => { + const pkg = JSON.parse(fs.readFileSync(new URL('./package.json', import.meta.url), 'utf8')) + + return { + input: 'lib/index.js', + output: { + format: module, + dir: 'dist/' + module, + ...(module === 'esm' + ? { + entryFileNames: `[name]${path.extname('./dist/' + module + '/index.mjs')}`, + preserveModulesRoot: path.dirname('lib/index.js'), + preserveModules: true, + interop: 'esModule', + } + : { + exports: 'auto', + interop: 'auto', + }), + }, + external: [...Object.keys(pkg?.dependencies || []), ...Object.keys(pkg?.peerDependencies || []), ...builtins], + plugins: [json()], + } +}) diff --git a/packages/markdown-lint/package.json b/packages/markdown-lint/package.json index 5175f6c..9eb7c4b 100644 --- a/packages/markdown-lint/package.json +++ b/packages/markdown-lint/package.json @@ -12,8 +12,6 @@ ".markdownlint.jsonc" ], "scripts": { - "version": "pnpm version", - "deploy": "pnpm publish", "postinstall": "node postInstall/index.js", "test": "jest --config jest.config.js" }, @@ -21,6 +19,7 @@ "markdownlint-cli2": "^0.11.0" }, "devDependencies": { + "jest": "^29.5.0", "jsonc-parser": "^3.2.1", "markdownlint": "^0.32.1" }, diff --git a/packages/prettier-config/README.md b/packages/prettier-config/README.md index e05b291..92ab61c 100644 --- a/packages/prettier-config/README.md +++ b/packages/prettier-config/README.md @@ -38,7 +38,7 @@ package.json에 스크립트를 추가하여 format 검사를 할 수 있습니 } ``` -> [husky](https://github.com/typicode/husky) & [lint-staged](https://github.com/lint-staged/lint-staged)를 사용해서 commit 또는 push 전에 스타일 확인을 자동화할 것을 권장합니다. +> [lefthook](https://github.com/evilmartians/lefthook)을 사용해서 commit 또는 push 전에 스타일 확인을 자동화할 것을 권장합니다. ## Integrating with IDE diff --git a/packages/prettier-config/package.json b/packages/prettier-config/package.json index 50cf7aa..8c11549 100644 --- a/packages/prettier-config/package.json +++ b/packages/prettier-config/package.json @@ -3,10 +3,7 @@ "version": "1.0.0", "description": "prettier config for naverpay", "main": "index.json", - "scripts": { - "version": "pnpm version", - "deploy": "pnpm publish" - }, + "scripts": {}, "peerDependencies": { "prettier": "^2.8.8 || ^3.0.0" }, diff --git a/packages/stylelint-config/README.md b/packages/stylelint-config/README.md index 925735e..d5bc104 100644 --- a/packages/stylelint-config/README.md +++ b/packages/stylelint-config/README.md @@ -7,7 +7,7 @@ **stylelint**, **@naverpay/stylelint-config** 패키지를 설치합니다. ```bash -$npm install --save-dev stylelint@^14.2.0 @naverpay/stylelint-config +npm install -D stylelint@^14.2.0 @naverpay/stylelint-config ``` ## Configure @@ -21,40 +21,27 @@ $npm install --save-dev stylelint@^14.2.0 @naverpay/stylelint-config } ``` -### Autofix +## CLI -#### husky + lint-staged +package.json에 스크립트를 추가하여 format 검사를 할 수 있습니다. -`huksy + lint-staged` 가 적용된 프로젝트는 commit 시 `stylelint --fix` 를 자동으로 실행할 수 있습니다. - -> 자동 수정을 비활성화 하는 경우 `--fix` 옵션 제거 가능 - -```json +```jsonc // package.json { - "lint-staged": { - "**/*.css": [ - "stylelint --fix" - ] + "scripts": { + "stylelint": "stylelint '**/*.{css,scss}'", + "stylelint:fix": "stylelint --fix '**/*.{css,scss}'", }, - "lint-staged": { - "**/*.scss": [ - "stylelint --fix" - ] - }, - "lint-staged": { - "**/*.{css,scss}": [ - "stylelint --fix" - ] - } } ``` -이제 Commit 시 `staged` 된 `*.{css,scss}` 파일에 대해 `stylelint --fix` 를 자동으로 실행합니다. +> [lefthook](https://github.com/evilmartians/lefthook)을 사용해서 commit 또는 push 전에 스타일 확인을 자동화할 것을 권장합니다. + +## Integrating with IDE -#### VSCode stylelint +### VSCode -VSCode 에디터를 사용하고 있다면 [Stylelint 확장 프로그램][Stylelint]을 통해 파일 저장 시 일부 속성에 대해 자동으로 수정할 수 있습니다. +[Stylelint 확장 프로그램][Stylelint]을 통해 파일 저장 시 일부 속성에 대해 자동으로 수정할 수 있습니다. > 스타일린트가 적용되지 않은 프로젝트에서 자동 수정이 되는 것을 방지하기 위해 프로젝트 루트 폴더에 `.vscode/settings.json` 생성 diff --git a/packages/stylelint-config/index.js b/packages/stylelint-config/index.js index e42d0cb..89c2db3 100644 --- a/packages/stylelint-config/index.js +++ b/packages/stylelint-config/index.js @@ -2,8 +2,8 @@ const postcss = require('postcss') const postcssScss = require('postcss-scss') const stylelintRule = require('./src/rules/stylelint') -const stylelintRuleSCSS = require('./src/rules/stylelint-scss') const stylelintRuleOrder = require('./src/rules/stylelint-order') +const stylelintRuleSCSS = require('./src/rules/stylelint-scss') module.exports = { overrides: [ diff --git a/packages/stylelint-config/package.json b/packages/stylelint-config/package.json index 68df53f..b4abb73 100644 --- a/packages/stylelint-config/package.json +++ b/packages/stylelint-config/package.json @@ -3,10 +3,7 @@ "version": "0.0.3", "description": "stylelint config for naverpay", "main": "index.js", - "scripts": { - "version": "pnpm version", - "deploy": "pnpm publish" - }, + "scripts": {}, "peerDependencies": { "postcss": "^8.4.8", "postcss-scss": "^4.0.3", diff --git a/packages/stylelint-config/src/rules/stylelint/index.js b/packages/stylelint-config/src/rules/stylelint/index.js index a91850d..ead9135 100644 --- a/packages/stylelint-config/src/rules/stylelint/index.js +++ b/packages/stylelint-config/src/rules/stylelint/index.js @@ -1,20 +1,20 @@ -const general = require('./general') +const atRule = require('./at-rule') +const block = require('./block') const color = require('./color') +const comment = require('./comment') +const declaration = require('./declaration') const font = require('./font') -const number = require('./number') +const functionRules = require('./function') +const general = require('./general') const length = require('./length') -const unit = require('./unit') -const string = require('./string') -const declaration = require('./declaration') +const mediaFeature = require('./media-feature') +const number = require('./number') const property = require('./property') -const value = require('./value') -const functionRules = require('./function') -const selector = require('./selector') -const atRule = require('./at-rule') -const block = require('./block') -const comment = require('./comment') const rule = require('./rule') -const mediaFeature = require('./media-feature') +const selector = require('./selector') +const string = require('./string') +const unit = require('./unit') +const value = require('./value') module.exports = { ...general, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index d76f25d..f8a9f3b 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,18 +8,12 @@ importers: .: devDependencies: - '@babel/preset-react': - specifier: ^7.24.7 - version: 7.24.7(@babel/core@7.24.3) '@changesets/cli': specifier: ^2.26.2 version: 2.27.1 '@naverpay/eslint-config': specifier: workspace:* version: link:packages/eslint-config - '@naverpay/eslint-plugin': - specifier: workspace:* - version: link:packages/eslint-plugin '@naverpay/markdown-lint': specifier: workspace:* version: link:packages/markdown-lint @@ -29,24 +23,15 @@ importers: '@naverpay/stylelint-config': specifier: workspace:* version: link:packages/stylelint-config - glob: - specifier: ^9.3.4 - version: 9.3.5 - husky: - specifier: ^8.0.3 - version: 8.0.3 - jest: - specifier: ^29.5.0 - version: 29.7.0(@types/node@12.20.55) - lint-staged: - specifier: ^15.0.1 - version: 15.2.2 + lefthook: + specifier: ^1.9.3 + version: 1.9.3 prettier: specifier: ^3.2.5 version: 3.2.5 turbo: - specifier: ^1.10.16 - version: 1.12.4 + specifier: ^2.3.3 + version: 2.3.3 typescript: specifier: ^5.2.2 version: 5.3.3 @@ -55,60 +40,70 @@ importers: packages/eslint-config: dependencies: - '@babel/core': - specifier: ^7.14.6 - version: 7.24.3 - '@babel/eslint-parser': - specifier: ^7.14.7 - version: 7.24.1(@babel/core@7.24.3)(eslint@8.57.0) - '@babel/plugin-proposal-class-properties': - specifier: ^7.14.5 - version: 7.18.6(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx': - specifier: ^7.14.5 - version: 7.23.4(@babel/core@7.24.3) + '@eslint/eslintrc': + specifier: ^3.2.0 + version: 3.2.0 + '@eslint/js': + specifier: ^9.15.0 + version: 9.15.0 '@naverpay/eslint-plugin': specifier: workspace:* version: link:../eslint-plugin - '@next/eslint-plugin-next': - specifier: '>=12' - version: 14.1.4 - '@typescript-eslint/eslint-plugin': - specifier: '>=7' - version: 7.15.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/parser': - specifier: '>=7' - version: 7.9.0(eslint@8.57.0)(typescript@5.3.3) - eslint: - specifier: '>=8 <9' - version: 8.57.0 - eslint-config-eslint: - specifier: ^7.0.0 - version: 7.0.0(eslint-plugin-jsdoc@48.2.2(eslint@8.57.0))(eslint-plugin-node@11.1.0(eslint@8.57.0)) eslint-config-prettier: - specifier: ^9.0.0 - version: 9.1.0(eslint@8.57.0) - eslint-config-standard: - specifier: ^17.1.0 - version: 17.1.0(eslint-plugin-import@2.26.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0) + specifier: ^9.1.0 + version: 9.1.0(eslint@9.17.0) eslint-plugin-import: - specifier: '>=2.25 <2.27' - version: 2.26.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) + specifier: '>=2.31.0' + version: 2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0) eslint-plugin-jsx-a11y: - specifier: ^6.7.1 - version: 6.8.0(eslint@8.57.0) - eslint-plugin-node: - specifier: ^11.1.0 - version: 11.1.0(eslint@8.57.0) - eslint-plugin-promise: - specifier: ^6.1.1 - version: 6.1.1(eslint@8.57.0) + specifier: ^6.10.2 + version: 6.10.2(eslint@9.17.0) + eslint-plugin-n: + specifier: ^17.14.0 + version: 17.14.0(eslint@9.17.0) eslint-plugin-react: - specifier: ^7.33.2 - version: 7.34.1(eslint@8.57.0) + specifier: ^7.37.2 + version: 7.37.2(eslint@9.17.0) eslint-plugin-react-hooks: - specifier: ^4.6.0 - version: 4.6.0(eslint@8.57.0) + specifier: ^5.0.0 + version: 5.1.0(eslint@9.17.0) + eslint-plugin-sonarjs: + specifier: ^3.0.1 + version: 3.0.1(eslint@9.17.0) + eslint-plugin-unicorn: + specifier: ^56.0.1 + version: 56.0.1(eslint@9.17.0) + eslint-plugin-unused-imports: + specifier: ^4.1.4 + version: 4.1.4(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0) + eslint-plugin-yml: + specifier: ^1.16.0 + version: 1.16.0(eslint@9.17.0) + globals: + specifier: ^15.14.0 + version: 15.14.0 + neostandard: + specifier: ^0.11.9 + version: 0.11.9(eslint@9.17.0)(typescript@5.3.3) + typescript-eslint: + specifier: ^8.18.0 + version: 8.18.0(eslint@9.17.0)(typescript@5.3.3) + devDependencies: + '@rollup/plugin-json': + specifier: ^6.1.0 + version: 6.1.0(rollup@4.27.4) + builtin-modules: + specifier: ^4.0.0 + version: 4.0.0 + eslint: + specifier: ^9.17.0 + version: 9.17.0 + rollup: + specifier: ^4.27.4 + version: 4.27.4 + vitest: + specifier: ^2.1.5 + version: 2.1.5(terser@5.36.0) packages/eslint-plugin: dependencies: @@ -116,8 +111,11 @@ importers: specifier: ^0.0.2 version: 0.0.2(typescript@5.3.3) eslint: - specifier: ^8 - version: 8.57.0 + specifier: '>=8.57.0' + version: 9.17.0 + micromatch: + specifier: ^4.0.8 + version: 4.0.8 minimatch: specifier: ^9.0.4 version: 9.0.4 @@ -126,11 +124,26 @@ importers: version: 3.3.2 devDependencies: '@babel/eslint-parser': + specifier: ^7.25.9 + version: 7.25.9(@babel/core@7.26.0)(eslint@9.17.0) + '@babel/preset-react': specifier: ^7.24.7 - version: 7.24.8(@babel/core@7.24.3)(eslint@8.57.0) + version: 7.26.3(@babel/core@7.26.0) + '@rollup/plugin-json': + specifier: ^6.1.0 + version: 6.1.0(rollup@4.27.4) '@typescript-eslint/parser': - specifier: ^7.9.0 - version: 7.9.0(eslint@8.57.0)(typescript@5.3.3) + specifier: ^8.15.0 + version: 8.15.0(eslint@9.17.0)(typescript@5.3.3) + builtin-modules: + specifier: ^4.0.0 + version: 4.0.0 + rollup: + specifier: ^4.27.4 + version: 4.27.4 + vitest: + specifier: ^2.1.5 + version: 2.1.5(terser@5.36.0) packages/markdown-lint: dependencies: @@ -138,6 +151,9 @@ importers: specifier: ^0.11.0 version: 0.11.0 devDependencies: + jest: + specifier: ^29.5.0 + version: 29.7.0(@types/node@12.20.55) jsonc-parser: specifier: ^3.2.1 version: 3.2.1 @@ -183,31 +199,32 @@ packages: resolution: {integrity: sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==} engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.2': - resolution: {integrity: sha512-y5+tLQyV8pg3fsiln67BVLD1P13Eg4lh5RW9mF0zUuvLrv9uIQ4MCL+CRT+FTsBlBjcIan6PGsLcBN0m3ClUyQ==} - engines: {node: '>=6.9.0'} - '@babel/code-frame@7.24.7': resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} engines: {node: '>=6.9.0'} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + engines: {node: '>=6.9.0'} + '@babel/compat-data@7.24.1': resolution: {integrity: sha512-Pc65opHDliVpRHuKfzI+gSA4zcgr65O4cl64fFJIWEEh8JoHIHh0Oez1Eo8Arz8zq/JhgKodQaxEwUPRtZylVA==} engines: {node: '>=6.9.0'} + '@babel/compat-data@7.26.3': + resolution: {integrity: sha512-nHIxvKPniQXpmQLb0vhY3VaFb3S0YrTAwpOWJZh1wn3oJPjJk9Asva204PsBdmAE8vpzfHudT8DB0scYvy9q0g==} + engines: {node: '>=6.9.0'} + '@babel/core@7.24.3': resolution: {integrity: sha512-5FcvN1JHw2sHJChotgx8Ek0lyuh4kCKelgMTTqhYJJtloNvUfpAFMeNQUtdlIaktwrSV9LtCdqwk48wL2wBacQ==} engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.24.1': - resolution: {integrity: sha512-d5guuzMlPeDfZIbpQ8+g1NaCNuAGBBGNECh0HVqz1sjOeVLh2CEaifuOysCH18URW6R7pqXINvf5PaR/dC6jLQ==} - engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} - peerDependencies: - '@babel/core': ^7.11.0 - eslint: ^7.5.0 || ^8.0.0 + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} + engines: {node: '>=6.9.0'} - '@babel/eslint-parser@7.24.8': - resolution: {integrity: sha512-nYAikI4XTGokU2QX7Jx+v4rxZKhKivaQaREZjuW3mrJrbdWJ5yUfohnoUULge+zEEaKjPYNxhoRgUKktjXtbwA==} + '@babel/eslint-parser@7.25.9': + resolution: {integrity: sha512-5UXfgpK0j0Xr/xIdgdLEhOFxaDZ0bRPWJJchRpqOSur/3rZoPbqqki5mm0p4NE2cs28krBEiSM2MB7//afRSQQ==} engines: {node: ^10.13.0 || ^12.13.0 || >=14.0.0} peerDependencies: '@babel/core': ^7.11.0 @@ -221,94 +238,101 @@ packages: resolution: {integrity: sha512-47DG+6F5SzOi0uEvK4wMShmn5yY0mVjVJoWTphdY2B4Rx9wHgjK7Yhtr0ru6nE+sn0v38mzrWOlah0p/YlHHOQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.22.5': - resolution: {integrity: sha512-LvBTxu8bQSQkcyKOU+a1btnNFQ1dMAd0R6PyW3arXes06F6QLWLIrd681bxRPIXlrMGR3XYnW9JyML7dP3qgxg==} + '@babel/generator@7.26.3': + resolution: {integrity: sha512-6FF/urZvD0sTeO7k6/B15pMLC4CHUv1426lzr3N01aHJTl046uCAh9LXW/fzeXXjPNCJ6iABW5XaWOsIZB93aQ==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} '@babel/helper-compilation-targets@7.23.6': resolution: {integrity: sha512-9JB548GZoQVmzrFgp8o7KxdgkTGm6xs9DW0o/Pim72UDjzr5ObUQ6ZzYPqA+g9OTS2bBQoctLJrky0RDCAWRgQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.4': - resolution: {integrity: sha512-lG75yeuUSVu0pIcbhiYMXBXANHrpUPaOfu7ryAzskCgKUHuAxRQI5ssrtmF0X9UXldPlvT0XM/A4F44OXRt6iQ==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-environment-visitor@7.22.20': - resolution: {integrity: sha512-zfedSIzFhat/gFhWfHtgWvlec0nqB9YEIVrpuwjruLlXfUSnA8cJB0miHKwqDnQ7d32aKo2xt88/xZptwxbfhA==} + '@babel/helper-create-regexp-features-plugin@7.26.3': + resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/helper-define-polyfill-provider@0.6.3': + resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 '@babel/helper-environment-visitor@7.24.7': resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.23.0': - resolution: {integrity: sha512-OErEqsrxjZTJciZ4Oo+eoZqeW9UIiOcuYKRJA4ZAgV9myA+pOXhhmpfNCKjEH/auVfEYVFJ6y1Tc4r0eIApqiw==} - engines: {node: '>=6.9.0'} - '@babel/helper-function-name@7.24.7': resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.22.5': - resolution: {integrity: sha512-wGjk9QZVzvknA6yKIUURb8zY3grXCcOZt+/7Wcy8O2uctxhplmUPkOdlgoNhmdVee2c92JXbf1xpMtVNbfoxRw==} - engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.23.0': - resolution: {integrity: sha512-6gfrPwh7OuT6gZyJZvd6WbTfrqAo7vm4xCzAXOusKqq/vWdKXphTpj5klHKNmRUU6/QRGlBsyU9mAIPaWHlqJA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.3': - resolution: {integrity: sha512-viKb0F9f2s0BCS22QSF308z/+1YWKV/76mwt61NBzS5izMzDPwdq1pTrzf+Li3npBWX9KdQbkeCt1jSAM7lZqg==} + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} '@babel/helper-module-imports@7.24.7': resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} engines: {node: '>=6.9.0'} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + engines: {node: '>=6.9.0'} + '@babel/helper-module-transforms@7.23.3': resolution: {integrity: sha512-7bBs4ED9OmswdfDzpz4MpWgSrV7FXlc3zIagvLFjS5H+Mk7Snr21vQ6QwrsoCGMfNC4e4LQPdoULEt4ykz0SRQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.22.5': - resolution: {integrity: sha512-HBwaojN0xFRx4yIvpwGqxiV2tUfl7401jlok564NgB9EHS1y6QT17FmKWm4ztqjeVdXLuC4fSvHc5ePpQjoTbw==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/helper-plugin-utils@7.24.0': - resolution: {integrity: sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==} + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-replace-supers@7.24.1': - resolution: {integrity: sha512-QCR1UqC9BzG5vZl8BMicmZ28RuUBnHhAMddD8yHFHDRH9lLTZ9uUPehX8ctVPT8l0TKblJidqcgUUKGVrePleQ==} + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.22.5': - resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': - resolution: {integrity: sha512-tK14r66JZKiC43p8Ki33yLBVJKlQDFoA8GYN67lWCDCqoL6EMMSuM9b+Iff2jHaM/RRFYl7K+iiru7hbRqNx8Q==} + '@babel/helper-simple-access@7.22.5': + resolution: {integrity: sha512-n0H99E/K+Bika3++WNL17POvo4rKWZ7lZEp1Q+fStVbUi8nxPQEBOlTmCOxW/0JsS56SKKQ+ojAe2pHKJHN35w==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.22.6': - resolution: {integrity: sha512-AsUnxuLhRYsisFiaJwvp1QF+I3KjD5FOxut14q/GzovUe6orHLesW2C7d754kRm53h5gqrz6sFl6sxc4BVtE/g==} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} '@babel/helper-split-export-declaration@7.24.7': @@ -323,52 +347,91 @@ packages: resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': - resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} '@babel/helper-validator-identifier@7.24.7': resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.23.5': - resolution: {integrity: sha512-85ttAOMLsr53VgXkTbkx8oA6YTfT4q7/HzXSLEYmjcSTJPMPQtvq1BD79Byep5xMUYbGRzEpDsjUf3dyp54IKw==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} '@babel/helpers@7.24.1': resolution: {integrity: sha512-BpU09QqEe6ZCHuIHFphEFgvNSrubve1FtyMton26ekZ85gRGi6LrTF7zArARp2YvyFxloeiRmtSCq5sjh1WqIg==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.23.4': - resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.2': - resolution: {integrity: sha512-Yac1ao4flkTxTteCDZLEvdxg2fZfz1v8M4QpaGypq/WPDqg3ijHYbDfs+LG5hvzSoqaSZ9/Z9lKSP3CjZjv+pA==} + '@babel/highlight@7.23.4': + resolution: {integrity: sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==} engines: {node: '>=6.9.0'} '@babel/highlight@7.24.7': resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} engines: {node: '>=6.9.0'} - '@babel/parser@7.24.1': - resolution: {integrity: sha512-Zo9c7N3xdOIQrNip7Lc9wvRPzlRtovHVE4lkz8WEDr7uYh/GMQhSiIgFxGIArRHYdJE5kxtZjAf8rT0xhdLCzg==} + '@babel/parser@7.24.8': + resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + '@babel/parser@7.26.3': + resolution: {integrity: sha512-WJ/CvmY8Mea8iDXo6a7RK2wbmJITT5fN3BEkRuFlxVyNx8jOKIIhmC4fSkTcPcf8JyavbBwIe6OpiCOBXt/IcA==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-proposal-class-properties@7.18.6': - resolution: {integrity: sha512-cumfXOF0+nzZrrN8Rf0t7M+tF6sZc7vhQwYQck9q1/5w2OExlD+b4v4RpMJFaV1Z7WcDRgO6FqvxqxGlwo+RHQ==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.13.0 + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-proposal-decorators@7.25.9': + resolution: {integrity: sha512-smkNLL/O1ezy9Nhy4CNosc4Va+1wo5w4gzSZeLe6y6dM4mmHfYOCPolXQPHQxonZCF+ZyebxN9vqOolkYrSn5g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2': + resolution: {integrity: sha512-SOSkfJDddaM7mak6cPEpswyTRnuRltl429hMraQEglW+OkovnCzsiszTmsrlY//qLFjCpQDFRvjdm2wA5pPm9w==} engines: {node: '>=6.9.0'} - deprecated: This proposal has been merged to the ECMAScript standard and thus this plugin is no longer maintained. Please use @babel/plugin-transform-class-properties instead. peerDependencies: '@babel/core': ^7.0.0-0 @@ -387,6 +450,30 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-decorators@7.25.9': + resolution: {integrity: sha512-ryzI0McXUPJnRCvMo4lumIKZUzhYUO/ScI+Mz4YVaTLt04DHNSjEUjKVvbzQjZFLuod/cYEc07mJWhzl6v4DPg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-flow@7.26.0': + resolution: {integrity: sha512-B+O2DnPc0iG+YXFqOxv2WNuNU97ToWjOomUQ78DouOENWUaM5sVrmet9mcomUGQFwpJd//gvUagXBSdzO1fRKg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + '@babel/plugin-syntax-import-meta@7.10.4': resolution: {integrity: sha512-Yqfm+XDx0+Prh3VSeEQCPU81yC+JWZ2pDPFSS4ZdpfZhp4MkFMaDC1UqseovEKwSUpnIL7+vK+Clp7bfh0iD7g==} peerDependencies: @@ -403,8 +490,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -451,169 +538,660 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-display-name@7.24.7': - resolution: {integrity: sha512-H/Snz9PFxKsS1JLI4dJLtnJgCJRoo0AUm3chP6NYr+9En1JMKloheEiLIhlp5MDVznWo+H3AAC1Mc8lmUEpsgg==} + '@babel/plugin-syntax-unicode-sets-regex@7.18.6': + resolution: {integrity: sha512-727YkEAPwSIQTv5im8QHz3upqp92JTWhidIC81Tdx4VJYIte/VndKf1qKrfnnhPLiPghStWfvC/iFaMCQu7Nqg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx-development@7.24.7': - resolution: {integrity: sha512-QG9EnzoGn+Qar7rxuW+ZOsbWOt56FvvI93xInqsZDC5fsekx1AlIO4KIJ5M+D0p0SqSH156EpmZyXq630B8OlQ==} + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.23.4': - resolution: {integrity: sha512-5xOpoPguCZCRbo/JeHlloSkTA8Bld1J/E1/kLfD1nsuiW1m8tduTA1ERCgIZokDflX/IBzKcqR3l7VlRgiIfHA==} + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-jsx@7.24.7': - resolution: {integrity: sha512-+Dj06GDZEFRYvclU6k4bme55GKBEWUmByM/eoKuqg4zTNQHiApWRhQph5fxQB2wAEFvRzL1tOEj1RJ19wJrhoA==} + '@babel/plugin-transform-block-scoped-functions@7.25.9': + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-react-pure-annotations@7.24.7': - resolution: {integrity: sha512-PLgBVk3fzbmEjBJ/u8kFzOqS9tUeDjiaWud/rRym/yjCo/M9cASPlnrd2ZmmZpQT40fOOrvR8jh+n8jikrOhNA==} + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/preset-react@7.24.7': - resolution: {integrity: sha512-AAH4lEkpmzFWrGVlHaxJB7RLH21uPQ9+He+eFLWHmF9IuFQVugz8eAsamaW0DXRrTfco5zj1wWtpdcXJUOfsag==} + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.23.9': - resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.12.0 - '@babel/template@7.24.0': - resolution: {integrity: sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==} + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/traverse@7.24.1': - resolution: {integrity: sha512-xuU6o9m68KeqZbQuDt2TcKSxUw/mrsvavlEqQ1leZ/B+C9tk6E4sRWy97WaXgvq5E+nU3cXMxv3WKOCanVMCmQ==} + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.24.0': - resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@babel/types@7.24.8': - resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@bcoe/v8-coverage@0.2.3': - resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/apply-release-plan@7.0.0': - resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + '@babel/plugin-transform-exponentiation-operator@7.26.3': + resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/assemble-release-plan@6.0.0': - resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/changelog-git@0.2.0': - resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + '@babel/plugin-transform-flow-strip-types@7.25.9': + resolution: {integrity: sha512-/VVukELzPDdci7UUsWQaSkhgnjIWXnIyRpM02ldxaVoFK96c41So8JcKT3m0gYjyv7j5FNPGS5vfELrWalkbDA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/cli@2.27.1': - resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} - hasBin: true + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/config@3.0.0': - resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/errors@0.2.0': - resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/get-dependents-graph@2.0.0': - resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/get-release-plan@4.0.0': - resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/get-version-range-type@0.4.0': - resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/git@3.0.0': - resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/logger@0.1.0': - resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + '@babel/plugin-transform-modules-commonjs@7.26.3': + resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/parse@0.4.0': - resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/pre@2.0.0': - resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/read@0.6.0': - resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 - '@changesets/types@4.1.0': - resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/types@6.0.0': - resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@changesets/write@0.3.0': - resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@csstools/selector-specificity@2.2.0': - resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} - engines: {node: ^14 || ^16 || >=18} + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + engines: {node: '>=6.9.0'} peerDependencies: - postcss-selector-parser: ^6.0.10 + '@babel/core': ^7.0.0-0 - '@es-joy/jsdoccomment@0.42.0': - resolution: {integrity: sha512-R1w57YlVA6+YE01wch3GPYn6bCsrOV3YW/5oGGE2tmX6JcL9Nr+b5IikrjMPF+v9CV3ay+obImEdsDhovhJrzw==} - engines: {node: '>=16'} + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + engines: {node: '>=6.9.0'} peerDependencies: - eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + '@babel/core': ^7.0.0-0 - '@eslint-community/regexpp@4.10.0': - resolution: {integrity: sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==} - engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/eslintrc@2.1.4': - resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/module-importer@1.0.1': - resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} - engines: {node: '>=12.22'} + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@humanwhocodes/object-schema@2.0.3': - resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} - deprecated: Use @eslint/object-schema instead + '@babel/plugin-transform-react-display-name@7.25.9': + resolution: {integrity: sha512-KJfMlYIUxQB1CJfO3e0+h0ZHWOTLCPP115Awhaz8U0Zpq36Gl/cXlpoyMRnUWlhNUBAzldnCiAZNvCDj7CrKxQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 - '@isaacs/cliui@8.0.2': - resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} - engines: {node: '>=12'} + '@babel/plugin-transform-react-jsx-development@7.25.9': + resolution: {integrity: sha512-9mj6rm7XVYs4mdLIpbZnHOYdpW42uoiBCTVowg7sP1thUOiANgMb4UtpRivR0pp5iL+ocvUv7X4mZgFRpJEzGw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-jsx@7.25.9': + resolution: {integrity: sha512-s5XwpQYCqGerXl+Pu6VDL3x0j2d82eiV77UJ8a2mDHAW7j9SWRqQ2y1fNo1Z74CdcYipl5Z41zvjj4Nfzq36rw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-react-pure-annotations@7.25.9': + resolution: {integrity: sha512-KQ/Takk3T8Qzj5TppkS1be588lkbTp5uj7w6a0LeQaTMSckU/wK0oJ/pih+T690tkgI5jfmg2TqDJvd41Sj1Cg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-typeof-symbol@7.25.9': + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-flow@7.25.9': + resolution: {integrity: sha512-EASHsAhE+SSlEzJ4bzfusnXSHiU+JfAYzj+jbw2vgQKgq5HrUr8qs+vgtiEL5dOH6sEweI+PNt2D7AqrDSHyqQ==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/preset-modules@0.1.6-no-external-plugins': + resolution: {integrity: sha512-HrcgcIESLm9aIR842yhJ5RWan/gebQUJ6E/E5+rf0y9o6oj7w0Br+sWuL6kEQ/o/AdfvR1Je9jG18/gnpwjEyA==} + peerDependencies: + '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 + + '@babel/preset-react@7.26.3': + resolution: {integrity: sha512-Nl03d6T9ky516DGK2YMxrTqvnpUW63TnJMOMonj+Zae0JiPC5BC9xPMSL6L8fiSpA5vP88qfygavVQvnLp+6Cw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0-0 + + '@babel/runtime@7.23.9': + resolution: {integrity: sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.24.7': + resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + engines: {node: '>=6.9.0'} + + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.24.8': + resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + engines: {node: '>=6.9.0'} + + '@babel/traverse@7.26.4': + resolution: {integrity: sha512-fH+b7Y4p3yqvApJALCPJcwb0/XaOSgtK4pzV6WVjPR5GLFQBRI7pfoX2V2iM48NXvX07NUxxm1Vw98YjqTcU5w==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.0': + resolution: {integrity: sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.24.8': + resolution: {integrity: sha512-SkSBEHwwJRU52QEVZBmMBnE5Ux2/6WU1grdYyOhpbCNxbmJrDuDCphBzKZSO3taf0zztp+qkWlymE5tVL5l0TA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} + engines: {node: '>=6.9.0'} + + '@babel/types@7.26.3': + resolution: {integrity: sha512-vN5p+1kl59GVKMvTHt55NzzmYVxprfJD+ql7U9NFIfKCBkYE55LYtS+WtPlaYOyzydrKI8Nezd+aZextrd+FMA==} + engines: {node: '>=6.9.0'} + + '@bcoe/v8-coverage@0.2.3': + resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} + + '@changesets/apply-release-plan@7.0.0': + resolution: {integrity: sha512-vfi69JR416qC9hWmFGSxj7N6wA5J222XNBmezSVATPWDVPIF7gkd4d8CpbEbXmRWbVrkoli3oerGS6dcL/BGsQ==} + + '@changesets/assemble-release-plan@6.0.0': + resolution: {integrity: sha512-4QG7NuisAjisbW4hkLCmGW2lRYdPrKzro+fCtZaILX+3zdUELSvYjpL4GTv0E4aM9Mef3PuIQp89VmHJ4y2bfw==} + + '@changesets/changelog-git@0.2.0': + resolution: {integrity: sha512-bHOx97iFI4OClIT35Lok3sJAwM31VbUM++gnMBV16fdbtBhgYu4dxsphBF/0AZZsyAHMrnM0yFcj5gZM1py6uQ==} + + '@changesets/cli@2.27.1': + resolution: {integrity: sha512-iJ91xlvRnnrJnELTp4eJJEOPjgpF3NOh4qeQehM6Ugiz9gJPRZ2t+TsXun6E3AMN4hScZKjqVXl0TX+C7AB3ZQ==} + hasBin: true + + '@changesets/config@3.0.0': + resolution: {integrity: sha512-o/rwLNnAo/+j9Yvw9mkBQOZySDYyOr/q+wptRLcAVGlU6djOeP9v1nlalbL9MFsobuBVQbZCTp+dIzdq+CLQUA==} + + '@changesets/errors@0.2.0': + resolution: {integrity: sha512-6BLOQUscTpZeGljvyQXlWOItQyU71kCdGz7Pi8H8zdw6BI0g3m43iL4xKUVPWtG+qrrL9DTjpdn8eYuCQSRpow==} + + '@changesets/get-dependents-graph@2.0.0': + resolution: {integrity: sha512-cafUXponivK4vBgZ3yLu944mTvam06XEn2IZGjjKc0antpenkYANXiiE6GExV/yKdsCnE8dXVZ25yGqLYZmScA==} + + '@changesets/get-release-plan@4.0.0': + resolution: {integrity: sha512-9L9xCUeD/Tb6L/oKmpm8nyzsOzhdNBBbt/ZNcjynbHC07WW4E1eX8NMGC5g5SbM5z/V+MOrYsJ4lRW41GCbg3w==} + + '@changesets/get-version-range-type@0.4.0': + resolution: {integrity: sha512-hwawtob9DryoGTpixy1D3ZXbGgJu1Rhr+ySH2PvTLHvkZuQ7sRT4oQwMh0hbqZH1weAooedEjRsbrWcGLCeyVQ==} + + '@changesets/git@3.0.0': + resolution: {integrity: sha512-vvhnZDHe2eiBNRFHEgMiGd2CT+164dfYyrJDhwwxTVD/OW0FUD6G7+4DIx1dNwkwjHyzisxGAU96q0sVNBns0w==} + + '@changesets/logger@0.1.0': + resolution: {integrity: sha512-pBrJm4CQm9VqFVwWnSqKEfsS2ESnwqwH+xR7jETxIErZcfd1u2zBSqrHbRHR7xjhSgep9x2PSKFKY//FAshA3g==} + + '@changesets/parse@0.4.0': + resolution: {integrity: sha512-TS/9KG2CdGXS27S+QxbZXgr8uPsP4yNJYb4BC2/NeFUj80Rni3TeD2qwWmabymxmrLo7JEsytXH1FbpKTbvivw==} + + '@changesets/pre@2.0.0': + resolution: {integrity: sha512-HLTNYX/A4jZxc+Sq8D1AMBsv+1qD6rmmJtjsCJa/9MSRybdxh0mjbTvE6JYZQ/ZiQ0mMlDOlGPXTm9KLTU3jyw==} + + '@changesets/read@0.6.0': + resolution: {integrity: sha512-ZypqX8+/im1Fm98K4YcZtmLKgjs1kDQ5zHpc2U1qdtNBmZZfo/IBiG162RoP0CUF05tvp2y4IspH11PLnPxuuw==} + + '@changesets/types@4.1.0': + resolution: {integrity: sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==} + + '@changesets/types@6.0.0': + resolution: {integrity: sha512-b1UkfNulgKoWfqyHtzKS5fOZYSJO+77adgL7DLRDr+/7jhChN+QcHnbjiQVOz/U+Ts3PGNySq7diAItzDgugfQ==} + + '@changesets/write@0.3.0': + resolution: {integrity: sha512-slGLb21fxZVUYbyea+94uFiD6ntQW0M2hIKNznFizDhZPDgn2c/fv1UzzlW43RVzh1BEDuIqW6hzlJ1OflNmcw==} + + '@csstools/selector-specificity@2.2.0': + resolution: {integrity: sha512-+OJ9konv95ClSTOJCmMZqpd5+YGsB2S+x6w3E1oaM8UuR5j8nTNHYSz8c9BEPGDOCMQYIEEGlVPj/VY64iTbGw==} + engines: {node: ^14 || ^16 || >=18} + peerDependencies: + postcss-selector-parser: ^6.0.10 + + '@esbuild/aix-ppc64@0.21.5': + resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.21.5': + resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.21.5': + resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} + engines: {node: '>=12'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.21.5': + resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.21.5': + resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.21.5': + resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.21.5': + resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.21.5': + resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.21.5': + resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.21.5': + resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.21.5': + resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.21.5': + resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} + engines: {node: '>=12'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.21.5': + resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.21.5': + resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.21.5': + resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.21.5': + resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.21.5': + resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-x64@0.21.5': + resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-x64@0.21.5': + resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.21.5': + resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.21.5': + resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.21.5': + resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.21.5': + resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + '@eslint/config-array@0.19.0': + resolution: {integrity: sha512-zdHg2FPIFNKPdcHWtiNT+jEFCHYVplAXRDlQDyqy0zGx/q2parwh7brGJSiTxRk/TSMkbM//zt/f5CHgyTyaSQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/core@0.9.0': + resolution: {integrity: sha512-7ATR9F0e4W85D/0w7cU0SNj7qkAexMG+bAHEZOjo9akvGuhHE2m7umzWzfnpa0XAg5Kxc1BWmtPMV67jJ+9VUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/eslintrc@3.2.0': + resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.15.0': + resolution: {integrity: sha512-tMTqrY+EzbXmKJR5ToI8lxu7jaN5EdmrBFJpQk5JmSlyLsx6o4t27r883K5xsLuCYCpfKBCGswMSWXsM+jB7lg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/js@9.17.0': + resolution: {integrity: sha512-Sxc4hqcs1kTu0iID3kcZDW3JHq2a77HO9P8CP6YEA/FpH3Ll8UXE2r/86Rz9YJLKme39S9vU5OWNjC6Xl0Cr3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/object-schema@2.1.4': + resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@eslint/plugin-kit@0.2.3': + resolution: {integrity: sha512-2b/g5hRmpbb1o4GnTZax9N9m0FXzz9OV42ZzI4rDDMDuHUqigAiQCEWChBWCY4ztAGVRjoWT19v0yMmc5/L5kA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} + engines: {node: '>=18.18.0'} + + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} + engines: {node: '>=18.18.0'} + + '@humanwhocodes/gitignore-to-minimatch@1.0.2': + resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} + + '@humanwhocodes/module-importer@1.0.1': + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + + '@humanwhocodes/retry@0.3.1': + resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} + engines: {node: '>=18.18'} + + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -701,9 +1279,15 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -716,9 +1300,6 @@ packages: '@naverpay/ast-parser@0.0.2': resolution: {integrity: sha512-o9T9GmtF2r/z4jQVgUsaNrupKsxvpZ+zsa21UB37l7fnZSv3Nef8CiNFp2p4u5Vojp+X/uV/XT0sBw2kwd4y3w==} - '@next/eslint-plugin-next@14.1.4': - resolution: {integrity: sha512-n4zYNLSyCo0Ln5b7qxqQeQ34OZKXwgbdcx6kmkQbywr+0k6M3Vinft0T72R6CDAcDrne2IAgSud4uWCzFgc5HA==} - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': resolution: {integrity: sha512-54/JRvkLIzzDWshCWfuhadfrfZVPiElY8Fcgmg1HroEly/EDSszzhBAsarCux+D/kOslTRquNzuyGSmUSTTHGg==} @@ -734,9 +1315,116 @@ packages: resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} engines: {node: '>= 8'} - '@pkgjs/parseargs@0.11.0': - resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} - engines: {node: '>=14'} + '@rollup/plugin-json@6.1.0': + 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 + + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} + engines: {node: '>=14.0.0'} + peerDependencies: + rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 + peerDependenciesMeta: + rollup: + optional: true + + '@rollup/rollup-android-arm-eabi@4.27.4': + resolution: {integrity: sha512-2Y3JT6f5MrQkICUyRVCw4oa0sutfAsgaSsb0Lmmy1Wi2y7X5vT9Euqw4gOsCyy0YfKURBg35nhUKZS4mDcfULw==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.27.4': + resolution: {integrity: sha512-wzKRQXISyi9UdCVRqEd0H4cMpzvHYt1f/C3CoIjES6cG++RHKhrBj2+29nPF0IB5kpy9MS71vs07fvrNGAl/iA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.27.4': + resolution: {integrity: sha512-PlNiRQapift4LNS8DPUHuDX/IdXiLjf8mc5vdEmUR0fF/pyy2qWwzdLjB+iZquGr8LuN4LnUoSEvKRwjSVYz3Q==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.27.4': + resolution: {integrity: sha512-o9bH2dbdgBDJaXWJCDTNDYa171ACUdzpxSZt+u/AAeQ20Nk5x+IhA+zsGmrQtpkLiumRJEYef68gcpn2ooXhSQ==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.27.4': + resolution: {integrity: sha512-NBI2/i2hT9Q+HySSHTBh52da7isru4aAAo6qC3I7QFVsuhxi2gM8t/EI9EVcILiHLj1vfi+VGGPaLOUENn7pmw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.27.4': + resolution: {integrity: sha512-wYcC5ycW2zvqtDYrE7deary2P2UFmSh85PUpAx+dwTCO9uw3sgzD6Gv9n5X4vLaQKsrfTSZZ7Z7uynQozPVvWA==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': + resolution: {integrity: sha512-9OwUnK/xKw6DyRlgx8UizeqRFOfi9mf5TYCw1uolDaJSbUmBxP85DE6T4ouCMoN6pXw8ZoTeZCSEfSaYo+/s1w==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.27.4': + resolution: {integrity: sha512-Vgdo4fpuphS9V24WOV+KwkCVJ72u7idTgQaBoLRD0UxBAWTF9GWurJO9YD9yh00BzbkhpeXtm6na+MvJU7Z73A==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.27.4': + resolution: {integrity: sha512-pleyNgyd1kkBkw2kOqlBx+0atfIIkkExOTiifoODo6qKDSpnc6WzUY5RhHdmTdIJXBdSnh6JknnYTtmQyobrVg==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.27.4': + resolution: {integrity: sha512-caluiUXvUuVyCHr5DxL8ohaaFFzPGmgmMvwmqAITMpV/Q+tPoaHZ/PWa3t8B2WyoRcIIuu1hkaW5KkeTDNSnMA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': + resolution: {integrity: sha512-FScrpHrO60hARyHh7s1zHE97u0KlT/RECzCKAdmI+LEoC1eDh/RDji9JgFqyO+wPDb86Oa/sXkily1+oi4FzJQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.27.4': + resolution: {integrity: sha512-qyyprhyGb7+RBfMPeww9FlHwKkCXdKHeGgSqmIXw9VSUtvyFZ6WZRtnxgbuz76FK7LyoN8t/eINRbPUcvXB5fw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.27.4': + resolution: {integrity: sha512-PFz+y2kb6tbh7m3A7nA9++eInGcDVZUACulf/KzDtovvdTizHpZaJty7Gp0lFwSQcrnebHOqxF1MaKZd7psVRg==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.27.4': + resolution: {integrity: sha512-Ni8mMtfo+o/G7DVtweXXV/Ol2TFf63KYjTtoZ5f078AUgJTmaIJnj4JFU7TK/9SVWTaSJGxPi5zMDgK4w+Ez7Q==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.27.4': + resolution: {integrity: sha512-5AeeAF1PB9TUzD+3cROzFTnAJAcVUGLuR8ng0E0WXGkYhp6RD6L+6szYVX+64Rs0r72019KHZS1ka1q+zU/wUw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.27.4': + resolution: {integrity: sha512-yOpVsA4K5qVwu2CaS3hHxluWIK5HQTjNV4tWjQXluMiiiu4pJj4BN98CvxohNCpcjMeTXk/ZMJBRbgRg8HBB6A==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.27.4': + resolution: {integrity: sha512-KtwEJOaHAVJlxV92rNYiG9JQwQAdhBlrjNRp7P9L8Cb4Rer3in+0A+IPhJC9y68WAi9H0sX4AiG2NTsVlmqJeQ==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.27.4': + resolution: {integrity: sha512-3j4jx1TppORdTAoBJRd+/wJRGCPC0ETWkXOecJ6PPZLj6SptXkrXcNqdj0oclbKML6FkQltdz7bBA3rUSirZug==} + cpu: [x64] + os: [win32] + + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -751,6 +1439,12 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} + '@stylistic/eslint-plugin@2.11.0': + resolution: {integrity: sha512-PNRHbydNG5EH8NK4c+izdJlxajIR6GxcUhzsYNRsn6Myep4dsZt0qFCz3rCPnkvgO5FYibDcMqgNHUT+zvjYZw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.40.0' + '@trysound/sax@0.2.0': resolution: {integrity: sha512-L7z9BgrNEcYyUYtF+HaEfiS5ebkh9jXqbszz7pC0hRBPaatV0XjSD3+eHrpqFemQfgwiFF0QPIarnIihIDn7OA==} engines: {node: '>=10.13.0'} @@ -767,6 +1461,9 @@ packages: '@types/babel__traverse@7.20.5': resolution: {integrity: sha512-WXCyOcRtH37HAUkpXhUduaxdm82b4GSlyTqajXviN4EfiuPgNYR109xMCKvpl6zPIpua0DGlMEDCq+g8EdoheQ==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -779,6 +1476,9 @@ packages: '@types/istanbul-reports@3.0.4': resolution: {integrity: sha512-pk2B1NWalF9toCRu6gjBzR69syFjP4Od8WRAX+0mmf9lAjCRicLOWc+ZrxZHx/0XRjotgkF9t6iaMJ+aXcOdZQ==} + '@types/json-schema@7.0.15': + resolution: {integrity: sha512-5+fP8P8MFNC+AyZCDxrB2pkZFPGzqQWUzpSeuuVLvm8VMcorNYavBqoFcxK8bQz4Qsbn4oUEEem4wDLfcysGHA==} + '@types/json5@0.0.29': resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} @@ -806,52 +1506,96 @@ packages: '@types/yargs@17.0.32': resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} - '@typescript-eslint/eslint-plugin@7.15.0': - resolution: {integrity: sha512-uiNHpyjZtFrLwLDpHnzaDlP3Tt6sGMqTCiqmxaN4n4RP0EfYZDODJyddiFDF44Hjwxr5xAcaYxVKm9QKQFJFLA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.17.0': + resolution: {integrity: sha512-HU1KAdW3Tt8zQkdvNoIijfWDMvdSweFYm4hWh+KwhPstv+sCmWb89hCIP8msFm9N1R/ooh9honpSuvqKWlYy3w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.9.0': - resolution: {integrity: sha512-qHMJfkL5qvgQB2aLvhUSXxbK7OLnDkwPzFalg458pxQgfxKDfT1ZDbHQM/I6mDIf/svlMkj21kzKuQ2ixJlatQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.18.0': + resolution: {integrity: sha512-NR2yS7qUqCL7AIxdJUQf2MKKNDVNaig/dEB0GBLU7D+ZdHgK1NoH/3wsgO3OnPVipn51tG3MAwaODEGil70WEw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/parser@8.15.0': + resolution: {integrity: sha512-7n59qFpghG4uazrF9qtGKBZXn7Oz4sOMm8dwNWDQY96Xlm2oX67eipqcblDj+oY1lLCbf1oltMZFpUso66Kl1A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/scope-manager@7.15.0': - resolution: {integrity: sha512-Q/1yrF/XbxOTvttNVPihxh1b9fxamjEoz2Os/Pe38OHwxC24CyCqXxGTOdpb4lt6HYtqw9HetA/Rf6gDGaMPlw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.17.0': + resolution: {integrity: sha512-Drp39TXuUlD49F7ilHHCG7TTg8IkA+hxCuULdmzWYICxGXvDXmDmWEjJYZQYgf6l/TFfYNE167m7isnc3xlIEg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true - '@typescript-eslint/scope-manager@7.9.0': - resolution: {integrity: sha512-ZwPK4DeCDxr3GJltRz5iZejPFAAr4Wk3+2WIBaj1L5PYK5RgxExu/Y68FFVclN0y6GGwH8q+KgKRCvaTmFBbgQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.18.0': + resolution: {integrity: sha512-hgUZ3kTEpVzKaK3uNibExUYm6SKKOmTU2BOxBSvOYwtJEPdVQ70kZJpPjstlnhCHcuc2WGfSbpKlb/69ttyN5Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' - '@typescript-eslint/type-utils@7.15.0': - resolution: {integrity: sha512-SkgriaeV6PDvpA6253PDVep0qCqgbO1IOBiycjnXsszNTVQe5flN5wR5jiczoEoDEnAqYFSFFc9al9BSGVltkg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.15.0': + resolution: {integrity: sha512-QRGy8ADi4J7ii95xz4UoiymmmMd/zuy9azCaamnZ3FM8T5fZcex8UfJcjkiEZjJSztKfEBe3dZ5T/5RHAmw2mA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.17.0': + resolution: {integrity: sha512-/ewp4XjvnxaREtqsZjF4Mfn078RD/9GmiEAtTeLQ7yFdKnqwTOgRMSvFz4et9U5RiJQ15WTGXPLj89zGusvxBg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/scope-manager@8.18.0': + resolution: {integrity: sha512-PNGcHop0jkK2WVYGotk/hxj+UFLhXtGPiGtiaWgVBVP1jhMoMCHlTyJA+hEj4rszoSdLTK3fN4oOatrL0Cp+Xw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/type-utils@8.17.0': + resolution: {integrity: sha512-q38llWJYPd63rRnJ6wY/ZQqIzPrBCkPdpIsaCfkR3Q4t3p6sb422zougfad4TFW9+ElIFLVDzWGiGAfbb/v2qw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true + '@typescript-eslint/type-utils@8.18.0': + resolution: {integrity: sha512-er224jRepVAVLnMF2Q7MZJCq5CsdH2oqjP4dT7K6ij09Kyd+R21r7UVJrF0buMVdZS5QRhDzpvzAxHxabQadow==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + '@typescript-eslint/types@7.15.0': resolution: {integrity: sha512-aV1+B1+ySXbQH0pLK0rx66I3IkiZNidYobyfn0WFsdGhSXw+P3YOqeTq5GED458SfB24tg+ux3S+9g118hjlTw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/types@7.9.0': - resolution: {integrity: sha512-oZQD9HEWQanl9UfsbGVcZ2cGaR0YT5476xfWE0oE5kQa2sNK2frxOlkeacLOTh9po4AlUT5rtkGyYM5kew0z5w==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.15.0': + resolution: {integrity: sha512-n3Gt8Y/KyJNe0S3yDCD2RVKrHBC4gTUcLTebVBXacPy091E6tNspFLKRXlk3hwT4G55nfr1n2AdFqi/XMxzmPQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.17.0': + resolution: {integrity: sha512-gY2TVzeve3z6crqh2Ic7Cr+CAv6pfb0Egee7J5UAVWCpVvDI/F71wNfolIim4FE6hT15EbpZFVUj9j5i38jYXA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/types@8.18.0': + resolution: {integrity: sha512-FNYxgyTCAnFwTrzpBGq+zrnoTO4x0c1CKYY5MuUTzpScqmY5fmsh2o3+57lqdI3NZucBDCzDgdEbIaNfAjAHQA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@7.15.0': resolution: {integrity: sha512-gjyB/rHAopL/XxfmYThQbXbzRMGhZzGw6KpcMbfe8Q3nNQKStpxnUKeXb0KiN/fFDR42Z43szs6rY7eHk0zdGQ==} @@ -862,39 +1606,99 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.9.0': - resolution: {integrity: sha512-zBCMCkrb2YjpKV3LA0ZJubtKCDxLttxfdGmwZvTqqWevUPN0FZvSI26FalGFFUZU/9YQK/A4xcQF9o/VVaCKAg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.15.0': + resolution: {integrity: sha512-1eMp2JgNec/niZsR7ioFBlsh/Fk0oJbhaqO0jRyQBMgkz7RrFfkqF9lYYmBoGBaSiLnu8TAPQTwoTUiSTUW9dg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/utils@7.15.0': - resolution: {integrity: sha512-hfDMDqaqOqsUVGiEPSMLR/AjTSCsmJwjpKkYQRo1FNbmW4tBwBspYDwO9eh7sKSTwMQgBw9/T4DHudPaqshRWA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.17.0': + resolution: {integrity: sha512-JqkOopc1nRKZpX+opvKqnM3XUlM7LpFMD0lYxTqOTKQfCWAmxw45e3qlOCsEqEB2yuacujivudOFpCnqkBDNMw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/typescript-estree@8.18.0': + resolution: {integrity: sha512-rqQgFRu6yPkauz+ms3nQpohwejS8bvgbPyIDq13cgEDbkXt4LH4OkDMT0/fN1RUtzG8e8AKJyDBoocuQh8qNeg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '>=4.8.4 <5.8.0' + + '@typescript-eslint/utils@8.17.0': + resolution: {integrity: sha512-bQC8BnEkxqG8HBGKwG9wXlZqg37RKSMY7v/X8VEWD8JG2JuTHuNK0VFvMPMUKQcbk6B+tf05k+4AShAEtCtJ/w==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + '@typescript-eslint/utils@8.18.0': + resolution: {integrity: sha512-p6GLdY383i7h5b0Qrfbix3Vc3+J2k6QWw6UMUeY5JGfm3C5LbZ4QIZzJNoNOfgyRe0uuYKjvVOsO/jD4SJO+xg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' '@typescript-eslint/visitor-keys@7.15.0': resolution: {integrity: sha512-Hqgy/ETgpt2L5xueA/zHHIl4fJI2O4XUE9l4+OIfbJIRSnTJb/QscncdqqZzofQegIJugRIF57OJea1khw2SDw==} engines: {node: ^18.18.0 || >=20.0.0} - '@typescript-eslint/visitor-keys@7.9.0': - resolution: {integrity: sha512-iESPx2TNLDNGQLyjKhUvIKprlP49XNEK+MvIf9nIO7ZZaZdbnfWKHnXAgufpxqfA0YryH8XToi4+CjBgVnFTSQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.15.0': + resolution: {integrity: sha512-h8vYOulWec9LhpwfAdZf2bjr8xIp0KNKnpgqSz0qqYYKAW/QZKw3ktRndbiAtUz4acH4QLQavwZBYCc0wulA/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@typescript-eslint/visitor-keys@8.17.0': + resolution: {integrity: sha512-1Hm7THLpO6ww5QU6H/Qp+AusUUl+z/CAm3cNZZ0jQvon9yicgO7Rwd+/WWRpMKLYV6p2UvdbR27c86rzCPpreg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@ungap/structured-clone@1.2.0': - resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} + '@typescript-eslint/visitor-keys@8.18.0': + resolution: {integrity: sha512-pCh/qEA8Lb1wVIqNvBke8UaRjJ6wrAWkJO5yyIbs8Yx6TNGYyfNjOo61tLv+WwLvoLPp4BQ8B7AHKijl8NGUfw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + '@vitest/expect@2.1.5': + resolution: {integrity: sha512-nZSBTW1XIdpZvEJyoP/Sy8fUg0b8od7ZpGDkTUcfJ7wz/VoZAFzFfLyxVxGFhUjJzhYqSbIpfMtl/+k/dpWa3Q==} + + '@vitest/mocker@2.1.5': + resolution: {integrity: sha512-XYW6l3UuBmitWqSUXTNXcVBUCRytDogBsWuNXQijc00dtnU/9OqpXWp4OJroVrad/gLIomAq9aW8yWDBtMthhQ==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@2.1.5': + resolution: {integrity: sha512-4ZOwtk2bqG5Y6xRGHcveZVr+6txkH7M2e+nPFd6guSoN638v/1XQ0K06eOpi0ptVU/2tW/pIU4IoPotY/GZ9fw==} + + '@vitest/runner@2.1.5': + resolution: {integrity: sha512-pKHKy3uaUdh7X6p1pxOkgkVAFW7r2I818vHDthYLvUyjRfkKOU6P45PztOch4DZarWQne+VOaIMwA/erSSpB9g==} + + '@vitest/snapshot@2.1.5': + resolution: {integrity: sha512-zmYw47mhfdfnYbuhkQvkkzYroXUumrwWDGlMjpdUr4jBd3HZiV2w7CQHj+z7AAS4VOtWxI4Zt4bWt4/sKcoIjg==} + + '@vitest/spy@2.1.5': + resolution: {integrity: sha512-aWZF3P0r3w6DiYTVskOYuhBc7EMc3jvn1TkBg8ttylFFRqNN2XGD7V5a4aQdk6QiUzZQ4klNBSpCLJgWNdIiNw==} + + '@vitest/utils@2.1.5': + resolution: {integrity: sha512-yfj6Yrp0Vesw2cwJbP+cl04OC+IHFsuQsrsJBL9pyGeQXE56v1UAOQco+SR55Vf1nQzfV0QJg1Qum7AaWUwwYg==} acorn-jsx@5.3.2: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn@8.11.3: - resolution: {integrity: sha512-Y9rRfJG5jcKOE0CLisYbojUjIrIEE7AGMzA/Sm4BslANhbS+cDMpgBdcPT91oJ7OuJ9hYJBx59RjbhxVnrF8Xg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -912,18 +1716,10 @@ packages: resolution: {integrity: sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ==} engines: {node: '>=8'} - ansi-escapes@6.2.0: - resolution: {integrity: sha512-kzRaCqXnpzWs+3z5ABPQiVke+iq0KXkHo8xiWV4RPTi5Yli0l97BEQuhXV1s7+aSU/fu1kUuxgS4MsQ0fRuygw==} - engines: {node: '>=14.16'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} - engines: {node: '>=12'} - ansi-styles@3.2.1: resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} engines: {node: '>=4'} @@ -936,26 +1732,19 @@ packages: resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==} engines: {node: '>=10'} - ansi-styles@6.2.1: - resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} - engines: {node: '>=12'} - anymatch@3.1.3: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - are-docs-informative@0.0.2: - resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} - engines: {node: '>=14'} - argparse@1.0.10: resolution: {integrity: sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==} argparse@2.0.1: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} - aria-query@5.3.0: - resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} @@ -973,6 +1762,10 @@ packages: resolution: {integrity: sha512-CVvd6FHg1Z3POpBLxO6E6zr+rSKEQ9L6rZHAaY7lLfhKsWYUBBOuMs0e9o24oopj6H+geRCX0YJ+TJLBK2eHyQ==} engines: {node: '>= 0.4'} + array.prototype.findlastindex@1.2.5: + resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + engines: {node: '>= 0.4'} + array.prototype.flat@1.3.2: resolution: {integrity: sha512-djYB+Zx2vLewY8RWlNCUdHjDXs2XOgm602S9E7P/UpHgfeHL00cRiIF+IN/G/aUJ7kGPb6yO/ErDI5V2s8iycA==} engines: {node: '>= 0.4'} @@ -981,11 +1774,9 @@ packages: resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} engines: {node: '>= 0.4'} - array.prototype.toreversed@1.1.2: - resolution: {integrity: sha512-wwDCoT4Ck4Cz7sLtgUmzR5UV3YF5mFHUlbChCzZBQZ+0m2cl/DH3tKgvphv1nKgFsJ48oCSg6p91q2Vm0I/ZMA==} - - array.prototype.tosorted@1.1.3: - resolution: {integrity: sha512-/DdH4TiTmOKzyQbp/eadcCVexiCb36xJg7HshYOYJnNZFDj33GEv0P7GxsynpShhq4OLYJzbGcBDkLsDt7MnNg==} + array.prototype.tosorted@1.1.4: + resolution: {integrity: sha512-p6Fx8B7b7ZhL/gmUsAy0D15WhvDccw3mnGNbZpi3pmeJdxtWsj2jEaI4Y6oo3XiHfzuSgPwKc04MYt6KgvC/wA==} + engines: {node: '>= 0.4'} arraybuffer.prototype.slice@1.0.3: resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} @@ -995,6 +1786,10 @@ packages: resolution: {integrity: sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==} engines: {node: '>=0.10.0'} + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + ast-types-flow@0.0.8: resolution: {integrity: sha512-OH/2E5Fg20h2aPrbe+QL8JZQFko0YZaF+j4mnQ7BGhfavO7OpSLa8a0y9sBwomHdSbkhTS8TQNayBfnW5DwbvQ==} @@ -1006,12 +1801,13 @@ packages: resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} engines: {node: '>= 0.4'} - axe-core@4.7.0: - resolution: {integrity: sha512-M0JtH+hlOL5pLQwHOLNYZaXuhqmvS8oExsqB1SBYgA4Dk7u/xx+YdGHXaK5pyUfed5mYXdlYiphWq3G8cRi5JQ==} + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} - axobject-query@3.2.1: - resolution: {integrity: sha512-jsyHu61e6N4Vbz/v18DHwWYKK0bSWLqn47eeDSKPB7m8tqMHF9YJ+mhIk2lVteyZrY8tnSj/jHOv4YiTCuCJgg==} + axobject-query@4.1.0: + resolution: {integrity: sha512-qIj0G9wZbMGNLjLmg1PT6v2mE9AH2zlnADJD/2tC6E00hgmhUOfEB6greHPAfLRSufHqROIUTkw6E+M3lH0PTQ==} + engines: {node: '>= 0.4'} babel-jest@29.7.0: resolution: {integrity: sha512-BrvGY3xZSwEcCzKvKsCi2GgHqDqsYkOP4/by5xCgIwGXQxIEh+8ew3gmrE1y7XRR6LHZIj6yLYnUi/mm2KXKBg==} @@ -1027,6 +1823,21 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + babel-plugin-polyfill-corejs2@0.4.12: + resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + + babel-plugin-polyfill-regenerator@0.6.3: + resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + peerDependencies: + '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 + babel-preset-current-node-syntax@1.0.1: resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} peerDependencies: @@ -1061,6 +1872,10 @@ packages: resolution: {integrity: sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==} engines: {node: '>=8'} + braces@3.0.3: + resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} + engines: {node: '>=8'} + breakword@1.0.6: resolution: {integrity: sha512-yjxDAYyK/pBvws9H4xKYpLDpYKEH6CzrBPAuXq3x18I+c/2MkVtT3qAr7Oloi6Dss9qNhPVueAAVU1CSeNDIXw==} @@ -1069,6 +1884,11 @@ packages: engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} + engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} + hasBin: true + bser@2.1.1: resolution: {integrity: sha512-gQxTNE/GAfIIrmHLUE3oJyp5FO6HRBfhjnw4/wMmA63ZGDJnWBmgY/lyQBpnDUkGmAhbSe39tx2d/iTOAfglwQ==} @@ -1079,8 +1899,17 @@ packages: resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} engines: {node: '>=6'} - builtins@5.0.1: - resolution: {integrity: sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==} + builtin-modules@4.0.0: + resolution: {integrity: sha512-p1n8zyCkt1BVrKNFymOHjcDSAl7oq/gUvfgULv2EblgpPVQlQr9yHnWjg9IJ2MhfwPqiYqMMrr01OY7yQoK2yA==} + engines: {node: '>=18.20'} + + bytes@3.1.2: + resolution: {integrity: sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==} + engines: {node: '>= 0.8'} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} @@ -1105,6 +1934,13 @@ packages: caniuse-lite@1.0.30001600: resolution: {integrity: sha512-+2S9/2JFhYmYaDpZvo0lKkfvuKIglrx68MwOBqMGHhQsNkLjB5xtc/TGoEPs+MxjSyN/72qer2g97nzR641mOQ==} + caniuse-lite@1.0.30001687: + resolution: {integrity: sha512-0S/FDhf4ZiqrTUiQ39dKeUjYRjkv7lOZU1Dgif2rIqrTzX/1wV2hfKu9TOm1IHkdSijfLswxTFzl/cvir+SLSQ==} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + chalk@2.4.2: resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} engines: {node: '>=4'} @@ -1113,10 +1949,6 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - chalk@5.3.0: - resolution: {integrity: sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==} - engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} - char-regex@1.0.2: resolution: {integrity: sha512-kWWXztvZ5SBQV+eRgKFeh8q5sLuZY2+8WUIzlxWVTg+oGwY14qylx1KbKzHd8P6ZYkAg0xyIDU9JMHhyJMZ1jw==} engines: {node: '>=10'} @@ -1124,20 +1956,24 @@ packages: chardet@0.7.0: resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==} + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + ci-info@3.9.0: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} + ci-info@4.1.0: + resolution: {integrity: sha512-HutrvTNsF48wnxkzERIXOe5/mlcfFcbfCmwcg6CJnizbSue78AbDt+1cgl26zwn61WFxhcPykPfZrbqjGmBb4A==} + engines: {node: '>=8'} + cjs-module-lexer@1.2.3: resolution: {integrity: sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==} - cli-cursor@4.0.0: - resolution: {integrity: sha512-VGtlMu3x/4DOtIUwEkRezxUZ2lBacNJCHash0N0WeZDBS+7Ux1dm3XWAgWYxLJFMMdOeXMHXorshEFhbMSGelg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - - cli-truncate@4.0.0: - resolution: {integrity: sha512-nPdaFdQ0h/GEigbPClz11D0v/ZJEwxmeVZGeMo3Z5StPtUTkA9o1lD6QwoirYiSDzbcwn2XcjwmCp68W1IS4TA==} - engines: {node: '>=18'} + clean-regexp@1.0.0: + resolution: {integrity: sha512-GfisEZEJvzKrmGWkvfhgzcz/BllN1USeqD2V6tg14OAOgaCD2Z/PUEuxnAZ/nPvmaHRG7a8y77p1T/IRQ4D1Hw==} + engines: {node: '>=4'} cliui@6.0.0: resolution: {integrity: sha512-t6wbgtoCXvAzst7QgXxJYqPt0usEfbgQdftEPbLL/cvv6HPE5VgvqCuAIDR0NgU52ds6rFwqrgakNLrHEjCbrQ==} @@ -1173,27 +2009,22 @@ packages: colord@2.9.3: resolution: {integrity: sha512-jeC1axXpnb0/2nn/Y1LPuLdgXBLH7aDcHu4KEKfqw3CUhX7ZpfBSlPKyqXE6btIgEzfWtrX3/tyBCaCvXvMkOw==} - colorette@2.0.20: - resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} - - commander@11.1.0: - resolution: {integrity: sha512-yPVavfyCcRhmorC7rWlkHn15b4wDVgVmBA7kV4QVBsF7kv/9TKJAbAXVTxvTnwP8HHKjRCJDClKbciiYS7p0DQ==} - engines: {node: '>=16'} + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} commander@7.2.0: resolution: {integrity: sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw==} engines: {node: '>= 10'} - comment-parser@1.4.1: - resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} - engines: {node: '>= 12.0.0'} - concat-map@0.0.1: resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} + cosmiconfig@7.1.0: resolution: {integrity: sha512-AdmX6xUzdNASswsFtmwSt7Vj8po9IuqXm0UXz7QKPuEUmPB4XyjGfaAr2PSuELMwkRMVH1EpIkX5bTZGRB3eCA==} engines: {node: '>=10'} @@ -1210,6 +2041,10 @@ packages: resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} engines: {node: '>= 8'} + cross-spawn@7.0.6: + resolution: {integrity: sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==} + engines: {node: '>= 8'} + css-functions-list@3.2.1: resolution: {integrity: sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==} engines: {node: '>=12 || >=16'} @@ -1266,24 +2101,25 @@ packages: resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} engines: {node: '>= 0.4'} - debug@2.6.9: - resolution: {integrity: sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==} + debug@3.2.7: + resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - debug@3.2.7: - resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} + debug@4.3.4: + resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + engines: {node: '>=6.0'} peerDependencies: supports-color: '*' peerDependenciesMeta: supports-color: optional: true - debug@4.3.4: - resolution: {integrity: sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1307,6 +2143,10 @@ packages: babel-plugin-macros: optional: true + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + deep-is@0.1.4: resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} @@ -1325,10 +2165,6 @@ packages: resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} engines: {node: '>= 0.4'} - dequal@2.0.3: - resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} - engines: {node: '>=6'} - detect-indent@6.1.0: resolution: {integrity: sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==} engines: {node: '>=8'} @@ -1349,10 +2185,6 @@ packages: resolution: {integrity: sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==} engines: {node: '>=0.10.0'} - doctrine@3.0.0: - resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} - engines: {node: '>=6.0.0'} - dom-serializer@2.0.0: resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} @@ -1366,25 +2198,26 @@ packages: domutils@3.1.0: resolution: {integrity: sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==} - eastasianwidth@0.2.0: - resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.4.717: resolution: {integrity: sha512-6Fmg8QkkumNOwuZ/5mIbMU9WI3H2fmn5ajcVya64I5Yr5CcNmO7vcLt0Y7c96DCiMO5/9G+4sI2r6eEvdg1F7A==} + electron-to-chromium@1.5.72: + resolution: {integrity: sha512-ZpSAUOZ2Izby7qnZluSrAlGgGQzucmFbN0n64dYzocYxnxV5ufurpj3VgEe4cUp7ir9LmeLxNYo8bVnlM8bQHw==} + emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} engines: {node: '>=12'} - emoji-regex@10.3.0: - resolution: {integrity: sha512-QpLs9D9v9kArv4lfDEgg1X/gN5XLnf/A6l9cs8SPZLRZR3ZkY9+kwIQTxm+fsSej5UMYGE8fdoaZVIBlqG0XTw==} - emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} + enhanced-resolve@5.17.1: + resolution: {integrity: sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==} + engines: {node: '>=10.13.0'} + enquirer@2.4.1: resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==} engines: {node: '>=8.6'} @@ -1400,10 +2233,6 @@ packages: error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} - es-abstract@1.22.4: - resolution: {integrity: sha512-vZYJlk2u6qHYxBOTjAeg7qUxHdNfih64Uu2J8QqWgXZ2cri0ZpJAkzDUK/q593+mvKwlxyaxr6F1Q+3LKoQRgg==} - engines: {node: '>= 0.4'} - es-abstract@1.23.3: resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} engines: {node: '>= 0.4'} @@ -1416,10 +2245,13 @@ packages: resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} engines: {node: '>= 0.4'} - es-iterator-helpers@1.0.18: - resolution: {integrity: sha512-scxAJaewsahbqTYrGKJihhViaM6DDZDDoucfvzNbK0pOren1g/daDQ3IAhzn+1G14rBG7w+i5N+qul60++zlKA==} + es-iterator-helpers@1.2.0: + resolution: {integrity: sha512-tpxqxncxnpw3c93u8n3VOzACmRFoVmWJqbWXvX/JfKbkhBw1oslgPrUfeSt2psuqyEJFD6N/9lg5i7bsKpoq+Q==} engines: {node: '>= 0.4'} + es-module-lexer@1.5.4: + resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} + es-object-atoms@1.0.0: resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} engines: {node: '>= 0.4'} @@ -1435,10 +2267,19 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} + esbuild@0.21.5: + resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} + engines: {node: '>=12'} + hasBin: true + escalade@3.1.2: resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} engines: {node: '>=6'} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} + engines: {node: '>=6'} + escape-string-regexp@1.0.5: resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} engines: {node: '>=0.8.0'} @@ -1451,18 +2292,17 @@ packages: resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} engines: {node: '>=10'} - eslint-compat-utils@0.5.0: - resolution: {integrity: sha512-dc6Y8tzEcSYZMHa+CMPLi/hyo1FzNeonbhJL7Ol0ccuKQkwopJcJBA9YL/xmMTLU1eKigXo9vj9nALElWYSowg==} + eslint-compat-utils@0.5.1: + resolution: {integrity: sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==} engines: {node: '>=12'} peerDependencies: eslint: '>=6.0.0' - eslint-config-eslint@7.0.0: - resolution: {integrity: sha512-gxUttladfTQaJKmSh9jbrN4Qba27yYBVwp0YsaOqjEWtOZYtc+MOgoWFh2x4Ewxjqr8sZZS1yTguXgoktzXOvQ==} - engines: {node: ^10.12.0 || >=12.0.0} + eslint-compat-utils@0.6.4: + resolution: {integrity: sha512-/u+GQt8NMfXO8w17QendT4gvO5acfxQsAKirAt0LVxDnr2N8YLCVbregaNc/Yhp7NM128DwCaRvr8PLDfeNkQw==} + engines: {node: '>=12'} peerDependencies: - eslint-plugin-jsdoc: '>=22.1.0' - eslint-plugin-node: '>=11.1.0' + eslint: '>=6.0.0' eslint-config-prettier@9.1.0: resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} @@ -1470,20 +2310,11 @@ packages: peerDependencies: eslint: '>=7.0.0' - eslint-config-standard@17.1.0: - resolution: {integrity: sha512-IwHwmaBNtDK4zDHQukFDW5u/aTb8+meQWZvNFWkiGmbWjD6bqyuSSBxxXKkCftCUzc1zwCH2m/baCNDLGmuO5Q==} - engines: {node: '>=12.0.0'} - peerDependencies: - eslint: ^8.0.1 - eslint-plugin-import: ^2.25.2 - eslint-plugin-n: '^15.0.0 || ^16.0.0 ' - eslint-plugin-promise: ^6.0.0 - eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1503,85 +2334,85 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-es-x@7.6.0: - resolution: {integrity: sha512-I0AmeNgevgaTR7y2lrVCJmGYF0rjoznpDvqV/kIkZSZbZ8Rw3eu4cGlvBBULScfkSOCzqKbff5LR4CNrV7mZHA==} + eslint-plugin-es-x@7.8.0: + resolution: {integrity: sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==} engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '>=8' - eslint-plugin-es@3.0.1: - resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} - engines: {node: '>=8.10.0'} - peerDependencies: - eslint: '>=4.19.1' - - eslint-plugin-import@2.26.0: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint-plugin-jsdoc@48.2.2: - resolution: {integrity: sha512-S0Gk+rpT5w/ephKCncUY7kUsix9uE4B9XI8D/fS1/26d8okE+vZsuG1IvIt4B6sJUdQqsnzi+YXfmh+HJG11CA==} - engines: {node: '>=18'} + eslint-plugin-jsx-a11y@6.10.2: + resolution: {integrity: sha512-scB3nz4WmG75pV8+3eRUQOHZlNSUhFNq37xnpgRkCCELU3XMvXAxLk1eqWWyE22Ki4Q01Fnsw9BA3cJHDPgn2Q==} + engines: {node: '>=4.0'} + peerDependencies: + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9 + + eslint-plugin-n@17.14.0: + resolution: {integrity: sha512-maxPLMEA0rPmRpoOlxEclKng4UpDe+N5BJS4t24I3UKnN109Qcivnfs37KMy84G0af3bxjog5lKctP5ObsvcTA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: '>=8.23.0' + + eslint-plugin-promise@7.2.1: + resolution: {integrity: sha512-SWKjd+EuvWkYaS+uN2csvj0KoP43YTu7+phKQ5v+xw6+A0gutVX2yqCeCkC3uLCJFiPfR2dD8Es5L7yUsmvEaA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 - eslint-plugin-jsx-a11y@6.8.0: - resolution: {integrity: sha512-Hdh937BS3KdwwbBaKd5+PLCOmYY6U4f2h9Z2ktwtNKvIdIEu137rjYbcb9ApSbVJfWxANNuiKTD/9tOKjK9qOA==} - engines: {node: '>=4.0'} + eslint-plugin-react-hooks@5.1.0: + resolution: {integrity: sha512-mpJRtPgHN2tNAvZ35AMfqeB3Xqeo273QxrHJsbBEPWODRM4r0yB6jfoROqKEYrOn27UtRPpcpHc2UqyBSuUNTw==} + engines: {node: '>=10'} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 || ^9.0.0 - eslint-plugin-n@16.6.2: - resolution: {integrity: sha512-6TyDmZ1HXoFQXnhCTUjVFULReoBPOAjpuiKELMkeP40yffI/1ZRO+d9ug/VC6fqISo2WkuIBk3cvuRPALaWlOQ==} - engines: {node: '>=16.0.0'} + eslint-plugin-react@7.37.2: + resolution: {integrity: sha512-EsTAnj9fLVr/GZleBLFbj/sSuXeWmp1eXIN60ceYnZveqEaUCyW4X+Vh4WTdUhCkW4xutXYqTXCUSyqD4rB75w==} + engines: {node: '>=4'} peerDependencies: - eslint: '>=7.0.0' + eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 || ^9.7 - eslint-plugin-node@11.1.0: - resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} - engines: {node: '>=8.10.0'} + eslint-plugin-sonarjs@3.0.1: + resolution: {integrity: sha512-RT6VgdPqizbMLmTryIc3fB169hRjvDFlqieSZEEswGtApPb4Dn9BndmN9qyfBV/By0hbseIX8zQWKBz5E7lyiQ==} peerDependencies: - eslint: '>=5.16.0' + eslint: ^8.0.0 || ^9.0.0 - eslint-plugin-promise@6.1.1: - resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-plugin-unicorn@56.0.1: + resolution: {integrity: sha512-FwVV0Uwf8XPfVnKSGpMg7NtlZh0G0gBarCaFcMUOoqPxXryxdYxTRRv4kH6B9TFCVIrjRXG+emcxIk2ayZilog==} + engines: {node: '>=18.18'} peerDependencies: - eslint: ^7.0.0 || ^8.0.0 + eslint: '>=8.56.0' - eslint-plugin-react-hooks@4.6.0: - resolution: {integrity: sha512-oFc7Itz9Qxh2x4gNHStv3BqJq54ExXmfC+a1NjAta66IAN87Wu0R/QArgIS9qKzX3dXKPI9H5crl9QchNMY9+g==} - engines: {node: '>=10'} + eslint-plugin-unused-imports@4.1.4: + resolution: {integrity: sha512-YptD6IzQjDardkl0POxnnRBhU1OEePMV0nd6siHaRBbd+lyh6NAhFEobiznKU7kTsSsDeSD62Pe7kAM1b7dAZQ==} peerDependencies: - eslint: ^3.0.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0-0 + '@typescript-eslint/eslint-plugin': ^8.0.0-0 || ^7.0.0 || ^6.0.0 || ^5.0.0 + eslint: ^9.0.0 || ^8.0.0 + peerDependenciesMeta: + '@typescript-eslint/eslint-plugin': + optional: true - eslint-plugin-react@7.34.1: - resolution: {integrity: sha512-N97CxlouPT1AHt8Jn0mhhN2RrADlUAsk1/atcT2KyA/l9Q/E6ll7OIGwNumFmWfZ9skV3XXccYS19h80rHtgkw==} - engines: {node: '>=4'} + eslint-plugin-yml@1.16.0: + resolution: {integrity: sha512-t4MNCetPjTn18/fUDlQ/wKkcYjnuLYKChBrZ0qUaNqRigVqChHWzTP8SrfFi5s4keX3vdlkWRSu8zHJMdKwxWQ==} + engines: {node: ^14.17.0 || >=16.0.0} peerDependencies: - eslint: ^3 || ^4 || ^5 || ^6 || ^7 || ^8 + eslint: '>=6.0.0' eslint-scope@5.1.1: resolution: {integrity: sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==} engines: {node: '>=8.0.0'} - eslint-scope@7.2.2: - resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - - eslint-utils@2.1.0: - resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} - engines: {node: '>=6'} - - eslint-visitor-keys@1.3.0: - resolution: {integrity: sha512-6J72N8UNa462wa/KFODt/PJ3IU60SDpC3QXC1Hjc1BXXpfL2C9R5+AU7jhe0F6GREqVMh4Juu+NY7xn+6dipUQ==} - engines: {node: '>=4'} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@2.1.0: resolution: {integrity: sha512-0rSmRBzXgDzIsD6mGdJgevzgezI534Cer5L/vyMX0kHzT/jiB43jRhd9YUlMGYLQy2zprNmoT8qasCGtY+QaKw==} @@ -1591,22 +2422,31 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + + eslint@9.17.0: + resolution: {integrity: sha512-evtlNcpJg+cZLcnVKwsai8fExnqjGPicK7gnUtlNuzu+Fv9bI0aLpND5T44VLQtoMEnI57LoXO9XAkIXwohKrA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true + peerDependencies: + jiti: '*' + peerDependenciesMeta: + jiti: + optional: true - espree@9.6.1: - resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} - engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} hasBin: true - esquery@1.5.0: - resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} engines: {node: '>=0.10'} esrecurse@4.3.0: @@ -1621,25 +2461,28 @@ packages: resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} engines: {node: '>=4.0'} + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + esutils@2.0.3: resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} engines: {node: '>=0.10.0'} - eventemitter3@5.0.1: - resolution: {integrity: sha512-GWkBvjiSZK87ELrYOSESUYeVIc9mvLLf/nXalMOS5dYrgZq9o5OVkbZAVM06CVxYsCwH9BDZFPlQTlPA1j4ahA==} - execa@5.1.1: resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} engines: {node: '>=10'} - execa@8.0.1: - resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} - engines: {node: '>=16.17'} - exit@0.1.2: resolution: {integrity: sha512-Zk/eNKV2zbjpKzrsQ+n1G6poVbErQxJ0LBOJXaKZ1EViLzH+hrLu9cdXI4zw9dBQJslwBEpbQ2P1oS7nDxs6jQ==} engines: {node: '>= 0.8.0'} + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + expect@29.7.0: resolution: {integrity: sha512-2Zks0hf1VLFYI1kbh0I5jP3KHHyCHpkfyHBzsSXRFgl/Bg9mWYfMW8oD+PdMPlEwy5HNsR9JutYy6pMeOh61nw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -1678,10 +2521,18 @@ packages: resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} engines: {node: ^10.12.0 || >=12.0.0} + file-entry-cache@8.0.0: + resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} + engines: {node: '>=16.0.0'} + fill-range@7.0.1: resolution: {integrity: sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==} engines: {node: '>=8'} + fill-range@7.1.1: + resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} + engines: {node: '>=8'} + find-up@4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -1697,16 +2548,16 @@ packages: resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} engines: {node: ^10.12.0 || >=12.0.0} + flat-cache@4.0.1: + resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} + engines: {node: '>=16'} + flatted@3.3.1: resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} - engines: {node: '>=14'} - fs-extra@7.0.1: resolution: {integrity: sha512-YJDaCJZEnBmcbw13fvdAM9AwNOJwOzrE4pqMqBq5nFiEqXUqHwlK4B+3pUw6JNvfSPtX05xFHtYy/1ni01eGCw==} engines: {node: '>=6 <7 || >=8'} @@ -1730,6 +2581,9 @@ packages: resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} engines: {node: '>= 0.4'} + functional-red-black-tree@1.0.1: + resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + functions-have-names@1.2.3: resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} @@ -1741,10 +2595,6 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-east-asian-width@1.2.0: - resolution: {integrity: sha512-2nk+7SIVb14QrgXFHcm84tD4bKQz0RxPuMT8Ag5KPOq7J5fEmAg0UbXdTOSHqNuHSU28k55qnceesxXRZGzKWA==} - engines: {node: '>=18'} - get-intrinsic@1.2.4: resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} engines: {node: '>= 0.4'} @@ -1757,16 +2607,12 @@ packages: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} - get-stream@8.0.1: - resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} - engines: {node: '>=16'} - get-symbol-description@1.0.2: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.3: - resolution: {integrity: sha512-ZvkrzoUA0PQZM6fy6+/Hce561s+faD1rsNwhnO5FelNjyy7EMGJ3Rz1AQ8GYDWjhRs/7dBLOEJvhK8MiEJOAFg==} + get-tsconfig@4.8.1: + resolution: {integrity: sha512-k9PN+cFBmaLWtVz29SkUoqU5O0slLuHJXt/2P+tMVFT+phsSGXGkp9t3rQIqdz0e+06EHNGs3oM6ZX1s2zHxRg==} glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} @@ -1776,19 +2622,10 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.10: - resolution: {integrity: sha512-fa46+tv1Ak0UPK1TOy/pZrIybNNt4HCv7SDzwyfiOZkvZLEbjsZkJBPtDHVshZjbecAoAGSC20MjLDG/qr679g==} - engines: {node: '>=16 || 14 >=14.17'} - hasBin: true - glob@7.2.3: resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} deprecated: Glob versions prior to v9 are no longer supported - glob@9.3.5: - resolution: {integrity: sha512-e1LleDykUz2Iu+MTYdkSsuWX8lvAjAcs0Xef0lNIu0S2wOAzuTxCJtcd9S3cijlwYF18EsU3rzb8jPVobxDh9Q==} - engines: {node: '>=16 || 14 >=14.17'} - global-modules@2.0.0: resolution: {integrity: sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==} engines: {node: '>=6'} @@ -1801,14 +2638,22 @@ packages: resolution: {integrity: sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA==} engines: {node: '>=4'} - globals@13.24.0: - resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} - engines: {node: '>=8'} + globals@14.0.0: + resolution: {integrity: sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==} + engines: {node: '>=18'} + + globals@15.14.0: + resolution: {integrity: sha512-OkToC372DtlQeje9/zHIo5CT8lRP/FUgEOKBEhU4e0abL7J7CD24fD9ohiLN5hagG/kWCYj4K5oaxxtj2Z0Dig==} + engines: {node: '>=18'} globalthis@1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} + globalthis@1.0.4: + resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} + engines: {node: '>= 0.4'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -1862,14 +2707,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - has@1.0.4: - resolution: {integrity: sha512-qdSAmqLF6209RFj4VVItywPMbm3vWylknmB3nvNiUIs72xAimcM8nVYxYr7ncvZq5qzk9MKIZR8ijqD/1QuYjQ==} - engines: {node: '>= 0.4.0'} - - hasown@2.0.1: - resolution: {integrity: sha512-1/th4MHjnwncwXsIW6QMzlvYL9kG5e/CpVvLRZe4XPa8TOUNbCELqmvhDmnkNsAjwaG4+I8gJJL0JBvTTLO9qA==} - engines: {node: '>= 0.4'} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -1895,15 +2732,6 @@ packages: resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} engines: {node: '>=10.17.0'} - human-signals@5.0.0: - resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} - engines: {node: '>=16.17.0'} - - husky@8.0.3: - resolution: {integrity: sha512-+dQSyqPh4x1hlO1swXBiNb2HzTDN1I2IGLQx1GrBuiqFJfoMrnZWwVmatvSiO+Iz8fBUnf+lekwNo4c2LlXItg==} - engines: {node: '>=14'} - hasBin: true - iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} @@ -1912,6 +2740,10 @@ packages: resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} engines: {node: '>= 4'} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} + engines: {node: '>= 4'} + import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} @@ -1976,6 +2808,10 @@ packages: is-core-module@2.13.1: resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} + engines: {node: '>= 0.4'} + is-data-view@1.0.1: resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} engines: {node: '>= 0.4'} @@ -1995,14 +2831,6 @@ packages: resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} engines: {node: '>=8'} - is-fullwidth-code-point@4.0.0: - resolution: {integrity: sha512-O4L094N2/dZ7xqVdrXhh9r1KODPJpFms8B5sGdJLPy664AgvXsreZUyCQQNItZRDlYug4xStLjNp/sz3HvBowQ==} - engines: {node: '>=12'} - - is-fullwidth-code-point@5.0.0: - resolution: {integrity: sha512-OVa3u9kkBbw7b8Xw5F9P+D/T9X+Z4+JruYVNapTjPYZYUznQ5YfWeFkOj606XYYW8yugTfC8Pj0hYqvi4ryAhA==} - engines: {node: '>=18'} - is-generator-fn@2.1.0: resolution: {integrity: sha512-cTIB4yPYL/Grw0EaSzASzg6bBy9gqCofvWN8okThAYIxKJZC+udlRAmGbM0XLeniEJSs8uEgHPGuHSe1XsOLSQ==} engines: {node: '>=6'} @@ -2031,10 +2859,6 @@ packages: resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} engines: {node: '>=0.12.0'} - is-path-inside@3.0.3: - resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} - engines: {node: '>=8'} - is-plain-obj@1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -2059,10 +2883,6 @@ packages: resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} engines: {node: '>=8'} - is-stream@3.0.0: - resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - is-string@1.0.7: resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} engines: {node: '>= 0.4'} @@ -2124,12 +2944,9 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - iterator.prototype@1.1.2: - resolution: {integrity: sha512-DR33HMMr8EzwuRL8Y9D3u2BMj8+RqSE850jfGu59kS7tbmPLzGkZmVSfyCFSDxuZiEY6Rzt3T2NA/qU+NwVj1w==} - - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + iterator.prototype@1.1.3: + resolution: {integrity: sha512-FW5iMbeQ6rBGm/oKgzq2aW4KvAGpxPzYES8N4g4xNXUKpL1mclMvOe+76AcLDTvD+Ze+sOpVhgdAQEKF4L9iGQ==} + engines: {node: '>= 0.4'} jest-changed-files@29.7.0: resolution: {integrity: sha512-fEArFiwf1BpQ+4bXSprcDc3/x4HSzL4al2tozwVpDFpsxALjLYdyiIK4e5Vz66GQJIbXJ82+35PtysofptNX2w==} @@ -2271,15 +3088,20 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true - jsdoc-type-pratt-parser@4.0.0: - resolution: {integrity: sha512-YtOli5Cmzy3q4dP26GraSOeAhqecewG04hoO8DY56CH4KJ9Fvv5qKWUCCo3HZob7esJQHCv6/+bnTy72xZZaVQ==} - engines: {node: '>=12.0.0'} + jsesc@0.5.0: + resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} + hasBin: true jsesc@2.5.2: resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} engines: {node: '>=4'} hasBin: true + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} + hasBin: true + json-buffer@3.0.1: resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} @@ -2339,6 +3161,60 @@ packages: resolution: {integrity: sha512-MbjN408fEndfiQXbFQ1vnd+1NoLDsnQW41410oQBXiyXDMYH5z505juWa4KUE1LqxRC7DgOgZDbKLxHIwm27hA==} engines: {node: '>=0.10'} + lefthook-darwin-arm64@1.9.3: + resolution: {integrity: sha512-6vtZlpf53jQxKLTeAgGGBBpgtI3TI0B1lgC1r+6mxZuMuvdvhWcPzWkNazm4xz+wMvXLeaStLNsmsTvdsHZ5ow==} + cpu: [arm64] + os: [darwin] + + lefthook-darwin-x64@1.9.3: + resolution: {integrity: sha512-LTdj4m2MvFEQtCVeTFmCDb7QrwWfirdXhQwKrj0qn99fY6Awk5zKwimRvyzynlb2oSCPUw2DSEUd8FiewgJNuw==} + cpu: [x64] + os: [darwin] + + lefthook-freebsd-arm64@1.9.3: + resolution: {integrity: sha512-4UZhmiLpGZ6ITyd4VKf1SGYZ+TkiTjr4tyiBhX4M6LGI6A6T7U2bbM4Y59eEYcGtkY8b+TE/g0JOWc25JnLkSw==} + cpu: [arm64] + os: [freebsd] + + lefthook-freebsd-x64@1.9.3: + resolution: {integrity: sha512-2IGHR8An85mi0ZRbGHldBw9OabpYVam3fazC1gaPkfiZg1aLdQS4O9aiK/9Ehl5zH6qujXAhkephgrPqF2smGg==} + cpu: [x64] + os: [freebsd] + + lefthook-linux-arm64@1.9.3: + resolution: {integrity: sha512-bx731z+HtKXLQjinq59MRtWjr7gMH3pOzvDbyWxA05SNPTh7gM/jwUCBBF7aLXMFh2qrm8cJcxklONkST+I5ng==} + cpu: [arm64] + os: [linux] + + lefthook-linux-x64@1.9.3: + resolution: {integrity: sha512-ajkDpabjKsIcJt1QhWW8QUqpWowymw2JuWTRTCQ8rRa7E8AeYiYYLb9HUrOndBUvNKS8WuM+FU7dDdcSsTDDFQ==} + cpu: [x64] + os: [linux] + + lefthook-openbsd-arm64@1.9.3: + resolution: {integrity: sha512-oqiK9NiaSDUPaCkIrgIFo7nnJFuZlyJQDVuy4agYPSdBVmJAJaigg1avLKvwtJvUMQJDnPTg0T/4rpMGQbty+g==} + cpu: [arm64] + os: [openbsd] + + lefthook-openbsd-x64@1.9.3: + resolution: {integrity: sha512-gs+QXcSRtIXldGJ8KjtZzlhFckvkyahim7QdEKO6xnv95pnnY8TTZ3bYEIq69F/l+43PIMQGUOIrbA7cD0BvVQ==} + cpu: [x64] + os: [openbsd] + + lefthook-windows-arm64@1.9.3: + resolution: {integrity: sha512-l2OUYoPGcIgK934R5WS+y7YRXfn6DWm/otr4N87J/RBAe5SJ+sCHyteJUGL8QoPfNsjtlnDRP7w9zvN7sNcjDg==} + cpu: [arm64] + os: [win32] + + lefthook-windows-x64@1.9.3: + resolution: {integrity: sha512-QyNY7epLimf7w7GzWnX/sYXhPZ05WKtI4dppuPtUE0pjuDY9PgeQFkDkfwdnDfitZ8Ywa1Uo+oiXn588c6+7ow==} + cpu: [x64] + os: [win32] + + lefthook@1.9.3: + resolution: {integrity: sha512-3YKc6emZx/w3tQYysqzz0Xi5S8zjPvP7+nyAI4ZO6T5mXUfrn/v5G3yC0J9ysFxnxGGSizdn6yOEfqQzie291g==} + hasBin: true + leven@3.1.0: resolution: {integrity: sha512-qsda+H8jTaUaN/x5vzW2rzc+8Rw4TAQ/4KjB46IwK5VH+IlVeeeje/EoZRpiXvIqjFgK84QffqPztGI3VBLG1A==} engines: {node: '>=6'} @@ -2347,25 +3223,12 @@ packages: resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} engines: {node: '>= 0.8.0'} - lilconfig@3.0.0: - resolution: {integrity: sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==} - engines: {node: '>=14'} - lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} linkify-it@4.0.1: resolution: {integrity: sha512-C7bfi1UZmoj8+PQx22XyeXCuBlokoyWQL5pWSP+EI6nzRylyThouddufc2c1NDIcP9k5agmN9fLpA7VNJfIiqw==} - lint-staged@15.2.2: - resolution: {integrity: sha512-TiTt93OPh1OZOsb5B7k96A/ATl2AjIZo+vnzFZ6oHK5FuTk63ByDtxGQpHm+kFETjEWqgkF95M8FRXKR/LEBcw==} - engines: {node: '>=18.12.0'} - hasBin: true - - listr2@8.0.1: - resolution: {integrity: sha512-ovJXBXkKGfq+CwmKTjluEqFi3p4h8xvkxGQQAQan22YCgef4KZ1mKGjzfGh6PL6AW5Csw0QiQPNuQyH+6Xk3hA==} - engines: {node: '>=18.0.0'} - load-yaml-file@0.2.0: resolution: {integrity: sha512-OfCBkGEw4nN6JLtgRidPX6QxjBQGQf72q3si2uvqyFEMbycSFFHwAZeXx6cJgFM9wmLrf9zBwCP3Ivqa+LLZPw==} engines: {node: '>=6'} @@ -2378,6 +3241,9 @@ packages: resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} engines: {node: '>=10'} + lodash.debounce@4.0.8: + resolution: {integrity: sha512-FT1yDzDYEoYWhnSGnpE/4Kj1fLZkDFyqRb7fNt6FdYOSxlUWAtp42Eh6Wb0rGIv/m9Bgo7x4GhQbm5Ys4SG5ow==} + lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} @@ -2387,17 +3253,15 @@ packages: lodash.truncate@4.4.2: resolution: {integrity: sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==} - log-update@6.0.0: - resolution: {integrity: sha512-niTvB4gqvtof056rRIrTZvjNYE4rCUzO6X/X+kYjd7WFxXeJ0NwEFnRxX6ehkvv3jTwrXnNdtAak5XYZuIyPFw==} - engines: {node: '>=18'} + lodash@4.17.21: + resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} loose-envify@1.4.0: resolution: {integrity: sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q==} hasBin: true - lru-cache@10.2.0: - resolution: {integrity: sha512-2bIM8x+VAf6JT4bKAljS1qUWgMsqZRPGJS6FSahIMPVvctcNhyVp7AJu7quxOW9jwkryBReKZY5tY5JYv2n/7Q==} - engines: {node: 14 || >=16.14} + loupe@3.1.2: + resolution: {integrity: sha512-23I4pFZHmAemUnz8WZXbYRSKYj801VDaNv9ETuMh7IrMc7VuVVSo+Z9iLE3ni30+U48iDWfi30d3twAXBYmnCg==} lru-cache@4.1.5: resolution: {integrity: sha512-sWZlbEP2OsHNkXrMl5GYk/jKk70MBng6UU4YI/qGDYbgf6YbP4EvmqISbXCoJiRKs+1bSpFHVgQxvJ17F2li5g==} @@ -2409,6 +3273,9 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + magic-string@0.30.13: + resolution: {integrity: sha512-8rYBO+MsWkgjDSOvLomYnzhdwEG51olQ4zL5KXnNJWV5MNmrb4rTZdrtkhxjnD/QyZUqR/Z/XDsUs/4ej2nx0g==} + make-dir@4.0.0: resolution: {integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw==} engines: {node: '>=10'} @@ -2477,14 +3344,14 @@ packages: resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} engines: {node: '>=8.6'} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} + engines: {node: '>=8.6'} + mimic-fn@2.1.0: resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} engines: {node: '>=6'} - mimic-fn@4.0.0: - resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} - engines: {node: '>=12'} - min-indent@1.0.1: resolution: {integrity: sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==} engines: {node: '>=4'} @@ -2492,14 +3359,14 @@ packages: minimatch@3.1.2: resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} - minimatch@8.0.4: - resolution: {integrity: sha512-W0Wvr9HyFXZRGIDgCicunpQ299OKXs9RgZfaukz4qAW/pJhcpUfupc9c+OObPOFueNy8VSrZgEmDtk6Kh4WzDA==} - engines: {node: '>=16 || 14 >=14.17'} - minimatch@9.0.4: resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} engines: {node: '>=16 || 14 >=14.17'} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} + engines: {node: '>=16 || 14 >=14.17'} + minimist-options@4.1.0: resolution: {integrity: sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==} engines: {node: '>= 6'} @@ -2507,24 +3374,16 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - minipass@4.2.8: - resolution: {integrity: sha512-fNzuVyifolSLFL4NzpF+wEF4qrgqaaKX0haXPQEdQ7NKAN+WecoKMHV09YcuL/DHxrUsYQOK3MiuDf7Ip2OXfQ==} - engines: {node: '>=8'} - - minipass@7.0.4: - resolution: {integrity: sha512-jYofLM5Dam9279rdkWzqHozUo4ybjdZmCsDHePy5V/PbBcVMiSZR97gmAy45aqi8CK1lG2ECd356FU86avfwUQ==} - engines: {node: '>=16 || 14 >=14.17'} - mixme@0.5.10: resolution: {integrity: sha512-5H76ANWinB1H3twpJ6JY8uvAtpmFvHNArpilJAjXRKXSDDLPIMoZArw5SH0q9z+lLs8IrMw7Q2VWpWimFKFT1Q==} engines: {node: '>= 8.0.0'} - ms@2.0.0: - resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} - ms@2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -2533,12 +3392,22 @@ packages: natural-compare@1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} + neostandard@0.11.9: + resolution: {integrity: sha512-kRhckW3lC8PbaxfmTG0DKNvqnSCo7q9LeaKHTgPxfSjP21FwHN3Ovzvy+nEW//7HDq3fhFN7nxYibirHnes0iw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + hasBin: true + peerDependencies: + eslint: ^9.0.0 + node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} node-releases@2.0.14: resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.19: + resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + normalize-package-data@2.5.0: resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==} @@ -2554,10 +3423,6 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - npm-run-path@5.3.0: - resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - nth-check@2.1.1: resolution: {integrity: sha512-lqjrjmaOoAnWfMmBPL+XNnynZh2+swxiX3WUE0s4yEHI6m+AwrK2UZOimIRl3X/4QctVqS8AiZjFqyOGrMXb/w==} @@ -2584,8 +3449,8 @@ packages: resolution: {integrity: sha512-k6E21FzySsSK5a21KRADBd/NGneRegFO5pLHfdQLpRDETUNJueLXs3WCzyQ3tFRDYgbq3KHGXfTbi2bs8WQ6rQ==} engines: {node: '>= 0.4'} - object.hasown@1.1.4: - resolution: {integrity: sha512-FZ9LZt9/RHzGySlBARE3VF+gE26TxR38SdmqOqliuTnl9wrKulaQs+4dee1V+Io8VfxqzAfHu6YuRgUy8OHoTg==} + object.groupby@1.0.3: + resolution: {integrity: sha512-+Lhy3TQTuzXI5hevh8sBGqbmurHbbIjAi0Z4S63nthVLmLxfbj4T54a4CfZrXIrt9iP4mVAPYMo/v99taj3wjQ==} engines: {node: '>= 0.4'} object.values@1.2.0: @@ -2599,10 +3464,6 @@ packages: resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} engines: {node: '>=6'} - onetime@6.0.0: - resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} - engines: {node: '>=12'} - optionator@0.9.3: resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} engines: {node: '>= 0.8.0'} @@ -2662,17 +3523,9 @@ packages: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} - path-key@4.0.0: - resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} - engines: {node: '>=12'} - path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.1: - resolution: {integrity: sha512-MkhCqzzBEpPvxxQ71Md0b1Kk51W01lrYvlMzSUaIzNsODdd7mqhiimSZlr+VegAz5Z6Vzt9Xg2ttE//XBhH3EQ==} - engines: {node: '>=16 || 14 >=14.17'} - path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} @@ -2681,17 +3534,30 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} + pathe@1.1.2: + resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + peowly@1.3.2: + resolution: {integrity: sha512-BYIrwr8JCXY49jUZscgw311w9oGEKo7ux/s+BxrhKTQbiQ0iYNdZNJ5LgagaeercQdFHwnR7Z5IxxFWVQ+BasQ==} + engines: {node: '>=18.6.0'} + picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} - pidtree@0.6.0: - resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} - engines: {node: '>=0.10'} - hasBin: true + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} pify@4.0.1: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} @@ -2705,6 +3571,10 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} + pluralize@8.0.0: + resolution: {integrity: sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA==} + engines: {node: '>=4'} + possible-typed-array-names@1.0.0: resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} engines: {node: '>= 0.4'} @@ -2743,6 +3613,10 @@ packages: resolution: {integrity: sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==} engines: {node: ^10 || ^12 || >=14} + postcss@8.4.49: + resolution: {integrity: sha512-OCVPnIObs4N29kxTjzLfUryOkvZEq+pf8jTF0lg8E7uETuWHA+v7j3c/xJmiqpX450191LlmZfUKkXxkTry7nA==} + engines: {node: ^10 || ^12 || >=14} + preferred-pm@3.1.3: resolution: {integrity: sha512-MkXsENfftWSRpzCzImcp4FRsCc3y1opwB73CfCNWyzMqArju2CrlMHlqB7VexKiPEOjGMbttv1r9fSCn5S610w==} engines: {node: '>=10'} @@ -2811,20 +3685,53 @@ packages: resolution: {integrity: sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==} engines: {node: '>=8'} + refa@0.12.1: + resolution: {integrity: sha512-J8rn6v4DBb2nnFqkqwy6/NnTYMcgLA+sLr0iIO41qpv0n+ngb7ksag2tMRl0inb1bbO/esUwzW1vbJi7K0sI0g==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + reflect.getprototypeof@1.0.6: resolution: {integrity: sha512-fmfw4XgoDke3kdI6h4xcUz1dG8uaiv5q9gcEwLS4Pnth2kxT+GZ7YehS1JTMGBQmtV7Y4GFGbs2re2NqhdozUg==} engines: {node: '>= 0.4'} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} + engines: {node: '>=4'} + + regenerate@1.4.2: + resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} + regenerator-runtime@0.14.1: resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} + regenerator-transform@0.15.2: + resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} + + regexp-ast-analysis@0.7.1: + resolution: {integrity: sha512-sZuz1dYW/ZsfG17WSAG7eS85r5a0dDsvg+7BiiYR5o6lKCAtUrEwdmRmaGF6rwVj3LcmAeYkOWKEPlbPzN3Y3A==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + + regexp-tree@0.1.27: + resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} + hasBin: true + regexp.prototype.flags@1.5.2: resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} engines: {node: '>= 0.4'} - regexpp@3.2.0: - resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} - engines: {node: '>=8'} + regexpu-core@6.2.0: + resolution: {integrity: sha512-H66BPQMrv+V16t8xtmq+UC0CBpiTBA60V8ibS1QVReIp8T1z8hwFxqcGzm9K6lgsN7sB5edVH8a+ze6Fqm4weA==} + engines: {node: '>=4'} + + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.10.0: + resolution: {integrity: sha512-qx+xQGZVsy55CH0a1hiVwHmqjLryfh7wQyF5HO07XJ9f7dQMY/gPQHhlyDkIzJKC+x2fUCpCcUODUUUFrm7SHA==} + hasBin: true + + regjsparser@0.12.0: + resolution: {integrity: sha512-cnE+y8bz4NhMjISKbgeVJtqNbtf5QpjZP+Bslo+UqkIt9QPnX9q095eiRRASJG1/tz6dlNr6Z5NsBiWYokp6EQ==} + hasBin: true require-directory@2.1.1: resolution: {integrity: sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==} @@ -2864,29 +3771,23 @@ packages: resolution: {integrity: sha512-U7WjGVG9sH8tvjW5SmGbQuui75FiyjAX72HX15DwBBwF9dNiQZRQAg9nnPhYy+TUnE0+VcrttuvNI8oSxZcocA==} hasBin: true - restore-cursor@4.0.0: - resolution: {integrity: sha512-I9fPXU9geO9bHOt9pHHOhOkYerIMsmVaWB0rA2AI9ERh/+x/i7MV5HKBNrg+ljO5eoPVgCcnFuRjJ9uH6I/3eg==} - engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - reusify@1.0.4: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.3.1: - resolution: {integrity: sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==} - rimraf@3.0.2: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} deprecated: Rimraf versions prior to v4 are no longer supported hasBin: true + rollup@4.27.4: + resolution: {integrity: sha512-RLKxqHEMjh/RGLsDxAEsaLO3mWgyoU6x9w6n1ikAzet4B3gI2/3yP6PWY2p9QzRTh6MfEIXB3MwsOY0Iv3vNrw==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + run-parallel@1.2.0: resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - safe-array-concat@1.1.0: - resolution: {integrity: sha512-ZdQ0Jeb9Ofti4hbt5lX3T2JcAamT9hfzYU1MNB+z/jaEbB6wfFfPIR/zEORmZqobkCCJhSjodobH6WHNmJ97dg==} - engines: {node: '>=0.4'} - safe-array-concat@1.1.2: resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} engines: {node: '>=0.4'} @@ -2898,6 +3799,10 @@ packages: safer-buffer@2.1.2: resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + scslre@0.3.0: + resolution: {integrity: sha512-3A6sD0WYP7+QrjbfNA2FN3FsOaGGFoekCVgTyypy53gPxhbkCIjtO6YWgdrfM+n/8sI8JeXZOIxsHjMTNxQ4nQ==} + engines: {node: ^14.0.0 || >=16.0.0} + semver@5.7.2: resolution: {integrity: sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==} hasBin: true @@ -2911,6 +3816,11 @@ packages: engines: {node: '>=10'} hasBin: true + semver@7.6.3: + resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} + engines: {node: '>=10'} + hasBin: true + set-blocking@2.0.0: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} @@ -2938,21 +3848,16 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - side-channel@1.0.5: - resolution: {integrity: sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==} - engines: {node: '>= 0.4'} - side-channel@1.0.6: resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} engines: {node: '>= 0.4'} + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + signal-exit@3.0.7: resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} - signal-exit@4.1.0: - resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} - engines: {node: '>=14'} - sisteransi@1.0.5: resolution: {integrity: sha512-bLGGlR1QxBcynn2d5YmDX4MGjlZvy2MRBDRNHLJ8VI6l6+9FUiyTFNJ0IveOSP0bcXgVDPRcfGqA0pjaqUpfVg==} @@ -2968,14 +3873,6 @@ packages: resolution: {integrity: sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ==} engines: {node: '>=10'} - slice-ansi@5.0.0: - resolution: {integrity: sha512-FC+lgizVPfie0kkhqUScwRu1O/lF6NOgJmlCgK+/LYxDCTk8sGelYaHDhFcDN+Sn3Cv+3VSa4Byeo+IMCzpMgQ==} - engines: {node: '>=12'} - - slice-ansi@7.1.0: - resolution: {integrity: sha512-bSiSngZ/jWeX93BqeIAbImyTbEihizcwNjFoRUIY/T1wWQsfsm2Vw1agPKylXvQTU7iASGdHhyqRlqQzfz+Htg==} - engines: {node: '>=18'} - smartwrap@2.0.2: resolution: {integrity: sha512-vCsKNQxb7PnCNd2wY1WClWifAc2lwqsG8OaswpJkVJsvMGcnEntdTCDajZCkk93Ay1U3t/9puJmb525Rg5MZBA==} engines: {node: '>=6'} @@ -2985,9 +3882,16 @@ packages: resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} engines: {node: '>=0.10.0'} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + source-map-support@0.5.13: resolution: {integrity: sha512-SHSKFHadjVA5oR4PPqhtAVdcBWwRYVd6g6cAXnIbRiIwc2EhPrTuKUBdSLvlEKyIP3GCf89fltvcZiP9MMFA1w==} + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + source-map@0.6.1: resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} engines: {node: '>=0.10.0'} @@ -3004,9 +3908,6 @@ packages: spdx-expression-parse@3.0.1: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} - spdx-expression-parse@4.0.0: - resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} - spdx-license-ids@3.0.17: resolution: {integrity: sha512-sh8PWc/ftMqAAdFiBu6Fy6JUOYjqDJBJvIhpfDMyHrr0Rbp5liZqd4TjtQ/RgfLjKFZb+LMx5hpml5qOWy0qvg==} @@ -3017,13 +3918,15 @@ packages: resolution: {integrity: sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==} engines: {node: '>=10'} + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + stream-transform@2.1.3: resolution: {integrity: sha512-9GHUiM5hMiCi6Y03jD2ARC1ettBXkQBoQAe7nJsPknnI0ow10aXjTnew8QtYQmLjzn974BnmWEAJgCY6ZP1DeQ==} - string-argv@0.3.2: - resolution: {integrity: sha512-aqD2Q0144Z+/RqG52NeHEkZauTAUWJO8c6yTftGJKO3Tja5tUgIfmIl6kExvhtxSDP7fXB6DvzkfMpCd/F3G+Q==} - engines: {node: '>=0.6.19'} - string-length@4.0.2: resolution: {integrity: sha512-+l6rNN5fYHNhZZy41RXsYptCjA2Igmq4EG7kZAYFQI1E1VTXarr6ZPXBg6eq7Y6eK4FEhY6AJlyuFIb/v/S0VQ==} engines: {node: '>=10'} @@ -3032,35 +3935,24 @@ packages: resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} engines: {node: '>=8'} - string-width@5.1.2: - resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} - engines: {node: '>=12'} - - string-width@7.1.0: - resolution: {integrity: sha512-SEIJCWiX7Kg4c129n48aDRwLbFb2LJmXXFrWBG4NGaRtMQ3myKPKbwrD1BKqQn74oCoNMBVrfDEr5M9YxCsrkw==} - engines: {node: '>=18'} + string.prototype.includes@2.0.1: + resolution: {integrity: sha512-o7+c9bW6zpAdJHTtujeePODAhkuicdAryFsfVKwA+wGw89wJ4GTY484WTucM9hLtDEOpOvI+aHnzqnC5lHp4Rg==} + engines: {node: '>= 0.4'} string.prototype.matchall@4.0.11: resolution: {integrity: sha512-NUdh0aDavY2og7IbBPenWqR9exH+E26Sv8e0/eTe1tltDGZL+GtBkDAnnyBtmekfK6/Dq3MkcGtzXFEd1LQrtg==} engines: {node: '>= 0.4'} - string.prototype.trim@1.2.8: - resolution: {integrity: sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ==} - engines: {node: '>= 0.4'} + string.prototype.repeat@1.0.0: + resolution: {integrity: sha512-0u/TldDbKD8bFCQ/4f5+mNRrXwZ8hg2w7ZR8wa16e8z9XpePWl3eGEcUD0OXpEH/VJH/2G3gjUtR3ZOiBe2S/w==} string.prototype.trim@1.2.9: resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} engines: {node: '>= 0.4'} - string.prototype.trimend@1.0.7: - resolution: {integrity: sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA==} - string.prototype.trimend@1.0.8: resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} - string.prototype.trimstart@1.0.7: - resolution: {integrity: sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg==} - string.prototype.trimstart@1.0.8: resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} engines: {node: '>= 0.4'} @@ -3069,10 +3961,6 @@ packages: resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} engines: {node: '>=8'} - strip-ansi@7.1.0: - resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} - engines: {node: '>=12'} - strip-bom@3.0.0: resolution: {integrity: sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA==} engines: {node: '>=4'} @@ -3085,10 +3973,6 @@ packages: resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} engines: {node: '>=6'} - strip-final-newline@3.0.0: - resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} - engines: {node: '>=12'} - strip-indent@3.0.0: resolution: {integrity: sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==} engines: {node: '>=8'} @@ -3151,16 +4035,40 @@ packages: resolution: {integrity: sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==} engines: {node: '>=10.0.0'} + tapable@2.2.1: + resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} + engines: {node: '>=6'} + term-size@2.2.1: resolution: {integrity: sha512-wK0Ri4fOGjv/XPy8SBHZChl8CM7uMc5VML7SqiQ0zG7+J5Vr+RMQDoHa2CNT6KHUnTGIXH34UDMkPzAUyapBZg==} engines: {node: '>=8'} + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} + engines: {node: '>=10'} + hasBin: true + test-exclude@6.0.0: resolution: {integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w==} engines: {node: '>=8'} - text-table@0.2.0: - resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.1: + resolution: {integrity: sha512-WiCJLEECkO18gwqIp6+hJg0//p23HXp4S+gGtAKu3mI2F2/sXC4FvHvXvB0zJVVaTPhx1/tOwdbRsa1sOBIKqQ==} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@1.2.0: + resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} tmp@0.0.33: resolution: {integrity: sha512-jRCJlojKnZ3addtTOjdIqoRuPEKBvNXcGYqzO6zWZX8KfKEpnGY5jfggJQ3EjKuu8D4bJRr0y+cYJFmYbImXGw==} @@ -3195,38 +4103,38 @@ packages: engines: {node: '>=8.0.0'} hasBin: true - turbo-darwin-64@1.12.4: - resolution: {integrity: sha512-dBwFxhp9isTa9RS/fz2gDVk5wWhKQsPQMozYhjM7TT4jTrnYn0ZJMzr7V3B/M/T8QF65TbniW7w1gtgxQgX5Zg==} + turbo-darwin-64@2.3.3: + resolution: {integrity: sha512-bxX82xe6du/3rPmm4aCC5RdEilIN99VUld4HkFQuw+mvFg6darNBuQxyWSHZTtc25XgYjQrjsV05888w1grpaA==} cpu: [x64] os: [darwin] - turbo-darwin-arm64@1.12.4: - resolution: {integrity: sha512-1Uo5iI6xsJ1j9ObsqxYRsa3W26mEbUe6fnj4rQYV6kDaqYD54oAMJ6hM53q9rB8JvFxwdrUXGp3PwTw9A0qqkA==} + turbo-darwin-arm64@2.3.3: + resolution: {integrity: sha512-DYbQwa3NsAuWkCUYVzfOUBbSUBVQzH5HWUFy2Kgi3fGjIWVZOFk86ss+xsWu//rlEAfYwEmopigsPYSmW4X15A==} cpu: [arm64] os: [darwin] - turbo-linux-64@1.12.4: - resolution: {integrity: sha512-ONg2aSqKP7LAQOg7ysmU5WpEQp4DGNxSlAiR7um+LKtbmC/UxogbR5+T+Uuq6zGuQ5kJyKjWJ4NhtvUswOqBsA==} + turbo-linux-64@2.3.3: + resolution: {integrity: sha512-eHj9OIB0dFaP6BxB88jSuaCLsOQSYWBgmhy2ErCu6D2GG6xW3b6e2UWHl/1Ho9FsTg4uVgo4DB9wGsKa5erjUA==} cpu: [x64] os: [linux] - turbo-linux-arm64@1.12.4: - resolution: {integrity: sha512-9FPufkwdgfIKg/9jj87Cdtftw8o36y27/S2vLN7FTR2pp9c0MQiTBOLVYadUr1FlShupddmaMbTkXEhyt9SdrA==} + turbo-linux-arm64@2.3.3: + resolution: {integrity: sha512-NmDE/NjZoDj1UWBhMtOPmqFLEBKhzGS61KObfrDEbXvU3lekwHeoPvAMfcovzswzch+kN2DrtbNIlz+/rp8OCg==} cpu: [arm64] os: [linux] - turbo-windows-64@1.12.4: - resolution: {integrity: sha512-2mOtxHW5Vjh/5rDVu/aFwsMzI+chs8XcEuJHlY1sYOpEymYTz+u6AXbnzRvwZFMrLKr7J7fQOGl+v96sLKbNdA==} + turbo-windows-64@2.3.3: + resolution: {integrity: sha512-O2+BS4QqjK3dOERscXqv7N2GXNcqHr9hXumkMxDj/oGx9oCatIwnnwx34UmzodloSnJpgSqjl8iRWiY65SmYoQ==} cpu: [x64] os: [win32] - turbo-windows-arm64@1.12.4: - resolution: {integrity: sha512-nOY5wae9qnxPOpT1fRuYO0ks6dTwpKMPV6++VkDkamFDLFHUDVM/9kmD2UTeh1yyrKnrZksbb9zmShhmfj1wog==} + turbo-windows-arm64@2.3.3: + resolution: {integrity: sha512-dW4ZK1r6XLPNYLIKjC4o87HxYidtRRcBeo/hZ9Wng2XM/MqqYkAyzJXJGgRMsc0MMEN9z4+ZIfnSNBrA0b08ag==} cpu: [arm64] os: [win32] - turbo@1.12.4: - resolution: {integrity: sha512-yUJ7elEUSToiGwFZogXpYKJpQ0BvaMbkEuQECIWtkBLcmWzlMOt6bActsIm29oN83mRU0WbzGt4e8H1KHWedhg==} + turbo@2.3.3: + resolution: {integrity: sha512-DUHWQAcC8BTiUZDRzAYGvpSpGLiaOQPfYXlCieQbwUvmml/LRGIe3raKdrOPOoiX0DYlzxs2nH6BoWJoZrj8hA==} hasBin: true type-check@0.4.0: @@ -3245,10 +4153,6 @@ packages: resolution: {integrity: sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==} engines: {node: '>=10'} - type-fest@0.20.2: - resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} - engines: {node: '>=10'} - type-fest@0.21.3: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} @@ -3261,10 +4165,6 @@ packages: resolution: {integrity: sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==} engines: {node: '>=8'} - type-fest@3.13.1: - resolution: {integrity: sha512-tLq3bSNx+xSpwvAJnzrK0Ep5CLNWjvFTOp71URMaAEWBfRb9nnJiBoUe0tF8bI4ZFO3omgBR6NvnbzVUT3Ly4g==} - engines: {node: '>=14.16'} - typed-array-buffer@1.0.2: resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} engines: {node: '>= 0.4'} @@ -3277,14 +4177,27 @@ packages: resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} engines: {node: '>= 0.4'} - typed-array-length@1.0.5: - resolution: {integrity: sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==} - engines: {node: '>= 0.4'} - typed-array-length@1.0.6: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} + typescript-eslint@8.17.0: + resolution: {integrity: sha512-409VXvFd/f1br1DCbuKNFqQpXICoTB+V51afcwG1pn1a3Cp92MqAUges3YjwEdQ0cMUoCIodjVDAYzyD8h3SYA==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript-eslint@8.18.0: + resolution: {integrity: sha512-Xq2rRjn6tzVpAyHr3+nmSg1/9k9aIHnJ2iZeOH7cfGOWqTkXTm3kwpQglEuLGdNrYvPF+2gtAs+/KF5rjVo+WQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + typescript: '>=4.8.4 <5.8.0' + typescript@5.3.3: resolution: {integrity: sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==} engines: {node: '>=14.17'} @@ -3296,6 +4209,22 @@ packages: unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} + engines: {node: '>=4'} + + unicode-match-property-ecmascript@2.0.0: + resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} + engines: {node: '>=4'} + + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} + engines: {node: '>=4'} + + unicode-property-aliases-ecmascript@2.1.0: + resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} + engines: {node: '>=4'} + unicorn-magic@0.1.0: resolution: {integrity: sha512-lRfVq8fE8gz6QMBuDM6a+LO3IAzTi05H6gCVaUpir2E1Rwpo4ZUog45KpNXKC/Mn3Yb9UDuHumeFTo9iV/D9FQ==} engines: {node: '>=18'} @@ -3310,6 +4239,12 @@ packages: peerDependencies: browserslist: '>= 4.21.0' + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} + hasBin: true + peerDependencies: + browserslist: '>= 4.21.0' + uri-js@4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} @@ -3326,6 +4261,67 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + vite-node@2.1.5: + resolution: {integrity: sha512-rd0QIgx74q4S1Rd56XIiL2cYEdyWn13cunYBIuqh9mpmQr7gGS0IxXoP8R6OaZtNQQLyXSWbd4rXKYUbhFpK5w==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + + vite@5.4.11: + resolution: {integrity: sha512-c7jFQRklXua0mTzneGW9QVyxFjUgwcihC4bXEtujIo2ouWCe1Ajt/amn2PCxYnhYfd5k09JX3SB7OYWFKYqj8Q==} + 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: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + + vitest@2.1.5: + resolution: {integrity: sha512-P4ljsdpuzRTPI/kbND2sDZ4VmieerR2c9szEZpjc+98Z9ebvnXmM5+0tHEKqYZumXqlvnmfWsjeFOjXVriDG7A==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/node': ^18.0.0 || >=20.0.0 + '@vitest/browser': 2.1.5 + '@vitest/ui': 2.1.5 + 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 + walker@1.0.8: resolution: {integrity: sha512-ts/8E8l5b7kY0vlWLewOkDXMmPdLcVV4GmOQLyxuSswIJsweeFZtAsMF7k1Nszz+TYBQrlYRmzOnr398y1JemQ==} @@ -3350,10 +4346,6 @@ packages: resolution: {integrity: sha512-Lhs9Pmyph0p5n5Z3mVnN0yWcbQYUAD7rbQUiMsQxOJ3T57k7RFe35SUwWMf7dsbDZks1uOmw4AecB/JMDj3v/w==} engines: {node: '>=8.15'} - which-typed-array@1.1.14: - resolution: {integrity: sha512-VnXFiIW8yNn9kIHN88xvZ4yOWchftKDsRJ8fEPacX/wl1lOvBrhsJ/OeJCXq7B0AaijRuqgzSKalJoPk+D8MPg==} - engines: {node: '>= 0.4'} - which-typed-array@1.1.15: resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} engines: {node: '>= 0.4'} @@ -3367,6 +4359,11 @@ packages: engines: {node: '>= 8'} hasBin: true + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -3375,14 +4372,6 @@ packages: resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} engines: {node: '>=10'} - wrap-ansi@8.1.0: - resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} - engines: {node: '>=12'} - - wrap-ansi@9.0.0: - resolution: {integrity: sha512-G8ura3S+3Z2G+mkgNRq8dqaFZAuxfsxpBB8OCTGRTCtp+l/v9nbFNmCUP1BZMts3G1142MsZfn6eeUKrr4PD1Q==} - engines: {node: '>=18'} - wrappy@1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} @@ -3406,6 +4395,10 @@ packages: yallist@4.0.0: resolution: {integrity: sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==} + yaml-eslint-parser@1.2.3: + resolution: {integrity: sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==} + engines: {node: ^14.17.0 || >=16.0.0} + yaml@1.10.2: resolution: {integrity: sha512-r3vXyErRCYJ7wg28yvBY5VSoAF8ZvlcW9/BwUzEtUsjvX/DKs24dIkuwjtuprwJJHsbyUbLApepYTR1BN4uHrg==} engines: {node: '>= 6'} @@ -3452,128 +4445,161 @@ snapshots: '@babel/highlight': 7.23.4 chalk: 2.4.2 - '@babel/code-frame@7.24.2': - dependencies: - '@babel/highlight': 7.24.2 - picocolors: 1.0.0 - '@babel/code-frame@7.24.7': dependencies: '@babel/highlight': 7.24.7 picocolors: 1.0.0 + '@babel/code-frame@7.26.2': + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 + '@babel/compat-data@7.24.1': {} + '@babel/compat-data@7.26.3': {} + '@babel/core@7.24.3': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 + '@babel/code-frame': 7.24.7 + '@babel/generator': 7.24.8 '@babel/helper-compilation-targets': 7.23.6 '@babel/helper-module-transforms': 7.23.3(@babel/core@7.24.3) '@babel/helpers': 7.24.1 - '@babel/parser': 7.24.1 - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.8 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.24.8 convert-source-map: 2.0.0 - debug: 4.3.4 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/eslint-parser@7.24.1(@babel/core@7.24.3)(eslint@8.57.0)': + '@babel/core@7.26.0': dependencies: - '@babel/core': 7.24.3 - '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 - eslint-visitor-keys: 2.1.0 + '@ampproject/remapping': 2.3.0 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + convert-source-map: 2.0.0 + debug: 4.3.7 + gensync: 1.0.0-beta.2 + json5: 2.2.3 semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/eslint-parser@7.24.8(@babel/core@7.24.3)(eslint@8.57.0)': + '@babel/eslint-parser@7.25.9(@babel/core@7.26.0)(eslint@9.17.0)': dependencies: - '@babel/core': 7.24.3 + '@babel/core': 7.26.0 '@nicolo-ribaudo/eslint-scope-5-internals': 5.1.1-v1 - eslint: 8.57.0 + eslint: 9.17.0 eslint-visitor-keys: 2.1.0 semver: 6.3.1 '@babel/generator@7.24.1': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 '@babel/generator@7.24.8': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 2.5.2 - '@babel/helper-annotate-as-pure@7.22.5': + '@babel/generator@7.26.3': dependencies: - '@babel/types': 7.24.0 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.24.7': + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.26.0 '@babel/helper-compilation-targets@7.23.6': dependencies: '@babel/compat-data': 7.24.1 - '@babel/helper-validator-option': 7.23.5 + '@babel/helper-validator-option': 7.25.9 browserslist: 4.23.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.4(@babel/core@7.24.3)': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 - '@babel/helper-replace-supers': 7.24.1(@babel/core@7.24.3) - '@babel/helper-skip-transparent-expression-wrappers': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 + '@babel/compat-data': 7.26.3 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 + lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-environment-visitor@7.22.20': {} - - '@babel/helper-environment-visitor@7.24.7': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.26.4 + semver: 6.3.1 + transitivePeerDependencies: + - supports-color - '@babel/helper-function-name@7.23.0': + '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.0)': dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + regexpu-core: 6.2.0 + semver: 6.3.1 - '@babel/helper-function-name@7.24.7': + '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.0)': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + debug: 4.3.7 + lodash.debounce: 4.0.8 + resolve: 1.22.8 + transitivePeerDependencies: + - supports-color - '@babel/helper-hoist-variables@7.22.5': + '@babel/helper-environment-visitor@7.24.7': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 - '@babel/helper-hoist-variables@7.24.7': + '@babel/helper-function-name@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/template': 7.24.7 + '@babel/types': 7.26.0 - '@babel/helper-member-expression-to-functions@7.23.0': + '@babel/helper-hoist-variables@7.24.7': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 - '@babel/helper-module-imports@7.24.3': + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/types': 7.24.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color '@babel/helper-module-imports@7.24.7': dependencies: @@ -3582,222 +4608,727 @@ snapshots: transitivePeerDependencies: - supports-color + '@babel/helper-module-imports@7.25.9': + dependencies: + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color + '@babel/helper-module-transforms@7.23.3(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-module-imports': 7.24.3 + '@babel/helper-environment-visitor': 7.24.7 + '@babel/helper-module-imports': 7.24.7 '@babel/helper-simple-access': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/helper-optimise-call-expression@7.22.5': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color - '@babel/helper-plugin-utils@7.24.0': {} + '@babel/helper-optimise-call-expression@7.25.9': + dependencies: + '@babel/types': 7.26.0 - '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-replace-supers@7.24.1(@babel/core@7.24.3)': + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-member-expression-to-functions': 7.23.0 - '@babel/helper-optimise-call-expression': 7.22.5 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color - '@babel/helper-simple-access@7.22.5': + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/types': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.22.5': + '@babel/helper-simple-access@7.22.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 - '@babel/helper-split-export-declaration@7.22.6': + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/types': 7.24.0 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color '@babel/helper-split-export-declaration@7.24.7': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.26.0 '@babel/helper-string-parser@7.24.1': {} '@babel/helper-string-parser@7.24.8': {} - '@babel/helper-validator-identifier@7.22.20': {} + '@babel/helper-string-parser@7.25.9': {} '@babel/helper-validator-identifier@7.24.7': {} - '@babel/helper-validator-option@7.23.5': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.9': {} + + '@babel/helper-wrap-function@7.25.9': + dependencies: + '@babel/template': 7.25.9 + '@babel/traverse': 7.26.4 + '@babel/types': 7.26.0 + transitivePeerDependencies: + - supports-color '@babel/helpers@7.24.1': dependencies: - '@babel/template': 7.24.0 - '@babel/traverse': 7.24.1 - '@babel/types': 7.24.0 + '@babel/template': 7.24.7 + '@babel/traverse': 7.24.8 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/highlight@7.23.4': + '@babel/helpers@7.26.0': dependencies: - '@babel/helper-validator-identifier': 7.22.20 - chalk: 2.4.2 - js-tokens: 4.0.0 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 - '@babel/highlight@7.24.2': + '@babel/highlight@7.23.4': dependencies: - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.0 '@babel/highlight@7.24.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.9 chalk: 2.4.2 js-tokens: 4.0.0 picocolors: 1.0.0 - '@babel/parser@7.24.1': + '@babel/parser@7.24.8': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 - '@babel/parser@7.24.8': + '@babel/parser@7.26.3': dependencies: - '@babel/types': 7.24.8 + '@babel/types': 7.26.3 - '@babel/plugin-proposal-class-properties@7.18.6(@babel/core@7.24.3)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-create-class-features-plugin': 7.24.4(@babel/core@7.24.3) - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-decorators': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-decorators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-flow@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 '@babel/plugin-syntax-jsx@7.24.1(@babel/core@7.24.3)': dependencies: '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.3)': + dependencies: + '@babel/core': 7.24.3 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.26.4 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 + + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-flow-strip-types@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-flow': 7.26.0(@babel/core@7.26.0) + + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.26.4 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + transitivePeerDependencies: + - supports-color + + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.3)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.3)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.3)': + '@babel/plugin-transform-react-display-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.3)': + '@babel/plugin-transform-react-jsx-development@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.3)': + '@babel/plugin-transform-react-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.3 + transitivePeerDependencies: + - supports-color - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.3)': + '@babel/plugin-transform-react-pure-annotations@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.3)': + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + regenerator-transform: 0.15.2 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.3)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-typescript@7.24.1(@babel/core@7.24.3)': + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-display-name@7.24.7(@babel/core@7.24.3)': + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-react-jsx-development@7.24.7(@babel/core@7.24.3)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.3) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-jsx@7.23.4(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-annotate-as-pure': 7.22.5 - '@babel/helper-module-imports': 7.24.3 - '@babel/helper-plugin-utils': 7.24.0 - '@babel/plugin-syntax-jsx': 7.24.1(@babel/core@7.24.3) - '@babel/types': 7.24.0 - - '@babel/plugin-transform-react-jsx@7.24.7(@babel/core@7.24.3)': - dependencies: - '@babel/core': 7.24.3 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.3) - '@babel/types': 7.24.8 + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.0) + core-js-compat: 3.39.0 + semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-react-pure-annotations@7.24.7(@babel/core@7.24.3)': + '@babel/preset-flow@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-flow-strip-types': 7.25.9(@babel/core@7.26.0) - '@babel/preset-react@7.24.7(@babel/core@7.24.3)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.24.3 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-transform-react-display-name': 7.24.7(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx': 7.24.7(@babel/core@7.24.3) - '@babel/plugin-transform-react-jsx-development': 7.24.7(@babel/core@7.24.3) - '@babel/plugin-transform-react-pure-annotations': 7.24.7(@babel/core@7.24.3) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.26.0 + esutils: 2.0.3 + + '@babel/preset-react@7.26.3(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-transform-react-display-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-jsx-development': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-react-pure-annotations': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color @@ -3805,32 +5336,17 @@ snapshots: dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.0': - dependencies: - '@babel/code-frame': 7.24.2 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - '@babel/template@7.24.7': dependencies: '@babel/code-frame': 7.24.7 '@babel/parser': 7.24.8 - '@babel/types': 7.24.8 + '@babel/types': 7.26.0 - '@babel/traverse@7.24.1': + '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.24.2 - '@babel/generator': 7.24.1 - '@babel/helper-environment-visitor': 7.22.20 - '@babel/helper-function-name': 7.23.0 - '@babel/helper-hoist-variables': 7.22.5 - '@babel/helper-split-export-declaration': 7.22.6 - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 - debug: 4.3.4 - globals: 11.12.0 - transitivePeerDependencies: - - supports-color + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.3 + '@babel/types': 7.26.3 '@babel/traverse@7.24.8': dependencies: @@ -3842,7 +5358,19 @@ snapshots: '@babel/helper-split-export-declaration': 7.24.7 '@babel/parser': 7.24.8 '@babel/types': 7.24.8 - debug: 4.3.4 + debug: 4.3.7 + globals: 11.12.0 + transitivePeerDependencies: + - supports-color + + '@babel/traverse@7.26.4': + dependencies: + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.3 + '@babel/parser': 7.26.3 + '@babel/template': 7.25.9 + '@babel/types': 7.26.3 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color @@ -3850,7 +5378,7 @@ snapshots: '@babel/types@7.24.0': dependencies: '@babel/helper-string-parser': 7.24.1 - '@babel/helper-validator-identifier': 7.22.20 + '@babel/helper-validator-identifier': 7.25.9 to-fast-properties: 2.0.0 '@babel/types@7.24.8': @@ -3859,6 +5387,16 @@ snapshots: '@babel/helper-validator-identifier': 7.24.7 to-fast-properties: 2.0.0 + '@babel/types@7.26.0': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@babel/types@7.26.3': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@bcoe/v8-coverage@0.2.3': {} '@changesets/apply-release-plan@7.0.0': @@ -4013,26 +5551,99 @@ snapshots: dependencies: postcss-selector-parser: 6.0.16 - '@es-joy/jsdoccomment@0.42.0': - dependencies: - comment-parser: 1.4.1 - esquery: 1.5.0 - jsdoc-type-pratt-parser: 4.0.0 + '@esbuild/aix-ppc64@0.21.5': + optional: true + + '@esbuild/android-arm64@0.21.5': + optional: true + + '@esbuild/android-arm@0.21.5': + optional: true + + '@esbuild/android-x64@0.21.5': + optional: true + + '@esbuild/darwin-arm64@0.21.5': + optional: true + + '@esbuild/darwin-x64@0.21.5': + optional: true + + '@esbuild/freebsd-arm64@0.21.5': + optional: true + + '@esbuild/freebsd-x64@0.21.5': + optional: true + + '@esbuild/linux-arm64@0.21.5': + optional: true + + '@esbuild/linux-arm@0.21.5': + optional: true + + '@esbuild/linux-ia32@0.21.5': + optional: true + + '@esbuild/linux-loong64@0.21.5': + optional: true + + '@esbuild/linux-mips64el@0.21.5': + optional: true + + '@esbuild/linux-ppc64@0.21.5': + optional: true + + '@esbuild/linux-riscv64@0.21.5': + optional: true + + '@esbuild/linux-s390x@0.21.5': + optional: true + + '@esbuild/linux-x64@0.21.5': + optional: true + + '@esbuild/netbsd-x64@0.21.5': + optional: true + + '@esbuild/openbsd-x64@0.21.5': + optional: true + + '@esbuild/sunos-x64@0.21.5': + optional: true + + '@esbuild/win32-arm64@0.21.5': + optional: true + + '@esbuild/win32-ia32@0.21.5': + optional: true + + '@esbuild/win32-x64@0.21.5': + optional: true - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.17.0)': dependencies: - eslint: 8.57.0 + eslint: 9.17.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.10.0': {} + '@eslint-community/regexpp@4.12.1': {} + + '@eslint/config-array@0.19.0': + dependencies: + '@eslint/object-schema': 2.1.4 + debug: 4.3.7 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + + '@eslint/core@0.9.0': {} - '@eslint/eslintrc@2.1.4': + '@eslint/eslintrc@3.2.0': dependencies: ajv: 6.12.6 - debug: 4.3.4 - espree: 9.6.1 - globals: 13.24.0 - ignore: 5.3.1 + debug: 4.3.7 + espree: 10.3.0 + globals: 14.0.0 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -4040,28 +5651,30 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@9.15.0': {} + + '@eslint/js@9.17.0': {} - '@humanwhocodes/config-array@0.11.14': + '@eslint/object-schema@2.1.4': {} + + '@eslint/plugin-kit@0.2.3': dependencies: - '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.4 - minimatch: 3.1.2 - transitivePeerDependencies: - - supports-color + levn: 0.4.1 + + '@humanfs/core@0.19.1': {} + + '@humanfs/node@0.16.6': + dependencies: + '@humanfs/core': 0.19.1 + '@humanwhocodes/retry': 0.3.1 + + '@humanwhocodes/gitignore-to-minimatch@1.0.2': {} '@humanwhocodes/module-importer@1.0.1': {} - '@humanwhocodes/object-schema@2.0.3': {} + '@humanwhocodes/retry@0.3.1': {} - '@isaacs/cliui@8.0.2': - dependencies: - string-width: 5.1.2 - string-width-cjs: string-width@4.2.3 - strip-ansi: 7.1.0 - strip-ansi-cjs: strip-ansi@6.0.1 - wrap-ansi: 8.1.0 - wrap-ansi-cjs: wrap-ansi@7.0.0 + '@humanwhocodes/retry@0.4.1': {} '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -4245,8 +5858,16 @@ snapshots: '@jridgewell/set-array@1.2.1': {} + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.5 + '@jridgewell/trace-mapping': 0.3.25 + optional: true + '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} + '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 @@ -4275,10 +5896,6 @@ snapshots: - supports-color - typescript - '@next/eslint-plugin-next@14.1.4': - dependencies: - glob: 10.3.10 - '@nicolo-ribaudo/eslint-scope-5-internals@5.1.1-v1': dependencies: eslint-scope: 5.1.1 @@ -4295,9 +5912,76 @@ snapshots: '@nodelib/fs.scandir': 2.1.5 fastq: 1.17.1 - '@pkgjs/parseargs@0.11.0': + '@rollup/plugin-json@6.1.0(rollup@4.27.4)': + dependencies: + '@rollup/pluginutils': 5.1.3(rollup@4.27.4) + optionalDependencies: + rollup: 4.27.4 + + '@rollup/pluginutils@5.1.3(rollup@4.27.4)': + dependencies: + '@types/estree': 1.0.6 + estree-walker: 2.0.2 + picomatch: 4.0.2 + optionalDependencies: + rollup: 4.27.4 + + '@rollup/rollup-android-arm-eabi@4.27.4': + optional: true + + '@rollup/rollup-android-arm64@4.27.4': + optional: true + + '@rollup/rollup-darwin-arm64@4.27.4': + optional: true + + '@rollup/rollup-darwin-x64@4.27.4': + optional: true + + '@rollup/rollup-freebsd-arm64@4.27.4': + optional: true + + '@rollup/rollup-freebsd-x64@4.27.4': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.27.4': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.27.4': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.27.4': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.27.4': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.27.4': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.27.4': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.27.4': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.27.4': + optional: true + + '@rollup/rollup-linux-x64-musl@4.27.4': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.27.4': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.27.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.27.4': optional: true + '@rtsao/scc@1.1.0': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/merge-streams@1.0.0': {} @@ -4310,28 +5994,42 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 + '@stylistic/eslint-plugin@2.11.0(eslint@9.17.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + eslint: 9.17.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + estraverse: 5.3.0 + picomatch: 4.0.2 + transitivePeerDependencies: + - supports-color + - typescript + '@trysound/sax@0.2.0': {} '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.8 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.5 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.1 - '@babel/types': 7.24.0 + '@babel/parser': 7.24.8 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.5': dependencies: - '@babel/types': 7.24.0 + '@babel/types': 7.26.0 + + '@types/estree@1.0.6': {} '@types/graceful-fs@4.1.9': dependencies: @@ -4347,6 +6045,8 @@ snapshots: dependencies: '@types/istanbul-lib-report': 3.0.3 + '@types/json-schema@7.0.15': {} + '@types/json5@0.0.29': {} '@types/minimist@1.2.5': {} @@ -4367,17 +6067,17 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.15.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3)': dependencies: - '@eslint-community/regexpp': 4.10.0 - '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/type-utils': 7.15.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/utils': 7.15.0(eslint@8.57.0)(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.15.0 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.17.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/type-utils': 8.17.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/utils': 8.17.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 8.17.0 + eslint: 9.17.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 ts-api-utils: 1.3.0(typescript@5.3.3) optionalDependencies: @@ -4385,103 +6085,254 @@ snapshots: transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3)': dependencies: - '@typescript-eslint/scope-manager': 7.9.0 - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/typescript-estree': 7.9.0(typescript@5.3.3) - '@typescript-eslint/visitor-keys': 7.9.0 - debug: 4.3.4 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/type-utils': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 8.18.0 + eslint: 9.17.0 + graphemer: 1.4.0 + ignore: 5.3.2 + natural-compare: 1.4.0 + ts-api-utils: 1.3.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.15.0(eslint@9.17.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.15.0 + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/typescript-estree': 8.15.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 8.15.0 + debug: 4.3.7 + eslint: 9.17.0 optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@7.15.0': + '@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.3.3)': dependencies: - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/visitor-keys': 7.15.0 + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 8.17.0 + debug: 4.3.7 + eslint: 9.17.0 + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.3.3) + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.3.7 + eslint: 9.17.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color - '@typescript-eslint/scope-manager@7.9.0': + '@typescript-eslint/scope-manager@8.15.0': dependencies: - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/visitor-keys': 7.9.0 + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/visitor-keys': 8.15.0 - '@typescript-eslint/type-utils@7.15.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/scope-manager@8.17.0': dependencies: - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.3.3) - '@typescript-eslint/utils': 7.15.0(eslint@8.57.0)(typescript@5.3.3) - debug: 4.3.4 - eslint: 8.57.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/visitor-keys': 8.17.0 + + '@typescript-eslint/scope-manager@8.18.0': + dependencies: + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 + + '@typescript-eslint/type-utils@8.17.0(eslint@9.17.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.3.3) + '@typescript-eslint/utils': 8.17.0(eslint@9.17.0)(typescript@5.3.3) + debug: 4.3.7 + eslint: 9.17.0 ts-api-utils: 1.3.0(typescript@5.3.3) optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color + '@typescript-eslint/type-utils@8.18.0(eslint@9.17.0)(typescript@5.3.3)': + dependencies: + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.3.3) + '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + debug: 4.3.7 + eslint: 9.17.0 + ts-api-utils: 1.3.0(typescript@5.3.3) + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + '@typescript-eslint/types@7.15.0': {} - '@typescript-eslint/types@7.9.0': {} + '@typescript-eslint/types@8.15.0': {} + + '@typescript-eslint/types@8.17.0': {} + + '@typescript-eslint/types@8.18.0': {} '@typescript-eslint/typescript-estree@7.15.0(typescript@5.3.3)': dependencies: '@typescript-eslint/types': 7.15.0 '@typescript-eslint/visitor-keys': 7.15.0 - debug: 4.3.4 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.0 + minimatch: 9.0.4 + semver: 7.6.0 + ts-api-utils: 1.3.0(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.15.0(typescript@5.3.3)': + dependencies: + '@typescript-eslint/types': 8.15.0 + '@typescript-eslint/visitor-keys': 8.15.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.17.0(typescript@5.3.3)': + dependencies: + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/visitor-keys': 8.17.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 + ts-api-utils: 1.3.0(typescript@5.3.3) + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + '@typescript-eslint/typescript-estree@8.18.0(typescript@5.3.3)': + dependencies: + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/visitor-keys': 8.18.0 + debug: 4.3.7 + fast-glob: 3.3.2 + is-glob: 4.0.3 + minimatch: 9.0.5 + semver: 7.6.3 ts-api-utils: 1.3.0(typescript@5.3.3) - optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.9.0(typescript@5.3.3)': + '@typescript-eslint/utils@8.17.0(eslint@9.17.0)(typescript@5.3.3)': dependencies: - '@typescript-eslint/types': 7.9.0 - '@typescript-eslint/visitor-keys': 7.9.0 - debug: 4.3.4 - globby: 11.1.0 - is-glob: 4.0.3 - minimatch: 9.0.4 - semver: 7.6.0 - ts-api-utils: 1.3.0(typescript@5.3.3) + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@typescript-eslint/scope-manager': 8.17.0 + '@typescript-eslint/types': 8.17.0 + '@typescript-eslint/typescript-estree': 8.17.0(typescript@5.3.3) + eslint: 9.17.0 optionalDependencies: typescript: 5.3.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@7.15.0(eslint@8.57.0)(typescript@5.3.3)': + '@typescript-eslint/utils@8.18.0(eslint@9.17.0)(typescript@5.3.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.15.0 - '@typescript-eslint/types': 7.15.0 - '@typescript-eslint/typescript-estree': 7.15.0(typescript@5.3.3) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@typescript-eslint/scope-manager': 8.18.0 + '@typescript-eslint/types': 8.18.0 + '@typescript-eslint/typescript-estree': 8.18.0(typescript@5.3.3) + eslint: 9.17.0 + typescript: 5.3.3 transitivePeerDependencies: - supports-color - - typescript '@typescript-eslint/visitor-keys@7.15.0': dependencies: '@typescript-eslint/types': 7.15.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.9.0': + '@typescript-eslint/visitor-keys@8.15.0': dependencies: - '@typescript-eslint/types': 7.9.0 - eslint-visitor-keys: 3.4.3 + '@typescript-eslint/types': 8.15.0 + eslint-visitor-keys: 4.2.0 + + '@typescript-eslint/visitor-keys@8.17.0': + dependencies: + '@typescript-eslint/types': 8.17.0 + eslint-visitor-keys: 4.2.0 - '@ungap/structured-clone@1.2.0': {} + '@typescript-eslint/visitor-keys@8.18.0': + dependencies: + '@typescript-eslint/types': 8.18.0 + eslint-visitor-keys: 4.2.0 + + '@vitest/expect@2.1.5': + dependencies: + '@vitest/spy': 2.1.5 + '@vitest/utils': 2.1.5 + chai: 5.1.2 + tinyrainbow: 1.2.0 + + '@vitest/mocker@2.1.5(vite@5.4.11(terser@5.36.0))': + dependencies: + '@vitest/spy': 2.1.5 + estree-walker: 3.0.3 + magic-string: 0.30.13 + optionalDependencies: + vite: 5.4.11(terser@5.36.0) + + '@vitest/pretty-format@2.1.5': + dependencies: + tinyrainbow: 1.2.0 + + '@vitest/runner@2.1.5': + dependencies: + '@vitest/utils': 2.1.5 + pathe: 1.1.2 + + '@vitest/snapshot@2.1.5': + dependencies: + '@vitest/pretty-format': 2.1.5 + magic-string: 0.30.13 + pathe: 1.1.2 + + '@vitest/spy@2.1.5': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@2.1.5': + dependencies: + '@vitest/pretty-format': 2.1.5 + loupe: 3.1.2 + tinyrainbow: 1.2.0 - acorn-jsx@5.3.2(acorn@8.11.3): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.11.3 + acorn: 8.14.0 - acorn@8.11.3: {} + acorn@8.14.0: {} ajv@6.12.6: dependencies: @@ -4503,14 +6354,8 @@ snapshots: dependencies: type-fest: 0.21.3 - ansi-escapes@6.2.0: - dependencies: - type-fest: 3.13.1 - ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} - ansi-styles@3.2.1: dependencies: color-convert: 1.9.3 @@ -4521,24 +6366,18 @@ snapshots: ansi-styles@5.2.0: {} - ansi-styles@6.2.1: {} - anymatch@3.1.3: dependencies: normalize-path: 3.0.0 picomatch: 2.3.1 - are-docs-informative@0.0.2: {} - argparse@1.0.10: dependencies: sprintf-js: 1.0.3 argparse@2.0.1: {} - aria-query@5.3.0: - dependencies: - dequal: 2.0.3 + aria-query@5.3.2: {} array-buffer-byte-length@1.0.1: dependencies: @@ -4565,32 +6404,34 @@ snapshots: es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - array.prototype.flat@1.3.2: + array.prototype.findlastindex@1.2.5: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 + es-errors: 1.3.0 + es-object-atoms: 1.0.0 es-shim-unscopables: 1.0.2 - array.prototype.flatmap@1.3.2: + array.prototype.flat@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.toreversed@1.1.2: + array.prototype.flatmap@1.3.2: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-shim-unscopables: 1.0.2 - array.prototype.tosorted@1.1.3: + array.prototype.tosorted@1.1.4: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 - es-abstract: 1.22.4 + es-abstract: 1.23.3 es-errors: 1.3.0 es-shim-unscopables: 1.0.2 @@ -4607,6 +6448,8 @@ snapshots: arrify@1.0.1: {} + assertion-error@2.0.1: {} + ast-types-flow@0.0.8: {} astral-regex@2.0.0: {} @@ -4615,11 +6458,9 @@ snapshots: dependencies: possible-typed-array-names: 1.0.0 - axe-core@4.7.0: {} + axe-core@4.10.2: {} - axobject-query@3.2.1: - dependencies: - dequal: 2.0.3 + axobject-query@4.1.0: {} babel-jest@29.7.0(@babel/core@7.24.3): dependencies: @@ -4636,7 +6477,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.0 + '@babel/helper-plugin-utils': 7.25.9 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -4646,11 +6487,35 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.0 - '@babel/types': 7.24.0 + '@babel/template': 7.24.7 + '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.5 + babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.0): + dependencies: + '@babel/compat-data': 7.26.3 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + semver: 6.3.1 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + core-js-compat: 3.39.0 + transitivePeerDependencies: + - supports-color + + babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.0) + transitivePeerDependencies: + - supports-color + babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.3): dependencies: '@babel/core': 7.24.3 @@ -4696,6 +6561,10 @@ snapshots: dependencies: fill-range: 7.0.1 + braces@3.0.3: + dependencies: + fill-range: 7.1.1 + breakword@1.0.6: dependencies: wcwidth: 1.0.1 @@ -4707,6 +6576,13 @@ snapshots: node-releases: 2.0.14 update-browserslist-db: 1.0.13(browserslist@4.23.0) + browserslist@4.24.2: + dependencies: + caniuse-lite: 1.0.30001687 + electron-to-chromium: 1.5.72 + node-releases: 2.0.19 + update-browserslist-db: 1.1.1(browserslist@4.24.2) + bser@2.1.1: dependencies: node-int64: 0.4.0 @@ -4715,9 +6591,11 @@ snapshots: builtin-modules@3.3.0: {} - builtins@5.0.1: - dependencies: - semver: 7.6.0 + builtin-modules@4.0.0: {} + + bytes@3.1.2: {} + + cac@6.7.14: {} call-bind@1.0.7: dependencies: @@ -4741,6 +6619,16 @@ snapshots: caniuse-lite@1.0.30001600: {} + caniuse-lite@1.0.30001687: {} + + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.2 + pathval: 2.0.0 + chalk@2.4.2: dependencies: ansi-styles: 3.2.1 @@ -4752,24 +6640,21 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - chalk@5.3.0: {} - char-regex@1.0.2: {} chardet@0.7.0: {} + check-error@2.1.1: {} + ci-info@3.9.0: {} - cjs-module-lexer@1.2.3: {} + ci-info@4.1.0: {} - cli-cursor@4.0.0: - dependencies: - restore-cursor: 4.0.0 + cjs-module-lexer@1.2.3: {} - cli-truncate@4.0.0: + clean-regexp@1.0.0: dependencies: - slice-ansi: 5.0.0 - string-width: 7.1.0 + escape-string-regexp: 1.0.5 cliui@6.0.0: dependencies: @@ -4803,18 +6688,19 @@ snapshots: colord@2.9.3: {} - colorette@2.0.20: {} - - commander@11.1.0: {} + commander@2.20.3: + optional: true commander@7.2.0: {} - comment-parser@1.4.1: {} - concat-map@0.0.1: {} convert-source-map@2.0.0: {} + core-js-compat@3.39.0: + dependencies: + browserslist: 4.24.2 + cosmiconfig@7.1.0: dependencies: '@types/parse-json': 4.0.2 @@ -4850,6 +6736,12 @@ snapshots: shebang-command: 2.0.0 which: 2.0.2 + cross-spawn@7.0.6: + dependencies: + path-key: 3.1.1 + shebang-command: 2.0.0 + which: 2.0.2 + css-functions-list@3.2.1: {} css-select@5.1.0: @@ -4911,10 +6803,6 @@ snapshots: es-errors: 1.3.0 is-data-view: 1.0.1 - debug@2.6.9: - dependencies: - ms: 2.0.0 - debug@3.2.7: dependencies: ms: 2.1.2 @@ -4923,6 +6811,10 @@ snapshots: dependencies: ms: 2.1.2 + debug@4.3.7: + dependencies: + ms: 2.1.3 + decamelize-keys@1.1.1: dependencies: decamelize: 1.2.0 @@ -4932,6 +6824,8 @@ snapshots: dedent@1.5.1: {} + deep-eql@5.0.2: {} + deep-is@0.1.4: {} deepmerge@4.3.1: {} @@ -4952,8 +6846,6 @@ snapshots: has-property-descriptors: 1.0.2 object-keys: 1.1.1 - dequal@2.0.3: {} - detect-indent@6.1.0: {} detect-newline@3.1.0: {} @@ -4968,10 +6860,6 @@ snapshots: dependencies: esutils: 2.0.3 - doctrine@3.0.0: - dependencies: - esutils: 2.0.3 - dom-serializer@2.0.0: dependencies: domelementtype: 2.3.0 @@ -4990,18 +6878,21 @@ snapshots: domelementtype: 2.3.0 domhandler: 5.0.3 - eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.717: {} - emittery@0.13.1: {} + electron-to-chromium@1.5.72: {} - emoji-regex@10.3.0: {} + emittery@0.13.1: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} + enhanced-resolve@5.17.1: + dependencies: + graceful-fs: 4.2.11 + tapable: 2.2.1 + enquirer@2.4.1: dependencies: ansi-colors: 4.1.3 @@ -5015,50 +6906,6 @@ snapshots: dependencies: is-arrayish: 0.2.1 - es-abstract@1.22.4: - dependencies: - array-buffer-byte-length: 1.0.1 - arraybuffer.prototype.slice: 1.0.3 - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - es-define-property: 1.0.0 - es-errors: 1.3.0 - es-set-tostringtag: 2.0.3 - es-to-primitive: 1.2.1 - function.prototype.name: 1.1.6 - get-intrinsic: 1.2.4 - get-symbol-description: 1.0.2 - globalthis: 1.0.3 - gopd: 1.0.1 - has-property-descriptors: 1.0.2 - has-proto: 1.0.3 - has-symbols: 1.0.3 - hasown: 2.0.2 - internal-slot: 1.0.7 - is-array-buffer: 3.0.4 - is-callable: 1.2.7 - is-negative-zero: 2.0.3 - is-regex: 1.1.4 - is-shared-array-buffer: 1.0.3 - is-string: 1.0.7 - is-typed-array: 1.1.13 - is-weakref: 1.0.2 - object-inspect: 1.13.1 - object-keys: 1.1.1 - object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 - safe-array-concat: 1.1.0 - safe-regex-test: 1.0.3 - string.prototype.trim: 1.2.8 - string.prototype.trimend: 1.0.7 - string.prototype.trimstart: 1.0.7 - typed-array-buffer: 1.0.2 - typed-array-byte-length: 1.0.1 - typed-array-byte-offset: 1.0.2 - typed-array-length: 1.0.5 - unbox-primitive: 1.0.2 - which-typed-array: 1.1.14 - es-abstract@1.23.3: dependencies: array-buffer-byte-length: 1.0.1 @@ -5114,7 +6961,7 @@ snapshots: es-errors@1.3.0: {} - es-iterator-helpers@1.0.18: + es-iterator-helpers@1.2.0: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 @@ -5123,14 +6970,17 @@ snapshots: es-set-tostringtag: 2.0.3 function-bind: 1.1.2 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 + gopd: 1.0.1 has-property-descriptors: 1.0.2 has-proto: 1.0.3 has-symbols: 1.0.3 internal-slot: 1.0.7 - iterator.prototype: 1.1.2 + iterator.prototype: 1.1.3 safe-array-concat: 1.1.2 + es-module-lexer@1.5.4: {} + es-object-atoms@1.0.0: dependencies: es-errors: 1.3.0 @@ -5151,251 +7001,294 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 + esbuild@0.21.5: + optionalDependencies: + '@esbuild/aix-ppc64': 0.21.5 + '@esbuild/android-arm': 0.21.5 + '@esbuild/android-arm64': 0.21.5 + '@esbuild/android-x64': 0.21.5 + '@esbuild/darwin-arm64': 0.21.5 + '@esbuild/darwin-x64': 0.21.5 + '@esbuild/freebsd-arm64': 0.21.5 + '@esbuild/freebsd-x64': 0.21.5 + '@esbuild/linux-arm': 0.21.5 + '@esbuild/linux-arm64': 0.21.5 + '@esbuild/linux-ia32': 0.21.5 + '@esbuild/linux-loong64': 0.21.5 + '@esbuild/linux-mips64el': 0.21.5 + '@esbuild/linux-ppc64': 0.21.5 + '@esbuild/linux-riscv64': 0.21.5 + '@esbuild/linux-s390x': 0.21.5 + '@esbuild/linux-x64': 0.21.5 + '@esbuild/netbsd-x64': 0.21.5 + '@esbuild/openbsd-x64': 0.21.5 + '@esbuild/sunos-x64': 0.21.5 + '@esbuild/win32-arm64': 0.21.5 + '@esbuild/win32-ia32': 0.21.5 + '@esbuild/win32-x64': 0.21.5 + escalade@3.1.2: {} + escalade@3.2.0: {} + escape-string-regexp@1.0.5: {} escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} - eslint-compat-utils@0.5.0(eslint@8.57.0): - dependencies: - eslint: 8.57.0 - semver: 7.6.0 - - eslint-config-eslint@7.0.0(eslint-plugin-jsdoc@48.2.2(eslint@8.57.0))(eslint-plugin-node@11.1.0(eslint@8.57.0)): + eslint-compat-utils@0.5.1(eslint@9.17.0): dependencies: - eslint-plugin-jsdoc: 48.2.2(eslint@8.57.0) - eslint-plugin-node: 11.1.0(eslint@8.57.0) + eslint: 9.17.0 + semver: 7.6.3 - eslint-config-prettier@9.1.0(eslint@8.57.0): + eslint-compat-utils@0.6.4(eslint@9.17.0): dependencies: - eslint: 8.57.0 + eslint: 9.17.0 + semver: 7.6.3 - eslint-config-standard@17.1.0(eslint-plugin-import@2.26.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0))(eslint-plugin-n@16.6.2(eslint@8.57.0))(eslint-plugin-promise@6.1.1(eslint@8.57.0))(eslint@8.57.0): + eslint-config-prettier@9.1.0(eslint@9.17.0): dependencies: - eslint: 8.57.0 - eslint-plugin-import: 2.26.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0) - eslint-plugin-n: 16.6.2(eslint@8.57.0) - eslint-plugin-promise: 6.1.1(eslint@8.57.0) + eslint: 9.17.0 eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.13.1 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.3.3) - eslint: 8.57.0 + '@typescript-eslint/parser': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + eslint: 9.17.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-es-x@7.6.0(eslint@8.57.0): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - eslint: 8.57.0 - eslint-compat-utils: 0.5.0(eslint@8.57.0) - - eslint-plugin-es@3.0.1(eslint@8.57.0): + eslint-plugin-es-x@7.8.0(eslint@9.17.0): dependencies: - eslint: 8.57.0 - eslint-utils: 2.1.0 - regexpp: 3.2.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/regexpp': 4.12.1 + eslint: 9.17.0 + eslint-compat-utils: 0.5.1(eslint@9.17.0) - eslint-plugin-import@2.26.0(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 + array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 - debug: 2.6.9 + array.prototype.flatmap: 1.3.2 + debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 9.17.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.9.0(eslint@8.57.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@8.57.0) - has: 1.0.4 - is-core-module: 2.13.1 + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint-import-resolver-node@0.3.9)(eslint@9.17.0) + hasown: 2.0.2 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 + object.fromentries: 2.0.8 + object.groupby: 1.0.3 object.values: 1.2.0 - resolve: 1.22.8 + semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.9.0(eslint@8.57.0)(typescript@5.3.3) + '@typescript-eslint/parser': 8.18.0(eslint@9.17.0)(typescript@5.3.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jsdoc@48.2.2(eslint@8.57.0): - dependencies: - '@es-joy/jsdoccomment': 0.42.0 - are-docs-informative: 0.0.2 - comment-parser: 1.4.1 - debug: 4.3.4 - escape-string-regexp: 4.0.0 - eslint: 8.57.0 - esquery: 1.5.0 - is-builtin-module: 3.2.1 - semver: 7.6.0 - spdx-expression-parse: 4.0.0 - transitivePeerDependencies: - - supports-color - - eslint-plugin-jsx-a11y@6.8.0(eslint@8.57.0): + eslint-plugin-jsx-a11y@6.10.2(eslint@9.17.0): dependencies: - '@babel/runtime': 7.23.9 - aria-query: 5.3.0 + aria-query: 5.3.2 array-includes: 3.1.8 array.prototype.flatmap: 1.3.2 ast-types-flow: 0.0.8 - axe-core: 4.7.0 - axobject-query: 3.2.1 + axe-core: 4.10.2 + axobject-query: 4.1.0 damerau-levenshtein: 1.0.8 emoji-regex: 9.2.2 - es-iterator-helpers: 1.0.18 - eslint: 8.57.0 - hasown: 2.0.1 + eslint: 9.17.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 language-tags: 1.0.9 minimatch: 3.1.2 - object.entries: 1.1.8 object.fromentries: 2.0.8 + safe-regex-test: 1.0.3 + string.prototype.includes: 2.0.1 - eslint-plugin-n@16.6.2(eslint@8.57.0): - dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - builtins: 5.0.1 - eslint: 8.57.0 - eslint-plugin-es-x: 7.6.0(eslint@8.57.0) - get-tsconfig: 4.7.3 - globals: 13.24.0 - ignore: 5.3.1 - is-builtin-module: 3.2.1 - is-core-module: 2.13.1 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 7.6.0 - - eslint-plugin-node@11.1.0(eslint@8.57.0): + eslint-plugin-n@17.14.0(eslint@9.17.0): dependencies: - eslint: 8.57.0 - eslint-plugin-es: 3.0.1(eslint@8.57.0) - eslint-utils: 2.1.0 - ignore: 5.3.1 - minimatch: 3.1.2 - resolve: 1.22.8 - semver: 6.3.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + enhanced-resolve: 5.17.1 + eslint: 9.17.0 + eslint-plugin-es-x: 7.8.0(eslint@9.17.0) + get-tsconfig: 4.8.1 + globals: 15.14.0 + ignore: 5.3.2 + minimatch: 9.0.5 + semver: 7.6.3 - eslint-plugin-promise@6.1.1(eslint@8.57.0): + eslint-plugin-promise@7.2.1(eslint@9.17.0): dependencies: - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + eslint: 9.17.0 - eslint-plugin-react-hooks@4.6.0(eslint@8.57.0): + eslint-plugin-react-hooks@5.1.0(eslint@9.17.0): dependencies: - eslint: 8.57.0 + eslint: 9.17.0 - eslint-plugin-react@7.34.1(eslint@8.57.0): + eslint-plugin-react@7.37.2(eslint@9.17.0): dependencies: array-includes: 3.1.8 array.prototype.findlast: 1.2.5 array.prototype.flatmap: 1.3.2 - array.prototype.toreversed: 1.1.2 - array.prototype.tosorted: 1.1.3 + array.prototype.tosorted: 1.1.4 doctrine: 2.1.0 - es-iterator-helpers: 1.0.18 - eslint: 8.57.0 + es-iterator-helpers: 1.2.0 + eslint: 9.17.0 estraverse: 5.3.0 + hasown: 2.0.2 jsx-ast-utils: 3.3.5 minimatch: 3.1.2 object.entries: 1.1.8 object.fromentries: 2.0.8 - object.hasown: 1.1.4 object.values: 1.2.0 prop-types: 15.8.1 resolve: 2.0.0-next.5 semver: 6.3.1 string.prototype.matchall: 4.0.11 + string.prototype.repeat: 1.0.0 + + eslint-plugin-sonarjs@3.0.1(eslint@9.17.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/eslint-parser': 7.25.9(@babel/core@7.26.0)(eslint@9.17.0) + '@babel/plugin-proposal-decorators': 7.25.9(@babel/core@7.26.0) + '@babel/preset-env': 7.26.0(@babel/core@7.26.0) + '@babel/preset-flow': 7.25.9(@babel/core@7.26.0) + '@babel/preset-react': 7.26.3(@babel/core@7.26.0) + '@eslint-community/regexpp': 4.12.1 + builtin-modules: 3.3.0 + bytes: 3.1.2 + eslint: 9.17.0 + functional-red-black-tree: 1.0.1 + jsx-ast-utils: 3.3.5 + minimatch: 9.0.5 + scslre: 0.3.0 + semver: 7.6.3 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + eslint-plugin-unicorn@56.0.1(eslint@9.17.0): + dependencies: + '@babel/helper-validator-identifier': 7.25.9 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + ci-info: 4.1.0 + clean-regexp: 1.0.0 + core-js-compat: 3.39.0 + eslint: 9.17.0 + esquery: 1.6.0 + globals: 15.14.0 + indent-string: 4.0.0 + is-builtin-module: 3.2.1 + jsesc: 3.0.2 + pluralize: 8.0.0 + read-pkg-up: 7.0.1 + regexp-tree: 0.1.27 + regjsparser: 0.10.0 + semver: 7.6.3 + strip-indent: 3.0.0 + + eslint-plugin-unused-imports@4.1.4(@typescript-eslint/eslint-plugin@8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0): + dependencies: + eslint: 9.17.0 + optionalDependencies: + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3) + + eslint-plugin-yml@1.16.0(eslint@9.17.0): + dependencies: + debug: 4.3.7 + eslint: 9.17.0 + eslint-compat-utils: 0.6.4(eslint@9.17.0) + lodash: 4.17.21 + natural-compare: 1.4.0 + yaml-eslint-parser: 1.2.3 + transitivePeerDependencies: + - supports-color eslint-scope@5.1.1: dependencies: esrecurse: 4.3.0 estraverse: 4.3.0 - eslint-scope@7.2.2: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@2.1.0: - dependencies: - eslint-visitor-keys: 1.3.0 - - eslint-visitor-keys@1.3.0: {} - eslint-visitor-keys@2.1.0: {} eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint-visitor-keys@4.2.0: {} + + eslint@9.17.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.10.0 - '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.17.0) + '@eslint-community/regexpp': 4.12.1 + '@eslint/config-array': 0.19.0 + '@eslint/core': 0.9.0 + '@eslint/eslintrc': 3.2.0 + '@eslint/js': 9.17.0 + '@eslint/plugin-kit': 0.2.3 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@nodelib/fs.walk': 1.2.8 - '@ungap/structured-clone': 1.2.0 + '@humanwhocodes/retry': 0.4.1 + '@types/estree': 1.0.6 + '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 - cross-spawn: 7.0.3 - debug: 4.3.4 - doctrine: 3.0.0 + cross-spawn: 7.0.6 + debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 7.2.2 - eslint-visitor-keys: 3.4.3 - espree: 9.6.1 - esquery: 1.5.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 + esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 - file-entry-cache: 6.0.1 + file-entry-cache: 8.0.0 find-up: 5.0.0 glob-parent: 6.0.2 - globals: 13.24.0 - graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 - is-path-inside: 3.0.3 - js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 - levn: 0.4.1 lodash.merge: 4.6.2 minimatch: 3.1.2 natural-compare: 1.4.0 optionator: 0.9.3 - strip-ansi: 6.0.1 - text-table: 0.2.0 transitivePeerDependencies: - supports-color - espree@9.6.1: + espree@10.3.0: dependencies: - acorn: 8.11.3 - acorn-jsx: 5.3.2(acorn@8.11.3) - eslint-visitor-keys: 3.4.3 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} - esquery@1.5.0: + esquery@1.6.0: dependencies: estraverse: 5.3.0 @@ -5407,9 +7300,13 @@ snapshots: estraverse@5.3.0: {} - esutils@2.0.3: {} + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 - eventemitter3@5.0.1: {} + esutils@2.0.3: {} execa@5.1.1: dependencies: @@ -5423,20 +7320,10 @@ snapshots: signal-exit: 3.0.7 strip-final-newline: 2.0.0 - execa@8.0.1: - dependencies: - cross-spawn: 7.0.3 - get-stream: 8.0.1 - human-signals: 5.0.0 - is-stream: 3.0.0 - merge-stream: 2.0.0 - npm-run-path: 5.3.0 - onetime: 6.0.0 - signal-exit: 4.1.0 - strip-final-newline: 3.0.0 - exit@0.1.2: {} + expect-type@1.1.0: {} + expect@29.7.0: dependencies: '@jest/expect-utils': 29.7.0 @@ -5481,10 +7368,18 @@ snapshots: dependencies: flat-cache: 3.2.0 + file-entry-cache@8.0.0: + dependencies: + flat-cache: 4.0.1 + fill-range@7.0.1: dependencies: to-regex-range: 5.0.1 + fill-range@7.1.1: + dependencies: + to-regex-range: 5.0.1 + find-up@4.1.0: dependencies: locate-path: 5.0.0 @@ -5506,17 +7401,17 @@ snapshots: keyv: 4.5.4 rimraf: 3.0.2 + flat-cache@4.0.1: + dependencies: + flatted: 3.3.1 + keyv: 4.5.4 + flatted@3.3.1: {} for-each@0.3.3: dependencies: is-callable: 1.2.7 - foreground-child@3.1.1: - dependencies: - cross-spawn: 7.0.3 - signal-exit: 4.1.0 - fs-extra@7.0.1: dependencies: graceful-fs: 4.2.11 @@ -5543,14 +7438,14 @@ snapshots: es-abstract: 1.23.3 functions-have-names: 1.2.3 + functional-red-black-tree@1.0.1: {} + functions-have-names@1.2.3: {} gensync@1.0.0-beta.2: {} get-caller-file@2.0.5: {} - get-east-asian-width@1.2.0: {} - get-intrinsic@1.2.4: dependencies: es-errors: 1.3.0 @@ -5563,15 +7458,13 @@ snapshots: get-stream@6.0.1: {} - get-stream@8.0.1: {} - get-symbol-description@1.0.2: dependencies: call-bind: 1.0.7 es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.3: + get-tsconfig@4.8.1: dependencies: resolve-pkg-maps: 1.0.0 @@ -5583,29 +7476,14 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.10: - dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.0.4 - path-scurry: 1.10.1 - glob@7.2.3: dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 minimatch: 3.1.2 - once: 1.4.0 - path-is-absolute: 1.0.1 - - glob@9.3.5: - dependencies: - fs.realpath: 1.0.0 - minimatch: 8.0.4 - minipass: 4.2.8 - path-scurry: 1.10.1 + once: 1.4.0 + path-is-absolute: 1.0.1 global-modules@2.0.0: dependencies: @@ -5619,20 +7497,25 @@ snapshots: globals@11.12.0: {} - globals@13.24.0: - dependencies: - type-fest: 0.20.2 + globals@14.0.0: {} + + globals@15.14.0: {} globalthis@1.0.3: dependencies: define-properties: 1.2.1 + globalthis@1.0.4: + dependencies: + define-properties: 1.2.1 + gopd: 1.0.1 + globby@11.1.0: dependencies: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -5640,7 +7523,7 @@ snapshots: dependencies: '@sindresorhus/merge-streams': 1.0.0 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -5677,12 +7560,6 @@ snapshots: dependencies: has-symbols: 1.0.3 - has@1.0.4: {} - - hasown@2.0.1: - dependencies: - function-bind: 1.1.2 - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -5701,16 +7578,14 @@ snapshots: human-signals@2.1.0: {} - human-signals@5.0.0: {} - - husky@8.0.3: {} - iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 ignore@5.3.1: {} + ignore@5.3.2: {} + import-fresh@3.3.0: dependencies: parent-module: 1.0.1 @@ -5740,7 +7615,7 @@ snapshots: dependencies: es-errors: 1.3.0 hasown: 2.0.2 - side-channel: 1.0.5 + side-channel: 1.0.6 is-array-buffer@3.0.4: dependencies: @@ -5772,6 +7647,10 @@ snapshots: dependencies: hasown: 2.0.2 + is-core-module@2.15.1: + dependencies: + hasown: 2.0.2 + is-data-view@1.0.1: dependencies: is-typed-array: 1.1.13 @@ -5788,12 +7667,6 @@ snapshots: is-fullwidth-code-point@3.0.0: {} - is-fullwidth-code-point@4.0.0: {} - - is-fullwidth-code-point@5.0.0: - dependencies: - get-east-asian-width: 1.2.0 - is-generator-fn@2.1.0: {} is-generator-function@1.0.10: @@ -5814,8 +7687,6 @@ snapshots: is-number@7.0.0: {} - is-path-inside@3.0.3: {} - is-plain-obj@1.1.0: {} is-plain-object@5.0.0: {} @@ -5833,8 +7704,6 @@ snapshots: is-stream@2.0.1: {} - is-stream@3.0.0: {} - is-string@1.0.7: dependencies: has-tostringtag: 1.0.2 @@ -5849,7 +7718,7 @@ snapshots: is-typed-array@1.1.13: dependencies: - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 is-weakmap@2.0.2: {} @@ -5873,7 +7742,7 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: '@babel/core': 7.24.3 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -5883,10 +7752,10 @@ snapshots: istanbul-lib-instrument@6.0.2: dependencies: '@babel/core': 7.24.3 - '@babel/parser': 7.24.1 + '@babel/parser': 7.24.8 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -5898,7 +7767,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.4 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -5909,7 +7778,7 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - iterator.prototype@1.1.2: + iterator.prototype@1.1.3: dependencies: define-properties: 1.2.1 get-intrinsic: 1.2.4 @@ -5917,12 +7786,6 @@ snapshots: reflect.getprototypeof: 1.0.6 set-function-name: 2.0.2 - jackspeak@2.3.6: - dependencies: - '@isaacs/cliui': 8.0.2 - optionalDependencies: - '@pkgjs/parseargs': 0.11.0 - jest-changed-files@29.7.0: dependencies: execa: 5.1.1 @@ -6179,7 +8042,7 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.6.0 + semver: 7.6.3 transitivePeerDependencies: - supports-color @@ -6242,10 +8105,12 @@ snapshots: dependencies: argparse: 2.0.1 - jsdoc-type-pratt-parser@4.0.0: {} + jsesc@0.5.0: {} jsesc@2.5.2: {} + jsesc@3.0.2: {} + json-buffer@3.0.1: {} json-parse-even-better-errors@2.3.1: {} @@ -6293,6 +8158,49 @@ snapshots: dependencies: language-subtag-registry: 0.3.22 + lefthook-darwin-arm64@1.9.3: + optional: true + + lefthook-darwin-x64@1.9.3: + optional: true + + lefthook-freebsd-arm64@1.9.3: + optional: true + + lefthook-freebsd-x64@1.9.3: + optional: true + + lefthook-linux-arm64@1.9.3: + optional: true + + lefthook-linux-x64@1.9.3: + optional: true + + lefthook-openbsd-arm64@1.9.3: + optional: true + + lefthook-openbsd-x64@1.9.3: + optional: true + + lefthook-windows-arm64@1.9.3: + optional: true + + lefthook-windows-x64@1.9.3: + optional: true + + lefthook@1.9.3: + optionalDependencies: + lefthook-darwin-arm64: 1.9.3 + lefthook-darwin-x64: 1.9.3 + lefthook-freebsd-arm64: 1.9.3 + lefthook-freebsd-x64: 1.9.3 + lefthook-linux-arm64: 1.9.3 + lefthook-linux-x64: 1.9.3 + lefthook-openbsd-arm64: 1.9.3 + lefthook-openbsd-x64: 1.9.3 + lefthook-windows-arm64: 1.9.3 + lefthook-windows-x64: 1.9.3 + leven@3.1.0: {} levn@0.4.1: @@ -6300,38 +8208,12 @@ snapshots: prelude-ls: 1.2.1 type-check: 0.4.0 - lilconfig@3.0.0: {} - lines-and-columns@1.2.4: {} linkify-it@4.0.1: dependencies: uc.micro: 1.0.6 - lint-staged@15.2.2: - dependencies: - chalk: 5.3.0 - commander: 11.1.0 - debug: 4.3.4 - execa: 8.0.1 - lilconfig: 3.0.0 - listr2: 8.0.1 - micromatch: 4.0.5 - pidtree: 0.6.0 - string-argv: 0.3.2 - yaml: 2.3.4 - transitivePeerDependencies: - - supports-color - - listr2@8.0.1: - dependencies: - cli-truncate: 4.0.0 - colorette: 2.0.20 - eventemitter3: 5.0.1 - log-update: 6.0.0 - rfdc: 1.3.1 - wrap-ansi: 9.0.0 - load-yaml-file@0.2.0: dependencies: graceful-fs: 4.2.11 @@ -6347,25 +8229,21 @@ snapshots: dependencies: p-locate: 5.0.0 + lodash.debounce@4.0.8: {} + lodash.merge@4.6.2: {} lodash.startcase@4.4.0: {} lodash.truncate@4.4.2: {} - log-update@6.0.0: - dependencies: - ansi-escapes: 6.2.0 - cli-cursor: 4.0.0 - slice-ansi: 7.1.0 - strip-ansi: 7.1.0 - wrap-ansi: 9.0.0 + lodash@4.17.21: {} loose-envify@1.4.0: dependencies: js-tokens: 4.0.0 - lru-cache@10.2.0: {} + loupe@3.1.2: {} lru-cache@4.1.5: dependencies: @@ -6380,9 +8258,13 @@ snapshots: dependencies: yallist: 4.0.0 + magic-string@0.30.13: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + make-dir@4.0.0: dependencies: - semver: 7.6.0 + semver: 7.6.3 makeerror@1.0.12: dependencies: @@ -6466,9 +8348,12 @@ snapshots: braces: 3.0.2 picomatch: 2.3.1 - mimic-fn@2.1.0: {} + micromatch@4.0.8: + dependencies: + braces: 3.0.3 + picomatch: 2.3.1 - mimic-fn@4.0.0: {} + mimic-fn@2.1.0: {} min-indent@1.0.1: {} @@ -6476,11 +8361,11 @@ snapshots: dependencies: brace-expansion: 1.1.11 - minimatch@8.0.4: + minimatch@9.0.4: dependencies: brace-expansion: 2.0.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 @@ -6492,24 +8377,38 @@ snapshots: minimist@1.2.8: {} - minipass@4.2.8: {} - - minipass@7.0.4: {} - mixme@0.5.10: {} - ms@2.0.0: {} - ms@2.1.2: {} + ms@2.1.3: {} + nanoid@3.3.7: {} natural-compare@1.4.0: {} + neostandard@0.11.9(eslint@9.17.0)(typescript@5.3.3): + dependencies: + '@humanwhocodes/gitignore-to-minimatch': 1.0.2 + '@stylistic/eslint-plugin': 2.11.0(eslint@9.17.0)(typescript@5.3.3) + eslint: 9.17.0 + eslint-plugin-n: 17.14.0(eslint@9.17.0) + eslint-plugin-promise: 7.2.1(eslint@9.17.0) + eslint-plugin-react: 7.37.2(eslint@9.17.0) + find-up: 5.0.0 + globals: 15.14.0 + peowly: 1.3.2 + typescript-eslint: 8.17.0(eslint@9.17.0)(typescript@5.3.3) + transitivePeerDependencies: + - supports-color + - typescript + node-int64@0.4.0: {} node-releases@2.0.14: {} + node-releases@2.0.19: {} + normalize-package-data@2.5.0: dependencies: hosted-git-info: 2.8.9 @@ -6520,8 +8419,8 @@ snapshots: normalize-package-data@3.0.3: dependencies: hosted-git-info: 4.1.0 - is-core-module: 2.13.1 - semver: 7.6.0 + is-core-module: 2.15.1 + semver: 7.6.3 validate-npm-package-license: 3.0.4 normalize-path@3.0.0: {} @@ -6530,10 +8429,6 @@ snapshots: dependencies: path-key: 3.1.1 - npm-run-path@5.3.0: - dependencies: - path-key: 4.0.0 - nth-check@2.1.1: dependencies: boolbase: 1.0.0 @@ -6564,11 +8459,11 @@ snapshots: es-abstract: 1.23.3 es-object-atoms: 1.0.0 - object.hasown@1.1.4: + object.groupby@1.0.3: dependencies: + call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 - es-object-atoms: 1.0.0 object.values@1.2.0: dependencies: @@ -6584,10 +8479,6 @@ snapshots: dependencies: mimic-fn: 2.1.0 - onetime@6.0.0: - dependencies: - mimic-fn: 4.0.0 - optionator@0.9.3: dependencies: '@aashutoshrathi/word-wrap': 1.2.6 @@ -6631,7 +8522,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.2 + '@babel/code-frame': 7.24.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6642,24 +8533,25 @@ snapshots: path-key@3.1.1: {} - path-key@4.0.0: {} - path-parse@1.0.7: {} - path-scurry@1.10.1: - dependencies: - lru-cache: 10.2.0 - minipass: 7.0.4 - path-type@4.0.0: {} path-type@5.0.0: {} + pathe@1.1.2: {} + + pathval@2.0.0: {} + + peowly@1.3.2: {} + picocolors@1.0.0: {} + picocolors@1.1.1: {} + picomatch@2.3.1: {} - pidtree@0.6.0: {} + picomatch@4.0.2: {} pify@4.0.1: {} @@ -6669,6 +8561,8 @@ snapshots: dependencies: find-up: 4.1.0 + pluralize@8.0.0: {} + possible-typed-array-names@1.0.0: {} postcss-media-query-parser@0.2.3: {} @@ -6700,6 +8594,12 @@ snapshots: picocolors: 1.0.0 source-map-js: 1.2.0 + postcss@8.4.49: + dependencies: + nanoid: 3.3.7 + picocolors: 1.1.1 + source-map-js: 1.2.1 + preferred-pm@3.1.3: dependencies: find-up: 5.0.0 @@ -6769,6 +8669,10 @@ snapshots: indent-string: 4.0.0 strip-indent: 3.0.0 + refa@0.12.1: + dependencies: + '@eslint-community/regexpp': 4.12.1 + reflect.getprototypeof@1.0.6: dependencies: call-bind: 1.0.7 @@ -6776,11 +8680,28 @@ snapshots: es-abstract: 1.23.3 es-errors: 1.3.0 get-intrinsic: 1.2.4 - globalthis: 1.0.3 + globalthis: 1.0.4 which-builtin-type: 1.1.3 + regenerate-unicode-properties@10.2.0: + dependencies: + regenerate: 1.4.2 + + regenerate@1.4.2: {} + regenerator-runtime@0.14.1: {} + regenerator-transform@0.15.2: + dependencies: + '@babel/runtime': 7.23.9 + + regexp-ast-analysis@0.7.1: + dependencies: + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + + regexp-tree@0.1.27: {} + regexp.prototype.flags@1.5.2: dependencies: call-bind: 1.0.7 @@ -6788,7 +8709,24 @@ snapshots: es-errors: 1.3.0 set-function-name: 2.0.2 - regexpp@3.2.0: {} + regexpu-core@6.2.0: + dependencies: + regenerate: 1.4.2 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.12.0 + unicode-match-property-ecmascript: 2.0.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} + + regjsparser@0.10.0: + dependencies: + jsesc: 0.5.0 + + regjsparser@0.12.0: + dependencies: + jsesc: 3.0.2 require-directory@2.1.1: {} @@ -6816,33 +8754,43 @@ snapshots: resolve@2.0.0-next.5: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - restore-cursor@4.0.0: - dependencies: - onetime: 5.1.2 - signal-exit: 3.0.7 - reusify@1.0.4: {} - rfdc@1.3.1: {} - rimraf@3.0.2: dependencies: glob: 7.2.3 - run-parallel@1.2.0: + rollup@4.27.4: dependencies: - queue-microtask: 1.2.3 + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.27.4 + '@rollup/rollup-android-arm64': 4.27.4 + '@rollup/rollup-darwin-arm64': 4.27.4 + '@rollup/rollup-darwin-x64': 4.27.4 + '@rollup/rollup-freebsd-arm64': 4.27.4 + '@rollup/rollup-freebsd-x64': 4.27.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.27.4 + '@rollup/rollup-linux-arm-musleabihf': 4.27.4 + '@rollup/rollup-linux-arm64-gnu': 4.27.4 + '@rollup/rollup-linux-arm64-musl': 4.27.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.27.4 + '@rollup/rollup-linux-riscv64-gnu': 4.27.4 + '@rollup/rollup-linux-s390x-gnu': 4.27.4 + '@rollup/rollup-linux-x64-gnu': 4.27.4 + '@rollup/rollup-linux-x64-musl': 4.27.4 + '@rollup/rollup-win32-arm64-msvc': 4.27.4 + '@rollup/rollup-win32-ia32-msvc': 4.27.4 + '@rollup/rollup-win32-x64-msvc': 4.27.4 + fsevents: 2.3.3 - safe-array-concat@1.1.0: + run-parallel@1.2.0: dependencies: - call-bind: 1.0.7 - get-intrinsic: 1.2.4 - has-symbols: 1.0.3 - isarray: 2.0.5 + queue-microtask: 1.2.3 safe-array-concat@1.1.2: dependencies: @@ -6859,6 +8807,12 @@ snapshots: safer-buffer@2.1.2: {} + scslre@0.3.0: + dependencies: + '@eslint-community/regexpp': 4.12.1 + refa: 0.12.1 + regexp-ast-analysis: 0.7.1 + semver@5.7.2: {} semver@6.3.1: {} @@ -6867,6 +8821,8 @@ snapshots: dependencies: lru-cache: 6.0.0 + semver@7.6.3: {} + set-blocking@2.0.0: {} set-function-length@1.2.1: @@ -6897,13 +8853,6 @@ snapshots: shebang-regex@3.0.0: {} - side-channel@1.0.5: - dependencies: - call-bind: 1.0.7 - es-errors: 1.3.0 - get-intrinsic: 1.2.4 - object-inspect: 1.13.1 - side-channel@1.0.6: dependencies: call-bind: 1.0.7 @@ -6911,9 +8860,9 @@ snapshots: get-intrinsic: 1.2.4 object-inspect: 1.13.1 - signal-exit@3.0.7: {} + siginfo@2.0.0: {} - signal-exit@4.1.0: {} + signal-exit@3.0.7: {} sisteransi@1.0.5: {} @@ -6927,16 +8876,6 @@ snapshots: astral-regex: 2.0.0 is-fullwidth-code-point: 3.0.0 - slice-ansi@5.0.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 4.0.0 - - slice-ansi@7.1.0: - dependencies: - ansi-styles: 6.2.1 - is-fullwidth-code-point: 5.0.0 - smartwrap@2.0.2: dependencies: array.prototype.flat: 1.3.2 @@ -6948,11 +8887,19 @@ snapshots: source-map-js@1.2.0: {} + source-map-js@1.2.1: {} + source-map-support@0.5.13: dependencies: buffer-from: 1.1.2 source-map: 0.6.1 + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + optional: true + source-map@0.6.1: {} spawndamnit@2.0.0: @@ -6972,11 +8919,6 @@ snapshots: spdx-exceptions: 2.5.0 spdx-license-ids: 3.0.17 - spdx-expression-parse@4.0.0: - dependencies: - spdx-exceptions: 2.5.0 - spdx-license-ids: 3.0.17 - spdx-license-ids@3.0.17: {} sprintf-js@1.0.3: {} @@ -6985,12 +8927,14 @@ snapshots: dependencies: escape-string-regexp: 2.0.0 + stackback@0.0.2: {} + + std-env@3.8.0: {} + stream-transform@2.1.3: dependencies: mixme: 0.5.10 - string-argv@0.3.2: {} - string-length@4.0.2: dependencies: char-regex: 1.0.2 @@ -7002,17 +8946,11 @@ snapshots: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - string-width@5.1.2: + string.prototype.includes@2.0.1: dependencies: - eastasianwidth: 0.2.0 - emoji-regex: 9.2.2 - strip-ansi: 7.1.0 - - string-width@7.1.0: - dependencies: - emoji-regex: 10.3.0 - get-east-asian-width: 1.2.0 - strip-ansi: 7.1.0 + call-bind: 1.0.7 + define-properties: 1.2.1 + es-abstract: 1.23.3 string.prototype.matchall@4.0.11: dependencies: @@ -7029,9 +8967,8 @@ snapshots: set-function-name: 2.0.2 side-channel: 1.0.6 - string.prototype.trim@1.2.8: + string.prototype.repeat@1.0.0: dependencies: - call-bind: 1.0.7 define-properties: 1.2.1 es-abstract: 1.23.3 @@ -7042,24 +8979,12 @@ snapshots: es-abstract: 1.23.3 es-object-atoms: 1.0.0 - string.prototype.trimend@1.0.7: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - string.prototype.trimend@1.0.8: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-object-atoms: 1.0.0 - string.prototype.trimstart@1.0.7: - dependencies: - call-bind: 1.0.7 - define-properties: 1.2.1 - es-abstract: 1.23.3 - string.prototype.trimstart@1.0.8: dependencies: call-bind: 1.0.7 @@ -7070,18 +8995,12 @@ snapshots: dependencies: ansi-regex: 5.0.1 - strip-ansi@7.1.0: - dependencies: - ansi-regex: 6.0.1 - strip-bom@3.0.0: {} strip-bom@4.0.0: {} strip-final-newline@2.0.0: {} - strip-final-newline@3.0.0: {} - strip-indent@3.0.0: dependencies: min-indent: 1.0.1 @@ -7188,15 +9107,33 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 + tapable@2.2.1: {} + term-size@2.2.1: {} + terser@5.36.0: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + optional: true + test-exclude@6.0.0: dependencies: '@istanbuljs/schema': 0.1.3 glob: 7.2.3 minimatch: 3.1.2 - text-table@0.2.0: {} + tinybench@2.9.0: {} + + tinyexec@0.3.1: {} + + tinypool@1.0.2: {} + + tinyrainbow@1.2.0: {} + + tinyspy@3.0.2: {} tmp@0.0.33: dependencies: @@ -7233,32 +9170,32 @@ snapshots: wcwidth: 1.0.1 yargs: 17.7.2 - turbo-darwin-64@1.12.4: + turbo-darwin-64@2.3.3: optional: true - turbo-darwin-arm64@1.12.4: + turbo-darwin-arm64@2.3.3: optional: true - turbo-linux-64@1.12.4: + turbo-linux-64@2.3.3: optional: true - turbo-linux-arm64@1.12.4: + turbo-linux-arm64@2.3.3: optional: true - turbo-windows-64@1.12.4: + turbo-windows-64@2.3.3: optional: true - turbo-windows-arm64@1.12.4: + turbo-windows-arm64@2.3.3: optional: true - turbo@1.12.4: + turbo@2.3.3: optionalDependencies: - turbo-darwin-64: 1.12.4 - turbo-darwin-arm64: 1.12.4 - turbo-linux-64: 1.12.4 - turbo-linux-arm64: 1.12.4 - turbo-windows-64: 1.12.4 - turbo-windows-arm64: 1.12.4 + turbo-darwin-64: 2.3.3 + turbo-darwin-arm64: 2.3.3 + turbo-linux-64: 2.3.3 + turbo-linux-arm64: 2.3.3 + turbo-windows-64: 2.3.3 + turbo-windows-arm64: 2.3.3 type-check@0.4.0: dependencies: @@ -7270,16 +9207,12 @@ snapshots: type-fest@0.18.1: {} - type-fest@0.20.2: {} - type-fest@0.21.3: {} type-fest@0.6.0: {} type-fest@0.8.1: {} - type-fest@3.13.1: {} - typed-array-buffer@1.0.2: dependencies: call-bind: 1.0.7 @@ -7303,7 +9236,7 @@ snapshots: has-proto: 1.0.3 is-typed-array: 1.1.13 - typed-array-length@1.0.5: + typed-array-length@1.0.6: dependencies: call-bind: 1.0.7 for-each: 0.3.3 @@ -7312,14 +9245,26 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typed-array-length@1.0.6: + typescript-eslint@8.17.0(eslint@9.17.0)(typescript@5.3.3): dependencies: - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-proto: 1.0.3 - is-typed-array: 1.1.13 - possible-typed-array-names: 1.0.0 + '@typescript-eslint/eslint-plugin': 8.17.0(@typescript-eslint/parser@8.17.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/parser': 8.17.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/utils': 8.17.0(eslint@9.17.0)(typescript@5.3.3) + eslint: 9.17.0 + optionalDependencies: + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color + + typescript-eslint@8.18.0(eslint@9.17.0)(typescript@5.3.3): + dependencies: + '@typescript-eslint/eslint-plugin': 8.18.0(@typescript-eslint/parser@8.18.0(eslint@9.17.0)(typescript@5.3.3))(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/parser': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + '@typescript-eslint/utils': 8.18.0(eslint@9.17.0)(typescript@5.3.3) + eslint: 9.17.0 + typescript: 5.3.3 + transitivePeerDependencies: + - supports-color typescript@5.3.3: {} @@ -7332,6 +9277,17 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 + unicode-canonical-property-names-ecmascript@2.0.1: {} + + unicode-match-property-ecmascript@2.0.0: + dependencies: + unicode-canonical-property-names-ecmascript: 2.0.1 + unicode-property-aliases-ecmascript: 2.1.0 + + unicode-match-property-value-ecmascript@2.2.0: {} + + unicode-property-aliases-ecmascript@2.1.0: {} + unicorn-magic@0.1.0: {} universalify@0.1.2: {} @@ -7340,7 +9296,13 @@ snapshots: dependencies: browserslist: 4.23.0 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.1.1 + + update-browserslist-db@1.1.1(browserslist@4.24.2): + dependencies: + browserslist: 4.24.2 + escalade: 3.2.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: @@ -7361,6 +9323,66 @@ snapshots: spdx-correct: 3.2.0 spdx-expression-parse: 3.0.1 + vite-node@2.1.5(terser@5.36.0): + dependencies: + cac: 6.7.14 + debug: 4.3.7 + es-module-lexer: 1.5.4 + pathe: 1.1.2 + vite: 5.4.11(terser@5.36.0) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + + vite@5.4.11(terser@5.36.0): + dependencies: + esbuild: 0.21.5 + postcss: 8.4.49 + rollup: 4.27.4 + optionalDependencies: + fsevents: 2.3.3 + terser: 5.36.0 + + vitest@2.1.5(terser@5.36.0): + dependencies: + '@vitest/expect': 2.1.5 + '@vitest/mocker': 2.1.5(vite@5.4.11(terser@5.36.0)) + '@vitest/pretty-format': 2.1.5 + '@vitest/runner': 2.1.5 + '@vitest/snapshot': 2.1.5 + '@vitest/spy': 2.1.5 + '@vitest/utils': 2.1.5 + chai: 5.1.2 + debug: 4.3.7 + expect-type: 1.1.0 + magic-string: 0.30.13 + pathe: 1.1.2 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.1 + tinypool: 1.0.2 + tinyrainbow: 1.2.0 + vite: 5.4.11(terser@5.36.0) + vite-node: 2.1.5(terser@5.36.0) + why-is-node-running: 2.3.0 + transitivePeerDependencies: + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + walker@1.0.8: dependencies: makeerror: 1.0.12 @@ -7390,7 +9412,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.0.2 which-collection: 1.0.2 - which-typed-array: 1.1.14 + which-typed-array: 1.1.15 which-collection@1.0.2: dependencies: @@ -7406,14 +9428,6 @@ snapshots: load-yaml-file: 0.2.0 path-exists: 4.0.0 - which-typed-array@1.1.14: - dependencies: - available-typed-arrays: 1.0.7 - call-bind: 1.0.7 - for-each: 0.3.3 - gopd: 1.0.1 - has-tostringtag: 1.0.2 - which-typed-array@1.1.15: dependencies: available-typed-arrays: 1.0.7 @@ -7430,6 +9444,11 @@ snapshots: dependencies: isexe: 2.0.0 + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0 @@ -7442,18 +9461,6 @@ snapshots: string-width: 4.2.3 strip-ansi: 6.0.1 - wrap-ansi@8.1.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 5.1.2 - strip-ansi: 7.1.0 - - wrap-ansi@9.0.0: - dependencies: - ansi-styles: 6.2.1 - string-width: 7.1.0 - strip-ansi: 7.1.0 - wrappy@1.0.2: {} write-file-atomic@4.0.2: @@ -7471,6 +9478,12 @@ snapshots: yallist@4.0.0: {} + yaml-eslint-parser@1.2.3: + dependencies: + eslint-visitor-keys: 3.4.3 + lodash: 4.17.21 + yaml: 2.3.4 + yaml@1.10.2: {} yaml@2.3.4: {} diff --git a/turbo.json b/turbo.json index e760a4a..09da0e7 100644 --- a/turbo.json +++ b/turbo.json @@ -1,6 +1,8 @@ { "$schema": "https://turborepo.org/schema.json", - "pipeline": { - "test": {"cache": false} + "tasks": { + "build": {"cache": true, "dependsOn": ["^build"], "outputs": ["dist/**"]}, + "test": {"cache": false, "dependsOn": ["build"]}, + "test:watch": {"cache": false, "dependsOn": ["build"]} } }