├── .editorconfig ├── .eslintrc.cjs ├── .github ├── CODEOWNERS ├── FUNDING.yml ├── ISSUE_TEMPLATE │ ├── bug-report.md │ └── feature-request.md ├── dependabot.yml └── workflows │ ├── ci.yml │ └── publish.yml ├── .gitignore ├── .npmrc ├── .prettierignore ├── .prettierrc.cjs ├── .vscode └── settings.json ├── CHANGELOG.md ├── LICENSE ├── README.md ├── package.json ├── pnpm-lock.yaml ├── src └── index.ts ├── tests ├── index.test.ts ├── plugin.test.ts ├── ssg-mode.test.ts ├── vue-helper.ts └── vue-use.test.ts ├── tsconfig.json ├── tsup.config.ts └── vitest.config.ts /.editorconfig: -------------------------------------------------------------------------------- 1 | root = true 2 | 3 | [*] 4 | indent_style = space 5 | indent_size = 2 6 | end_of_line = lf 7 | charset = utf-8 8 | trim_trailing_whitespace = true 9 | insert_final_newline = true 10 | 11 | [*.md] 12 | max_line_length = off 13 | trim_trailing_whitespace = false 14 | -------------------------------------------------------------------------------- /.eslintrc.cjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | const { defineConfig } = require('eslint-define-config'); 3 | const { readGitignoreFiles } = require('eslint-gitignore'); 4 | 5 | module.exports = defineConfig({ 6 | ignorePatterns: [ 7 | ...readGitignoreFiles(), 8 | '.eslintrc.cjs', // Skip self linting 9 | ], 10 | root: true, 11 | env: { 12 | es6: true, 13 | node: true, 14 | }, 15 | reportUnusedDisableDirectives: true, 16 | extends: [ 17 | 'eslint:recommended', 18 | 'plugin:@typescript-eslint/recommended', 19 | 'plugin:@typescript-eslint/recommended-requiring-type-checking', 20 | 'plugin:jsdoc/recommended', 21 | 'plugin:prettier/recommended', 22 | ], 23 | parser: '@typescript-eslint/parser', 24 | parserOptions: { 25 | project: ['./tsconfig.json'], 26 | sourceType: 'module', 27 | warnOnUnsupportedTypeScriptVersion: false, 28 | }, 29 | plugins: ['@typescript-eslint', 'prettier', 'jsdoc', 'spellcheck'], 30 | rules: { 31 | curly: ['error'], 32 | 'linebreak-style': ['error', 'unix'], 33 | 'no-case-declarations': 'warn', 34 | 'no-restricted-globals': [ 35 | 'error', 36 | { 37 | name: '__dirname', 38 | message: "Use `fileURLToPath(new URL('.', import.meta.url))` instead.", 39 | }, 40 | ], 41 | quotes: ['error', 'single', { avoidEscape: true }], 42 | semi: ['error', 'always'], 43 | 44 | '@typescript-eslint/array-type': [ 45 | 'warn', 46 | { default: 'array-simple', readonly: 'generic' }, 47 | ], 48 | '@typescript-eslint/ban-ts-comment': [ 49 | 'error', 50 | { 'ts-expect-error': 'allow-with-description' }, 51 | ], 52 | '@typescript-eslint/ban-types': 'warn', 53 | '@typescript-eslint/consistent-type-imports': 'error', 54 | '@typescript-eslint/explicit-function-return-type': [ 55 | 'error', 56 | { allowExpressions: true }, 57 | ], 58 | '@typescript-eslint/explicit-member-accessibility': 'error', 59 | '@typescript-eslint/indent': [ 60 | 'error', 61 | 2, 62 | { 63 | SwitchCase: 1, 64 | ignoredNodes: ['MemberExpression', 'TSTypeParameterInstantiation'], 65 | }, 66 | ], 67 | '@typescript-eslint/lines-between-class-members': [ 68 | 'warn', 69 | 'always', 70 | { exceptAfterSingleLine: true }, 71 | ], 72 | '@typescript-eslint/member-ordering': 'warn', 73 | '@typescript-eslint/no-explicit-any': 'off', 74 | '@typescript-eslint/no-inferrable-types': 'off', 75 | '@typescript-eslint/no-parameter-properties': 'off', 76 | '@typescript-eslint/no-unsafe-argument': 'off', 77 | '@typescript-eslint/no-unsafe-assignment': 'off', 78 | '@typescript-eslint/no-unsafe-call': 'off', 79 | '@typescript-eslint/no-unused-vars': 'off', 80 | '@typescript-eslint/prefer-nullish-coalescing': 'warn', 81 | '@typescript-eslint/prefer-optional-chain': 'warn', 82 | '@typescript-eslint/prefer-readonly': 'warn', 83 | '@typescript-eslint/prefer-reduce-type-parameter': 'warn', 84 | '@typescript-eslint/require-await': 'warn', 85 | '@typescript-eslint/restrict-template-expressions': 'off', 86 | '@typescript-eslint/typedef': [ 87 | 'warn', 88 | { memberVariableDeclaration: true, variableDeclaration: true }, 89 | ], 90 | 91 | 'jsdoc/match-description': [ 92 | 'warn', 93 | { 94 | mainDescription: 95 | '/^[A-Z`].+?(\\.|:)(\\n\\n.*((\\n{1,2}- .+)|(_.+_)|`.+`|\\n\\n---))?\\s?$/us', 96 | matchDescription: '^[A-Z`].+(\\.|`.+`)$', 97 | contexts: ['any'], 98 | tags: { 99 | param: true, 100 | returns: true, 101 | }, 102 | }, 103 | ], 104 | 'jsdoc/no-types': 'error', 105 | 'jsdoc/require-jsdoc': [ 106 | 'warn', 107 | { 108 | contexts: [ 109 | 'ClassDeclaration', 110 | "ClassProperty:not([accessibility='private'])", 111 | 'ExportNamedDeclaration:has(VariableDeclaration)', 112 | 'FunctionExpression', 113 | "MethodDefinition:not([accessibility='private']) > FunctionExpression", 114 | 'TSEnumDeclaration', 115 | 'TSInterfaceDeclaration', 116 | 'TSMethodSignature', 117 | // 'TSPropertySignature', 118 | 'TSTypeAliasDeclaration', 119 | ], 120 | }, 121 | ], 122 | 'jsdoc/require-param-type': 'off', 123 | 'jsdoc/require-returns-type': 'off', 124 | 'jsdoc/tag-lines': 'off', 125 | 126 | 'spellcheck/spell-checker': [ 127 | 'warn', 128 | { 129 | minLength: 4, 130 | skipWords: [ 131 | 'cancelled', 132 | 'globals', 133 | 'googletagmanager', 134 | 'inheritdoc', 135 | 'jsdoc', 136 | 'jsdom', 137 | 'minify', 138 | 'noninteraction', 139 | 'nullish', 140 | 'overridable', 141 | 'readonly', 142 | 'rollup', 143 | 'vite', 144 | 'vitest', 145 | 'vue', 146 | ], 147 | }, 148 | ], 149 | }, 150 | settings: { 151 | jsdoc: { 152 | mode: 'typescript', 153 | }, 154 | }, 155 | overrides: [ 156 | { 157 | files: ['tests/*'], 158 | rules: { 159 | '@typescript-eslint/unbound-method': 'off', 160 | 'jsdoc/check-tag-names': 'off', 161 | 'jsdoc/require-jsdoc': 'off', 162 | }, 163 | }, 164 | ], 165 | }); 166 | -------------------------------------------------------------------------------- /.github/CODEOWNERS: -------------------------------------------------------------------------------- 1 | # Owner 2 | * @Shinigami92 3 | -------------------------------------------------------------------------------- /.github/FUNDING.yml: -------------------------------------------------------------------------------- 1 | github: [Shinigami92] 2 | custom: ['https://www.paypal.com/donate?hosted_button_id=L7GY729FBKTZY'] 3 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/bug-report.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Bug Report 3 | about: Create a report to help us improve 4 | title: "Bug: " 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | ## Info 10 | 11 | | Tool | Version | 12 | | ------ | ------------- | 13 | | Plugin | v3.x.x | 14 | | Vue | v3.x.x | 15 | | Node | vx.x.x | 16 | | OS | win,linux,mac | 17 | 18 | ## Input 19 | 20 | ```js 21 | 22 | ``` 23 | 24 | ## Output or Error 25 | 26 | ```bash 27 | 28 | ``` 29 | 30 | ## Expected Output 31 | 32 | ```bash 33 | 34 | ``` 35 | 36 | ## Additional Context 37 | -------------------------------------------------------------------------------- /.github/ISSUE_TEMPLATE/feature-request.md: -------------------------------------------------------------------------------- 1 | --- 2 | name: Feature Request 3 | about: Suggest an idea for this project 4 | title: "" 5 | labels: "" 6 | assignees: "" 7 | --- 8 | 9 | ## Request / Idea 10 | 11 | ... 12 | 13 | ## Additional Context 14 | 15 | ... 16 | -------------------------------------------------------------------------------- /.github/dependabot.yml: -------------------------------------------------------------------------------- 1 | # Docs: https://docs.github.com/en/code-security/supply-chain-security/configuration-options-for-dependency-updates 2 | version: 2 3 | updates: 4 | - package-ecosystem: 'npm' 5 | directory: '/' 6 | schedule: 7 | interval: 'weekly' 8 | day: 'friday' 9 | labels: 10 | - 'dependencies' 11 | reviewers: 12 | - 'Shinigami92' 13 | versioning-strategy: increase 14 | -------------------------------------------------------------------------------- /.github/workflows/ci.yml: -------------------------------------------------------------------------------- 1 | name: CI 2 | 3 | on: 4 | push: 5 | branches: 6 | - main 7 | pull_request: 8 | 9 | jobs: 10 | build: 11 | runs-on: ${{ matrix.os }} 12 | strategy: 13 | matrix: 14 | os: [ubuntu-latest, macos-latest, windows-latest] 15 | node_version: [22] 16 | fail-fast: false 17 | 18 | name: 'Build&Test: node-${{ matrix.node_version }}, ${{ matrix.os }}' 19 | steps: 20 | - name: Checkout 21 | uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 22 | 23 | - name: Install pnpm 24 | uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v3.0.0 25 | 26 | - name: Set node version to ${{ matrix.node_version }} 27 | uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 28 | with: 29 | node-version: ${{ matrix.node_version }} 30 | cache: 'pnpm' 31 | 32 | - name: Versions 33 | run: | 34 | echo "pnpm: $(pnpm --version)" 35 | echo "npm : $(npm --version)" 36 | echo "node: $(node --version)" 37 | echo "process.versions:" 38 | node -p process.versions 39 | 40 | - name: Install dependencies 41 | run: pnpm install --frozen-lockfile 42 | 43 | - name: Build 44 | run: pnpm run build 45 | 46 | - name: Check scripts 47 | run: pnpm run ts-check 48 | 49 | - name: Test 50 | run: pnpm run test 51 | 52 | lint: 53 | runs-on: ubuntu-latest 54 | name: 'Lint: node-22, ubuntu-latest' 55 | steps: 56 | - uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 57 | 58 | - name: Install pnpm 59 | uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v3.0.0 60 | 61 | - name: Set node version to 22 62 | uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 63 | with: 64 | node-version: 22 65 | cache: 'pnpm' 66 | 67 | - name: Prepare 68 | run: | 69 | pnpm install --frozen-lockfile 70 | pnpm run build 71 | 72 | - name: Lint 73 | run: pnpm run lint 74 | 75 | - name: Check formatting 76 | run: pnpm prettier --check . 77 | -------------------------------------------------------------------------------- /.github/workflows/publish.yml: -------------------------------------------------------------------------------- 1 | name: Publish 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | release: 8 | if: github.ref == 'refs/heads/main' 9 | runs-on: ubuntu-latest 10 | name: Release 11 | steps: 12 | - name: Checkout 13 | uses: actions/checkout@a5ac7e51b41094c92402da3b24376905380afc29 # v4.1.6 14 | 15 | - name: Install pnpm 16 | uses: pnpm/action-setup@fe02b34f77f8bc703788d5817da081398fad5dd2 # v3.0.0 17 | 18 | - name: Set node version to 22 19 | uses: actions/setup-node@60edb5dd545a775178f52524783378180af0d1f8 # v4.0.2 20 | with: 21 | node-version: 22 22 | cache: 'pnpm' 23 | 24 | - name: Prepare 25 | run: pnpm install --frozen-lockfile 26 | 27 | - name: Set publishing config 28 | run: pnpm config set '//registry.npmjs.org/:_authToken' "${NODE_AUTH_TOKEN}" 29 | env: 30 | NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }} 31 | 32 | - name: Publish 33 | run: | 34 | PACKAGE_DIST_TAG=$(node -e "console.log(/^\d+\.\d+\.\d+(\-(\w+)\.\d+)$/.exec(require('./package.json').version)?.[2] || 'latest')") 35 | pnpm publish --access public --tag $PACKAGE_DIST_TAG 36 | -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Logs 2 | logs 3 | *.log 4 | npm-debug.log* 5 | yarn-debug.log* 6 | yarn-error.log* 7 | 8 | # Runtime data 9 | pids 10 | *.pid 11 | *.seed 12 | *.pid.lock 13 | 14 | # Directory for instrumented libs generated by jscoverage/JSCover 15 | lib-cov 16 | 17 | # Coverage directory used by tools like istanbul 18 | coverage 19 | 20 | junit.xml 21 | 22 | # nyc test coverage 23 | .nyc_output 24 | 25 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files) 26 | .grunt 27 | 28 | # Bower dependency directory (https://bower.io/) 29 | bower_components 30 | 31 | # node-waf configuration 32 | .lock-wscript 33 | 34 | # Compiled binary addons (https://nodejs.org/api/addons.html) 35 | build/Release 36 | 37 | # Dependency directories 38 | node_modules/ 39 | jspm_packages/ 40 | .pnpm-store/ 41 | 42 | # TypeScript v1 declaration files 43 | typings/ 44 | 45 | # Optional npm cache directory 46 | .npm 47 | 48 | # Optional eslint cache 49 | .eslintcache 50 | 51 | # Optional REPL history 52 | .node_repl_history 53 | 54 | # Output of 'npm pack' 55 | *.tgz 56 | 57 | # Yarn Integrity file 58 | .yarn-integrity 59 | 60 | # dotenv environment variables file 61 | .env 62 | 63 | # next.js build output 64 | .next 65 | 66 | # build 67 | dist 68 | -------------------------------------------------------------------------------- /.npmrc: -------------------------------------------------------------------------------- 1 | package-manager-strict=false 2 | -------------------------------------------------------------------------------- /.prettierignore: -------------------------------------------------------------------------------- 1 | .github/ISSUE_TEMPLATE/ 2 | .yarn/ 3 | .pnpm-store/ 4 | .pnp.cjs 5 | pnpm-lock.yaml 6 | coverage/ 7 | dist/ 8 | lib/ 9 | -------------------------------------------------------------------------------- /.prettierrc.cjs: -------------------------------------------------------------------------------- 1 | // @ts-check 2 | 3 | /** 4 | * @type {import('prettier').Options} 5 | */ 6 | module.exports = { 7 | plugins: ['prettier-plugin-organize-imports'], 8 | singleQuote: true, 9 | trailingComma: 'all', 10 | overrides: [ 11 | { 12 | files: '*.json5', 13 | options: { 14 | parser: 'json5', 15 | quoteProps: 'preserve', 16 | singleQuote: false, 17 | trailingComma: 'none', 18 | }, 19 | }, 20 | ], 21 | }; 22 | -------------------------------------------------------------------------------- /.vscode/settings.json: -------------------------------------------------------------------------------- 1 | { 2 | "cSpell.words": [ 3 | "googletagmanager", 4 | "inheritdoc", 5 | "kumar", 6 | "linebreak", 7 | "manish", 8 | "noninteraction", 9 | "npm's", 10 | "overridable", 11 | "pararms", 12 | "parens", 13 | "readonly", 14 | "shinigami", 15 | "vitest", 16 | "vuejs" 17 | ], 18 | "eslint.validate": ["javascript", "typescript"], 19 | "files.associations": { 20 | "*.json5": "jsonc" 21 | }, 22 | "typescript.tsdk": "node_modules/typescript/lib" 23 | } 24 | -------------------------------------------------------------------------------- /CHANGELOG.md: -------------------------------------------------------------------------------- 1 | # Next 2 | 3 | [diff](https://github.com/gtm-support/vue-gtm/compare/3.1.0...main) 4 | 5 | # 3.1.0 6 | 7 | [diff](https://github.com/gtm-support/vue-gtm/compare/3.0.1...3.1.0) 8 | 9 | - Fix type augmentation for `vue` 10 | - Update `peerDependencies` 11 | 12 | # 3.0.1 13 | 14 | [diff](https://github.com/gtm-support/vue-gtm/compare/3.0.0...3.0.1) 15 | 16 | - Fix missing `types` exposing 17 | 18 | # 3.0.0 19 | 20 | [diff](https://github.com/gtm-support/vue-gtm/compare/2.2.0...3.0.0) 21 | 22 | - Drop cjs support 23 | - Return gtmPlugin from app context ([#409]) 24 | 25 | [#409]: https://github.com/gtm-support/vue-gtm/pull/409 26 | 27 | # 2.2.0 28 | 29 | [diff](https://github.com/gtm-support/vue-gtm/compare/2.1.0...2.2.0) 30 | 31 | - Upgrade `core` to [2.1.0](https://github.com/gtm-support/core/releases/tag/2.1.0) 32 | 33 | # 2.1.0 34 | 35 | [diff](https://github.com/gtm-support/vue-gtm/compare/2.0.0...2.1.0) 36 | 37 | - Fix peer dependency ranges ([#351]) 38 | - Internal changes of the bundling process 39 | 40 | [#351]: https://github.com/gtm-support/vue-gtm/issues/351 41 | 42 | # 2.0.0 43 | 44 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.6.0...2.0.0) 45 | 46 | ## BREAKING CHANGE 47 | 48 | - Minimum required Vue version is now `^3.2.0` 49 | - Minimum required Vue Router version is now `^4.1.0` 50 | - Minimum required EcmaScript is now `ES2018` 51 | 52 | ## Features 53 | 54 | - Now serving ESM and CJS 55 | - Handle `vue-router` failure checks manually ([#273]) 56 | - Set `lib` from `ES2020` to `ES2018` 57 | 58 | [#273]: https://github.com/gtm-support/vue-gtm/pull/273 59 | 60 | # 1.6.0 61 | 62 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.5.0...1.6.0) 63 | 64 | - Upgrade `core` to [1.4.0](https://github.com/gtm-support/core/releases/tag/1.4.0) 65 | - Use `^`-semver modifier for `@gtm-support/core` 66 | 67 | # 1.5.0 68 | 69 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.4.0...1.5.0) 70 | 71 | - Upgrade `core` to [1.3.0](https://github.com/gtm-support/core/releases/tag/1.3.0) 72 | 73 | # 1.4.0 74 | 75 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.3.0...1.4.0) 76 | 77 | - Upgrade `core` to [1.2.0](https://github.com/gtm-support/core/releases/tag/1.2.0) 78 | 79 | # 1.3.0 80 | 81 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.2.3...1.3.0) 82 | 83 | - New option `vueRouterAdditionalEventData` ([#110]) 84 | 85 | [#110]: https://github.com/gtm-support/vue-gtm/issues/110 86 | 87 | # 1.2.3 88 | 89 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.2.2...1.2.3) 90 | 91 | - Detect if running in browser context ([#97]) 92 | 93 | [#97]: https://github.com/gtm-support/vue-gtm/pull/97 94 | 95 | # 1.2.2 96 | 97 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.2.1...1.2.2) 98 | 99 | - Make `vue-router` optional, for real this time... 100 | 101 | # 1.2.1 102 | 103 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.2.0...1.2.1) 104 | 105 | - Fix optional `vue-router` peer dependency 106 | 107 | # 1.2.0 108 | 109 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.1.0...1.2.0) 110 | 111 | - Upgrade `core` to [1.1.0](https://github.com/gtm-support/core/releases/tag/1.1.0) 112 | 113 | # 1.1.0 114 | 115 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.0.0...1.1.0) 116 | 117 | - Ability to ignore views by callback ([#37]) 118 | 119 | ## BREAKING CHANGE 120 | 121 | - Ignore views is not case insensitive anymore 122 | 123 | [#37]: https://github.com/gtm-support/vue-gtm/pull/37 124 | 125 | # 1.0.0 126 | 127 | [diff](https://github.com/gtm-support/vue-gtm/compare/940a45a90d4cb44a045923910e7439d0202372ca...1.0.0) 128 | 129 | - Initial release 130 | 131 | # 1.0.0-alpha.3 132 | 133 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.0.0-alpha.2...1.0.0-alpha.3) 134 | 135 | - Update to [@gtm-support/core v1.0.0-alpha.3](https://github.com/gtm-support/core/releases/tag/1.0.0-alpha.3) 136 | 137 | # 1.0.0-alpha.2 138 | 139 | [diff](https://github.com/gtm-support/vue-gtm/compare/1.0.0-alpha.1...1.0.0-alpha.2) 140 | 141 | - Use [@gtm-support/core](https://github.com/gtm-support/core) natively 142 | 143 | ## BREAKING CHANGE 144 | 145 | The `id` parameter is now part of the options, therefor if you used the constructor you need to move the first argument into the second `option` argument. 146 | Also some names changed here and there. 147 | 148 | # 1.0.0-alpha.1 149 | 150 | [diff](https://github.com/gtm-support/vue-gtm/compare/940a45a90d4cb44a045923910e7439d0202372ca...1.0.0-alpha.1) 151 | 152 | - Compatibility release for `vue-gtm` `3.5.0` 153 | - [Previous Changelog](https://github.com/mib200/vue-gtm/blob/master/CHANGELOG.md) 154 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020-2024 Christopher Quadflieg 4 | Copyright (c) 2017-2020 Manish Kumar (Apache 2.0) 5 | 6 | Permission is hereby granted, free of charge, to any person obtaining a copy 7 | of this software and associated documentation files (the "Software"), to deal 8 | in the Software without restriction, including without limitation the rights 9 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 10 | copies of the Software, and to permit persons to whom the Software is 11 | furnished to do so, subject to the following conditions: 12 | 13 | The above copyright notice and this permission notice shall be included in all 14 | copies or substantial portions of the Software. 15 | 16 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 17 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 18 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 19 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 20 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 21 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 22 | SOFTWARE. 23 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 |

Vue Google Tag Manager

2 | 3 |

4 | 5 | Google Tag Manager 6 | 7 | 8 | Vue.js 9 | 10 |

11 | 12 |

Simple implementation of Google Tag Manager in Vue.js

13 | 14 | --- 15 | 16 |

17 | 18 | license: MIT 19 | 20 | 21 | NPM package 22 | 23 | 24 | downloads 25 | 26 | 27 | code style: Prettier 28 | 29 | 30 | Build Status 31 | 32 |

33 | 34 | This plugin will help you in your common GTM tasks. 35 | 36 | **Note: If you are looking to track all Vuex mutations, you can use [Vuex GTM plugin](https://gist.github.com/matt-e-king/ebdb39088c50b96bbbbe77c5bc8abb2b)** 37 | 38 | # Requirements 39 | 40 | - **Vue.** >= 3.0.0 41 | - **Google Tag Manager account.** To send data to 42 | 43 | **Optional dependencies** 44 | 45 | - **Vue Router** >= 4.x - In order to use auto-tracking of screens 46 | 47 | # Configuration 48 | 49 | `npm install @gtm-support/vue-gtm` 50 | 51 | Here is an example configuration: 52 | 53 | ```js 54 | import { createApp } from 'vue'; 55 | import { createGtm } from '@gtm-support/vue-gtm'; 56 | import router from './router'; 57 | 58 | const app = createApp(App); 59 | 60 | app.use(router); 61 | 62 | app.use( 63 | createGtm({ 64 | id: 'GTM-xxxxxx', // Your GTM single container ID, array of container ids ['GTM-xxxxxx', 'GTM-yyyyyy'] or array of objects [{id: 'GTM-xxxxxx', queryParams: { gtm_auth: 'abc123', gtm_preview: 'env-4', gtm_cookies_win: 'x'}}, {id: 'GTM-yyyyyy', queryParams: {gtm_auth: 'abc234', gtm_preview: 'env-5', gtm_cookies_win: 'x'}}], // Your GTM single container ID or array of container ids ['GTM-xxxxxx', 'GTM-yyyyyy'] 65 | queryParams: { 66 | // Add URL query string when loading gtm.js with GTM ID (required when using custom environments) 67 | gtm_auth: 'AB7cDEf3GHIjkl-MnOP8qr', 68 | gtm_preview: 'env-4', 69 | gtm_cookies_win: 'x', 70 | }, 71 | source: 'https://customurl.com/gtm.js', // Add your own serverside GTM script 72 | defer: false, // Script can be set to `defer` to speed up page load at the cost of less accurate results (in case visitor leaves before script is loaded, which is unlikely but possible). Defaults to false, so the script is loaded `async` by default 73 | compatibility: false, // Will add `async` and `defer` to the script tag to not block requests for old browsers that do not support `async` 74 | nonce: '2726c7f26c', // Will add `nonce` to the script tag 75 | enabled: true, // defaults to true. Plugin can be disabled by setting this to false for Ex: enabled: !!GDPR_Cookie (optional) 76 | debug: true, // Whether or not display console logs debugs (optional) 77 | loadScript: true, // Whether or not to load the GTM Script (Helpful if you are including GTM manually, but need the dataLayer functionality in your components) (optional) 78 | vueRouter: router, // Pass the router instance to automatically sync with router (optional) 79 | ignoredViews: ['homepage'], // Don't trigger events for specified router names (optional) 80 | trackOnNextTick: false, // Whether or not call trackView in Vue.nextTick 81 | }), 82 | ); 83 | ``` 84 | 85 | This injects the tag manager script in the page, except when `enabled` is set to `false`. 86 | In that case it will be injected when calling `this.$gtm.enable(true)` for the first time. 87 | 88 | Remember to enable the History Change Trigger for router changes to be sent through GTM. 89 | 90 | # Documentation 91 | 92 | Once the configuration is completed, you can access vue gtm instance in your components like that: 93 | 94 | ```js 95 | export default { 96 | name: 'MyComponent', 97 | data() { 98 | return { 99 | someData: false, 100 | }; 101 | }, 102 | methods: { 103 | onClick() { 104 | this.$gtm.trackEvent({ 105 | event: null, // Event type [default = 'interaction'] (Optional) 106 | category: 'Calculator', 107 | action: 'click', 108 | label: 'Home page SIP calculator', 109 | value: 5000, 110 | noninteraction: false, // Optional 111 | }); 112 | }, 113 | }, 114 | mounted() { 115 | this.$gtm.trackView('MyScreenName', 'currentPath'); 116 | }, 117 | }; 118 | ``` 119 | 120 | The passed variables are mapped with GTM data layer as follows 121 | 122 | ```js 123 | dataLayer.push({ 124 | event: event || 'interaction', 125 | target: category, 126 | action: action, 127 | 'target-properties': label, 128 | value: value, 129 | 'interaction-type': noninteraction, 130 | ...rest, 131 | }); 132 | ``` 133 | 134 | You can also access the instance anywhere whenever you imported `Vue` by using `Vue.gtm`. It is especially useful when you are in a store module or somewhere else than a component's scope. 135 | 136 | It's also possible to send completely custom data to GTM with just pushing something manually to `dataLayer`: 137 | 138 | ```js 139 | if (this.$gtm.enabled()) { 140 | window.dataLayer?.push({ 141 | event: 'myEvent', 142 | // further parameters 143 | }); 144 | } 145 | ``` 146 | 147 | ## Sync gtm with your router 148 | 149 | Thanks to vue-router guards, you can automatically dispatch new screen views on router change! 150 | To use this feature, you just need to inject the router instance on plugin initialization. 151 | 152 | This feature will generate the view name according to a priority rule: 153 | 154 | - If you defined a meta field for your route named `gtm` this will take the value of this field for the view name. 155 | - Otherwise, if the plugin don't have a value for the `meta.gtm` it will fallback to the internal route name. 156 | 157 | Most of the time the second case is enough, but sometimes you want to have more control on what is sent, this is where the first rule shine. 158 | 159 | Example: 160 | 161 | ```js 162 | const myRoute = { 163 | path: 'myRoute', 164 | name: 'MyRouteName', 165 | component: SomeComponent, 166 | meta: { gtm: 'MyCustomValue' }, 167 | }; 168 | ``` 169 | 170 | > This will use `MyCustomValue` as the view name. 171 | 172 | ### Passing custom properties with page view events 173 | 174 | If your GTM setup expects custom data to be sent as part of your page views, you can add desired properties to your route definitions via the `meta.gtmAdditionalEventData` property. 175 | 176 | Example: 177 | 178 | ```js 179 | const myRoute = { 180 | path: 'myRoute', 181 | name: 'myRouteName', 182 | component: SomeComponent, 183 | meta: { gtmAdditionalEventData: { routeCategory: 'INFO' } }, 184 | }; 185 | ``` 186 | 187 | > This sends the property `routeCategory` with the value 'INFO' as part of your page view event for that route. 188 | 189 | Note that the properties `event`, `content-name` and `content-view-name` are always overridden. 190 | 191 | ### Passing dynamic properties with page view events 192 | 193 | If you need to pass dynamic properties as part of your page views, you can set a callback that derives the custom data after navigation. 194 | 195 | Example: 196 | 197 | ```js 198 | createGtm({ 199 | // ...other options 200 | vueRouter: router, 201 | vueRouterAdditionalEventData: () => ({ 202 | someComputedProperty: computeProperty(), 203 | }), 204 | }); 205 | ``` 206 | 207 | > This computes and sends the property `someComputedProperty` as part of your page view event after every navigation. 208 | 209 | Note that a property with the same name on route level will override this. 210 | 211 | ## Using with composition API 212 | 213 | In order to use this plugin with composition API (inside your `setup` method), you can just call the custom composable `useGtm`. 214 | 215 | Example: 216 | 217 | ```vue 218 | 221 | 222 | 248 | ``` 249 | 250 | ## Methods 251 | 252 | ### Enable plugin 253 | 254 | Check if plugin is enabled 255 | 256 | ```js 257 | this.$gtm.enabled(); 258 | ``` 259 | 260 | Enable plugin 261 | 262 | ```js 263 | this.$gtm.enable(true); 264 | ``` 265 | 266 | Disable plugin 267 | 268 | ```js 269 | this.$gtm.enable(false); 270 | ``` 271 | 272 | ### Debug plugin 273 | 274 | Check if plugin is in debug mode 275 | 276 | ```js 277 | this.$gtm.debugEnabled(); 278 | ``` 279 | 280 | Enable debug mode 281 | 282 | ```js 283 | this.$gtm.debug(true); 284 | ``` 285 | 286 | Disable debug mode 287 | 288 | ```js 289 | this.$gtm.debug(false); 290 | ``` 291 | 292 | ## Credits 293 | 294 | - [mib200 vue-gtm](https://github.com/mib200/vue-gtm) 295 | - [ScreamZ vue-analytics](https://github.com/ScreamZ/vue-analytics) 296 | -------------------------------------------------------------------------------- /package.json: -------------------------------------------------------------------------------- 1 | { 2 | "name": "@gtm-support/vue-gtm", 3 | "version": "3.1.0", 4 | "description": "Simple implementation of Google Tag Manager for Vue", 5 | "scripts": { 6 | "clean": "rimraf coverage .eslintcache dist pnpm-lock.yaml node_modules", 7 | "build:clean": "rimraf dist", 8 | "build:code": "tsup-node", 9 | "build": "run-s build:clean build:code", 10 | "format": "prettier --cache --write .", 11 | "lint": "eslint --cache --cache-strategy content --report-unused-disable-directives .", 12 | "ts-check": "tsc", 13 | "test": "vitest", 14 | "prepublishOnly": "pnpm run clean && pnpm install && pnpm run build", 15 | "preflight": "pnpm install && run-s format lint build test ts-check" 16 | }, 17 | "type": "module", 18 | "files": [ 19 | "dist" 20 | ], 21 | "module": "dist/index.js", 22 | "types": "dist/index.d.ts", 23 | "exports": { 24 | ".": "./dist/index.js", 25 | "./package.json": "./package.json" 26 | }, 27 | "author": { 28 | "name": "Christopher Quadflieg", 29 | "email": "chrissi92@hotmail.de", 30 | "url": "https://github.com/Shinigami92" 31 | }, 32 | "contributors": [ 33 | { 34 | "name": "Manish Kumar", 35 | "url": "https://github.com/mib200" 36 | } 37 | ], 38 | "license": "MIT", 39 | "homepage": "https://github.com/gtm-support/vue-gtm", 40 | "repository": { 41 | "type": "git", 42 | "url": "https://github.com/gtm-support/vue-gtm.git" 43 | }, 44 | "bugs": { 45 | "url": "https://github.com/gtm-support/vue-gtm/issues" 46 | }, 47 | "keywords": [ 48 | "analytics", 49 | "universal analytics", 50 | "google analytics", 51 | "google tag manager", 52 | "vue analytics", 53 | "vue tag manager", 54 | "vue google tag manager", 55 | "vue js google tag manager", 56 | "vuejs google tag manager", 57 | "vue js analytics", 58 | "vue gtm", 59 | "vuejs gtm", 60 | "vue js gtm", 61 | "vuejs", 62 | "tracking", 63 | "vue", 64 | "google" 65 | ], 66 | "dependencies": { 67 | "@gtm-support/core": "^3.0.1" 68 | }, 69 | "devDependencies": { 70 | "@types/node": "~22.3.0", 71 | "@typescript-eslint/eslint-plugin": "~7.18.0", 72 | "@typescript-eslint/parser": "~7.18.0", 73 | "eslint": "~8.57.0", 74 | "eslint-config-prettier": "~9.1.0", 75 | "eslint-define-config": "~2.1.0", 76 | "eslint-gitignore": "~0.1.0", 77 | "eslint-plugin-jsdoc": "~50.2.1", 78 | "eslint-plugin-prettier": "~5.2.1", 79 | "eslint-plugin-spellcheck": "~0.0.20", 80 | "jsdom": "~24.1.1", 81 | "npm-run-all2": "~6.2.2", 82 | "prettier": "3.3.3", 83 | "prettier-plugin-organize-imports": "~4.0.0", 84 | "rimraf": "~6.0.1", 85 | "tsup": "~8.2.4", 86 | "typescript": "~5.5.4", 87 | "vitest": "~2.0.5", 88 | "vue": "^3.4.37", 89 | "vue-router": "^4.4.3" 90 | }, 91 | "peerDependencies": { 92 | "vue": ">= 3.2.26 < 4.0.0" 93 | }, 94 | "peerDependenciesMeta": { 95 | "vue-router": { 96 | "optional": true 97 | } 98 | }, 99 | "optionalDependencies": { 100 | "vue-router": ">= 4.4.1 < 5.0.0" 101 | }, 102 | "packageManager": "pnpm@9.7.0" 103 | } 104 | -------------------------------------------------------------------------------- /pnpm-lock.yaml: -------------------------------------------------------------------------------- 1 | lockfileVersion: '9.0' 2 | 3 | settings: 4 | autoInstallPeers: true 5 | excludeLinksFromLockfile: false 6 | 7 | importers: 8 | 9 | .: 10 | dependencies: 11 | '@gtm-support/core': 12 | specifier: ^3.0.1 13 | version: 3.0.1 14 | optionalDependencies: 15 | vue-router: 16 | specifier: '>= 4.4.1 < 5.0.0' 17 | version: 4.4.3(vue@3.4.37(typescript@5.5.4)) 18 | devDependencies: 19 | '@types/node': 20 | specifier: ~22.3.0 21 | version: 22.3.0 22 | '@typescript-eslint/eslint-plugin': 23 | specifier: ~7.18.0 24 | version: 7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4) 25 | '@typescript-eslint/parser': 26 | specifier: ~7.18.0 27 | version: 7.18.0(eslint@8.57.0)(typescript@5.5.4) 28 | eslint: 29 | specifier: ~8.57.0 30 | version: 8.57.0 31 | eslint-config-prettier: 32 | specifier: ~9.1.0 33 | version: 9.1.0(eslint@8.57.0) 34 | eslint-define-config: 35 | specifier: ~2.1.0 36 | version: 2.1.0 37 | eslint-gitignore: 38 | specifier: ~0.1.0 39 | version: 0.1.0(eslint@8.57.0) 40 | eslint-plugin-jsdoc: 41 | specifier: ~50.2.1 42 | version: 50.2.1(eslint@8.57.0) 43 | eslint-plugin-prettier: 44 | specifier: ~5.2.1 45 | version: 5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3) 46 | eslint-plugin-spellcheck: 47 | specifier: ~0.0.20 48 | version: 0.0.20(eslint@8.57.0) 49 | jsdom: 50 | specifier: ~24.1.1 51 | version: 24.1.1 52 | npm-run-all2: 53 | specifier: ~6.2.2 54 | version: 6.2.2 55 | prettier: 56 | specifier: 3.3.3 57 | version: 3.3.3 58 | prettier-plugin-organize-imports: 59 | specifier: ~4.0.0 60 | version: 4.0.0(prettier@3.3.3)(typescript@5.5.4) 61 | rimraf: 62 | specifier: ~6.0.1 63 | version: 6.0.1 64 | tsup: 65 | specifier: ~8.2.4 66 | version: 8.2.4(postcss@8.4.41)(typescript@5.5.4) 67 | typescript: 68 | specifier: ~5.5.4 69 | version: 5.5.4 70 | vitest: 71 | specifier: ~2.0.5 72 | version: 2.0.5(@types/node@22.3.0)(jsdom@24.1.1) 73 | vue: 74 | specifier: ^3.4.37 75 | version: 3.4.37(typescript@5.5.4) 76 | 77 | packages: 78 | 79 | '@ampproject/remapping@2.3.0': 80 | resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} 81 | engines: {node: '>=6.0.0'} 82 | 83 | '@babel/helper-string-parser@7.24.8': 84 | resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} 85 | engines: {node: '>=6.9.0'} 86 | 87 | '@babel/helper-validator-identifier@7.24.7': 88 | resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} 89 | engines: {node: '>=6.9.0'} 90 | 91 | '@babel/parser@7.25.3': 92 | resolution: {integrity: sha512-iLTJKDbJ4hMvFPgQwwsVoxtHyWpKKPBrxkANrSYewDPaPpT5py5yeVkgPIJ7XYXhndxJpaA3PyALSXQ7u8e/Dw==} 93 | engines: {node: '>=6.0.0'} 94 | hasBin: true 95 | 96 | '@babel/types@7.25.2': 97 | resolution: {integrity: sha512-YTnYtra7W9e6/oAZEHj0bJehPRUlLH9/fbpT5LfB0NhQXyALCRkRs3zH9v07IYhkgpqX6Z78FnuccZr/l4Fs4Q==} 98 | engines: {node: '>=6.9.0'} 99 | 100 | '@es-joy/jsdoccomment@0.48.0': 101 | resolution: {integrity: sha512-G6QUWIcC+KvSwXNsJyDTHvqUdNoAVJPPgkc3+Uk4WBKqZvoXhlvazOgm9aL0HwihJLQf0l+tOE2UFzXBqCqgDw==} 102 | engines: {node: '>=16'} 103 | 104 | '@esbuild/aix-ppc64@0.21.5': 105 | resolution: {integrity: sha512-1SDgH6ZSPTlggy1yI6+Dbkiz8xzpHJEVAlF/AM1tHPLsf5STom9rwtjE4hKAF20FfXXNTFqEYXyJNWh1GiZedQ==} 106 | engines: {node: '>=12'} 107 | cpu: [ppc64] 108 | os: [aix] 109 | 110 | '@esbuild/aix-ppc64@0.23.0': 111 | resolution: {integrity: sha512-3sG8Zwa5fMcA9bgqB8AfWPQ+HFke6uD3h1s3RIwUNK8EG7a4buxvuFTs3j1IMs2NXAk9F30C/FF4vxRgQCcmoQ==} 112 | engines: {node: '>=18'} 113 | cpu: [ppc64] 114 | os: [aix] 115 | 116 | '@esbuild/android-arm64@0.21.5': 117 | resolution: {integrity: sha512-c0uX9VAUBQ7dTDCjq+wdyGLowMdtR/GoC2U5IYk/7D1H1JYC0qseD7+11iMP2mRLN9RcCMRcjC4YMclCzGwS/A==} 118 | engines: {node: '>=12'} 119 | cpu: [arm64] 120 | os: [android] 121 | 122 | '@esbuild/android-arm64@0.23.0': 123 | resolution: {integrity: sha512-EuHFUYkAVfU4qBdyivULuu03FhJO4IJN9PGuABGrFy4vUuzk91P2d+npxHcFdpUnfYKy0PuV+n6bKIpHOB3prQ==} 124 | engines: {node: '>=18'} 125 | cpu: [arm64] 126 | os: [android] 127 | 128 | '@esbuild/android-arm@0.21.5': 129 | resolution: {integrity: sha512-vCPvzSjpPHEi1siZdlvAlsPxXl7WbOVUBBAowWug4rJHb68Ox8KualB+1ocNvT5fjv6wpkX6o/iEpbDrf68zcg==} 130 | engines: {node: '>=12'} 131 | cpu: [arm] 132 | os: [android] 133 | 134 | '@esbuild/android-arm@0.23.0': 135 | resolution: {integrity: sha512-+KuOHTKKyIKgEEqKbGTK8W7mPp+hKinbMBeEnNzjJGyFcWsfrXjSTNluJHCY1RqhxFurdD8uNXQDei7qDlR6+g==} 136 | engines: {node: '>=18'} 137 | cpu: [arm] 138 | os: [android] 139 | 140 | '@esbuild/android-x64@0.21.5': 141 | resolution: {integrity: sha512-D7aPRUUNHRBwHxzxRvp856rjUHRFW1SdQATKXH2hqA0kAZb1hKmi02OpYRacl0TxIGz/ZmXWlbZgjwWYaCakTA==} 142 | engines: {node: '>=12'} 143 | cpu: [x64] 144 | os: [android] 145 | 146 | '@esbuild/android-x64@0.23.0': 147 | resolution: {integrity: sha512-WRrmKidLoKDl56LsbBMhzTTBxrsVwTKdNbKDalbEZr0tcsBgCLbEtoNthOW6PX942YiYq8HzEnb4yWQMLQuipQ==} 148 | engines: {node: '>=18'} 149 | cpu: [x64] 150 | os: [android] 151 | 152 | '@esbuild/darwin-arm64@0.21.5': 153 | resolution: {integrity: sha512-DwqXqZyuk5AiWWf3UfLiRDJ5EDd49zg6O9wclZ7kUMv2WRFr4HKjXp/5t8JZ11QbQfUS6/cRCKGwYhtNAY88kQ==} 154 | engines: {node: '>=12'} 155 | cpu: [arm64] 156 | os: [darwin] 157 | 158 | '@esbuild/darwin-arm64@0.23.0': 159 | resolution: {integrity: sha512-YLntie/IdS31H54Ogdn+v50NuoWF5BDkEUFpiOChVa9UnKpftgwzZRrI4J132ETIi+D8n6xh9IviFV3eXdxfow==} 160 | engines: {node: '>=18'} 161 | cpu: [arm64] 162 | os: [darwin] 163 | 164 | '@esbuild/darwin-x64@0.21.5': 165 | resolution: {integrity: sha512-se/JjF8NlmKVG4kNIuyWMV/22ZaerB+qaSi5MdrXtd6R08kvs2qCN4C09miupktDitvh8jRFflwGFBQcxZRjbw==} 166 | engines: {node: '>=12'} 167 | cpu: [x64] 168 | os: [darwin] 169 | 170 | '@esbuild/darwin-x64@0.23.0': 171 | resolution: {integrity: sha512-IMQ6eme4AfznElesHUPDZ+teuGwoRmVuuixu7sv92ZkdQcPbsNHzutd+rAfaBKo8YK3IrBEi9SLLKWJdEvJniQ==} 172 | engines: {node: '>=18'} 173 | cpu: [x64] 174 | os: [darwin] 175 | 176 | '@esbuild/freebsd-arm64@0.21.5': 177 | resolution: {integrity: sha512-5JcRxxRDUJLX8JXp/wcBCy3pENnCgBR9bN6JsY4OmhfUtIHe3ZW0mawA7+RDAcMLrMIZaf03NlQiX9DGyB8h4g==} 178 | engines: {node: '>=12'} 179 | cpu: [arm64] 180 | os: [freebsd] 181 | 182 | '@esbuild/freebsd-arm64@0.23.0': 183 | resolution: {integrity: sha512-0muYWCng5vqaxobq6LB3YNtevDFSAZGlgtLoAc81PjUfiFz36n4KMpwhtAd4he8ToSI3TGyuhyx5xmiWNYZFyw==} 184 | engines: {node: '>=18'} 185 | cpu: [arm64] 186 | os: [freebsd] 187 | 188 | '@esbuild/freebsd-x64@0.21.5': 189 | resolution: {integrity: sha512-J95kNBj1zkbMXtHVH29bBriQygMXqoVQOQYA+ISs0/2l3T9/kj42ow2mpqerRBxDJnmkUDCaQT/dfNXWX/ZZCQ==} 190 | engines: {node: '>=12'} 191 | cpu: [x64] 192 | os: [freebsd] 193 | 194 | '@esbuild/freebsd-x64@0.23.0': 195 | resolution: {integrity: sha512-XKDVu8IsD0/q3foBzsXGt/KjD/yTKBCIwOHE1XwiXmrRwrX6Hbnd5Eqn/WvDekddK21tfszBSrE/WMaZh+1buQ==} 196 | engines: {node: '>=18'} 197 | cpu: [x64] 198 | os: [freebsd] 199 | 200 | '@esbuild/linux-arm64@0.21.5': 201 | resolution: {integrity: sha512-ibKvmyYzKsBeX8d8I7MH/TMfWDXBF3db4qM6sy+7re0YXya+K1cem3on9XgdT2EQGMu4hQyZhan7TeQ8XkGp4Q==} 202 | engines: {node: '>=12'} 203 | cpu: [arm64] 204 | os: [linux] 205 | 206 | '@esbuild/linux-arm64@0.23.0': 207 | resolution: {integrity: sha512-j1t5iG8jE7BhonbsEg5d9qOYcVZv/Rv6tghaXM/Ug9xahM0nX/H2gfu6X6z11QRTMT6+aywOMA8TDkhPo8aCGw==} 208 | engines: {node: '>=18'} 209 | cpu: [arm64] 210 | os: [linux] 211 | 212 | '@esbuild/linux-arm@0.21.5': 213 | resolution: {integrity: sha512-bPb5AHZtbeNGjCKVZ9UGqGwo8EUu4cLq68E95A53KlxAPRmUyYv2D6F0uUI65XisGOL1hBP5mTronbgo+0bFcA==} 214 | engines: {node: '>=12'} 215 | cpu: [arm] 216 | os: [linux] 217 | 218 | '@esbuild/linux-arm@0.23.0': 219 | resolution: {integrity: sha512-SEELSTEtOFu5LPykzA395Mc+54RMg1EUgXP+iw2SJ72+ooMwVsgfuwXo5Fn0wXNgWZsTVHwY2cg4Vi/bOD88qw==} 220 | engines: {node: '>=18'} 221 | cpu: [arm] 222 | os: [linux] 223 | 224 | '@esbuild/linux-ia32@0.21.5': 225 | resolution: {integrity: sha512-YvjXDqLRqPDl2dvRODYmmhz4rPeVKYvppfGYKSNGdyZkA01046pLWyRKKI3ax8fbJoK5QbxblURkwK/MWY18Tg==} 226 | engines: {node: '>=12'} 227 | cpu: [ia32] 228 | os: [linux] 229 | 230 | '@esbuild/linux-ia32@0.23.0': 231 | resolution: {integrity: sha512-P7O5Tkh2NbgIm2R6x1zGJJsnacDzTFcRWZyTTMgFdVit6E98LTxO+v8LCCLWRvPrjdzXHx9FEOA8oAZPyApWUA==} 232 | engines: {node: '>=18'} 233 | cpu: [ia32] 234 | os: [linux] 235 | 236 | '@esbuild/linux-loong64@0.21.5': 237 | resolution: {integrity: sha512-uHf1BmMG8qEvzdrzAqg2SIG/02+4/DHB6a9Kbya0XDvwDEKCoC8ZRWI5JJvNdUjtciBGFQ5PuBlpEOXQj+JQSg==} 238 | engines: {node: '>=12'} 239 | cpu: [loong64] 240 | os: [linux] 241 | 242 | '@esbuild/linux-loong64@0.23.0': 243 | resolution: {integrity: sha512-InQwepswq6urikQiIC/kkx412fqUZudBO4SYKu0N+tGhXRWUqAx+Q+341tFV6QdBifpjYgUndV1hhMq3WeJi7A==} 244 | engines: {node: '>=18'} 245 | cpu: [loong64] 246 | os: [linux] 247 | 248 | '@esbuild/linux-mips64el@0.21.5': 249 | resolution: {integrity: sha512-IajOmO+KJK23bj52dFSNCMsz1QP1DqM6cwLUv3W1QwyxkyIWecfafnI555fvSGqEKwjMXVLokcV5ygHW5b3Jbg==} 250 | engines: {node: '>=12'} 251 | cpu: [mips64el] 252 | os: [linux] 253 | 254 | '@esbuild/linux-mips64el@0.23.0': 255 | resolution: {integrity: sha512-J9rflLtqdYrxHv2FqXE2i1ELgNjT+JFURt/uDMoPQLcjWQA5wDKgQA4t/dTqGa88ZVECKaD0TctwsUfHbVoi4w==} 256 | engines: {node: '>=18'} 257 | cpu: [mips64el] 258 | os: [linux] 259 | 260 | '@esbuild/linux-ppc64@0.21.5': 261 | resolution: {integrity: sha512-1hHV/Z4OEfMwpLO8rp7CvlhBDnjsC3CttJXIhBi+5Aj5r+MBvy4egg7wCbe//hSsT+RvDAG7s81tAvpL2XAE4w==} 262 | engines: {node: '>=12'} 263 | cpu: [ppc64] 264 | os: [linux] 265 | 266 | '@esbuild/linux-ppc64@0.23.0': 267 | resolution: {integrity: sha512-cShCXtEOVc5GxU0fM+dsFD10qZ5UpcQ8AM22bYj0u/yaAykWnqXJDpd77ublcX6vdDsWLuweeuSNZk4yUxZwtw==} 268 | engines: {node: '>=18'} 269 | cpu: [ppc64] 270 | os: [linux] 271 | 272 | '@esbuild/linux-riscv64@0.21.5': 273 | resolution: {integrity: sha512-2HdXDMd9GMgTGrPWnJzP2ALSokE/0O5HhTUvWIbD3YdjME8JwvSCnNGBnTThKGEB91OZhzrJ4qIIxk/SBmyDDA==} 274 | engines: {node: '>=12'} 275 | cpu: [riscv64] 276 | os: [linux] 277 | 278 | '@esbuild/linux-riscv64@0.23.0': 279 | resolution: {integrity: sha512-HEtaN7Y5UB4tZPeQmgz/UhzoEyYftbMXrBCUjINGjh3uil+rB/QzzpMshz3cNUxqXN7Vr93zzVtpIDL99t9aRw==} 280 | engines: {node: '>=18'} 281 | cpu: [riscv64] 282 | os: [linux] 283 | 284 | '@esbuild/linux-s390x@0.21.5': 285 | resolution: {integrity: sha512-zus5sxzqBJD3eXxwvjN1yQkRepANgxE9lgOW2qLnmr8ikMTphkjgXu1HR01K4FJg8h1kEEDAqDcZQtbrRnB41A==} 286 | engines: {node: '>=12'} 287 | cpu: [s390x] 288 | os: [linux] 289 | 290 | '@esbuild/linux-s390x@0.23.0': 291 | resolution: {integrity: sha512-WDi3+NVAuyjg/Wxi+o5KPqRbZY0QhI9TjrEEm+8dmpY9Xir8+HE/HNx2JoLckhKbFopW0RdO2D72w8trZOV+Wg==} 292 | engines: {node: '>=18'} 293 | cpu: [s390x] 294 | os: [linux] 295 | 296 | '@esbuild/linux-x64@0.21.5': 297 | resolution: {integrity: sha512-1rYdTpyv03iycF1+BhzrzQJCdOuAOtaqHTWJZCWvijKD2N5Xu0TtVC8/+1faWqcP9iBCWOmjmhoH94dH82BxPQ==} 298 | engines: {node: '>=12'} 299 | cpu: [x64] 300 | os: [linux] 301 | 302 | '@esbuild/linux-x64@0.23.0': 303 | resolution: {integrity: sha512-a3pMQhUEJkITgAw6e0bWA+F+vFtCciMjW/LPtoj99MhVt+Mfb6bbL9hu2wmTZgNd994qTAEw+U/r6k3qHWWaOQ==} 304 | engines: {node: '>=18'} 305 | cpu: [x64] 306 | os: [linux] 307 | 308 | '@esbuild/netbsd-x64@0.21.5': 309 | resolution: {integrity: sha512-Woi2MXzXjMULccIwMnLciyZH4nCIMpWQAs049KEeMvOcNADVxo0UBIQPfSmxB3CWKedngg7sWZdLvLczpe0tLg==} 310 | engines: {node: '>=12'} 311 | cpu: [x64] 312 | os: [netbsd] 313 | 314 | '@esbuild/netbsd-x64@0.23.0': 315 | resolution: {integrity: sha512-cRK+YDem7lFTs2Q5nEv/HHc4LnrfBCbH5+JHu6wm2eP+d8OZNoSMYgPZJq78vqQ9g+9+nMuIsAO7skzphRXHyw==} 316 | engines: {node: '>=18'} 317 | cpu: [x64] 318 | os: [netbsd] 319 | 320 | '@esbuild/openbsd-arm64@0.23.0': 321 | resolution: {integrity: sha512-suXjq53gERueVWu0OKxzWqk7NxiUWSUlrxoZK7usiF50C6ipColGR5qie2496iKGYNLhDZkPxBI3erbnYkU0rQ==} 322 | engines: {node: '>=18'} 323 | cpu: [arm64] 324 | os: [openbsd] 325 | 326 | '@esbuild/openbsd-x64@0.21.5': 327 | resolution: {integrity: sha512-HLNNw99xsvx12lFBUwoT8EVCsSvRNDVxNpjZ7bPn947b8gJPzeHWyNVhFsaerc0n3TsbOINvRP2byTZ5LKezow==} 328 | engines: {node: '>=12'} 329 | cpu: [x64] 330 | os: [openbsd] 331 | 332 | '@esbuild/openbsd-x64@0.23.0': 333 | resolution: {integrity: sha512-6p3nHpby0DM/v15IFKMjAaayFhqnXV52aEmv1whZHX56pdkK+MEaLoQWj+H42ssFarP1PcomVhbsR4pkz09qBg==} 334 | engines: {node: '>=18'} 335 | cpu: [x64] 336 | os: [openbsd] 337 | 338 | '@esbuild/sunos-x64@0.21.5': 339 | resolution: {integrity: sha512-6+gjmFpfy0BHU5Tpptkuh8+uw3mnrvgs+dSPQXQOv3ekbordwnzTVEb4qnIvQcYXq6gzkyTnoZ9dZG+D4garKg==} 340 | engines: {node: '>=12'} 341 | cpu: [x64] 342 | os: [sunos] 343 | 344 | '@esbuild/sunos-x64@0.23.0': 345 | resolution: {integrity: sha512-BFelBGfrBwk6LVrmFzCq1u1dZbG4zy/Kp93w2+y83Q5UGYF1d8sCzeLI9NXjKyujjBBniQa8R8PzLFAUrSM9OA==} 346 | engines: {node: '>=18'} 347 | cpu: [x64] 348 | os: [sunos] 349 | 350 | '@esbuild/win32-arm64@0.21.5': 351 | resolution: {integrity: sha512-Z0gOTd75VvXqyq7nsl93zwahcTROgqvuAcYDUr+vOv8uHhNSKROyU961kgtCD1e95IqPKSQKH7tBTslnS3tA8A==} 352 | engines: {node: '>=12'} 353 | cpu: [arm64] 354 | os: [win32] 355 | 356 | '@esbuild/win32-arm64@0.23.0': 357 | resolution: {integrity: sha512-lY6AC8p4Cnb7xYHuIxQ6iYPe6MfO2CC43XXKo9nBXDb35krYt7KGhQnOkRGar5psxYkircpCqfbNDB4uJbS2jQ==} 358 | engines: {node: '>=18'} 359 | cpu: [arm64] 360 | os: [win32] 361 | 362 | '@esbuild/win32-ia32@0.21.5': 363 | resolution: {integrity: sha512-SWXFF1CL2RVNMaVs+BBClwtfZSvDgtL//G/smwAc5oVK/UPu2Gu9tIaRgFmYFFKrmg3SyAjSrElf0TiJ1v8fYA==} 364 | engines: {node: '>=12'} 365 | cpu: [ia32] 366 | os: [win32] 367 | 368 | '@esbuild/win32-ia32@0.23.0': 369 | resolution: {integrity: sha512-7L1bHlOTcO4ByvI7OXVI5pNN6HSu6pUQq9yodga8izeuB1KcT2UkHaH6118QJwopExPn0rMHIseCTx1CRo/uNA==} 370 | engines: {node: '>=18'} 371 | cpu: [ia32] 372 | os: [win32] 373 | 374 | '@esbuild/win32-x64@0.21.5': 375 | resolution: {integrity: sha512-tQd/1efJuzPC6rCFwEvLtci/xNFcTZknmXs98FYDfGE4wP9ClFV98nyKrzJKVPMhdDnjzLhdUyMX4PsQAPjwIw==} 376 | engines: {node: '>=12'} 377 | cpu: [x64] 378 | os: [win32] 379 | 380 | '@esbuild/win32-x64@0.23.0': 381 | resolution: {integrity: sha512-Arm+WgUFLUATuoxCJcahGuk6Yj9Pzxd6l11Zb/2aAuv5kWWvvfhLFo2fni4uSK5vzlUdCGZ/BdV5tH8klj8p8g==} 382 | engines: {node: '>=18'} 383 | cpu: [x64] 384 | os: [win32] 385 | 386 | '@eslint-community/eslint-utils@4.4.0': 387 | resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} 388 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 389 | peerDependencies: 390 | eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 391 | 392 | '@eslint-community/regexpp@4.11.0': 393 | resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} 394 | engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} 395 | 396 | '@eslint/eslintrc@2.1.4': 397 | resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} 398 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 399 | 400 | '@eslint/js@8.57.0': 401 | resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} 402 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 403 | 404 | '@gtm-support/core@3.0.1': 405 | resolution: {integrity: sha512-SctcoqvvAbGAgZzOb7DZ4wjbZF3ZS7Las3qIEByv6g7mzPf4E9LpRXcQzjmywYLcUx2jys7PWJAa3s5slvj/0w==} 406 | 407 | '@humanwhocodes/config-array@0.11.14': 408 | resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} 409 | engines: {node: '>=10.10.0'} 410 | deprecated: Use @eslint/config-array instead 411 | 412 | '@humanwhocodes/module-importer@1.0.1': 413 | resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} 414 | engines: {node: '>=12.22'} 415 | 416 | '@humanwhocodes/object-schema@2.0.3': 417 | resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} 418 | deprecated: Use @eslint/object-schema instead 419 | 420 | '@isaacs/cliui@8.0.2': 421 | resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} 422 | engines: {node: '>=12'} 423 | 424 | '@jridgewell/gen-mapping@0.3.5': 425 | resolution: {integrity: sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==} 426 | engines: {node: '>=6.0.0'} 427 | 428 | '@jridgewell/resolve-uri@3.1.2': 429 | resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} 430 | engines: {node: '>=6.0.0'} 431 | 432 | '@jridgewell/set-array@1.2.1': 433 | resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} 434 | engines: {node: '>=6.0.0'} 435 | 436 | '@jridgewell/sourcemap-codec@1.5.0': 437 | resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} 438 | 439 | '@jridgewell/trace-mapping@0.3.25': 440 | resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} 441 | 442 | '@nodelib/fs.scandir@2.1.5': 443 | resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} 444 | engines: {node: '>= 8'} 445 | 446 | '@nodelib/fs.stat@2.0.5': 447 | resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} 448 | engines: {node: '>= 8'} 449 | 450 | '@nodelib/fs.walk@1.2.8': 451 | resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} 452 | engines: {node: '>= 8'} 453 | 454 | '@pkgjs/parseargs@0.11.0': 455 | resolution: {integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==} 456 | engines: {node: '>=14'} 457 | 458 | '@pkgr/core@0.1.1': 459 | resolution: {integrity: sha512-cq8o4cWH0ibXh9VGi5P20Tu9XF/0fFXl9EUinr9QfTM7a7p0oTA4iJRCQWppXR1Pg8dSM0UCItCkPwsk9qWWYA==} 460 | engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} 461 | 462 | '@rollup/rollup-android-arm-eabi@4.20.0': 463 | resolution: {integrity: sha512-TSpWzflCc4VGAUJZlPpgAJE1+V60MePDQnBd7PPkpuEmOy8i87aL6tinFGKBFKuEDikYpig72QzdT3QPYIi+oA==} 464 | cpu: [arm] 465 | os: [android] 466 | 467 | '@rollup/rollup-android-arm64@4.20.0': 468 | resolution: {integrity: sha512-u00Ro/nok7oGzVuh/FMYfNoGqxU5CPWz1mxV85S2w9LxHR8OoMQBuSk+3BKVIDYgkpeOET5yXkx90OYFc+ytpQ==} 469 | cpu: [arm64] 470 | os: [android] 471 | 472 | '@rollup/rollup-darwin-arm64@4.20.0': 473 | resolution: {integrity: sha512-uFVfvzvsdGtlSLuL0ZlvPJvl6ZmrH4CBwLGEFPe7hUmf7htGAN+aXo43R/V6LATyxlKVC/m6UsLb7jbG+LG39Q==} 474 | cpu: [arm64] 475 | os: [darwin] 476 | 477 | '@rollup/rollup-darwin-x64@4.20.0': 478 | resolution: {integrity: sha512-xbrMDdlev53vNXexEa6l0LffojxhqDTBeL+VUxuuIXys4x6xyvbKq5XqTXBCEUA8ty8iEJblHvFaWRJTk/icAQ==} 479 | cpu: [x64] 480 | os: [darwin] 481 | 482 | '@rollup/rollup-linux-arm-gnueabihf@4.20.0': 483 | resolution: {integrity: sha512-jMYvxZwGmoHFBTbr12Xc6wOdc2xA5tF5F2q6t7Rcfab68TT0n+r7dgawD4qhPEvasDsVpQi+MgDzj2faOLsZjA==} 484 | cpu: [arm] 485 | os: [linux] 486 | 487 | '@rollup/rollup-linux-arm-musleabihf@4.20.0': 488 | resolution: {integrity: sha512-1asSTl4HKuIHIB1GcdFHNNZhxAYEdqML/MW4QmPS4G0ivbEcBr1JKlFLKsIRqjSwOBkdItn3/ZDlyvZ/N6KPlw==} 489 | cpu: [arm] 490 | os: [linux] 491 | 492 | '@rollup/rollup-linux-arm64-gnu@4.20.0': 493 | resolution: {integrity: sha512-COBb8Bkx56KldOYJfMf6wKeYJrtJ9vEgBRAOkfw6Ens0tnmzPqvlpjZiLgkhg6cA3DGzCmLmmd319pmHvKWWlQ==} 494 | cpu: [arm64] 495 | os: [linux] 496 | 497 | '@rollup/rollup-linux-arm64-musl@4.20.0': 498 | resolution: {integrity: sha512-+it+mBSyMslVQa8wSPvBx53fYuZK/oLTu5RJoXogjk6x7Q7sz1GNRsXWjn6SwyJm8E/oMjNVwPhmNdIjwP135Q==} 499 | cpu: [arm64] 500 | os: [linux] 501 | 502 | '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': 503 | resolution: {integrity: sha512-yAMvqhPfGKsAxHN8I4+jE0CpLWD8cv4z7CK7BMmhjDuz606Q2tFKkWRY8bHR9JQXYcoLfopo5TTqzxgPUjUMfw==} 504 | cpu: [ppc64] 505 | os: [linux] 506 | 507 | '@rollup/rollup-linux-riscv64-gnu@4.20.0': 508 | resolution: {integrity: sha512-qmuxFpfmi/2SUkAw95TtNq/w/I7Gpjurx609OOOV7U4vhvUhBcftcmXwl3rqAek+ADBwSjIC4IVNLiszoj3dPA==} 509 | cpu: [riscv64] 510 | os: [linux] 511 | 512 | '@rollup/rollup-linux-s390x-gnu@4.20.0': 513 | resolution: {integrity: sha512-I0BtGXddHSHjV1mqTNkgUZLnS3WtsqebAXv11D5BZE/gfw5KoyXSAXVqyJximQXNvNzUo4GKlCK/dIwXlz+jlg==} 514 | cpu: [s390x] 515 | os: [linux] 516 | 517 | '@rollup/rollup-linux-x64-gnu@4.20.0': 518 | resolution: {integrity: sha512-y+eoL2I3iphUg9tN9GB6ku1FA8kOfmF4oUEWhztDJ4KXJy1agk/9+pejOuZkNFhRwHAOxMsBPLbXPd6mJiCwew==} 519 | cpu: [x64] 520 | os: [linux] 521 | 522 | '@rollup/rollup-linux-x64-musl@4.20.0': 523 | resolution: {integrity: sha512-hM3nhW40kBNYUkZb/r9k2FKK+/MnKglX7UYd4ZUy5DJs8/sMsIbqWK2piZtVGE3kcXVNj3B2IrUYROJMMCikNg==} 524 | cpu: [x64] 525 | os: [linux] 526 | 527 | '@rollup/rollup-win32-arm64-msvc@4.20.0': 528 | resolution: {integrity: sha512-psegMvP+Ik/Bg7QRJbv8w8PAytPA7Uo8fpFjXyCRHWm6Nt42L+JtoqH8eDQ5hRP7/XW2UiIriy1Z46jf0Oa1kA==} 529 | cpu: [arm64] 530 | os: [win32] 531 | 532 | '@rollup/rollup-win32-ia32-msvc@4.20.0': 533 | resolution: {integrity: sha512-GabekH3w4lgAJpVxkk7hUzUf2hICSQO0a/BLFA11/RMxQT92MabKAqyubzDZmMOC/hcJNlc+rrypzNzYl4Dx7A==} 534 | cpu: [ia32] 535 | os: [win32] 536 | 537 | '@rollup/rollup-win32-x64-msvc@4.20.0': 538 | resolution: {integrity: sha512-aJ1EJSuTdGnM6qbVC4B5DSmozPTqIag9fSzXRNNo+humQLG89XpPgdt16Ia56ORD7s+H8Pmyx44uczDQ0yDzpg==} 539 | cpu: [x64] 540 | os: [win32] 541 | 542 | '@types/estree@1.0.5': 543 | resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} 544 | 545 | '@types/node@22.3.0': 546 | resolution: {integrity: sha512-nrWpWVaDZuaVc5X84xJ0vNrLvomM205oQyLsRt7OHNZbSHslcWsvgFR7O7hire2ZonjLrWBbedmotmIlJDVd6g==} 547 | 548 | '@typescript-eslint/eslint-plugin@7.18.0': 549 | resolution: {integrity: sha512-94EQTWZ40mzBc42ATNIBimBEDltSJ9RQHCC8vc/PDbxi4k8dVwUAv4o98dk50M1zB+JGFxp43FP7f8+FP8R6Sw==} 550 | engines: {node: ^18.18.0 || >=20.0.0} 551 | peerDependencies: 552 | '@typescript-eslint/parser': ^7.0.0 553 | eslint: ^8.56.0 554 | typescript: '*' 555 | peerDependenciesMeta: 556 | typescript: 557 | optional: true 558 | 559 | '@typescript-eslint/parser@7.18.0': 560 | resolution: {integrity: sha512-4Z+L8I2OqhZV8qA132M4wNL30ypZGYOQVBfMgxDH/K5UX0PNqTu1c6za9ST5r9+tavvHiTWmBnKzpCJ/GlVFtg==} 561 | engines: {node: ^18.18.0 || >=20.0.0} 562 | peerDependencies: 563 | eslint: ^8.56.0 564 | typescript: '*' 565 | peerDependenciesMeta: 566 | typescript: 567 | optional: true 568 | 569 | '@typescript-eslint/scope-manager@7.18.0': 570 | resolution: {integrity: sha512-jjhdIE/FPF2B7Z1uzc6i3oWKbGcHb87Qw7AWj6jmEqNOfDFbJWtjt/XfwCpvNkpGWlcJaog5vTR+VV8+w9JflA==} 571 | engines: {node: ^18.18.0 || >=20.0.0} 572 | 573 | '@typescript-eslint/type-utils@7.18.0': 574 | resolution: {integrity: sha512-XL0FJXuCLaDuX2sYqZUUSOJ2sG5/i1AAze+axqmLnSkNEVMVYLF+cbwlB2w8D1tinFuSikHmFta+P+HOofrLeA==} 575 | engines: {node: ^18.18.0 || >=20.0.0} 576 | peerDependencies: 577 | eslint: ^8.56.0 578 | typescript: '*' 579 | peerDependenciesMeta: 580 | typescript: 581 | optional: true 582 | 583 | '@typescript-eslint/types@7.18.0': 584 | resolution: {integrity: sha512-iZqi+Ds1y4EDYUtlOOC+aUmxnE9xS/yCigkjA7XpTKV6nCBd3Hp/PRGGmdwnfkV2ThMyYldP1wRpm/id99spTQ==} 585 | engines: {node: ^18.18.0 || >=20.0.0} 586 | 587 | '@typescript-eslint/typescript-estree@7.18.0': 588 | resolution: {integrity: sha512-aP1v/BSPnnyhMHts8cf1qQ6Q1IFwwRvAQGRvBFkWlo3/lH29OXA3Pts+c10nxRxIBrDnoMqzhgdwVe5f2D6OzA==} 589 | engines: {node: ^18.18.0 || >=20.0.0} 590 | peerDependencies: 591 | typescript: '*' 592 | peerDependenciesMeta: 593 | typescript: 594 | optional: true 595 | 596 | '@typescript-eslint/utils@7.18.0': 597 | resolution: {integrity: sha512-kK0/rNa2j74XuHVcoCZxdFBMF+aq/vH83CXAOHieC+2Gis4mF8jJXT5eAfyD3K0sAxtPuwxaIOIOvhwzVDt/kw==} 598 | engines: {node: ^18.18.0 || >=20.0.0} 599 | peerDependencies: 600 | eslint: ^8.56.0 601 | 602 | '@typescript-eslint/visitor-keys@7.18.0': 603 | resolution: {integrity: sha512-cDF0/Gf81QpY3xYyJKDV14Zwdmid5+uuENhjH2EqFaF0ni+yAyq/LzMaIJdhNJXZI7uLzwIlA+V7oWoyn6Curg==} 604 | engines: {node: ^18.18.0 || >=20.0.0} 605 | 606 | '@ungap/structured-clone@1.2.0': 607 | resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} 608 | 609 | '@vitest/expect@2.0.5': 610 | resolution: {integrity: sha512-yHZtwuP7JZivj65Gxoi8upUN2OzHTi3zVfjwdpu2WrvCZPLwsJ2Ey5ILIPccoW23dd/zQBlJ4/dhi7DWNyXCpA==} 611 | 612 | '@vitest/pretty-format@2.0.5': 613 | resolution: {integrity: sha512-h8k+1oWHfwTkyTkb9egzwNMfJAEx4veaPSnMeKbVSjp4euqGSbQlm5+6VHwTr7u4FJslVVsUG5nopCaAYdOmSQ==} 614 | 615 | '@vitest/runner@2.0.5': 616 | resolution: {integrity: sha512-TfRfZa6Bkk9ky4tW0z20WKXFEwwvWhRY+84CnSEtq4+3ZvDlJyY32oNTJtM7AW9ihW90tX/1Q78cb6FjoAs+ig==} 617 | 618 | '@vitest/snapshot@2.0.5': 619 | resolution: {integrity: sha512-SgCPUeDFLaM0mIUHfaArq8fD2WbaXG/zVXjRupthYfYGzc8ztbFbu6dUNOblBG7XLMR1kEhS/DNnfCZ2IhdDew==} 620 | 621 | '@vitest/spy@2.0.5': 622 | resolution: {integrity: sha512-c/jdthAhvJdpfVuaexSrnawxZz6pywlTPe84LUB2m/4t3rl2fTo9NFGBG4oWgaD+FTgDDV8hJ/nibT7IfH3JfA==} 623 | 624 | '@vitest/utils@2.0.5': 625 | resolution: {integrity: sha512-d8HKbqIcya+GR67mkZbrzhS5kKhtp8dQLcmRZLGTscGVg7yImT82cIrhtn2L8+VujWcy6KZweApgNmPsTAO/UQ==} 626 | 627 | '@vue/compiler-core@3.4.37': 628 | resolution: {integrity: sha512-ZDDT/KiLKuCRXyzWecNzC5vTcubGz4LECAtfGPENpo0nrmqJHwuWtRLxk/Sb9RAKtR9iFflFycbkjkY+W/PZUQ==} 629 | 630 | '@vue/compiler-dom@3.4.37': 631 | resolution: {integrity: sha512-rIiSmL3YrntvgYV84rekAtU/xfogMUJIclUMeIKEtVBFngOL3IeZHhsH3UaFEgB5iFGpj6IW+8YuM/2Up+vVag==} 632 | 633 | '@vue/compiler-sfc@3.4.37': 634 | resolution: {integrity: sha512-vCfetdas40Wk9aK/WWf8XcVESffsbNkBQwS5t13Y/PcfqKfIwJX2gF+82th6dOpnpbptNMlMjAny80li7TaCIg==} 635 | 636 | '@vue/compiler-ssr@3.4.37': 637 | resolution: {integrity: sha512-TyAgYBWrHlFrt4qpdACh8e9Ms6C/AZQ6A6xLJaWrCL8GCX5DxMzxyeFAEMfU/VFr4tylHm+a2NpfJpcd7+20XA==} 638 | 639 | '@vue/devtools-api@6.6.3': 640 | resolution: {integrity: sha512-0MiMsFma/HqA6g3KLKn+AGpL1kgKhFWszC9U29NfpWK5LE7bjeXxySWJrOJ77hBz+TBrBQ7o4QJqbPbqbs8rJw==} 641 | 642 | '@vue/reactivity@3.4.37': 643 | resolution: {integrity: sha512-UmdKXGx0BZ5kkxPqQr3PK3tElz6adTey4307NzZ3whZu19i5VavYal7u2FfOmAzlcDVgE8+X0HZ2LxLb/jgbYw==} 644 | 645 | '@vue/runtime-core@3.4.37': 646 | resolution: {integrity: sha512-MNjrVoLV/sirHZoD7QAilU1Ifs7m/KJv4/84QVbE6nyAZGQNVOa1HGxaOzp9YqCG+GpLt1hNDC4RbH+KtanV7w==} 647 | 648 | '@vue/runtime-dom@3.4.37': 649 | resolution: {integrity: sha512-Mg2EwgGZqtwKrqdL/FKMF2NEaOHuH+Ks9TQn3DHKyX//hQTYOun+7Tqp1eo0P4Ds+SjltZshOSRq6VsU0baaNg==} 650 | 651 | '@vue/server-renderer@3.4.37': 652 | resolution: {integrity: sha512-jZ5FAHDR2KBq2FsRUJW6GKDOAG9lUTX8aBEGq4Vf6B/35I9fPce66BornuwmqmKgfiSlecwuOb6oeoamYMohkg==} 653 | peerDependencies: 654 | vue: 3.4.37 655 | 656 | '@vue/shared@3.4.37': 657 | resolution: {integrity: sha512-nIh8P2fc3DflG8+5Uw8PT/1i17ccFn0xxN/5oE9RfV5SVnd7G0XEFRwakrnNFE/jlS95fpGXDVG5zDETS26nmg==} 658 | 659 | acorn-jsx@5.3.2: 660 | resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} 661 | peerDependencies: 662 | acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 663 | 664 | acorn@8.12.1: 665 | resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} 666 | engines: {node: '>=0.4.0'} 667 | hasBin: true 668 | 669 | agent-base@7.1.1: 670 | resolution: {integrity: sha512-H0TSyFNDMomMNJQBn8wFV5YC/2eJ+VXECwOadZJT554xP6cODZHPX3H9QMQECxvrgiSOP1pHjy1sMWQVYJOUOA==} 671 | engines: {node: '>= 14'} 672 | 673 | ajv@6.12.6: 674 | resolution: {integrity: sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==} 675 | 676 | ansi-regex@5.0.1: 677 | resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} 678 | engines: {node: '>=8'} 679 | 680 | ansi-regex@6.0.1: 681 | resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} 682 | engines: {node: '>=12'} 683 | 684 | ansi-styles@4.3.0: 685 | resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} 686 | engines: {node: '>=8'} 687 | 688 | ansi-styles@6.2.1: 689 | resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==} 690 | engines: {node: '>=12'} 691 | 692 | any-promise@1.3.0: 693 | resolution: {integrity: sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==} 694 | 695 | anymatch@3.1.3: 696 | resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} 697 | engines: {node: '>= 8'} 698 | 699 | are-docs-informative@0.0.2: 700 | resolution: {integrity: sha512-ixiS0nLNNG5jNQzgZJNoUpBKdo9yTYZMGJ+QgT2jmjR7G7+QHRCc4v6LQ3NgE7EBJq+o0ams3waJwkrlBom8Ig==} 701 | engines: {node: '>=14'} 702 | 703 | argparse@2.0.1: 704 | resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} 705 | 706 | array-buffer-byte-length@1.0.1: 707 | resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} 708 | engines: {node: '>= 0.4'} 709 | 710 | array-union@2.1.0: 711 | resolution: {integrity: sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==} 712 | engines: {node: '>=8'} 713 | 714 | array.prototype.flatmap@1.3.2: 715 | resolution: {integrity: sha512-Ewyx0c9PmpcsByhSW4r+9zDU7sGjFc86qf/kKtuSCRdhfbk0SNLLkaT5qvcHnRGgc5NP/ly/y+qkXkqONX54CQ==} 716 | engines: {node: '>= 0.4'} 717 | 718 | arraybuffer.prototype.slice@1.0.3: 719 | resolution: {integrity: sha512-bMxMKAjg13EBSVscxTaYA4mRc5t1UAXa2kXiGTNfZ079HIWXEkKmkgFrh/nJqamaLSrXO5H4WFFkPEaLJWbs3A==} 720 | engines: {node: '>= 0.4'} 721 | 722 | assertion-error@2.0.1: 723 | resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} 724 | engines: {node: '>=12'} 725 | 726 | asynckit@0.4.0: 727 | resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} 728 | 729 | available-typed-arrays@1.0.7: 730 | resolution: {integrity: sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==} 731 | engines: {node: '>= 0.4'} 732 | 733 | balanced-match@1.0.2: 734 | resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} 735 | 736 | binary-extensions@2.3.0: 737 | resolution: {integrity: sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==} 738 | engines: {node: '>=8'} 739 | 740 | brace-expansion@1.1.11: 741 | resolution: {integrity: sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==} 742 | 743 | brace-expansion@2.0.1: 744 | resolution: {integrity: sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==} 745 | 746 | braces@3.0.3: 747 | resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} 748 | engines: {node: '>=8'} 749 | 750 | bundle-require@5.0.0: 751 | resolution: {integrity: sha512-GuziW3fSSmopcx4KRymQEJVbZUfqlCqcq7dvs6TYwKRZiegK/2buMxQTPs6MGlNv50wms1699qYO54R8XfRX4w==} 752 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 753 | peerDependencies: 754 | esbuild: '>=0.18' 755 | 756 | cac@6.7.14: 757 | resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} 758 | engines: {node: '>=8'} 759 | 760 | call-bind@1.0.7: 761 | resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} 762 | engines: {node: '>= 0.4'} 763 | 764 | callsites@3.1.0: 765 | resolution: {integrity: sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==} 766 | engines: {node: '>=6'} 767 | 768 | chai@5.1.1: 769 | resolution: {integrity: sha512-pT1ZgP8rPNqUgieVaEY+ryQr6Q4HXNg8Ei9UnLUrjN4IA7dvQC5JB+/kxVcPNDHyBcc/26CXPkbNzq3qwrOEKA==} 770 | engines: {node: '>=12'} 771 | 772 | chalk@4.1.2: 773 | resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} 774 | engines: {node: '>=10'} 775 | 776 | check-error@2.1.1: 777 | resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} 778 | engines: {node: '>= 16'} 779 | 780 | chokidar@3.6.0: 781 | resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} 782 | engines: {node: '>= 8.10.0'} 783 | 784 | color-convert@2.0.1: 785 | resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} 786 | engines: {node: '>=7.0.0'} 787 | 788 | color-name@1.1.4: 789 | resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} 790 | 791 | combined-stream@1.0.8: 792 | resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} 793 | engines: {node: '>= 0.8'} 794 | 795 | commander@4.1.1: 796 | resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==} 797 | engines: {node: '>= 6'} 798 | 799 | comment-parser@1.4.1: 800 | resolution: {integrity: sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==} 801 | engines: {node: '>= 12.0.0'} 802 | 803 | concat-map@0.0.1: 804 | resolution: {integrity: sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==} 805 | 806 | consola@3.2.3: 807 | resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} 808 | engines: {node: ^14.18.0 || >=16.10.0} 809 | 810 | cross-spawn@7.0.3: 811 | resolution: {integrity: sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==} 812 | engines: {node: '>= 8'} 813 | 814 | cssstyle@4.0.1: 815 | resolution: {integrity: sha512-8ZYiJ3A/3OkDd093CBT/0UKDWry7ak4BdPTFP2+QEP7cmhouyq/Up709ASSj2cK02BbZiMgk7kYjZNS4QP5qrQ==} 816 | engines: {node: '>=18'} 817 | 818 | csstype@3.1.3: 819 | resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} 820 | 821 | data-urls@5.0.0: 822 | resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} 823 | engines: {node: '>=18'} 824 | 825 | data-view-buffer@1.0.1: 826 | resolution: {integrity: sha512-0lht7OugA5x3iJLOWFhWK/5ehONdprk0ISXqVFn/NFrDu+cuc8iADFrGQz5BnRK7LLU3JmkbXSxaqX+/mXYtUA==} 827 | engines: {node: '>= 0.4'} 828 | 829 | data-view-byte-length@1.0.1: 830 | resolution: {integrity: sha512-4J7wRJD3ABAzr8wP+OcIcqq2dlUKp4DVflx++hs5h5ZKydWMI6/D/fAot+yh6g2tHh8fLFTvNOaVN357NvSrOQ==} 831 | engines: {node: '>= 0.4'} 832 | 833 | data-view-byte-offset@1.0.0: 834 | resolution: {integrity: sha512-t/Ygsytq+R995EJ5PZlD4Cu56sWa8InXySaViRzw9apusqsOO2bQP+SbYzAhR0pFKoB+43lYy8rWban9JSuXnA==} 835 | engines: {node: '>= 0.4'} 836 | 837 | debug@4.3.6: 838 | resolution: {integrity: sha512-O/09Bd4Z1fBrU4VzkhFqVgpPzaGbw6Sm9FEkBT1A/YBXQFGuuSxa1dN2nxgxS34JmKXqYx8CZAwEVoJFImUXIg==} 839 | engines: {node: '>=6.0'} 840 | peerDependencies: 841 | supports-color: '*' 842 | peerDependenciesMeta: 843 | supports-color: 844 | optional: true 845 | 846 | decimal.js@10.4.3: 847 | resolution: {integrity: sha512-VBBaLc1MgL5XpzgIP7ny5Z6Nx3UrRkIViUkPUdtl9aya5amy3De1gsUUSB1g3+3sExYNjCAsAznmukyxCb1GRA==} 848 | 849 | deep-eql@5.0.2: 850 | resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} 851 | engines: {node: '>=6'} 852 | 853 | deep-is@0.1.4: 854 | resolution: {integrity: sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==} 855 | 856 | define-data-property@1.1.4: 857 | resolution: {integrity: sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==} 858 | engines: {node: '>= 0.4'} 859 | 860 | define-properties@1.2.1: 861 | resolution: {integrity: sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg==} 862 | engines: {node: '>= 0.4'} 863 | 864 | delayed-stream@1.0.0: 865 | resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} 866 | engines: {node: '>=0.4.0'} 867 | 868 | dir-glob@3.0.1: 869 | resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} 870 | engines: {node: '>=8'} 871 | 872 | doctrine@3.0.0: 873 | resolution: {integrity: sha512-yS+Q5i3hBf7GBkd4KG8a7eBNNWNGLTaEwwYWUijIYM7zrlYDM0BFXHjjPWlWZ1Rg7UaddZeIDmi9jF3HmqiQ2w==} 874 | engines: {node: '>=6.0.0'} 875 | 876 | eastasianwidth@0.2.0: 877 | resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} 878 | 879 | emoji-regex@8.0.0: 880 | resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} 881 | 882 | emoji-regex@9.2.2: 883 | resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} 884 | 885 | entities@4.5.0: 886 | resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} 887 | engines: {node: '>=0.12'} 888 | 889 | entities@5.0.0: 890 | resolution: {integrity: sha512-BeJFvFRJddxobhvEdm5GqHzRV/X+ACeuw0/BuuxsCh1EUZcAIz8+kYmBp/LrQuloy6K1f3a0M7+IhmZ7QnkISA==} 891 | engines: {node: '>=0.12'} 892 | 893 | es-abstract@1.23.3: 894 | resolution: {integrity: sha512-e+HfNH61Bj1X9/jLc5v1owaLYuHdeHHSQlkhCBiTK8rBvKaULl/beGMxwrMXjpYrv4pz22BlY570vVePA2ho4A==} 895 | engines: {node: '>= 0.4'} 896 | 897 | es-define-property@1.0.0: 898 | resolution: {integrity: sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==} 899 | engines: {node: '>= 0.4'} 900 | 901 | es-errors@1.3.0: 902 | resolution: {integrity: sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==} 903 | engines: {node: '>= 0.4'} 904 | 905 | es-module-lexer@1.5.4: 906 | resolution: {integrity: sha512-MVNK56NiMrOwitFB7cqDwq0CQutbw+0BvLshJSse0MUNU+y1FC3bUS/AQg7oUng+/wKrrki7JfmwtVHkVfPLlw==} 907 | 908 | es-object-atoms@1.0.0: 909 | resolution: {integrity: sha512-MZ4iQ6JwHOBQjahnjwaC1ZtIBH+2ohjamzAO3oaHcXYup7qxjF2fixyH+Q71voWHeOkI2q/TnJao/KfXYIZWbw==} 910 | engines: {node: '>= 0.4'} 911 | 912 | es-set-tostringtag@2.0.3: 913 | resolution: {integrity: sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==} 914 | engines: {node: '>= 0.4'} 915 | 916 | es-shim-unscopables@1.0.2: 917 | resolution: {integrity: sha512-J3yBRXCzDu4ULnQwxyToo/OjdMx6akgVC7K6few0a7F/0wLtmKKN7I73AH5T2836UuXRqN7Qg+IIUw/+YJksRw==} 918 | 919 | es-to-primitive@1.2.1: 920 | resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} 921 | engines: {node: '>= 0.4'} 922 | 923 | esbuild@0.21.5: 924 | resolution: {integrity: sha512-mg3OPMV4hXywwpoDxu3Qda5xCKQi+vCTZq8S9J/EpkhB2HzKXq4SNFZE3+NK93JYxc8VMSep+lOUSC/RVKaBqw==} 925 | engines: {node: '>=12'} 926 | hasBin: true 927 | 928 | esbuild@0.23.0: 929 | resolution: {integrity: sha512-1lvV17H2bMYda/WaFb2jLPeHU3zml2k4/yagNMG8Q/YtfMjCwEUZa2eXXMgZTVSL5q1n4H7sQ0X6CdJDqqeCFA==} 930 | engines: {node: '>=18'} 931 | hasBin: true 932 | 933 | escape-string-regexp@4.0.0: 934 | resolution: {integrity: sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==} 935 | engines: {node: '>=10'} 936 | 937 | eslint-config-prettier@9.1.0: 938 | resolution: {integrity: sha512-NSWl5BFQWEPi1j4TjVNItzYV7dZXZ+wP6I6ZhrBGpChQhZRUaElihE9uRRkcbRnNb76UMKDF3r+WTmNcGPKsqw==} 939 | hasBin: true 940 | peerDependencies: 941 | eslint: '>=7.0.0' 942 | 943 | eslint-define-config@2.1.0: 944 | resolution: {integrity: sha512-QUp6pM9pjKEVannNAbSJNeRuYwW3LshejfyBBpjeMGaJjaDUpVps4C6KVR8R7dWZnD3i0synmrE36znjTkJvdQ==} 945 | engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>=8.6.0'} 946 | 947 | eslint-gitignore@0.1.0: 948 | resolution: {integrity: sha512-VFvY5Wyjuz5xXDC/NeONHzsh4YQNok2Gzg4SftAAuhkbrdHv5CChjfiFyLKhRlgOdCJr5kBquaLXHtuDBTW2/Q==} 949 | engines: {node: ^10.12.0 || >=12.0.0} 950 | peerDependencies: 951 | eslint: '>=6.7.0' 952 | 953 | eslint-plugin-jsdoc@50.2.1: 954 | resolution: {integrity: sha512-KbGhcct6JxzM0x1gjqH1hf4vvc+YNMag5JXyMuPFIPP9THWctRg3UgBUjNcI6a6Rw+1GdKeJ3vTmSICLVF0mtw==} 955 | engines: {node: '>=18'} 956 | peerDependencies: 957 | eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 958 | 959 | eslint-plugin-prettier@5.2.1: 960 | resolution: {integrity: sha512-gH3iR3g4JfF+yYPaJYkN7jEl9QbweL/YfkoRlNnuIEHEz1vHVlCmWOS+eGGiRuzHQXdJFCOTxRgvju9b8VUmrw==} 961 | engines: {node: ^14.18.0 || >=16.0.0} 962 | peerDependencies: 963 | '@types/eslint': '>=8.0.0' 964 | eslint: '>=8.0.0' 965 | eslint-config-prettier: '*' 966 | prettier: '>=3.0.0' 967 | peerDependenciesMeta: 968 | '@types/eslint': 969 | optional: true 970 | eslint-config-prettier: 971 | optional: true 972 | 973 | eslint-plugin-spellcheck@0.0.20: 974 | resolution: {integrity: sha512-GJa6vgzWAYqe0elKADAsiBRrhvqBnKyt7tpFSqlCZJsK2W9+K80oMyHhKolA7vJ13H5RCGs5/KCN+mKUyKoAiA==} 975 | peerDependencies: 976 | eslint: '>=0.8.0' 977 | 978 | eslint-scope@7.2.2: 979 | resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} 980 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 981 | 982 | eslint-visitor-keys@3.4.3: 983 | resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} 984 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 985 | 986 | eslint-visitor-keys@4.0.0: 987 | resolution: {integrity: sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==} 988 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 989 | 990 | eslint@8.57.0: 991 | resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} 992 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 993 | hasBin: true 994 | 995 | espree@10.1.0: 996 | resolution: {integrity: sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==} 997 | engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} 998 | 999 | espree@9.6.1: 1000 | resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} 1001 | engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} 1002 | 1003 | esquery@1.6.0: 1004 | resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} 1005 | engines: {node: '>=0.10'} 1006 | 1007 | esrecurse@4.3.0: 1008 | resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} 1009 | engines: {node: '>=4.0'} 1010 | 1011 | estraverse@5.3.0: 1012 | resolution: {integrity: sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==} 1013 | engines: {node: '>=4.0'} 1014 | 1015 | estree-walker@2.0.2: 1016 | resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} 1017 | 1018 | estree-walker@3.0.3: 1019 | resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} 1020 | 1021 | esutils@2.0.3: 1022 | resolution: {integrity: sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g==} 1023 | engines: {node: '>=0.10.0'} 1024 | 1025 | execa@5.1.1: 1026 | resolution: {integrity: sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==} 1027 | engines: {node: '>=10'} 1028 | 1029 | execa@8.0.1: 1030 | resolution: {integrity: sha512-VyhnebXciFV2DESc+p6B+y0LjSm0krU4OgJN44qFAhBY0TJ+1V61tYD2+wHusZ6F9n5K+vl8k0sTy7PEfV4qpg==} 1031 | engines: {node: '>=16.17'} 1032 | 1033 | fast-deep-equal@3.1.3: 1034 | resolution: {integrity: sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==} 1035 | 1036 | fast-diff@1.3.0: 1037 | resolution: {integrity: sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw==} 1038 | 1039 | fast-glob@3.3.2: 1040 | resolution: {integrity: sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==} 1041 | engines: {node: '>=8.6.0'} 1042 | 1043 | fast-json-stable-stringify@2.1.0: 1044 | resolution: {integrity: sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw==} 1045 | 1046 | fast-levenshtein@2.0.6: 1047 | resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} 1048 | 1049 | fastq@1.17.1: 1050 | resolution: {integrity: sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==} 1051 | 1052 | file-entry-cache@6.0.1: 1053 | resolution: {integrity: sha512-7Gps/XWymbLk2QLYK4NzpMOrYjMhdIxXuIvy2QBsLE6ljuodKvdkWs/cpyJJ3CVIVpH0Oi1Hvg1ovbMzLdFBBg==} 1054 | engines: {node: ^10.12.0 || >=12.0.0} 1055 | 1056 | fill-range@7.1.1: 1057 | resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} 1058 | engines: {node: '>=8'} 1059 | 1060 | find-up@5.0.0: 1061 | resolution: {integrity: sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==} 1062 | engines: {node: '>=10'} 1063 | 1064 | flat-cache@3.2.0: 1065 | resolution: {integrity: sha512-CYcENa+FtcUKLmhhqyctpclsq7QF38pKjZHsGNiSQF5r4FtoKDWabFDl3hzaEQMvT1LHEysw5twgLvpYYb4vbw==} 1066 | engines: {node: ^10.12.0 || >=12.0.0} 1067 | 1068 | flatted@3.3.1: 1069 | resolution: {integrity: sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==} 1070 | 1071 | for-each@0.3.3: 1072 | resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} 1073 | 1074 | foreground-child@3.3.0: 1075 | resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} 1076 | engines: {node: '>=14'} 1077 | 1078 | form-data@4.0.0: 1079 | resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} 1080 | engines: {node: '>= 6'} 1081 | 1082 | fs.realpath@1.0.0: 1083 | resolution: {integrity: sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw==} 1084 | 1085 | fsevents@2.3.3: 1086 | resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} 1087 | engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} 1088 | os: [darwin] 1089 | 1090 | function-bind@1.1.2: 1091 | resolution: {integrity: sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==} 1092 | 1093 | function.prototype.name@1.1.6: 1094 | resolution: {integrity: sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg==} 1095 | engines: {node: '>= 0.4'} 1096 | 1097 | functions-have-names@1.2.3: 1098 | resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} 1099 | 1100 | get-func-name@2.0.2: 1101 | resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==} 1102 | 1103 | get-intrinsic@1.2.4: 1104 | resolution: {integrity: sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==} 1105 | engines: {node: '>= 0.4'} 1106 | 1107 | get-stream@6.0.1: 1108 | resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} 1109 | engines: {node: '>=10'} 1110 | 1111 | get-stream@8.0.1: 1112 | resolution: {integrity: sha512-VaUJspBffn/LMCJVoMvSAdmscJyS1auj5Zulnn5UoYcY531UWmdwhRWkcGKnGU93m5HSXP9LP2usOryrBtQowA==} 1113 | engines: {node: '>=16'} 1114 | 1115 | get-symbol-description@1.0.2: 1116 | resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} 1117 | engines: {node: '>= 0.4'} 1118 | 1119 | glob-parent@5.1.2: 1120 | resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} 1121 | engines: {node: '>= 6'} 1122 | 1123 | glob-parent@6.0.2: 1124 | resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} 1125 | engines: {node: '>=10.13.0'} 1126 | 1127 | glob@10.4.5: 1128 | resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} 1129 | hasBin: true 1130 | 1131 | glob@11.0.0: 1132 | resolution: {integrity: sha512-9UiX/Bl6J2yaBbxKoEBRm4Cipxgok8kQYcOPEhScPwebu2I0HoQOuYdIO6S3hLuWoZgpDpwQZMzTFxgpkyT76g==} 1133 | engines: {node: 20 || >=22} 1134 | hasBin: true 1135 | 1136 | glob@7.2.3: 1137 | resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} 1138 | deprecated: Glob versions prior to v9 are no longer supported 1139 | 1140 | globals@13.24.0: 1141 | resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} 1142 | engines: {node: '>=8'} 1143 | 1144 | globalthis@1.0.4: 1145 | resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} 1146 | engines: {node: '>= 0.4'} 1147 | 1148 | globby@11.1.0: 1149 | resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} 1150 | engines: {node: '>=10'} 1151 | 1152 | gopd@1.0.1: 1153 | resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} 1154 | 1155 | graphemer@1.4.0: 1156 | resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} 1157 | 1158 | has-bigints@1.0.2: 1159 | resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} 1160 | 1161 | has-flag@4.0.0: 1162 | resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} 1163 | engines: {node: '>=8'} 1164 | 1165 | has-property-descriptors@1.0.2: 1166 | resolution: {integrity: sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==} 1167 | 1168 | has-proto@1.0.3: 1169 | resolution: {integrity: sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==} 1170 | engines: {node: '>= 0.4'} 1171 | 1172 | has-symbols@1.0.3: 1173 | resolution: {integrity: sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==} 1174 | engines: {node: '>= 0.4'} 1175 | 1176 | has-tostringtag@1.0.2: 1177 | resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} 1178 | engines: {node: '>= 0.4'} 1179 | 1180 | hasown@2.0.2: 1181 | resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} 1182 | engines: {node: '>= 0.4'} 1183 | 1184 | html-encoding-sniffer@4.0.0: 1185 | resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} 1186 | engines: {node: '>=18'} 1187 | 1188 | http-proxy-agent@7.0.2: 1189 | resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} 1190 | engines: {node: '>= 14'} 1191 | 1192 | https-proxy-agent@7.0.5: 1193 | resolution: {integrity: sha512-1e4Wqeblerz+tMKPIq2EMGiiWW1dIjZOksyHWSUm1rmuvw/how9hBHZ38lAGj5ID4Ik6EdkOw7NmWPy6LAwalw==} 1194 | engines: {node: '>= 14'} 1195 | 1196 | human-signals@2.1.0: 1197 | resolution: {integrity: sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==} 1198 | engines: {node: '>=10.17.0'} 1199 | 1200 | human-signals@5.0.0: 1201 | resolution: {integrity: sha512-AXcZb6vzzrFAUE61HnN4mpLqd/cSIwNQjtNWR0euPm6y0iqx3G4gOXaIDdtdDwZmhwe82LA6+zinmW4UBWVePQ==} 1202 | engines: {node: '>=16.17.0'} 1203 | 1204 | hunspell-spellchecker@1.0.2: 1205 | resolution: {integrity: sha512-4DwmFAvlz+ChsqLDsZT2cwBsYNXh+oWboemxXtafwKIyItq52xfR4e4kr017sLAoPaSYVofSOvPUfmOAhXyYvw==} 1206 | hasBin: true 1207 | 1208 | iconv-lite@0.6.3: 1209 | resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} 1210 | engines: {node: '>=0.10.0'} 1211 | 1212 | ignore@5.3.2: 1213 | resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} 1214 | engines: {node: '>= 4'} 1215 | 1216 | import-fresh@3.3.0: 1217 | resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} 1218 | engines: {node: '>=6'} 1219 | 1220 | imurmurhash@0.1.4: 1221 | resolution: {integrity: sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==} 1222 | engines: {node: '>=0.8.19'} 1223 | 1224 | inflight@1.0.6: 1225 | resolution: {integrity: sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA==} 1226 | deprecated: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful. 1227 | 1228 | inherits@2.0.4: 1229 | resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} 1230 | 1231 | internal-slot@1.0.7: 1232 | resolution: {integrity: sha512-NGnrKwXzSms2qUUih/ILZ5JBqNTSa1+ZmP6flaIp6KmSElgE9qdndzS3cqjrDovwFdmwsGsLdeFgB6suw+1e9g==} 1233 | engines: {node: '>= 0.4'} 1234 | 1235 | is-array-buffer@3.0.4: 1236 | resolution: {integrity: sha512-wcjaerHw0ydZwfhiKbXJWLDY8A7yV7KhjQOpb83hGgGfId/aQa4TOvwyzn2PuswW2gPCYEL/nEAiSVpdOj1lXw==} 1237 | engines: {node: '>= 0.4'} 1238 | 1239 | is-bigint@1.0.4: 1240 | resolution: {integrity: sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg==} 1241 | 1242 | is-binary-path@2.1.0: 1243 | resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} 1244 | engines: {node: '>=8'} 1245 | 1246 | is-boolean-object@1.1.2: 1247 | resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} 1248 | engines: {node: '>= 0.4'} 1249 | 1250 | is-callable@1.2.7: 1251 | resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} 1252 | engines: {node: '>= 0.4'} 1253 | 1254 | is-data-view@1.0.1: 1255 | resolution: {integrity: sha512-AHkaJrsUVW6wq6JS8y3JnM/GJF/9cf+k20+iDzlSaJrinEo5+7vRiteOSwBhHRiAyQATN1AmY4hwzxJKPmYf+w==} 1256 | engines: {node: '>= 0.4'} 1257 | 1258 | is-date-object@1.0.5: 1259 | resolution: {integrity: sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ==} 1260 | engines: {node: '>= 0.4'} 1261 | 1262 | is-extglob@2.1.1: 1263 | resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} 1264 | engines: {node: '>=0.10.0'} 1265 | 1266 | is-fullwidth-code-point@3.0.0: 1267 | resolution: {integrity: sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==} 1268 | engines: {node: '>=8'} 1269 | 1270 | is-glob@4.0.3: 1271 | resolution: {integrity: sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==} 1272 | engines: {node: '>=0.10.0'} 1273 | 1274 | is-negative-zero@2.0.3: 1275 | resolution: {integrity: sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==} 1276 | engines: {node: '>= 0.4'} 1277 | 1278 | is-number-object@1.0.7: 1279 | resolution: {integrity: sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ==} 1280 | engines: {node: '>= 0.4'} 1281 | 1282 | is-number@7.0.0: 1283 | resolution: {integrity: sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==} 1284 | engines: {node: '>=0.12.0'} 1285 | 1286 | is-path-inside@3.0.3: 1287 | resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} 1288 | engines: {node: '>=8'} 1289 | 1290 | is-potential-custom-element-name@1.0.1: 1291 | resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} 1292 | 1293 | is-regex@1.1.4: 1294 | resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} 1295 | engines: {node: '>= 0.4'} 1296 | 1297 | is-shared-array-buffer@1.0.3: 1298 | resolution: {integrity: sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==} 1299 | engines: {node: '>= 0.4'} 1300 | 1301 | is-stream@2.0.1: 1302 | resolution: {integrity: sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg==} 1303 | engines: {node: '>=8'} 1304 | 1305 | is-stream@3.0.0: 1306 | resolution: {integrity: sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==} 1307 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1308 | 1309 | is-string@1.0.7: 1310 | resolution: {integrity: sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg==} 1311 | engines: {node: '>= 0.4'} 1312 | 1313 | is-symbol@1.0.4: 1314 | resolution: {integrity: sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg==} 1315 | engines: {node: '>= 0.4'} 1316 | 1317 | is-typed-array@1.1.13: 1318 | resolution: {integrity: sha512-uZ25/bUAlUY5fR4OKT4rZQEBrzQWYV9ZJYGGsUmEJ6thodVJ1HX64ePQ6Z0qPWP+m+Uq6e9UugrE38jeYsDSMw==} 1319 | engines: {node: '>= 0.4'} 1320 | 1321 | is-weakref@1.0.2: 1322 | resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} 1323 | 1324 | isarray@2.0.5: 1325 | resolution: {integrity: sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw==} 1326 | 1327 | isexe@2.0.0: 1328 | resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} 1329 | 1330 | jackspeak@3.4.3: 1331 | resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} 1332 | 1333 | jackspeak@4.0.1: 1334 | resolution: {integrity: sha512-cub8rahkh0Q/bw1+GxP7aeSe29hHHn2V4m29nnDlvCdlgU+3UGxkZp7Z53jLUdpX3jdTO0nJZUDl3xvbWc2Xog==} 1335 | engines: {node: 20 || >=22} 1336 | 1337 | joycon@3.1.1: 1338 | resolution: {integrity: sha512-34wB/Y7MW7bzjKRjUKTa46I2Z7eV62Rkhva+KkopW7Qvv/OSWBqvkSY7vusOPrNuZcUG3tApvdVgNB8POj3SPw==} 1339 | engines: {node: '>=10'} 1340 | 1341 | js-yaml@4.1.0: 1342 | resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} 1343 | hasBin: true 1344 | 1345 | jsdoc-type-pratt-parser@4.1.0: 1346 | resolution: {integrity: sha512-Hicd6JK5Njt2QB6XYFS7ok9e37O8AYk3jTcppG4YVQnYjOemymvTcmc7OWsmq/Qqj5TdRFO5/x/tIPmBeRtGHg==} 1347 | engines: {node: '>=12.0.0'} 1348 | 1349 | jsdom@24.1.1: 1350 | resolution: {integrity: sha512-5O1wWV99Jhq4DV7rCLIoZ/UIhyQeDR7wHVyZAHAshbrvZsLs+Xzz7gtwnlJTJDjleiTKh54F4dXrX70vJQTyJQ==} 1351 | engines: {node: '>=18'} 1352 | peerDependencies: 1353 | canvas: ^2.11.2 1354 | peerDependenciesMeta: 1355 | canvas: 1356 | optional: true 1357 | 1358 | json-buffer@3.0.1: 1359 | resolution: {integrity: sha512-4bV5BfR2mqfQTJm+V5tPPdf+ZpuhiIvTuAB5g8kcrXOZpTT/QwwVRWBywX1ozr6lEuPdbHxwaJlm9G6mI2sfSQ==} 1360 | 1361 | json-parse-even-better-errors@3.0.2: 1362 | resolution: {integrity: sha512-fi0NG4bPjCHunUJffmLd0gxssIgkNmArMvis4iNah6Owg1MCJjWhEcDLmsK6iGkJq3tHwbDkTlce70/tmXN4cQ==} 1363 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1364 | 1365 | json-schema-traverse@0.4.1: 1366 | resolution: {integrity: sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==} 1367 | 1368 | json-stable-stringify-without-jsonify@1.0.1: 1369 | resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} 1370 | 1371 | keyv@4.5.4: 1372 | resolution: {integrity: sha512-oxVHkHR/EJf2CNXnWxRLW6mg7JyCCUcG0DtEGmL2ctUo1PNTin1PUil+r/+4r5MpVgC/fn1kjsx7mjSujKqIpw==} 1373 | 1374 | levn@0.4.1: 1375 | resolution: {integrity: sha512-+bT2uH4E5LGE7h/n3evcS/sQlJXCpIp6ym8OWJ5eV6+67Dsql/LaaT7qJBAt2rzfoa/5QBGBhxDix1dMt2kQKQ==} 1376 | engines: {node: '>= 0.8.0'} 1377 | 1378 | lilconfig@3.1.2: 1379 | resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} 1380 | engines: {node: '>=14'} 1381 | 1382 | lines-and-columns@1.2.4: 1383 | resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} 1384 | 1385 | load-tsconfig@0.2.5: 1386 | resolution: {integrity: sha512-IXO6OCs9yg8tMKzfPZ1YmheJbZCiEsnBdcB03l0OcfK9prKnJb96siuHCr5Fl37/yo9DnKU+TLpxzTUspw9shg==} 1387 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1388 | 1389 | locate-path@6.0.0: 1390 | resolution: {integrity: sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==} 1391 | engines: {node: '>=10'} 1392 | 1393 | lodash.merge@4.6.2: 1394 | resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} 1395 | 1396 | lodash.sortby@4.7.0: 1397 | resolution: {integrity: sha512-HDWXG8isMntAyRF5vZ7xKuEvOhT4AhlRt/3czTSjvGUxjYCBVRQY48ViDHyfYz9VIoBkW4TMGQNapx+l3RUwdA==} 1398 | 1399 | lodash@4.17.21: 1400 | resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} 1401 | 1402 | loupe@3.1.1: 1403 | resolution: {integrity: sha512-edNu/8D5MKVfGVFRhFf8aAxiTM6Wumfz5XsaatSxlD3w4R1d/WEKUTydCdPGbl9K7QG/Ca3GnDV2sIKIpXRQcw==} 1404 | 1405 | lru-cache@10.4.3: 1406 | resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} 1407 | 1408 | lru-cache@11.0.0: 1409 | resolution: {integrity: sha512-Qv32eSV1RSCfhY3fpPE2GNZ8jgM9X7rdAfemLWqTUxwiyIC4jJ6Sy0fZ8H+oLWevO6i4/bizg7c8d8i6bxrzbA==} 1410 | engines: {node: 20 || >=22} 1411 | 1412 | magic-string@0.30.11: 1413 | resolution: {integrity: sha512-+Wri9p0QHMy+545hKww7YAu5NyzF8iomPL/RQazugQ9+Ez4Ic3mERMd8ZTX5rfK944j+560ZJi8iAwgak1Ac7A==} 1414 | 1415 | memorystream@0.3.1: 1416 | resolution: {integrity: sha512-S3UwM3yj5mtUSEfP41UZmt/0SCoVYUcU1rkXv+BQ5Ig8ndL4sPoJNBUJERafdPb5jjHJGuMgytgKvKIf58XNBw==} 1417 | engines: {node: '>= 0.10.0'} 1418 | 1419 | merge-stream@2.0.0: 1420 | resolution: {integrity: sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w==} 1421 | 1422 | merge2@1.4.1: 1423 | resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} 1424 | engines: {node: '>= 8'} 1425 | 1426 | micromatch@4.0.7: 1427 | resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} 1428 | engines: {node: '>=8.6'} 1429 | 1430 | mime-db@1.52.0: 1431 | resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} 1432 | engines: {node: '>= 0.6'} 1433 | 1434 | mime-types@2.1.35: 1435 | resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} 1436 | engines: {node: '>= 0.6'} 1437 | 1438 | mimic-fn@2.1.0: 1439 | resolution: {integrity: sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg==} 1440 | engines: {node: '>=6'} 1441 | 1442 | mimic-fn@4.0.0: 1443 | resolution: {integrity: sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==} 1444 | engines: {node: '>=12'} 1445 | 1446 | minimatch@10.0.1: 1447 | resolution: {integrity: sha512-ethXTt3SGGR+95gudmqJ1eNhRO7eGEGIgYA9vnPatK4/etz2MEVDno5GMCibdMTuBMyElzIlgxMna3K94XDIDQ==} 1448 | engines: {node: 20 || >=22} 1449 | 1450 | minimatch@3.1.2: 1451 | resolution: {integrity: sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==} 1452 | 1453 | minimatch@9.0.5: 1454 | resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} 1455 | engines: {node: '>=16 || 14 >=14.17'} 1456 | 1457 | minipass@7.1.2: 1458 | resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} 1459 | engines: {node: '>=16 || 14 >=14.17'} 1460 | 1461 | ms@2.1.2: 1462 | resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} 1463 | 1464 | mz@2.7.0: 1465 | resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} 1466 | 1467 | nanoid@3.3.7: 1468 | resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} 1469 | engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} 1470 | hasBin: true 1471 | 1472 | natural-compare@1.4.0: 1473 | resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} 1474 | 1475 | normalize-path@3.0.0: 1476 | resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} 1477 | engines: {node: '>=0.10.0'} 1478 | 1479 | npm-normalize-package-bin@3.0.1: 1480 | resolution: {integrity: sha512-dMxCf+zZ+3zeQZXKxmyuCKlIDPGuv8EF940xbkC4kQVDTtqoh6rJFO+JTKSA6/Rwi0getWmtuy4Itup0AMcaDQ==} 1481 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1482 | 1483 | npm-run-all2@6.2.2: 1484 | resolution: {integrity: sha512-Q+alQAGIW7ZhKcxLt8GcSi3h3ryheD6xnmXahkMRVM5LYmajcUrSITm8h+OPC9RYWMV2GR0Q1ntTUCfxaNoOJw==} 1485 | engines: {node: ^14.18.0 || ^16.13.0 || >=18.0.0, npm: '>= 8'} 1486 | hasBin: true 1487 | 1488 | npm-run-path@4.0.1: 1489 | resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} 1490 | engines: {node: '>=8'} 1491 | 1492 | npm-run-path@5.3.0: 1493 | resolution: {integrity: sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==} 1494 | engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} 1495 | 1496 | nwsapi@2.2.12: 1497 | resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} 1498 | 1499 | object-assign@4.1.1: 1500 | resolution: {integrity: sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==} 1501 | engines: {node: '>=0.10.0'} 1502 | 1503 | object-inspect@1.13.2: 1504 | resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} 1505 | engines: {node: '>= 0.4'} 1506 | 1507 | object-keys@1.1.1: 1508 | resolution: {integrity: sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA==} 1509 | engines: {node: '>= 0.4'} 1510 | 1511 | object.assign@4.1.5: 1512 | resolution: {integrity: sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ==} 1513 | engines: {node: '>= 0.4'} 1514 | 1515 | once@1.4.0: 1516 | resolution: {integrity: sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w==} 1517 | 1518 | onetime@5.1.2: 1519 | resolution: {integrity: sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg==} 1520 | engines: {node: '>=6'} 1521 | 1522 | onetime@6.0.0: 1523 | resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} 1524 | engines: {node: '>=12'} 1525 | 1526 | optionator@0.9.4: 1527 | resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} 1528 | engines: {node: '>= 0.8.0'} 1529 | 1530 | p-limit@3.1.0: 1531 | resolution: {integrity: sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==} 1532 | engines: {node: '>=10'} 1533 | 1534 | p-locate@5.0.0: 1535 | resolution: {integrity: sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==} 1536 | engines: {node: '>=10'} 1537 | 1538 | package-json-from-dist@1.0.0: 1539 | resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} 1540 | 1541 | parent-module@1.0.1: 1542 | resolution: {integrity: sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==} 1543 | engines: {node: '>=6'} 1544 | 1545 | parse-imports@2.1.1: 1546 | resolution: {integrity: sha512-TDT4HqzUiTMO1wJRwg/t/hYk8Wdp3iF/ToMIlAoVQfL1Xs/sTxq1dKWSMjMbQmIarfWKymOyly40+zmPHXMqCA==} 1547 | engines: {node: '>= 18'} 1548 | 1549 | parse5@7.1.2: 1550 | resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} 1551 | 1552 | path-exists@4.0.0: 1553 | resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} 1554 | engines: {node: '>=8'} 1555 | 1556 | path-is-absolute@1.0.1: 1557 | resolution: {integrity: sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg==} 1558 | engines: {node: '>=0.10.0'} 1559 | 1560 | path-key@3.1.1: 1561 | resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} 1562 | engines: {node: '>=8'} 1563 | 1564 | path-key@4.0.0: 1565 | resolution: {integrity: sha512-haREypq7xkM7ErfgIyA0z+Bj4AGKlMSdlQE2jvJo6huWD1EdkKYV+G/T4nq0YEF2vgTT8kqMFKo1uHn950r4SQ==} 1566 | engines: {node: '>=12'} 1567 | 1568 | path-scurry@1.11.1: 1569 | resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} 1570 | engines: {node: '>=16 || 14 >=14.18'} 1571 | 1572 | path-scurry@2.0.0: 1573 | resolution: {integrity: sha512-ypGJsmGtdXUOeM5u93TyeIEfEhM6s+ljAhrk5vAvSx8uyY/02OvrZnA0YNGUrPXfpJMgI1ODd3nwz8Npx4O4cg==} 1574 | engines: {node: 20 || >=22} 1575 | 1576 | path-type@4.0.0: 1577 | resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} 1578 | engines: {node: '>=8'} 1579 | 1580 | pathe@1.1.2: 1581 | resolution: {integrity: sha512-whLdWMYL2TwI08hn8/ZqAbrVemu0LNaNNJZX73O6qaIdCTfXutsLhMkjdENX0qhsQ9uIimo4/aQOmXkoon2nDQ==} 1582 | 1583 | pathval@2.0.0: 1584 | resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} 1585 | engines: {node: '>= 14.16'} 1586 | 1587 | picocolors@1.0.1: 1588 | resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} 1589 | 1590 | picomatch@2.3.1: 1591 | resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} 1592 | engines: {node: '>=8.6'} 1593 | 1594 | pidtree@0.6.0: 1595 | resolution: {integrity: sha512-eG2dWTVw5bzqGRztnHExczNxt5VGsE6OwTeCG3fdUf9KBsZzO3R5OIIIzWR+iZA0NtZ+RDVdaoE2dK1cn6jH4g==} 1596 | engines: {node: '>=0.10'} 1597 | hasBin: true 1598 | 1599 | pirates@4.0.6: 1600 | resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} 1601 | engines: {node: '>= 6'} 1602 | 1603 | possible-typed-array-names@1.0.0: 1604 | resolution: {integrity: sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==} 1605 | engines: {node: '>= 0.4'} 1606 | 1607 | postcss-load-config@6.0.1: 1608 | resolution: {integrity: sha512-oPtTM4oerL+UXmx+93ytZVN82RrlY/wPUV8IeDxFrzIjXOLF1pN+EmKPLbubvKHT2HC20xXsCAH2Z+CKV6Oz/g==} 1609 | engines: {node: '>= 18'} 1610 | peerDependencies: 1611 | jiti: '>=1.21.0' 1612 | postcss: '>=8.0.9' 1613 | tsx: ^4.8.1 1614 | yaml: ^2.4.2 1615 | peerDependenciesMeta: 1616 | jiti: 1617 | optional: true 1618 | postcss: 1619 | optional: true 1620 | tsx: 1621 | optional: true 1622 | yaml: 1623 | optional: true 1624 | 1625 | postcss@8.4.41: 1626 | resolution: {integrity: sha512-TesUflQ0WKZqAvg52PWL6kHgLKP6xB6heTOdoYM0Wt2UHyxNa4K25EZZMgKns3BH1RLVbZCREPpLY0rhnNoHVQ==} 1627 | engines: {node: ^10 || ^12 || >=14} 1628 | 1629 | prelude-ls@1.2.1: 1630 | resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} 1631 | engines: {node: '>= 0.8.0'} 1632 | 1633 | prettier-linter-helpers@1.0.0: 1634 | resolution: {integrity: sha512-GbK2cP9nraSSUF9N2XwUwqfzlAFlMNYYl+ShE/V+H8a9uNl/oUqB1w2EL54Jh0OlyRSd8RfWYJ3coVS4TROP2w==} 1635 | engines: {node: '>=6.0.0'} 1636 | 1637 | prettier-plugin-organize-imports@4.0.0: 1638 | resolution: {integrity: sha512-vnKSdgv9aOlqKeEFGhf9SCBsTyzDSyScy1k7E0R1Uo4L0cTcOV7c1XQaT7jfXIOc/p08WLBfN2QUQA9zDSZMxA==} 1639 | peerDependencies: 1640 | '@vue/language-plugin-pug': ^2.0.24 1641 | prettier: '>=2.0' 1642 | typescript: '>=2.9' 1643 | vue-tsc: ^2.0.24 1644 | peerDependenciesMeta: 1645 | '@vue/language-plugin-pug': 1646 | optional: true 1647 | vue-tsc: 1648 | optional: true 1649 | 1650 | prettier@3.3.3: 1651 | resolution: {integrity: sha512-i2tDNA0O5IrMO757lfrdQZCc2jPNDVntV0m/+4whiDfWaTKfMNgR7Qz0NAeGz/nRqF4m5/6CLzbP4/liHt12Ew==} 1652 | engines: {node: '>=14'} 1653 | hasBin: true 1654 | 1655 | psl@1.9.0: 1656 | resolution: {integrity: sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag==} 1657 | 1658 | punycode@2.3.1: 1659 | resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} 1660 | engines: {node: '>=6'} 1661 | 1662 | querystringify@2.2.0: 1663 | resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==} 1664 | 1665 | queue-microtask@1.2.3: 1666 | resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} 1667 | 1668 | read-package-json-fast@3.0.2: 1669 | resolution: {integrity: sha512-0J+Msgym3vrLOUB3hzQCuZHII0xkNGCtz/HJH9xZshwv9DbDwkw1KaE3gx/e2J5rpEY5rtOy6cyhKOPrkP7FZw==} 1670 | engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} 1671 | 1672 | readdirp@3.6.0: 1673 | resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} 1674 | engines: {node: '>=8.10.0'} 1675 | 1676 | regexp.prototype.flags@1.5.2: 1677 | resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} 1678 | engines: {node: '>= 0.4'} 1679 | 1680 | requires-port@1.0.0: 1681 | resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} 1682 | 1683 | resolve-from@4.0.0: 1684 | resolution: {integrity: sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==} 1685 | engines: {node: '>=4'} 1686 | 1687 | resolve-from@5.0.0: 1688 | resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} 1689 | engines: {node: '>=8'} 1690 | 1691 | reusify@1.0.4: 1692 | resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} 1693 | engines: {iojs: '>=1.0.0', node: '>=0.10.0'} 1694 | 1695 | rimraf@3.0.2: 1696 | resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} 1697 | deprecated: Rimraf versions prior to v4 are no longer supported 1698 | hasBin: true 1699 | 1700 | rimraf@6.0.1: 1701 | resolution: {integrity: sha512-9dkvaxAsk/xNXSJzMgFqqMCuFgt2+KsOFek3TMLfo8NCPfWpBmqwyNn5Y+NX56QUYfCtsyhF3ayiboEoUmJk/A==} 1702 | engines: {node: 20 || >=22} 1703 | hasBin: true 1704 | 1705 | rollup@4.20.0: 1706 | resolution: {integrity: sha512-6rbWBChcnSGzIlXeIdNIZTopKYad8ZG8ajhl78lGRLsI2rX8IkaotQhVas2Ma+GPxJav19wrSzvRvuiv0YKzWw==} 1707 | engines: {node: '>=18.0.0', npm: '>=8.0.0'} 1708 | hasBin: true 1709 | 1710 | rrweb-cssom@0.6.0: 1711 | resolution: {integrity: sha512-APM0Gt1KoXBz0iIkkdB/kfvGOwC4UuJFeG/c+yV7wSc7q96cG/kJ0HiYCnzivD9SB53cLV1MlHFNfOuPaadYSw==} 1712 | 1713 | rrweb-cssom@0.7.1: 1714 | resolution: {integrity: sha512-TrEMa7JGdVm0UThDJSx7ddw5nVm3UJS9o9CCIZ72B1vSyEZoziDqBYP3XIoi/12lKrJR8rE3jeFHMok2F/Mnsg==} 1715 | 1716 | run-parallel@1.2.0: 1717 | resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} 1718 | 1719 | safe-array-concat@1.1.2: 1720 | resolution: {integrity: sha512-vj6RsCsWBCf19jIeHEfkRMw8DPiBb+DMXklQ/1SGDHOMlHdPUkZXFQ2YdplS23zESTijAcurb1aSgJA3AgMu1Q==} 1721 | engines: {node: '>=0.4'} 1722 | 1723 | safe-regex-test@1.0.3: 1724 | resolution: {integrity: sha512-CdASjNJPvRa7roO6Ra/gLYBTzYzzPyyBXxIMdGW3USQLyjWEls2RgW5UBTXaQVp+OrpeCK3bLem8smtmheoRuw==} 1725 | engines: {node: '>= 0.4'} 1726 | 1727 | safer-buffer@2.1.2: 1728 | resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} 1729 | 1730 | saxes@6.0.0: 1731 | resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} 1732 | engines: {node: '>=v12.22.7'} 1733 | 1734 | semver@7.6.3: 1735 | resolution: {integrity: sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==} 1736 | engines: {node: '>=10'} 1737 | hasBin: true 1738 | 1739 | set-function-length@1.2.2: 1740 | resolution: {integrity: sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==} 1741 | engines: {node: '>= 0.4'} 1742 | 1743 | set-function-name@2.0.2: 1744 | resolution: {integrity: sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==} 1745 | engines: {node: '>= 0.4'} 1746 | 1747 | shebang-command@2.0.0: 1748 | resolution: {integrity: sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==} 1749 | engines: {node: '>=8'} 1750 | 1751 | shebang-regex@3.0.0: 1752 | resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} 1753 | engines: {node: '>=8'} 1754 | 1755 | shell-quote@1.8.1: 1756 | resolution: {integrity: sha512-6j1W9l1iAs/4xYBI1SYOVZyFcCis9b4KCLQ8fgAGG07QvzaRLVVRQvAy85yNmmZSjYjg4MWh4gNvlPujU/5LpA==} 1757 | 1758 | side-channel@1.0.6: 1759 | resolution: {integrity: sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==} 1760 | engines: {node: '>= 0.4'} 1761 | 1762 | siginfo@2.0.0: 1763 | resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} 1764 | 1765 | signal-exit@3.0.7: 1766 | resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==} 1767 | 1768 | signal-exit@4.1.0: 1769 | resolution: {integrity: sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==} 1770 | engines: {node: '>=14'} 1771 | 1772 | slash@3.0.0: 1773 | resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} 1774 | engines: {node: '>=8'} 1775 | 1776 | slashes@3.0.12: 1777 | resolution: {integrity: sha512-Q9VME8WyGkc7pJf6QEkj3wE+2CnvZMI+XJhwdTPR8Z/kWQRXi7boAWLDibRPyHRTUTPx5FaU7MsyrjI3yLB4HA==} 1778 | 1779 | source-map-js@1.2.0: 1780 | resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} 1781 | engines: {node: '>=0.10.0'} 1782 | 1783 | source-map@0.8.0-beta.0: 1784 | resolution: {integrity: sha512-2ymg6oRBpebeZi9UUNsgQ89bhx01TcTkmNTGnNO88imTmbSgy4nfujrgVEFKWpMTEGA11EDkTt7mqObTPdigIA==} 1785 | engines: {node: '>= 8'} 1786 | 1787 | spdx-exceptions@2.5.0: 1788 | resolution: {integrity: sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==} 1789 | 1790 | spdx-expression-parse@4.0.0: 1791 | resolution: {integrity: sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==} 1792 | 1793 | spdx-license-ids@3.0.18: 1794 | resolution: {integrity: sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==} 1795 | 1796 | stackback@0.0.2: 1797 | resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} 1798 | 1799 | std-env@3.7.0: 1800 | resolution: {integrity: sha512-JPbdCEQLj1w5GilpiHAx3qJvFndqybBysA3qUOnznweH4QbNYUsW/ea8QzSrnh0vNsezMMw5bcVool8lM0gwzg==} 1801 | 1802 | string-width@4.2.3: 1803 | resolution: {integrity: sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==} 1804 | engines: {node: '>=8'} 1805 | 1806 | string-width@5.1.2: 1807 | resolution: {integrity: sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==} 1808 | engines: {node: '>=12'} 1809 | 1810 | string.prototype.trim@1.2.9: 1811 | resolution: {integrity: sha512-klHuCNxiMZ8MlsOihJhJEBJAiMVqU3Z2nEXWfWnIqjN0gEFS9J9+IxKozWWtQGcgoa1WUZzLjKPTr4ZHNFTFxw==} 1812 | engines: {node: '>= 0.4'} 1813 | 1814 | string.prototype.trimend@1.0.8: 1815 | resolution: {integrity: sha512-p73uL5VCHCO2BZZ6krwwQE3kCzM7NKmis8S//xEC6fQonchbum4eP6kR4DLEjQFO3Wnj3Fuo8NM0kOSjVdHjZQ==} 1816 | 1817 | string.prototype.trimstart@1.0.8: 1818 | resolution: {integrity: sha512-UXSH262CSZY1tfu3G3Secr6uGLCFVPMhIqHjlgCUtCCcgihYc/xKs9djMTMUOb2j1mVSeU8EU6NWc/iQKU6Gfg==} 1819 | engines: {node: '>= 0.4'} 1820 | 1821 | strip-ansi@6.0.1: 1822 | resolution: {integrity: sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==} 1823 | engines: {node: '>=8'} 1824 | 1825 | strip-ansi@7.1.0: 1826 | resolution: {integrity: sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==} 1827 | engines: {node: '>=12'} 1828 | 1829 | strip-final-newline@2.0.0: 1830 | resolution: {integrity: sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA==} 1831 | engines: {node: '>=6'} 1832 | 1833 | strip-final-newline@3.0.0: 1834 | resolution: {integrity: sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==} 1835 | engines: {node: '>=12'} 1836 | 1837 | strip-json-comments@3.1.1: 1838 | resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} 1839 | engines: {node: '>=8'} 1840 | 1841 | sucrase@3.35.0: 1842 | resolution: {integrity: sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==} 1843 | engines: {node: '>=16 || 14 >=14.17'} 1844 | hasBin: true 1845 | 1846 | supports-color@7.2.0: 1847 | resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} 1848 | engines: {node: '>=8'} 1849 | 1850 | symbol-tree@3.2.4: 1851 | resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} 1852 | 1853 | synckit@0.9.1: 1854 | resolution: {integrity: sha512-7gr8p9TQP6RAHusBOSLs46F4564ZrjV8xFmw5zCmgmhGUcw2hxsShhJ6CEiHQMgPDwAQ1fWHPM0ypc4RMAig4A==} 1855 | engines: {node: ^14.18.0 || >=16.0.0} 1856 | 1857 | text-table@0.2.0: 1858 | resolution: {integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw==} 1859 | 1860 | thenify-all@1.6.0: 1861 | resolution: {integrity: sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==} 1862 | engines: {node: '>=0.8'} 1863 | 1864 | thenify@3.3.1: 1865 | resolution: {integrity: sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==} 1866 | 1867 | tinybench@2.9.0: 1868 | resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} 1869 | 1870 | tinypool@1.0.0: 1871 | resolution: {integrity: sha512-KIKExllK7jp3uvrNtvRBYBWBOAXSX8ZvoaD8T+7KB/QHIuoJW3Pmr60zucywjAlMb5TeXUkcs/MWeWLu0qvuAQ==} 1872 | engines: {node: ^18.0.0 || >=20.0.0} 1873 | 1874 | tinyrainbow@1.2.0: 1875 | resolution: {integrity: sha512-weEDEq7Z5eTHPDh4xjX789+fHfF+P8boiFB+0vbWzpbnbsEr/GRaohi/uMKxg8RZMXnl1ItAi/IUHWMsjDV7kQ==} 1876 | engines: {node: '>=14.0.0'} 1877 | 1878 | tinyspy@3.0.0: 1879 | resolution: {integrity: sha512-q5nmENpTHgiPVd1cJDDc9cVoYN5x4vCvwT3FMilvKPKneCBZAxn2YWQjDF0UMcE9k0Cay1gBiDfTMU0g+mPMQA==} 1880 | engines: {node: '>=14.0.0'} 1881 | 1882 | to-fast-properties@2.0.0: 1883 | resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} 1884 | engines: {node: '>=4'} 1885 | 1886 | to-regex-range@5.0.1: 1887 | resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} 1888 | engines: {node: '>=8.0'} 1889 | 1890 | tough-cookie@4.1.4: 1891 | resolution: {integrity: sha512-Loo5UUvLD9ScZ6jh8beX1T6sO1w2/MpCRpEP7V280GKMVUQ0Jzar2U3UJPsrdbziLEMMhu3Ujnq//rhiFuIeag==} 1892 | engines: {node: '>=6'} 1893 | 1894 | tr46@1.0.1: 1895 | resolution: {integrity: sha512-dTpowEjclQ7Kgx5SdBkqRzVhERQXov8/l9Ft9dVM9fmg0W0KQSVaXX9T4i6twCPNtYiZM53lpSSUAwJbFPOHxA==} 1896 | 1897 | tr46@5.0.0: 1898 | resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} 1899 | engines: {node: '>=18'} 1900 | 1901 | tree-kill@1.2.2: 1902 | resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} 1903 | hasBin: true 1904 | 1905 | ts-api-utils@1.3.0: 1906 | resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} 1907 | engines: {node: '>=16'} 1908 | peerDependencies: 1909 | typescript: '>=4.2.0' 1910 | 1911 | ts-interface-checker@0.1.13: 1912 | resolution: {integrity: sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==} 1913 | 1914 | tslib@2.6.3: 1915 | resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} 1916 | 1917 | tsup@8.2.4: 1918 | resolution: {integrity: sha512-akpCPePnBnC/CXgRrcy72ZSntgIEUa1jN0oJbbvpALWKNOz1B7aM+UVDWGRGIO/T/PZugAESWDJUAb5FD48o8Q==} 1919 | engines: {node: '>=18'} 1920 | hasBin: true 1921 | peerDependencies: 1922 | '@microsoft/api-extractor': ^7.36.0 1923 | '@swc/core': ^1 1924 | postcss: ^8.4.12 1925 | typescript: '>=4.5.0' 1926 | peerDependenciesMeta: 1927 | '@microsoft/api-extractor': 1928 | optional: true 1929 | '@swc/core': 1930 | optional: true 1931 | postcss: 1932 | optional: true 1933 | typescript: 1934 | optional: true 1935 | 1936 | type-check@0.4.0: 1937 | resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} 1938 | engines: {node: '>= 0.8.0'} 1939 | 1940 | type-fest@0.20.2: 1941 | resolution: {integrity: sha512-Ne+eE4r0/iWnpAxD852z3A+N0Bt5RN//NjJwRd2VFHEmrywxf5vsZlh4R6lixl6B+wz/8d+maTSAkN1FIkI3LQ==} 1942 | engines: {node: '>=10'} 1943 | 1944 | typed-array-buffer@1.0.2: 1945 | resolution: {integrity: sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==} 1946 | engines: {node: '>= 0.4'} 1947 | 1948 | typed-array-byte-length@1.0.1: 1949 | resolution: {integrity: sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==} 1950 | engines: {node: '>= 0.4'} 1951 | 1952 | typed-array-byte-offset@1.0.2: 1953 | resolution: {integrity: sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==} 1954 | engines: {node: '>= 0.4'} 1955 | 1956 | typed-array-length@1.0.6: 1957 | resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} 1958 | engines: {node: '>= 0.4'} 1959 | 1960 | typescript@5.5.4: 1961 | resolution: {integrity: sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==} 1962 | engines: {node: '>=14.17'} 1963 | hasBin: true 1964 | 1965 | unbox-primitive@1.0.2: 1966 | resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} 1967 | 1968 | undici-types@6.18.2: 1969 | resolution: {integrity: sha512-5ruQbENj95yDYJNS3TvcaxPMshV7aizdv/hWYjGIKoANWKjhWNBsr2YEuYZKodQulB1b8l7ILOuDQep3afowQQ==} 1970 | 1971 | universalify@0.2.0: 1972 | resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} 1973 | engines: {node: '>= 4.0.0'} 1974 | 1975 | uri-js@4.4.1: 1976 | resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} 1977 | 1978 | url-parse@1.5.10: 1979 | resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==} 1980 | 1981 | vite-node@2.0.5: 1982 | resolution: {integrity: sha512-LdsW4pxj0Ot69FAoXZ1yTnA9bjGohr2yNBU7QKRxpz8ITSkhuDl6h3zS/tvgz4qrNjeRnvrWeXQ8ZF7Um4W00Q==} 1983 | engines: {node: ^18.0.0 || >=20.0.0} 1984 | hasBin: true 1985 | 1986 | vite@5.4.0: 1987 | resolution: {integrity: sha512-5xokfMX0PIiwCMCMb9ZJcMyh5wbBun0zUzKib+L65vAZ8GY9ePZMXxFrHbr/Kyll2+LSCY7xtERPpxkBDKngwg==} 1988 | engines: {node: ^18.0.0 || >=20.0.0} 1989 | hasBin: true 1990 | peerDependencies: 1991 | '@types/node': ^18.0.0 || >=20.0.0 1992 | less: '*' 1993 | lightningcss: ^1.21.0 1994 | sass: '*' 1995 | sass-embedded: '*' 1996 | stylus: '*' 1997 | sugarss: '*' 1998 | terser: ^5.4.0 1999 | peerDependenciesMeta: 2000 | '@types/node': 2001 | optional: true 2002 | less: 2003 | optional: true 2004 | lightningcss: 2005 | optional: true 2006 | sass: 2007 | optional: true 2008 | sass-embedded: 2009 | optional: true 2010 | stylus: 2011 | optional: true 2012 | sugarss: 2013 | optional: true 2014 | terser: 2015 | optional: true 2016 | 2017 | vitest@2.0.5: 2018 | resolution: {integrity: sha512-8GUxONfauuIdeSl5f9GTgVEpg5BTOlplET4WEDaeY2QBiN8wSm68vxN/tb5z405OwppfoCavnwXafiaYBC/xOA==} 2019 | engines: {node: ^18.0.0 || >=20.0.0} 2020 | hasBin: true 2021 | peerDependencies: 2022 | '@edge-runtime/vm': '*' 2023 | '@types/node': ^18.0.0 || >=20.0.0 2024 | '@vitest/browser': 2.0.5 2025 | '@vitest/ui': 2.0.5 2026 | happy-dom: '*' 2027 | jsdom: '*' 2028 | peerDependenciesMeta: 2029 | '@edge-runtime/vm': 2030 | optional: true 2031 | '@types/node': 2032 | optional: true 2033 | '@vitest/browser': 2034 | optional: true 2035 | '@vitest/ui': 2036 | optional: true 2037 | happy-dom: 2038 | optional: true 2039 | jsdom: 2040 | optional: true 2041 | 2042 | vue-router@4.4.3: 2043 | resolution: {integrity: sha512-sv6wmNKx2j3aqJQDMxLFzs/u/mjA9Z5LCgy6BE0f7yFWMjrPLnS/sPNn8ARY/FXw6byV18EFutn5lTO6+UsV5A==} 2044 | peerDependencies: 2045 | vue: ^3.2.0 2046 | 2047 | vue@3.4.37: 2048 | resolution: {integrity: sha512-3vXvNfkKTBsSJ7JP+LyR7GBuwQuckbWvuwAid3xbqK9ppsKt/DUvfqgZ48fgOLEfpy1IacL5f8QhUVl77RaI7A==} 2049 | peerDependencies: 2050 | typescript: '*' 2051 | peerDependenciesMeta: 2052 | typescript: 2053 | optional: true 2054 | 2055 | w3c-xmlserializer@5.0.0: 2056 | resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} 2057 | engines: {node: '>=18'} 2058 | 2059 | webidl-conversions@4.0.2: 2060 | resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==} 2061 | 2062 | webidl-conversions@7.0.0: 2063 | resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} 2064 | engines: {node: '>=12'} 2065 | 2066 | whatwg-encoding@3.1.1: 2067 | resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} 2068 | engines: {node: '>=18'} 2069 | 2070 | whatwg-mimetype@4.0.0: 2071 | resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} 2072 | engines: {node: '>=18'} 2073 | 2074 | whatwg-url@14.0.0: 2075 | resolution: {integrity: sha512-1lfMEm2IEr7RIV+f4lUNPOqfFL+pO+Xw3fJSqmjX9AbXcXcYOkCe1P6+9VBZB6n94af16NfZf+sSk0JCBZC9aw==} 2076 | engines: {node: '>=18'} 2077 | 2078 | whatwg-url@7.1.0: 2079 | resolution: {integrity: sha512-WUu7Rg1DroM7oQvGWfOiAK21n74Gg+T4elXEQYkOhtyLeWiJFoOGLXPKI/9gzIie9CtwVLm8wtw6YJdKyxSjeg==} 2080 | 2081 | which-boxed-primitive@1.0.2: 2082 | resolution: {integrity: sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg==} 2083 | 2084 | which-typed-array@1.1.15: 2085 | resolution: {integrity: sha512-oV0jmFtUky6CXfkqehVvBP/LSWJ2sy4vWMioiENyJLePrBO/yKyV9OyJySfAKosh+RYkIl5zJCNZ8/4JncrpdA==} 2086 | engines: {node: '>= 0.4'} 2087 | 2088 | which@2.0.2: 2089 | resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} 2090 | engines: {node: '>= 8'} 2091 | hasBin: true 2092 | 2093 | why-is-node-running@2.3.0: 2094 | resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} 2095 | engines: {node: '>=8'} 2096 | hasBin: true 2097 | 2098 | word-wrap@1.2.5: 2099 | resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} 2100 | engines: {node: '>=0.10.0'} 2101 | 2102 | wrap-ansi@7.0.0: 2103 | resolution: {integrity: sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==} 2104 | engines: {node: '>=10'} 2105 | 2106 | wrap-ansi@8.1.0: 2107 | resolution: {integrity: sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==} 2108 | engines: {node: '>=12'} 2109 | 2110 | wrappy@1.0.2: 2111 | resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} 2112 | 2113 | ws@8.18.0: 2114 | resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} 2115 | engines: {node: '>=10.0.0'} 2116 | peerDependencies: 2117 | bufferutil: ^4.0.1 2118 | utf-8-validate: '>=5.0.2' 2119 | peerDependenciesMeta: 2120 | bufferutil: 2121 | optional: true 2122 | utf-8-validate: 2123 | optional: true 2124 | 2125 | xml-name-validator@5.0.0: 2126 | resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} 2127 | engines: {node: '>=18'} 2128 | 2129 | xmlchars@2.2.0: 2130 | resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} 2131 | 2132 | yocto-queue@0.1.0: 2133 | resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==} 2134 | engines: {node: '>=10'} 2135 | 2136 | snapshots: 2137 | 2138 | '@ampproject/remapping@2.3.0': 2139 | dependencies: 2140 | '@jridgewell/gen-mapping': 0.3.5 2141 | '@jridgewell/trace-mapping': 0.3.25 2142 | 2143 | '@babel/helper-string-parser@7.24.8': {} 2144 | 2145 | '@babel/helper-validator-identifier@7.24.7': {} 2146 | 2147 | '@babel/parser@7.25.3': 2148 | dependencies: 2149 | '@babel/types': 7.25.2 2150 | 2151 | '@babel/types@7.25.2': 2152 | dependencies: 2153 | '@babel/helper-string-parser': 7.24.8 2154 | '@babel/helper-validator-identifier': 7.24.7 2155 | to-fast-properties: 2.0.0 2156 | 2157 | '@es-joy/jsdoccomment@0.48.0': 2158 | dependencies: 2159 | comment-parser: 1.4.1 2160 | esquery: 1.6.0 2161 | jsdoc-type-pratt-parser: 4.1.0 2162 | 2163 | '@esbuild/aix-ppc64@0.21.5': 2164 | optional: true 2165 | 2166 | '@esbuild/aix-ppc64@0.23.0': 2167 | optional: true 2168 | 2169 | '@esbuild/android-arm64@0.21.5': 2170 | optional: true 2171 | 2172 | '@esbuild/android-arm64@0.23.0': 2173 | optional: true 2174 | 2175 | '@esbuild/android-arm@0.21.5': 2176 | optional: true 2177 | 2178 | '@esbuild/android-arm@0.23.0': 2179 | optional: true 2180 | 2181 | '@esbuild/android-x64@0.21.5': 2182 | optional: true 2183 | 2184 | '@esbuild/android-x64@0.23.0': 2185 | optional: true 2186 | 2187 | '@esbuild/darwin-arm64@0.21.5': 2188 | optional: true 2189 | 2190 | '@esbuild/darwin-arm64@0.23.0': 2191 | optional: true 2192 | 2193 | '@esbuild/darwin-x64@0.21.5': 2194 | optional: true 2195 | 2196 | '@esbuild/darwin-x64@0.23.0': 2197 | optional: true 2198 | 2199 | '@esbuild/freebsd-arm64@0.21.5': 2200 | optional: true 2201 | 2202 | '@esbuild/freebsd-arm64@0.23.0': 2203 | optional: true 2204 | 2205 | '@esbuild/freebsd-x64@0.21.5': 2206 | optional: true 2207 | 2208 | '@esbuild/freebsd-x64@0.23.0': 2209 | optional: true 2210 | 2211 | '@esbuild/linux-arm64@0.21.5': 2212 | optional: true 2213 | 2214 | '@esbuild/linux-arm64@0.23.0': 2215 | optional: true 2216 | 2217 | '@esbuild/linux-arm@0.21.5': 2218 | optional: true 2219 | 2220 | '@esbuild/linux-arm@0.23.0': 2221 | optional: true 2222 | 2223 | '@esbuild/linux-ia32@0.21.5': 2224 | optional: true 2225 | 2226 | '@esbuild/linux-ia32@0.23.0': 2227 | optional: true 2228 | 2229 | '@esbuild/linux-loong64@0.21.5': 2230 | optional: true 2231 | 2232 | '@esbuild/linux-loong64@0.23.0': 2233 | optional: true 2234 | 2235 | '@esbuild/linux-mips64el@0.21.5': 2236 | optional: true 2237 | 2238 | '@esbuild/linux-mips64el@0.23.0': 2239 | optional: true 2240 | 2241 | '@esbuild/linux-ppc64@0.21.5': 2242 | optional: true 2243 | 2244 | '@esbuild/linux-ppc64@0.23.0': 2245 | optional: true 2246 | 2247 | '@esbuild/linux-riscv64@0.21.5': 2248 | optional: true 2249 | 2250 | '@esbuild/linux-riscv64@0.23.0': 2251 | optional: true 2252 | 2253 | '@esbuild/linux-s390x@0.21.5': 2254 | optional: true 2255 | 2256 | '@esbuild/linux-s390x@0.23.0': 2257 | optional: true 2258 | 2259 | '@esbuild/linux-x64@0.21.5': 2260 | optional: true 2261 | 2262 | '@esbuild/linux-x64@0.23.0': 2263 | optional: true 2264 | 2265 | '@esbuild/netbsd-x64@0.21.5': 2266 | optional: true 2267 | 2268 | '@esbuild/netbsd-x64@0.23.0': 2269 | optional: true 2270 | 2271 | '@esbuild/openbsd-arm64@0.23.0': 2272 | optional: true 2273 | 2274 | '@esbuild/openbsd-x64@0.21.5': 2275 | optional: true 2276 | 2277 | '@esbuild/openbsd-x64@0.23.0': 2278 | optional: true 2279 | 2280 | '@esbuild/sunos-x64@0.21.5': 2281 | optional: true 2282 | 2283 | '@esbuild/sunos-x64@0.23.0': 2284 | optional: true 2285 | 2286 | '@esbuild/win32-arm64@0.21.5': 2287 | optional: true 2288 | 2289 | '@esbuild/win32-arm64@0.23.0': 2290 | optional: true 2291 | 2292 | '@esbuild/win32-ia32@0.21.5': 2293 | optional: true 2294 | 2295 | '@esbuild/win32-ia32@0.23.0': 2296 | optional: true 2297 | 2298 | '@esbuild/win32-x64@0.21.5': 2299 | optional: true 2300 | 2301 | '@esbuild/win32-x64@0.23.0': 2302 | optional: true 2303 | 2304 | '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': 2305 | dependencies: 2306 | eslint: 8.57.0 2307 | eslint-visitor-keys: 3.4.3 2308 | 2309 | '@eslint-community/regexpp@4.11.0': {} 2310 | 2311 | '@eslint/eslintrc@2.1.4': 2312 | dependencies: 2313 | ajv: 6.12.6 2314 | debug: 4.3.6 2315 | espree: 9.6.1 2316 | globals: 13.24.0 2317 | ignore: 5.3.2 2318 | import-fresh: 3.3.0 2319 | js-yaml: 4.1.0 2320 | minimatch: 3.1.2 2321 | strip-json-comments: 3.1.1 2322 | transitivePeerDependencies: 2323 | - supports-color 2324 | 2325 | '@eslint/js@8.57.0': {} 2326 | 2327 | '@gtm-support/core@3.0.1': {} 2328 | 2329 | '@humanwhocodes/config-array@0.11.14': 2330 | dependencies: 2331 | '@humanwhocodes/object-schema': 2.0.3 2332 | debug: 4.3.6 2333 | minimatch: 3.1.2 2334 | transitivePeerDependencies: 2335 | - supports-color 2336 | 2337 | '@humanwhocodes/module-importer@1.0.1': {} 2338 | 2339 | '@humanwhocodes/object-schema@2.0.3': {} 2340 | 2341 | '@isaacs/cliui@8.0.2': 2342 | dependencies: 2343 | string-width: 5.1.2 2344 | string-width-cjs: string-width@4.2.3 2345 | strip-ansi: 7.1.0 2346 | strip-ansi-cjs: strip-ansi@6.0.1 2347 | wrap-ansi: 8.1.0 2348 | wrap-ansi-cjs: wrap-ansi@7.0.0 2349 | 2350 | '@jridgewell/gen-mapping@0.3.5': 2351 | dependencies: 2352 | '@jridgewell/set-array': 1.2.1 2353 | '@jridgewell/sourcemap-codec': 1.5.0 2354 | '@jridgewell/trace-mapping': 0.3.25 2355 | 2356 | '@jridgewell/resolve-uri@3.1.2': {} 2357 | 2358 | '@jridgewell/set-array@1.2.1': {} 2359 | 2360 | '@jridgewell/sourcemap-codec@1.5.0': {} 2361 | 2362 | '@jridgewell/trace-mapping@0.3.25': 2363 | dependencies: 2364 | '@jridgewell/resolve-uri': 3.1.2 2365 | '@jridgewell/sourcemap-codec': 1.5.0 2366 | 2367 | '@nodelib/fs.scandir@2.1.5': 2368 | dependencies: 2369 | '@nodelib/fs.stat': 2.0.5 2370 | run-parallel: 1.2.0 2371 | 2372 | '@nodelib/fs.stat@2.0.5': {} 2373 | 2374 | '@nodelib/fs.walk@1.2.8': 2375 | dependencies: 2376 | '@nodelib/fs.scandir': 2.1.5 2377 | fastq: 1.17.1 2378 | 2379 | '@pkgjs/parseargs@0.11.0': 2380 | optional: true 2381 | 2382 | '@pkgr/core@0.1.1': {} 2383 | 2384 | '@rollup/rollup-android-arm-eabi@4.20.0': 2385 | optional: true 2386 | 2387 | '@rollup/rollup-android-arm64@4.20.0': 2388 | optional: true 2389 | 2390 | '@rollup/rollup-darwin-arm64@4.20.0': 2391 | optional: true 2392 | 2393 | '@rollup/rollup-darwin-x64@4.20.0': 2394 | optional: true 2395 | 2396 | '@rollup/rollup-linux-arm-gnueabihf@4.20.0': 2397 | optional: true 2398 | 2399 | '@rollup/rollup-linux-arm-musleabihf@4.20.0': 2400 | optional: true 2401 | 2402 | '@rollup/rollup-linux-arm64-gnu@4.20.0': 2403 | optional: true 2404 | 2405 | '@rollup/rollup-linux-arm64-musl@4.20.0': 2406 | optional: true 2407 | 2408 | '@rollup/rollup-linux-powerpc64le-gnu@4.20.0': 2409 | optional: true 2410 | 2411 | '@rollup/rollup-linux-riscv64-gnu@4.20.0': 2412 | optional: true 2413 | 2414 | '@rollup/rollup-linux-s390x-gnu@4.20.0': 2415 | optional: true 2416 | 2417 | '@rollup/rollup-linux-x64-gnu@4.20.0': 2418 | optional: true 2419 | 2420 | '@rollup/rollup-linux-x64-musl@4.20.0': 2421 | optional: true 2422 | 2423 | '@rollup/rollup-win32-arm64-msvc@4.20.0': 2424 | optional: true 2425 | 2426 | '@rollup/rollup-win32-ia32-msvc@4.20.0': 2427 | optional: true 2428 | 2429 | '@rollup/rollup-win32-x64-msvc@4.20.0': 2430 | optional: true 2431 | 2432 | '@types/estree@1.0.5': {} 2433 | 2434 | '@types/node@22.3.0': 2435 | dependencies: 2436 | undici-types: 6.18.2 2437 | 2438 | '@typescript-eslint/eslint-plugin@7.18.0(@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4))(eslint@8.57.0)(typescript@5.5.4)': 2439 | dependencies: 2440 | '@eslint-community/regexpp': 4.11.0 2441 | '@typescript-eslint/parser': 7.18.0(eslint@8.57.0)(typescript@5.5.4) 2442 | '@typescript-eslint/scope-manager': 7.18.0 2443 | '@typescript-eslint/type-utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) 2444 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) 2445 | '@typescript-eslint/visitor-keys': 7.18.0 2446 | eslint: 8.57.0 2447 | graphemer: 1.4.0 2448 | ignore: 5.3.2 2449 | natural-compare: 1.4.0 2450 | ts-api-utils: 1.3.0(typescript@5.5.4) 2451 | optionalDependencies: 2452 | typescript: 5.5.4 2453 | transitivePeerDependencies: 2454 | - supports-color 2455 | 2456 | '@typescript-eslint/parser@7.18.0(eslint@8.57.0)(typescript@5.5.4)': 2457 | dependencies: 2458 | '@typescript-eslint/scope-manager': 7.18.0 2459 | '@typescript-eslint/types': 7.18.0 2460 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) 2461 | '@typescript-eslint/visitor-keys': 7.18.0 2462 | debug: 4.3.6 2463 | eslint: 8.57.0 2464 | optionalDependencies: 2465 | typescript: 5.5.4 2466 | transitivePeerDependencies: 2467 | - supports-color 2468 | 2469 | '@typescript-eslint/scope-manager@7.18.0': 2470 | dependencies: 2471 | '@typescript-eslint/types': 7.18.0 2472 | '@typescript-eslint/visitor-keys': 7.18.0 2473 | 2474 | '@typescript-eslint/type-utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': 2475 | dependencies: 2476 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) 2477 | '@typescript-eslint/utils': 7.18.0(eslint@8.57.0)(typescript@5.5.4) 2478 | debug: 4.3.6 2479 | eslint: 8.57.0 2480 | ts-api-utils: 1.3.0(typescript@5.5.4) 2481 | optionalDependencies: 2482 | typescript: 5.5.4 2483 | transitivePeerDependencies: 2484 | - supports-color 2485 | 2486 | '@typescript-eslint/types@7.18.0': {} 2487 | 2488 | '@typescript-eslint/typescript-estree@7.18.0(typescript@5.5.4)': 2489 | dependencies: 2490 | '@typescript-eslint/types': 7.18.0 2491 | '@typescript-eslint/visitor-keys': 7.18.0 2492 | debug: 4.3.6 2493 | globby: 11.1.0 2494 | is-glob: 4.0.3 2495 | minimatch: 9.0.5 2496 | semver: 7.6.3 2497 | ts-api-utils: 1.3.0(typescript@5.5.4) 2498 | optionalDependencies: 2499 | typescript: 5.5.4 2500 | transitivePeerDependencies: 2501 | - supports-color 2502 | 2503 | '@typescript-eslint/utils@7.18.0(eslint@8.57.0)(typescript@5.5.4)': 2504 | dependencies: 2505 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 2506 | '@typescript-eslint/scope-manager': 7.18.0 2507 | '@typescript-eslint/types': 7.18.0 2508 | '@typescript-eslint/typescript-estree': 7.18.0(typescript@5.5.4) 2509 | eslint: 8.57.0 2510 | transitivePeerDependencies: 2511 | - supports-color 2512 | - typescript 2513 | 2514 | '@typescript-eslint/visitor-keys@7.18.0': 2515 | dependencies: 2516 | '@typescript-eslint/types': 7.18.0 2517 | eslint-visitor-keys: 3.4.3 2518 | 2519 | '@ungap/structured-clone@1.2.0': {} 2520 | 2521 | '@vitest/expect@2.0.5': 2522 | dependencies: 2523 | '@vitest/spy': 2.0.5 2524 | '@vitest/utils': 2.0.5 2525 | chai: 5.1.1 2526 | tinyrainbow: 1.2.0 2527 | 2528 | '@vitest/pretty-format@2.0.5': 2529 | dependencies: 2530 | tinyrainbow: 1.2.0 2531 | 2532 | '@vitest/runner@2.0.5': 2533 | dependencies: 2534 | '@vitest/utils': 2.0.5 2535 | pathe: 1.1.2 2536 | 2537 | '@vitest/snapshot@2.0.5': 2538 | dependencies: 2539 | '@vitest/pretty-format': 2.0.5 2540 | magic-string: 0.30.11 2541 | pathe: 1.1.2 2542 | 2543 | '@vitest/spy@2.0.5': 2544 | dependencies: 2545 | tinyspy: 3.0.0 2546 | 2547 | '@vitest/utils@2.0.5': 2548 | dependencies: 2549 | '@vitest/pretty-format': 2.0.5 2550 | estree-walker: 3.0.3 2551 | loupe: 3.1.1 2552 | tinyrainbow: 1.2.0 2553 | 2554 | '@vue/compiler-core@3.4.37': 2555 | dependencies: 2556 | '@babel/parser': 7.25.3 2557 | '@vue/shared': 3.4.37 2558 | entities: 5.0.0 2559 | estree-walker: 2.0.2 2560 | source-map-js: 1.2.0 2561 | 2562 | '@vue/compiler-dom@3.4.37': 2563 | dependencies: 2564 | '@vue/compiler-core': 3.4.37 2565 | '@vue/shared': 3.4.37 2566 | 2567 | '@vue/compiler-sfc@3.4.37': 2568 | dependencies: 2569 | '@babel/parser': 7.25.3 2570 | '@vue/compiler-core': 3.4.37 2571 | '@vue/compiler-dom': 3.4.37 2572 | '@vue/compiler-ssr': 3.4.37 2573 | '@vue/shared': 3.4.37 2574 | estree-walker: 2.0.2 2575 | magic-string: 0.30.11 2576 | postcss: 8.4.41 2577 | source-map-js: 1.2.0 2578 | 2579 | '@vue/compiler-ssr@3.4.37': 2580 | dependencies: 2581 | '@vue/compiler-dom': 3.4.37 2582 | '@vue/shared': 3.4.37 2583 | 2584 | '@vue/devtools-api@6.6.3': 2585 | optional: true 2586 | 2587 | '@vue/reactivity@3.4.37': 2588 | dependencies: 2589 | '@vue/shared': 3.4.37 2590 | 2591 | '@vue/runtime-core@3.4.37': 2592 | dependencies: 2593 | '@vue/reactivity': 3.4.37 2594 | '@vue/shared': 3.4.37 2595 | 2596 | '@vue/runtime-dom@3.4.37': 2597 | dependencies: 2598 | '@vue/reactivity': 3.4.37 2599 | '@vue/runtime-core': 3.4.37 2600 | '@vue/shared': 3.4.37 2601 | csstype: 3.1.3 2602 | 2603 | '@vue/server-renderer@3.4.37(vue@3.4.37(typescript@5.5.4))': 2604 | dependencies: 2605 | '@vue/compiler-ssr': 3.4.37 2606 | '@vue/shared': 3.4.37 2607 | vue: 3.4.37(typescript@5.5.4) 2608 | 2609 | '@vue/shared@3.4.37': {} 2610 | 2611 | acorn-jsx@5.3.2(acorn@8.12.1): 2612 | dependencies: 2613 | acorn: 8.12.1 2614 | 2615 | acorn@8.12.1: {} 2616 | 2617 | agent-base@7.1.1: 2618 | dependencies: 2619 | debug: 4.3.6 2620 | transitivePeerDependencies: 2621 | - supports-color 2622 | 2623 | ajv@6.12.6: 2624 | dependencies: 2625 | fast-deep-equal: 3.1.3 2626 | fast-json-stable-stringify: 2.1.0 2627 | json-schema-traverse: 0.4.1 2628 | uri-js: 4.4.1 2629 | 2630 | ansi-regex@5.0.1: {} 2631 | 2632 | ansi-regex@6.0.1: {} 2633 | 2634 | ansi-styles@4.3.0: 2635 | dependencies: 2636 | color-convert: 2.0.1 2637 | 2638 | ansi-styles@6.2.1: {} 2639 | 2640 | any-promise@1.3.0: {} 2641 | 2642 | anymatch@3.1.3: 2643 | dependencies: 2644 | normalize-path: 3.0.0 2645 | picomatch: 2.3.1 2646 | 2647 | are-docs-informative@0.0.2: {} 2648 | 2649 | argparse@2.0.1: {} 2650 | 2651 | array-buffer-byte-length@1.0.1: 2652 | dependencies: 2653 | call-bind: 1.0.7 2654 | is-array-buffer: 3.0.4 2655 | 2656 | array-union@2.1.0: {} 2657 | 2658 | array.prototype.flatmap@1.3.2: 2659 | dependencies: 2660 | call-bind: 1.0.7 2661 | define-properties: 1.2.1 2662 | es-abstract: 1.23.3 2663 | es-shim-unscopables: 1.0.2 2664 | 2665 | arraybuffer.prototype.slice@1.0.3: 2666 | dependencies: 2667 | array-buffer-byte-length: 1.0.1 2668 | call-bind: 1.0.7 2669 | define-properties: 1.2.1 2670 | es-abstract: 1.23.3 2671 | es-errors: 1.3.0 2672 | get-intrinsic: 1.2.4 2673 | is-array-buffer: 3.0.4 2674 | is-shared-array-buffer: 1.0.3 2675 | 2676 | assertion-error@2.0.1: {} 2677 | 2678 | asynckit@0.4.0: {} 2679 | 2680 | available-typed-arrays@1.0.7: 2681 | dependencies: 2682 | possible-typed-array-names: 1.0.0 2683 | 2684 | balanced-match@1.0.2: {} 2685 | 2686 | binary-extensions@2.3.0: {} 2687 | 2688 | brace-expansion@1.1.11: 2689 | dependencies: 2690 | balanced-match: 1.0.2 2691 | concat-map: 0.0.1 2692 | 2693 | brace-expansion@2.0.1: 2694 | dependencies: 2695 | balanced-match: 1.0.2 2696 | 2697 | braces@3.0.3: 2698 | dependencies: 2699 | fill-range: 7.1.1 2700 | 2701 | bundle-require@5.0.0(esbuild@0.23.0): 2702 | dependencies: 2703 | esbuild: 0.23.0 2704 | load-tsconfig: 0.2.5 2705 | 2706 | cac@6.7.14: {} 2707 | 2708 | call-bind@1.0.7: 2709 | dependencies: 2710 | es-define-property: 1.0.0 2711 | es-errors: 1.3.0 2712 | function-bind: 1.1.2 2713 | get-intrinsic: 1.2.4 2714 | set-function-length: 1.2.2 2715 | 2716 | callsites@3.1.0: {} 2717 | 2718 | chai@5.1.1: 2719 | dependencies: 2720 | assertion-error: 2.0.1 2721 | check-error: 2.1.1 2722 | deep-eql: 5.0.2 2723 | loupe: 3.1.1 2724 | pathval: 2.0.0 2725 | 2726 | chalk@4.1.2: 2727 | dependencies: 2728 | ansi-styles: 4.3.0 2729 | supports-color: 7.2.0 2730 | 2731 | check-error@2.1.1: {} 2732 | 2733 | chokidar@3.6.0: 2734 | dependencies: 2735 | anymatch: 3.1.3 2736 | braces: 3.0.3 2737 | glob-parent: 5.1.2 2738 | is-binary-path: 2.1.0 2739 | is-glob: 4.0.3 2740 | normalize-path: 3.0.0 2741 | readdirp: 3.6.0 2742 | optionalDependencies: 2743 | fsevents: 2.3.3 2744 | 2745 | color-convert@2.0.1: 2746 | dependencies: 2747 | color-name: 1.1.4 2748 | 2749 | color-name@1.1.4: {} 2750 | 2751 | combined-stream@1.0.8: 2752 | dependencies: 2753 | delayed-stream: 1.0.0 2754 | 2755 | commander@4.1.1: {} 2756 | 2757 | comment-parser@1.4.1: {} 2758 | 2759 | concat-map@0.0.1: {} 2760 | 2761 | consola@3.2.3: {} 2762 | 2763 | cross-spawn@7.0.3: 2764 | dependencies: 2765 | path-key: 3.1.1 2766 | shebang-command: 2.0.0 2767 | which: 2.0.2 2768 | 2769 | cssstyle@4.0.1: 2770 | dependencies: 2771 | rrweb-cssom: 0.6.0 2772 | 2773 | csstype@3.1.3: {} 2774 | 2775 | data-urls@5.0.0: 2776 | dependencies: 2777 | whatwg-mimetype: 4.0.0 2778 | whatwg-url: 14.0.0 2779 | 2780 | data-view-buffer@1.0.1: 2781 | dependencies: 2782 | call-bind: 1.0.7 2783 | es-errors: 1.3.0 2784 | is-data-view: 1.0.1 2785 | 2786 | data-view-byte-length@1.0.1: 2787 | dependencies: 2788 | call-bind: 1.0.7 2789 | es-errors: 1.3.0 2790 | is-data-view: 1.0.1 2791 | 2792 | data-view-byte-offset@1.0.0: 2793 | dependencies: 2794 | call-bind: 1.0.7 2795 | es-errors: 1.3.0 2796 | is-data-view: 1.0.1 2797 | 2798 | debug@4.3.6: 2799 | dependencies: 2800 | ms: 2.1.2 2801 | 2802 | decimal.js@10.4.3: {} 2803 | 2804 | deep-eql@5.0.2: {} 2805 | 2806 | deep-is@0.1.4: {} 2807 | 2808 | define-data-property@1.1.4: 2809 | dependencies: 2810 | es-define-property: 1.0.0 2811 | es-errors: 1.3.0 2812 | gopd: 1.0.1 2813 | 2814 | define-properties@1.2.1: 2815 | dependencies: 2816 | define-data-property: 1.1.4 2817 | has-property-descriptors: 1.0.2 2818 | object-keys: 1.1.1 2819 | 2820 | delayed-stream@1.0.0: {} 2821 | 2822 | dir-glob@3.0.1: 2823 | dependencies: 2824 | path-type: 4.0.0 2825 | 2826 | doctrine@3.0.0: 2827 | dependencies: 2828 | esutils: 2.0.3 2829 | 2830 | eastasianwidth@0.2.0: {} 2831 | 2832 | emoji-regex@8.0.0: {} 2833 | 2834 | emoji-regex@9.2.2: {} 2835 | 2836 | entities@4.5.0: {} 2837 | 2838 | entities@5.0.0: {} 2839 | 2840 | es-abstract@1.23.3: 2841 | dependencies: 2842 | array-buffer-byte-length: 1.0.1 2843 | arraybuffer.prototype.slice: 1.0.3 2844 | available-typed-arrays: 1.0.7 2845 | call-bind: 1.0.7 2846 | data-view-buffer: 1.0.1 2847 | data-view-byte-length: 1.0.1 2848 | data-view-byte-offset: 1.0.0 2849 | es-define-property: 1.0.0 2850 | es-errors: 1.3.0 2851 | es-object-atoms: 1.0.0 2852 | es-set-tostringtag: 2.0.3 2853 | es-to-primitive: 1.2.1 2854 | function.prototype.name: 1.1.6 2855 | get-intrinsic: 1.2.4 2856 | get-symbol-description: 1.0.2 2857 | globalthis: 1.0.4 2858 | gopd: 1.0.1 2859 | has-property-descriptors: 1.0.2 2860 | has-proto: 1.0.3 2861 | has-symbols: 1.0.3 2862 | hasown: 2.0.2 2863 | internal-slot: 1.0.7 2864 | is-array-buffer: 3.0.4 2865 | is-callable: 1.2.7 2866 | is-data-view: 1.0.1 2867 | is-negative-zero: 2.0.3 2868 | is-regex: 1.1.4 2869 | is-shared-array-buffer: 1.0.3 2870 | is-string: 1.0.7 2871 | is-typed-array: 1.1.13 2872 | is-weakref: 1.0.2 2873 | object-inspect: 1.13.2 2874 | object-keys: 1.1.1 2875 | object.assign: 4.1.5 2876 | regexp.prototype.flags: 1.5.2 2877 | safe-array-concat: 1.1.2 2878 | safe-regex-test: 1.0.3 2879 | string.prototype.trim: 1.2.9 2880 | string.prototype.trimend: 1.0.8 2881 | string.prototype.trimstart: 1.0.8 2882 | typed-array-buffer: 1.0.2 2883 | typed-array-byte-length: 1.0.1 2884 | typed-array-byte-offset: 1.0.2 2885 | typed-array-length: 1.0.6 2886 | unbox-primitive: 1.0.2 2887 | which-typed-array: 1.1.15 2888 | 2889 | es-define-property@1.0.0: 2890 | dependencies: 2891 | get-intrinsic: 1.2.4 2892 | 2893 | es-errors@1.3.0: {} 2894 | 2895 | es-module-lexer@1.5.4: {} 2896 | 2897 | es-object-atoms@1.0.0: 2898 | dependencies: 2899 | es-errors: 1.3.0 2900 | 2901 | es-set-tostringtag@2.0.3: 2902 | dependencies: 2903 | get-intrinsic: 1.2.4 2904 | has-tostringtag: 1.0.2 2905 | hasown: 2.0.2 2906 | 2907 | es-shim-unscopables@1.0.2: 2908 | dependencies: 2909 | hasown: 2.0.2 2910 | 2911 | es-to-primitive@1.2.1: 2912 | dependencies: 2913 | is-callable: 1.2.7 2914 | is-date-object: 1.0.5 2915 | is-symbol: 1.0.4 2916 | 2917 | esbuild@0.21.5: 2918 | optionalDependencies: 2919 | '@esbuild/aix-ppc64': 0.21.5 2920 | '@esbuild/android-arm': 0.21.5 2921 | '@esbuild/android-arm64': 0.21.5 2922 | '@esbuild/android-x64': 0.21.5 2923 | '@esbuild/darwin-arm64': 0.21.5 2924 | '@esbuild/darwin-x64': 0.21.5 2925 | '@esbuild/freebsd-arm64': 0.21.5 2926 | '@esbuild/freebsd-x64': 0.21.5 2927 | '@esbuild/linux-arm': 0.21.5 2928 | '@esbuild/linux-arm64': 0.21.5 2929 | '@esbuild/linux-ia32': 0.21.5 2930 | '@esbuild/linux-loong64': 0.21.5 2931 | '@esbuild/linux-mips64el': 0.21.5 2932 | '@esbuild/linux-ppc64': 0.21.5 2933 | '@esbuild/linux-riscv64': 0.21.5 2934 | '@esbuild/linux-s390x': 0.21.5 2935 | '@esbuild/linux-x64': 0.21.5 2936 | '@esbuild/netbsd-x64': 0.21.5 2937 | '@esbuild/openbsd-x64': 0.21.5 2938 | '@esbuild/sunos-x64': 0.21.5 2939 | '@esbuild/win32-arm64': 0.21.5 2940 | '@esbuild/win32-ia32': 0.21.5 2941 | '@esbuild/win32-x64': 0.21.5 2942 | 2943 | esbuild@0.23.0: 2944 | optionalDependencies: 2945 | '@esbuild/aix-ppc64': 0.23.0 2946 | '@esbuild/android-arm': 0.23.0 2947 | '@esbuild/android-arm64': 0.23.0 2948 | '@esbuild/android-x64': 0.23.0 2949 | '@esbuild/darwin-arm64': 0.23.0 2950 | '@esbuild/darwin-x64': 0.23.0 2951 | '@esbuild/freebsd-arm64': 0.23.0 2952 | '@esbuild/freebsd-x64': 0.23.0 2953 | '@esbuild/linux-arm': 0.23.0 2954 | '@esbuild/linux-arm64': 0.23.0 2955 | '@esbuild/linux-ia32': 0.23.0 2956 | '@esbuild/linux-loong64': 0.23.0 2957 | '@esbuild/linux-mips64el': 0.23.0 2958 | '@esbuild/linux-ppc64': 0.23.0 2959 | '@esbuild/linux-riscv64': 0.23.0 2960 | '@esbuild/linux-s390x': 0.23.0 2961 | '@esbuild/linux-x64': 0.23.0 2962 | '@esbuild/netbsd-x64': 0.23.0 2963 | '@esbuild/openbsd-arm64': 0.23.0 2964 | '@esbuild/openbsd-x64': 0.23.0 2965 | '@esbuild/sunos-x64': 0.23.0 2966 | '@esbuild/win32-arm64': 0.23.0 2967 | '@esbuild/win32-ia32': 0.23.0 2968 | '@esbuild/win32-x64': 0.23.0 2969 | 2970 | escape-string-regexp@4.0.0: {} 2971 | 2972 | eslint-config-prettier@9.1.0(eslint@8.57.0): 2973 | dependencies: 2974 | eslint: 8.57.0 2975 | 2976 | eslint-define-config@2.1.0: {} 2977 | 2978 | eslint-gitignore@0.1.0(eslint@8.57.0): 2979 | dependencies: 2980 | array.prototype.flatmap: 1.3.2 2981 | debug: 4.3.6 2982 | eslint: 8.57.0 2983 | fast-glob: 3.3.2 2984 | transitivePeerDependencies: 2985 | - supports-color 2986 | 2987 | eslint-plugin-jsdoc@50.2.1(eslint@8.57.0): 2988 | dependencies: 2989 | '@es-joy/jsdoccomment': 0.48.0 2990 | are-docs-informative: 0.0.2 2991 | comment-parser: 1.4.1 2992 | debug: 4.3.6 2993 | escape-string-regexp: 4.0.0 2994 | eslint: 8.57.0 2995 | espree: 10.1.0 2996 | esquery: 1.6.0 2997 | parse-imports: 2.1.1 2998 | semver: 7.6.3 2999 | spdx-expression-parse: 4.0.0 3000 | synckit: 0.9.1 3001 | transitivePeerDependencies: 3002 | - supports-color 3003 | 3004 | eslint-plugin-prettier@5.2.1(eslint-config-prettier@9.1.0(eslint@8.57.0))(eslint@8.57.0)(prettier@3.3.3): 3005 | dependencies: 3006 | eslint: 8.57.0 3007 | prettier: 3.3.3 3008 | prettier-linter-helpers: 1.0.0 3009 | synckit: 0.9.1 3010 | optionalDependencies: 3011 | eslint-config-prettier: 9.1.0(eslint@8.57.0) 3012 | 3013 | eslint-plugin-spellcheck@0.0.20(eslint@8.57.0): 3014 | dependencies: 3015 | eslint: 8.57.0 3016 | globals: 13.24.0 3017 | hunspell-spellchecker: 1.0.2 3018 | lodash: 4.17.21 3019 | 3020 | eslint-scope@7.2.2: 3021 | dependencies: 3022 | esrecurse: 4.3.0 3023 | estraverse: 5.3.0 3024 | 3025 | eslint-visitor-keys@3.4.3: {} 3026 | 3027 | eslint-visitor-keys@4.0.0: {} 3028 | 3029 | eslint@8.57.0: 3030 | dependencies: 3031 | '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) 3032 | '@eslint-community/regexpp': 4.11.0 3033 | '@eslint/eslintrc': 2.1.4 3034 | '@eslint/js': 8.57.0 3035 | '@humanwhocodes/config-array': 0.11.14 3036 | '@humanwhocodes/module-importer': 1.0.1 3037 | '@nodelib/fs.walk': 1.2.8 3038 | '@ungap/structured-clone': 1.2.0 3039 | ajv: 6.12.6 3040 | chalk: 4.1.2 3041 | cross-spawn: 7.0.3 3042 | debug: 4.3.6 3043 | doctrine: 3.0.0 3044 | escape-string-regexp: 4.0.0 3045 | eslint-scope: 7.2.2 3046 | eslint-visitor-keys: 3.4.3 3047 | espree: 9.6.1 3048 | esquery: 1.6.0 3049 | esutils: 2.0.3 3050 | fast-deep-equal: 3.1.3 3051 | file-entry-cache: 6.0.1 3052 | find-up: 5.0.0 3053 | glob-parent: 6.0.2 3054 | globals: 13.24.0 3055 | graphemer: 1.4.0 3056 | ignore: 5.3.2 3057 | imurmurhash: 0.1.4 3058 | is-glob: 4.0.3 3059 | is-path-inside: 3.0.3 3060 | js-yaml: 4.1.0 3061 | json-stable-stringify-without-jsonify: 1.0.1 3062 | levn: 0.4.1 3063 | lodash.merge: 4.6.2 3064 | minimatch: 3.1.2 3065 | natural-compare: 1.4.0 3066 | optionator: 0.9.4 3067 | strip-ansi: 6.0.1 3068 | text-table: 0.2.0 3069 | transitivePeerDependencies: 3070 | - supports-color 3071 | 3072 | espree@10.1.0: 3073 | dependencies: 3074 | acorn: 8.12.1 3075 | acorn-jsx: 5.3.2(acorn@8.12.1) 3076 | eslint-visitor-keys: 4.0.0 3077 | 3078 | espree@9.6.1: 3079 | dependencies: 3080 | acorn: 8.12.1 3081 | acorn-jsx: 5.3.2(acorn@8.12.1) 3082 | eslint-visitor-keys: 3.4.3 3083 | 3084 | esquery@1.6.0: 3085 | dependencies: 3086 | estraverse: 5.3.0 3087 | 3088 | esrecurse@4.3.0: 3089 | dependencies: 3090 | estraverse: 5.3.0 3091 | 3092 | estraverse@5.3.0: {} 3093 | 3094 | estree-walker@2.0.2: {} 3095 | 3096 | estree-walker@3.0.3: 3097 | dependencies: 3098 | '@types/estree': 1.0.5 3099 | 3100 | esutils@2.0.3: {} 3101 | 3102 | execa@5.1.1: 3103 | dependencies: 3104 | cross-spawn: 7.0.3 3105 | get-stream: 6.0.1 3106 | human-signals: 2.1.0 3107 | is-stream: 2.0.1 3108 | merge-stream: 2.0.0 3109 | npm-run-path: 4.0.1 3110 | onetime: 5.1.2 3111 | signal-exit: 3.0.7 3112 | strip-final-newline: 2.0.0 3113 | 3114 | execa@8.0.1: 3115 | dependencies: 3116 | cross-spawn: 7.0.3 3117 | get-stream: 8.0.1 3118 | human-signals: 5.0.0 3119 | is-stream: 3.0.0 3120 | merge-stream: 2.0.0 3121 | npm-run-path: 5.3.0 3122 | onetime: 6.0.0 3123 | signal-exit: 4.1.0 3124 | strip-final-newline: 3.0.0 3125 | 3126 | fast-deep-equal@3.1.3: {} 3127 | 3128 | fast-diff@1.3.0: {} 3129 | 3130 | fast-glob@3.3.2: 3131 | dependencies: 3132 | '@nodelib/fs.stat': 2.0.5 3133 | '@nodelib/fs.walk': 1.2.8 3134 | glob-parent: 5.1.2 3135 | merge2: 1.4.1 3136 | micromatch: 4.0.7 3137 | 3138 | fast-json-stable-stringify@2.1.0: {} 3139 | 3140 | fast-levenshtein@2.0.6: {} 3141 | 3142 | fastq@1.17.1: 3143 | dependencies: 3144 | reusify: 1.0.4 3145 | 3146 | file-entry-cache@6.0.1: 3147 | dependencies: 3148 | flat-cache: 3.2.0 3149 | 3150 | fill-range@7.1.1: 3151 | dependencies: 3152 | to-regex-range: 5.0.1 3153 | 3154 | find-up@5.0.0: 3155 | dependencies: 3156 | locate-path: 6.0.0 3157 | path-exists: 4.0.0 3158 | 3159 | flat-cache@3.2.0: 3160 | dependencies: 3161 | flatted: 3.3.1 3162 | keyv: 4.5.4 3163 | rimraf: 3.0.2 3164 | 3165 | flatted@3.3.1: {} 3166 | 3167 | for-each@0.3.3: 3168 | dependencies: 3169 | is-callable: 1.2.7 3170 | 3171 | foreground-child@3.3.0: 3172 | dependencies: 3173 | cross-spawn: 7.0.3 3174 | signal-exit: 4.1.0 3175 | 3176 | form-data@4.0.0: 3177 | dependencies: 3178 | asynckit: 0.4.0 3179 | combined-stream: 1.0.8 3180 | mime-types: 2.1.35 3181 | 3182 | fs.realpath@1.0.0: {} 3183 | 3184 | fsevents@2.3.3: 3185 | optional: true 3186 | 3187 | function-bind@1.1.2: {} 3188 | 3189 | function.prototype.name@1.1.6: 3190 | dependencies: 3191 | call-bind: 1.0.7 3192 | define-properties: 1.2.1 3193 | es-abstract: 1.23.3 3194 | functions-have-names: 1.2.3 3195 | 3196 | functions-have-names@1.2.3: {} 3197 | 3198 | get-func-name@2.0.2: {} 3199 | 3200 | get-intrinsic@1.2.4: 3201 | dependencies: 3202 | es-errors: 1.3.0 3203 | function-bind: 1.1.2 3204 | has-proto: 1.0.3 3205 | has-symbols: 1.0.3 3206 | hasown: 2.0.2 3207 | 3208 | get-stream@6.0.1: {} 3209 | 3210 | get-stream@8.0.1: {} 3211 | 3212 | get-symbol-description@1.0.2: 3213 | dependencies: 3214 | call-bind: 1.0.7 3215 | es-errors: 1.3.0 3216 | get-intrinsic: 1.2.4 3217 | 3218 | glob-parent@5.1.2: 3219 | dependencies: 3220 | is-glob: 4.0.3 3221 | 3222 | glob-parent@6.0.2: 3223 | dependencies: 3224 | is-glob: 4.0.3 3225 | 3226 | glob@10.4.5: 3227 | dependencies: 3228 | foreground-child: 3.3.0 3229 | jackspeak: 3.4.3 3230 | minimatch: 9.0.5 3231 | minipass: 7.1.2 3232 | package-json-from-dist: 1.0.0 3233 | path-scurry: 1.11.1 3234 | 3235 | glob@11.0.0: 3236 | dependencies: 3237 | foreground-child: 3.3.0 3238 | jackspeak: 4.0.1 3239 | minimatch: 10.0.1 3240 | minipass: 7.1.2 3241 | package-json-from-dist: 1.0.0 3242 | path-scurry: 2.0.0 3243 | 3244 | glob@7.2.3: 3245 | dependencies: 3246 | fs.realpath: 1.0.0 3247 | inflight: 1.0.6 3248 | inherits: 2.0.4 3249 | minimatch: 3.1.2 3250 | once: 1.4.0 3251 | path-is-absolute: 1.0.1 3252 | 3253 | globals@13.24.0: 3254 | dependencies: 3255 | type-fest: 0.20.2 3256 | 3257 | globalthis@1.0.4: 3258 | dependencies: 3259 | define-properties: 1.2.1 3260 | gopd: 1.0.1 3261 | 3262 | globby@11.1.0: 3263 | dependencies: 3264 | array-union: 2.1.0 3265 | dir-glob: 3.0.1 3266 | fast-glob: 3.3.2 3267 | ignore: 5.3.2 3268 | merge2: 1.4.1 3269 | slash: 3.0.0 3270 | 3271 | gopd@1.0.1: 3272 | dependencies: 3273 | get-intrinsic: 1.2.4 3274 | 3275 | graphemer@1.4.0: {} 3276 | 3277 | has-bigints@1.0.2: {} 3278 | 3279 | has-flag@4.0.0: {} 3280 | 3281 | has-property-descriptors@1.0.2: 3282 | dependencies: 3283 | es-define-property: 1.0.0 3284 | 3285 | has-proto@1.0.3: {} 3286 | 3287 | has-symbols@1.0.3: {} 3288 | 3289 | has-tostringtag@1.0.2: 3290 | dependencies: 3291 | has-symbols: 1.0.3 3292 | 3293 | hasown@2.0.2: 3294 | dependencies: 3295 | function-bind: 1.1.2 3296 | 3297 | html-encoding-sniffer@4.0.0: 3298 | dependencies: 3299 | whatwg-encoding: 3.1.1 3300 | 3301 | http-proxy-agent@7.0.2: 3302 | dependencies: 3303 | agent-base: 7.1.1 3304 | debug: 4.3.6 3305 | transitivePeerDependencies: 3306 | - supports-color 3307 | 3308 | https-proxy-agent@7.0.5: 3309 | dependencies: 3310 | agent-base: 7.1.1 3311 | debug: 4.3.6 3312 | transitivePeerDependencies: 3313 | - supports-color 3314 | 3315 | human-signals@2.1.0: {} 3316 | 3317 | human-signals@5.0.0: {} 3318 | 3319 | hunspell-spellchecker@1.0.2: {} 3320 | 3321 | iconv-lite@0.6.3: 3322 | dependencies: 3323 | safer-buffer: 2.1.2 3324 | 3325 | ignore@5.3.2: {} 3326 | 3327 | import-fresh@3.3.0: 3328 | dependencies: 3329 | parent-module: 1.0.1 3330 | resolve-from: 4.0.0 3331 | 3332 | imurmurhash@0.1.4: {} 3333 | 3334 | inflight@1.0.6: 3335 | dependencies: 3336 | once: 1.4.0 3337 | wrappy: 1.0.2 3338 | 3339 | inherits@2.0.4: {} 3340 | 3341 | internal-slot@1.0.7: 3342 | dependencies: 3343 | es-errors: 1.3.0 3344 | hasown: 2.0.2 3345 | side-channel: 1.0.6 3346 | 3347 | is-array-buffer@3.0.4: 3348 | dependencies: 3349 | call-bind: 1.0.7 3350 | get-intrinsic: 1.2.4 3351 | 3352 | is-bigint@1.0.4: 3353 | dependencies: 3354 | has-bigints: 1.0.2 3355 | 3356 | is-binary-path@2.1.0: 3357 | dependencies: 3358 | binary-extensions: 2.3.0 3359 | 3360 | is-boolean-object@1.1.2: 3361 | dependencies: 3362 | call-bind: 1.0.7 3363 | has-tostringtag: 1.0.2 3364 | 3365 | is-callable@1.2.7: {} 3366 | 3367 | is-data-view@1.0.1: 3368 | dependencies: 3369 | is-typed-array: 1.1.13 3370 | 3371 | is-date-object@1.0.5: 3372 | dependencies: 3373 | has-tostringtag: 1.0.2 3374 | 3375 | is-extglob@2.1.1: {} 3376 | 3377 | is-fullwidth-code-point@3.0.0: {} 3378 | 3379 | is-glob@4.0.3: 3380 | dependencies: 3381 | is-extglob: 2.1.1 3382 | 3383 | is-negative-zero@2.0.3: {} 3384 | 3385 | is-number-object@1.0.7: 3386 | dependencies: 3387 | has-tostringtag: 1.0.2 3388 | 3389 | is-number@7.0.0: {} 3390 | 3391 | is-path-inside@3.0.3: {} 3392 | 3393 | is-potential-custom-element-name@1.0.1: {} 3394 | 3395 | is-regex@1.1.4: 3396 | dependencies: 3397 | call-bind: 1.0.7 3398 | has-tostringtag: 1.0.2 3399 | 3400 | is-shared-array-buffer@1.0.3: 3401 | dependencies: 3402 | call-bind: 1.0.7 3403 | 3404 | is-stream@2.0.1: {} 3405 | 3406 | is-stream@3.0.0: {} 3407 | 3408 | is-string@1.0.7: 3409 | dependencies: 3410 | has-tostringtag: 1.0.2 3411 | 3412 | is-symbol@1.0.4: 3413 | dependencies: 3414 | has-symbols: 1.0.3 3415 | 3416 | is-typed-array@1.1.13: 3417 | dependencies: 3418 | which-typed-array: 1.1.15 3419 | 3420 | is-weakref@1.0.2: 3421 | dependencies: 3422 | call-bind: 1.0.7 3423 | 3424 | isarray@2.0.5: {} 3425 | 3426 | isexe@2.0.0: {} 3427 | 3428 | jackspeak@3.4.3: 3429 | dependencies: 3430 | '@isaacs/cliui': 8.0.2 3431 | optionalDependencies: 3432 | '@pkgjs/parseargs': 0.11.0 3433 | 3434 | jackspeak@4.0.1: 3435 | dependencies: 3436 | '@isaacs/cliui': 8.0.2 3437 | optionalDependencies: 3438 | '@pkgjs/parseargs': 0.11.0 3439 | 3440 | joycon@3.1.1: {} 3441 | 3442 | js-yaml@4.1.0: 3443 | dependencies: 3444 | argparse: 2.0.1 3445 | 3446 | jsdoc-type-pratt-parser@4.1.0: {} 3447 | 3448 | jsdom@24.1.1: 3449 | dependencies: 3450 | cssstyle: 4.0.1 3451 | data-urls: 5.0.0 3452 | decimal.js: 10.4.3 3453 | form-data: 4.0.0 3454 | html-encoding-sniffer: 4.0.0 3455 | http-proxy-agent: 7.0.2 3456 | https-proxy-agent: 7.0.5 3457 | is-potential-custom-element-name: 1.0.1 3458 | nwsapi: 2.2.12 3459 | parse5: 7.1.2 3460 | rrweb-cssom: 0.7.1 3461 | saxes: 6.0.0 3462 | symbol-tree: 3.2.4 3463 | tough-cookie: 4.1.4 3464 | w3c-xmlserializer: 5.0.0 3465 | webidl-conversions: 7.0.0 3466 | whatwg-encoding: 3.1.1 3467 | whatwg-mimetype: 4.0.0 3468 | whatwg-url: 14.0.0 3469 | ws: 8.18.0 3470 | xml-name-validator: 5.0.0 3471 | transitivePeerDependencies: 3472 | - bufferutil 3473 | - supports-color 3474 | - utf-8-validate 3475 | 3476 | json-buffer@3.0.1: {} 3477 | 3478 | json-parse-even-better-errors@3.0.2: {} 3479 | 3480 | json-schema-traverse@0.4.1: {} 3481 | 3482 | json-stable-stringify-without-jsonify@1.0.1: {} 3483 | 3484 | keyv@4.5.4: 3485 | dependencies: 3486 | json-buffer: 3.0.1 3487 | 3488 | levn@0.4.1: 3489 | dependencies: 3490 | prelude-ls: 1.2.1 3491 | type-check: 0.4.0 3492 | 3493 | lilconfig@3.1.2: {} 3494 | 3495 | lines-and-columns@1.2.4: {} 3496 | 3497 | load-tsconfig@0.2.5: {} 3498 | 3499 | locate-path@6.0.0: 3500 | dependencies: 3501 | p-locate: 5.0.0 3502 | 3503 | lodash.merge@4.6.2: {} 3504 | 3505 | lodash.sortby@4.7.0: {} 3506 | 3507 | lodash@4.17.21: {} 3508 | 3509 | loupe@3.1.1: 3510 | dependencies: 3511 | get-func-name: 2.0.2 3512 | 3513 | lru-cache@10.4.3: {} 3514 | 3515 | lru-cache@11.0.0: {} 3516 | 3517 | magic-string@0.30.11: 3518 | dependencies: 3519 | '@jridgewell/sourcemap-codec': 1.5.0 3520 | 3521 | memorystream@0.3.1: {} 3522 | 3523 | merge-stream@2.0.0: {} 3524 | 3525 | merge2@1.4.1: {} 3526 | 3527 | micromatch@4.0.7: 3528 | dependencies: 3529 | braces: 3.0.3 3530 | picomatch: 2.3.1 3531 | 3532 | mime-db@1.52.0: {} 3533 | 3534 | mime-types@2.1.35: 3535 | dependencies: 3536 | mime-db: 1.52.0 3537 | 3538 | mimic-fn@2.1.0: {} 3539 | 3540 | mimic-fn@4.0.0: {} 3541 | 3542 | minimatch@10.0.1: 3543 | dependencies: 3544 | brace-expansion: 2.0.1 3545 | 3546 | minimatch@3.1.2: 3547 | dependencies: 3548 | brace-expansion: 1.1.11 3549 | 3550 | minimatch@9.0.5: 3551 | dependencies: 3552 | brace-expansion: 2.0.1 3553 | 3554 | minipass@7.1.2: {} 3555 | 3556 | ms@2.1.2: {} 3557 | 3558 | mz@2.7.0: 3559 | dependencies: 3560 | any-promise: 1.3.0 3561 | object-assign: 4.1.1 3562 | thenify-all: 1.6.0 3563 | 3564 | nanoid@3.3.7: {} 3565 | 3566 | natural-compare@1.4.0: {} 3567 | 3568 | normalize-path@3.0.0: {} 3569 | 3570 | npm-normalize-package-bin@3.0.1: {} 3571 | 3572 | npm-run-all2@6.2.2: 3573 | dependencies: 3574 | ansi-styles: 6.2.1 3575 | cross-spawn: 7.0.3 3576 | memorystream: 0.3.1 3577 | minimatch: 9.0.5 3578 | pidtree: 0.6.0 3579 | read-package-json-fast: 3.0.2 3580 | shell-quote: 1.8.1 3581 | 3582 | npm-run-path@4.0.1: 3583 | dependencies: 3584 | path-key: 3.1.1 3585 | 3586 | npm-run-path@5.3.0: 3587 | dependencies: 3588 | path-key: 4.0.0 3589 | 3590 | nwsapi@2.2.12: {} 3591 | 3592 | object-assign@4.1.1: {} 3593 | 3594 | object-inspect@1.13.2: {} 3595 | 3596 | object-keys@1.1.1: {} 3597 | 3598 | object.assign@4.1.5: 3599 | dependencies: 3600 | call-bind: 1.0.7 3601 | define-properties: 1.2.1 3602 | has-symbols: 1.0.3 3603 | object-keys: 1.1.1 3604 | 3605 | once@1.4.0: 3606 | dependencies: 3607 | wrappy: 1.0.2 3608 | 3609 | onetime@5.1.2: 3610 | dependencies: 3611 | mimic-fn: 2.1.0 3612 | 3613 | onetime@6.0.0: 3614 | dependencies: 3615 | mimic-fn: 4.0.0 3616 | 3617 | optionator@0.9.4: 3618 | dependencies: 3619 | deep-is: 0.1.4 3620 | fast-levenshtein: 2.0.6 3621 | levn: 0.4.1 3622 | prelude-ls: 1.2.1 3623 | type-check: 0.4.0 3624 | word-wrap: 1.2.5 3625 | 3626 | p-limit@3.1.0: 3627 | dependencies: 3628 | yocto-queue: 0.1.0 3629 | 3630 | p-locate@5.0.0: 3631 | dependencies: 3632 | p-limit: 3.1.0 3633 | 3634 | package-json-from-dist@1.0.0: {} 3635 | 3636 | parent-module@1.0.1: 3637 | dependencies: 3638 | callsites: 3.1.0 3639 | 3640 | parse-imports@2.1.1: 3641 | dependencies: 3642 | es-module-lexer: 1.5.4 3643 | slashes: 3.0.12 3644 | 3645 | parse5@7.1.2: 3646 | dependencies: 3647 | entities: 4.5.0 3648 | 3649 | path-exists@4.0.0: {} 3650 | 3651 | path-is-absolute@1.0.1: {} 3652 | 3653 | path-key@3.1.1: {} 3654 | 3655 | path-key@4.0.0: {} 3656 | 3657 | path-scurry@1.11.1: 3658 | dependencies: 3659 | lru-cache: 10.4.3 3660 | minipass: 7.1.2 3661 | 3662 | path-scurry@2.0.0: 3663 | dependencies: 3664 | lru-cache: 11.0.0 3665 | minipass: 7.1.2 3666 | 3667 | path-type@4.0.0: {} 3668 | 3669 | pathe@1.1.2: {} 3670 | 3671 | pathval@2.0.0: {} 3672 | 3673 | picocolors@1.0.1: {} 3674 | 3675 | picomatch@2.3.1: {} 3676 | 3677 | pidtree@0.6.0: {} 3678 | 3679 | pirates@4.0.6: {} 3680 | 3681 | possible-typed-array-names@1.0.0: {} 3682 | 3683 | postcss-load-config@6.0.1(postcss@8.4.41): 3684 | dependencies: 3685 | lilconfig: 3.1.2 3686 | optionalDependencies: 3687 | postcss: 8.4.41 3688 | 3689 | postcss@8.4.41: 3690 | dependencies: 3691 | nanoid: 3.3.7 3692 | picocolors: 1.0.1 3693 | source-map-js: 1.2.0 3694 | 3695 | prelude-ls@1.2.1: {} 3696 | 3697 | prettier-linter-helpers@1.0.0: 3698 | dependencies: 3699 | fast-diff: 1.3.0 3700 | 3701 | prettier-plugin-organize-imports@4.0.0(prettier@3.3.3)(typescript@5.5.4): 3702 | dependencies: 3703 | prettier: 3.3.3 3704 | typescript: 5.5.4 3705 | 3706 | prettier@3.3.3: {} 3707 | 3708 | psl@1.9.0: {} 3709 | 3710 | punycode@2.3.1: {} 3711 | 3712 | querystringify@2.2.0: {} 3713 | 3714 | queue-microtask@1.2.3: {} 3715 | 3716 | read-package-json-fast@3.0.2: 3717 | dependencies: 3718 | json-parse-even-better-errors: 3.0.2 3719 | npm-normalize-package-bin: 3.0.1 3720 | 3721 | readdirp@3.6.0: 3722 | dependencies: 3723 | picomatch: 2.3.1 3724 | 3725 | regexp.prototype.flags@1.5.2: 3726 | dependencies: 3727 | call-bind: 1.0.7 3728 | define-properties: 1.2.1 3729 | es-errors: 1.3.0 3730 | set-function-name: 2.0.2 3731 | 3732 | requires-port@1.0.0: {} 3733 | 3734 | resolve-from@4.0.0: {} 3735 | 3736 | resolve-from@5.0.0: {} 3737 | 3738 | reusify@1.0.4: {} 3739 | 3740 | rimraf@3.0.2: 3741 | dependencies: 3742 | glob: 7.2.3 3743 | 3744 | rimraf@6.0.1: 3745 | dependencies: 3746 | glob: 11.0.0 3747 | package-json-from-dist: 1.0.0 3748 | 3749 | rollup@4.20.0: 3750 | dependencies: 3751 | '@types/estree': 1.0.5 3752 | optionalDependencies: 3753 | '@rollup/rollup-android-arm-eabi': 4.20.0 3754 | '@rollup/rollup-android-arm64': 4.20.0 3755 | '@rollup/rollup-darwin-arm64': 4.20.0 3756 | '@rollup/rollup-darwin-x64': 4.20.0 3757 | '@rollup/rollup-linux-arm-gnueabihf': 4.20.0 3758 | '@rollup/rollup-linux-arm-musleabihf': 4.20.0 3759 | '@rollup/rollup-linux-arm64-gnu': 4.20.0 3760 | '@rollup/rollup-linux-arm64-musl': 4.20.0 3761 | '@rollup/rollup-linux-powerpc64le-gnu': 4.20.0 3762 | '@rollup/rollup-linux-riscv64-gnu': 4.20.0 3763 | '@rollup/rollup-linux-s390x-gnu': 4.20.0 3764 | '@rollup/rollup-linux-x64-gnu': 4.20.0 3765 | '@rollup/rollup-linux-x64-musl': 4.20.0 3766 | '@rollup/rollup-win32-arm64-msvc': 4.20.0 3767 | '@rollup/rollup-win32-ia32-msvc': 4.20.0 3768 | '@rollup/rollup-win32-x64-msvc': 4.20.0 3769 | fsevents: 2.3.3 3770 | 3771 | rrweb-cssom@0.6.0: {} 3772 | 3773 | rrweb-cssom@0.7.1: {} 3774 | 3775 | run-parallel@1.2.0: 3776 | dependencies: 3777 | queue-microtask: 1.2.3 3778 | 3779 | safe-array-concat@1.1.2: 3780 | dependencies: 3781 | call-bind: 1.0.7 3782 | get-intrinsic: 1.2.4 3783 | has-symbols: 1.0.3 3784 | isarray: 2.0.5 3785 | 3786 | safe-regex-test@1.0.3: 3787 | dependencies: 3788 | call-bind: 1.0.7 3789 | es-errors: 1.3.0 3790 | is-regex: 1.1.4 3791 | 3792 | safer-buffer@2.1.2: {} 3793 | 3794 | saxes@6.0.0: 3795 | dependencies: 3796 | xmlchars: 2.2.0 3797 | 3798 | semver@7.6.3: {} 3799 | 3800 | set-function-length@1.2.2: 3801 | dependencies: 3802 | define-data-property: 1.1.4 3803 | es-errors: 1.3.0 3804 | function-bind: 1.1.2 3805 | get-intrinsic: 1.2.4 3806 | gopd: 1.0.1 3807 | has-property-descriptors: 1.0.2 3808 | 3809 | set-function-name@2.0.2: 3810 | dependencies: 3811 | define-data-property: 1.1.4 3812 | es-errors: 1.3.0 3813 | functions-have-names: 1.2.3 3814 | has-property-descriptors: 1.0.2 3815 | 3816 | shebang-command@2.0.0: 3817 | dependencies: 3818 | shebang-regex: 3.0.0 3819 | 3820 | shebang-regex@3.0.0: {} 3821 | 3822 | shell-quote@1.8.1: {} 3823 | 3824 | side-channel@1.0.6: 3825 | dependencies: 3826 | call-bind: 1.0.7 3827 | es-errors: 1.3.0 3828 | get-intrinsic: 1.2.4 3829 | object-inspect: 1.13.2 3830 | 3831 | siginfo@2.0.0: {} 3832 | 3833 | signal-exit@3.0.7: {} 3834 | 3835 | signal-exit@4.1.0: {} 3836 | 3837 | slash@3.0.0: {} 3838 | 3839 | slashes@3.0.12: {} 3840 | 3841 | source-map-js@1.2.0: {} 3842 | 3843 | source-map@0.8.0-beta.0: 3844 | dependencies: 3845 | whatwg-url: 7.1.0 3846 | 3847 | spdx-exceptions@2.5.0: {} 3848 | 3849 | spdx-expression-parse@4.0.0: 3850 | dependencies: 3851 | spdx-exceptions: 2.5.0 3852 | spdx-license-ids: 3.0.18 3853 | 3854 | spdx-license-ids@3.0.18: {} 3855 | 3856 | stackback@0.0.2: {} 3857 | 3858 | std-env@3.7.0: {} 3859 | 3860 | string-width@4.2.3: 3861 | dependencies: 3862 | emoji-regex: 8.0.0 3863 | is-fullwidth-code-point: 3.0.0 3864 | strip-ansi: 6.0.1 3865 | 3866 | string-width@5.1.2: 3867 | dependencies: 3868 | eastasianwidth: 0.2.0 3869 | emoji-regex: 9.2.2 3870 | strip-ansi: 7.1.0 3871 | 3872 | string.prototype.trim@1.2.9: 3873 | dependencies: 3874 | call-bind: 1.0.7 3875 | define-properties: 1.2.1 3876 | es-abstract: 1.23.3 3877 | es-object-atoms: 1.0.0 3878 | 3879 | string.prototype.trimend@1.0.8: 3880 | dependencies: 3881 | call-bind: 1.0.7 3882 | define-properties: 1.2.1 3883 | es-object-atoms: 1.0.0 3884 | 3885 | string.prototype.trimstart@1.0.8: 3886 | dependencies: 3887 | call-bind: 1.0.7 3888 | define-properties: 1.2.1 3889 | es-object-atoms: 1.0.0 3890 | 3891 | strip-ansi@6.0.1: 3892 | dependencies: 3893 | ansi-regex: 5.0.1 3894 | 3895 | strip-ansi@7.1.0: 3896 | dependencies: 3897 | ansi-regex: 6.0.1 3898 | 3899 | strip-final-newline@2.0.0: {} 3900 | 3901 | strip-final-newline@3.0.0: {} 3902 | 3903 | strip-json-comments@3.1.1: {} 3904 | 3905 | sucrase@3.35.0: 3906 | dependencies: 3907 | '@jridgewell/gen-mapping': 0.3.5 3908 | commander: 4.1.1 3909 | glob: 10.4.5 3910 | lines-and-columns: 1.2.4 3911 | mz: 2.7.0 3912 | pirates: 4.0.6 3913 | ts-interface-checker: 0.1.13 3914 | 3915 | supports-color@7.2.0: 3916 | dependencies: 3917 | has-flag: 4.0.0 3918 | 3919 | symbol-tree@3.2.4: {} 3920 | 3921 | synckit@0.9.1: 3922 | dependencies: 3923 | '@pkgr/core': 0.1.1 3924 | tslib: 2.6.3 3925 | 3926 | text-table@0.2.0: {} 3927 | 3928 | thenify-all@1.6.0: 3929 | dependencies: 3930 | thenify: 3.3.1 3931 | 3932 | thenify@3.3.1: 3933 | dependencies: 3934 | any-promise: 1.3.0 3935 | 3936 | tinybench@2.9.0: {} 3937 | 3938 | tinypool@1.0.0: {} 3939 | 3940 | tinyrainbow@1.2.0: {} 3941 | 3942 | tinyspy@3.0.0: {} 3943 | 3944 | to-fast-properties@2.0.0: {} 3945 | 3946 | to-regex-range@5.0.1: 3947 | dependencies: 3948 | is-number: 7.0.0 3949 | 3950 | tough-cookie@4.1.4: 3951 | dependencies: 3952 | psl: 1.9.0 3953 | punycode: 2.3.1 3954 | universalify: 0.2.0 3955 | url-parse: 1.5.10 3956 | 3957 | tr46@1.0.1: 3958 | dependencies: 3959 | punycode: 2.3.1 3960 | 3961 | tr46@5.0.0: 3962 | dependencies: 3963 | punycode: 2.3.1 3964 | 3965 | tree-kill@1.2.2: {} 3966 | 3967 | ts-api-utils@1.3.0(typescript@5.5.4): 3968 | dependencies: 3969 | typescript: 5.5.4 3970 | 3971 | ts-interface-checker@0.1.13: {} 3972 | 3973 | tslib@2.6.3: {} 3974 | 3975 | tsup@8.2.4(postcss@8.4.41)(typescript@5.5.4): 3976 | dependencies: 3977 | bundle-require: 5.0.0(esbuild@0.23.0) 3978 | cac: 6.7.14 3979 | chokidar: 3.6.0 3980 | consola: 3.2.3 3981 | debug: 4.3.6 3982 | esbuild: 0.23.0 3983 | execa: 5.1.1 3984 | globby: 11.1.0 3985 | joycon: 3.1.1 3986 | picocolors: 1.0.1 3987 | postcss-load-config: 6.0.1(postcss@8.4.41) 3988 | resolve-from: 5.0.0 3989 | rollup: 4.20.0 3990 | source-map: 0.8.0-beta.0 3991 | sucrase: 3.35.0 3992 | tree-kill: 1.2.2 3993 | optionalDependencies: 3994 | postcss: 8.4.41 3995 | typescript: 5.5.4 3996 | transitivePeerDependencies: 3997 | - jiti 3998 | - supports-color 3999 | - tsx 4000 | - yaml 4001 | 4002 | type-check@0.4.0: 4003 | dependencies: 4004 | prelude-ls: 1.2.1 4005 | 4006 | type-fest@0.20.2: {} 4007 | 4008 | typed-array-buffer@1.0.2: 4009 | dependencies: 4010 | call-bind: 1.0.7 4011 | es-errors: 1.3.0 4012 | is-typed-array: 1.1.13 4013 | 4014 | typed-array-byte-length@1.0.1: 4015 | dependencies: 4016 | call-bind: 1.0.7 4017 | for-each: 0.3.3 4018 | gopd: 1.0.1 4019 | has-proto: 1.0.3 4020 | is-typed-array: 1.1.13 4021 | 4022 | typed-array-byte-offset@1.0.2: 4023 | dependencies: 4024 | available-typed-arrays: 1.0.7 4025 | call-bind: 1.0.7 4026 | for-each: 0.3.3 4027 | gopd: 1.0.1 4028 | has-proto: 1.0.3 4029 | is-typed-array: 1.1.13 4030 | 4031 | typed-array-length@1.0.6: 4032 | dependencies: 4033 | call-bind: 1.0.7 4034 | for-each: 0.3.3 4035 | gopd: 1.0.1 4036 | has-proto: 1.0.3 4037 | is-typed-array: 1.1.13 4038 | possible-typed-array-names: 1.0.0 4039 | 4040 | typescript@5.5.4: {} 4041 | 4042 | unbox-primitive@1.0.2: 4043 | dependencies: 4044 | call-bind: 1.0.7 4045 | has-bigints: 1.0.2 4046 | has-symbols: 1.0.3 4047 | which-boxed-primitive: 1.0.2 4048 | 4049 | undici-types@6.18.2: {} 4050 | 4051 | universalify@0.2.0: {} 4052 | 4053 | uri-js@4.4.1: 4054 | dependencies: 4055 | punycode: 2.3.1 4056 | 4057 | url-parse@1.5.10: 4058 | dependencies: 4059 | querystringify: 2.2.0 4060 | requires-port: 1.0.0 4061 | 4062 | vite-node@2.0.5(@types/node@22.3.0): 4063 | dependencies: 4064 | cac: 6.7.14 4065 | debug: 4.3.6 4066 | pathe: 1.1.2 4067 | tinyrainbow: 1.2.0 4068 | vite: 5.4.0(@types/node@22.3.0) 4069 | transitivePeerDependencies: 4070 | - '@types/node' 4071 | - less 4072 | - lightningcss 4073 | - sass 4074 | - sass-embedded 4075 | - stylus 4076 | - sugarss 4077 | - supports-color 4078 | - terser 4079 | 4080 | vite@5.4.0(@types/node@22.3.0): 4081 | dependencies: 4082 | esbuild: 0.21.5 4083 | postcss: 8.4.41 4084 | rollup: 4.20.0 4085 | optionalDependencies: 4086 | '@types/node': 22.3.0 4087 | fsevents: 2.3.3 4088 | 4089 | vitest@2.0.5(@types/node@22.3.0)(jsdom@24.1.1): 4090 | dependencies: 4091 | '@ampproject/remapping': 2.3.0 4092 | '@vitest/expect': 2.0.5 4093 | '@vitest/pretty-format': 2.0.5 4094 | '@vitest/runner': 2.0.5 4095 | '@vitest/snapshot': 2.0.5 4096 | '@vitest/spy': 2.0.5 4097 | '@vitest/utils': 2.0.5 4098 | chai: 5.1.1 4099 | debug: 4.3.6 4100 | execa: 8.0.1 4101 | magic-string: 0.30.11 4102 | pathe: 1.1.2 4103 | std-env: 3.7.0 4104 | tinybench: 2.9.0 4105 | tinypool: 1.0.0 4106 | tinyrainbow: 1.2.0 4107 | vite: 5.4.0(@types/node@22.3.0) 4108 | vite-node: 2.0.5(@types/node@22.3.0) 4109 | why-is-node-running: 2.3.0 4110 | optionalDependencies: 4111 | '@types/node': 22.3.0 4112 | jsdom: 24.1.1 4113 | transitivePeerDependencies: 4114 | - less 4115 | - lightningcss 4116 | - sass 4117 | - sass-embedded 4118 | - stylus 4119 | - sugarss 4120 | - supports-color 4121 | - terser 4122 | 4123 | vue-router@4.4.3(vue@3.4.37(typescript@5.5.4)): 4124 | dependencies: 4125 | '@vue/devtools-api': 6.6.3 4126 | vue: 3.4.37(typescript@5.5.4) 4127 | optional: true 4128 | 4129 | vue@3.4.37(typescript@5.5.4): 4130 | dependencies: 4131 | '@vue/compiler-dom': 3.4.37 4132 | '@vue/compiler-sfc': 3.4.37 4133 | '@vue/runtime-dom': 3.4.37 4134 | '@vue/server-renderer': 3.4.37(vue@3.4.37(typescript@5.5.4)) 4135 | '@vue/shared': 3.4.37 4136 | optionalDependencies: 4137 | typescript: 5.5.4 4138 | 4139 | w3c-xmlserializer@5.0.0: 4140 | dependencies: 4141 | xml-name-validator: 5.0.0 4142 | 4143 | webidl-conversions@4.0.2: {} 4144 | 4145 | webidl-conversions@7.0.0: {} 4146 | 4147 | whatwg-encoding@3.1.1: 4148 | dependencies: 4149 | iconv-lite: 0.6.3 4150 | 4151 | whatwg-mimetype@4.0.0: {} 4152 | 4153 | whatwg-url@14.0.0: 4154 | dependencies: 4155 | tr46: 5.0.0 4156 | webidl-conversions: 7.0.0 4157 | 4158 | whatwg-url@7.1.0: 4159 | dependencies: 4160 | lodash.sortby: 4.7.0 4161 | tr46: 1.0.1 4162 | webidl-conversions: 4.0.2 4163 | 4164 | which-boxed-primitive@1.0.2: 4165 | dependencies: 4166 | is-bigint: 1.0.4 4167 | is-boolean-object: 1.1.2 4168 | is-number-object: 1.0.7 4169 | is-string: 1.0.7 4170 | is-symbol: 1.0.4 4171 | 4172 | which-typed-array@1.1.15: 4173 | dependencies: 4174 | available-typed-arrays: 1.0.7 4175 | call-bind: 1.0.7 4176 | for-each: 0.3.3 4177 | gopd: 1.0.1 4178 | has-tostringtag: 1.0.2 4179 | 4180 | which@2.0.2: 4181 | dependencies: 4182 | isexe: 2.0.0 4183 | 4184 | why-is-node-running@2.3.0: 4185 | dependencies: 4186 | siginfo: 2.0.0 4187 | stackback: 0.0.2 4188 | 4189 | word-wrap@1.2.5: {} 4190 | 4191 | wrap-ansi@7.0.0: 4192 | dependencies: 4193 | ansi-styles: 4.3.0 4194 | string-width: 4.2.3 4195 | strip-ansi: 6.0.1 4196 | 4197 | wrap-ansi@8.1.0: 4198 | dependencies: 4199 | ansi-styles: 6.2.1 4200 | string-width: 5.1.2 4201 | strip-ansi: 7.1.0 4202 | 4203 | wrappy@1.0.2: {} 4204 | 4205 | ws@8.18.0: {} 4206 | 4207 | xml-name-validator@5.0.0: {} 4208 | 4209 | xmlchars@2.2.0: {} 4210 | 4211 | yocto-queue@0.1.0: {} 4212 | -------------------------------------------------------------------------------- /src/index.ts: -------------------------------------------------------------------------------- 1 | import type { 2 | GtmIdContainer, 3 | GtmQueryParams, 4 | GtmSupportOptions, 5 | LoadScriptOptions, 6 | } from '@gtm-support/core'; 7 | import { GtmSupport as GtmPlugin, loadScript } from '@gtm-support/core'; 8 | import type { App, Plugin } from 'vue'; 9 | import { getCurrentInstance, nextTick } from 'vue'; 10 | import type { 11 | ErrorTypes, 12 | NavigationFailure, 13 | RouteLocationNormalized, 14 | Router, 15 | } from 'vue-router'; 16 | 17 | // eslint-disable-next-line jsdoc/require-jsdoc 18 | type IgnoredViews = 19 | | string[] 20 | | ((to: RouteLocationNormalized, from: RouteLocationNormalized) => boolean); 21 | 22 | /** 23 | * Options passed to the plugin. 24 | */ 25 | export interface VueGtmUseOptions extends GtmSupportOptions { 26 | /** 27 | * Pass the router instance to automatically sync with router. 28 | */ 29 | vueRouter?: Router; 30 | /** 31 | * Derive additional event data after navigation. 32 | */ 33 | vueRouterAdditionalEventData?: ( 34 | to: RouteLocationNormalized, 35 | from: RouteLocationNormalized, 36 | ) => Record | Promise>; 37 | /** 38 | * Don't trigger events for specified router names. 39 | */ 40 | ignoredViews?: IgnoredViews; 41 | /** 42 | * Whether or not call `trackView` in `Vue.nextTick`. 43 | */ 44 | trackOnNextTick?: boolean; 45 | } 46 | 47 | let gtmPlugin: GtmPlugin | undefined; 48 | 49 | /** 50 | * Installation procedure. 51 | * 52 | * @param app The Vue app instance. 53 | * @param options Configuration options. 54 | */ 55 | function install(app: App, options: VueGtmUseOptions = { id: '' }): void { 56 | // Apply default configuration 57 | options = { trackOnNextTick: false, ...options }; 58 | 59 | // Add to vue prototype and also from globals 60 | gtmPlugin = new GtmPlugin(options); 61 | app.config.globalProperties.$gtm = gtmPlugin; 62 | 63 | // Check if plugin is running in a real browser or e.g. in SSG mode 64 | if (gtmPlugin.isInBrowserContext()) { 65 | // Handle vue-router if defined 66 | if (options.vueRouter) { 67 | initVueRouterGuard( 68 | app, 69 | options.vueRouter, 70 | options.ignoredViews, 71 | options.trackOnNextTick, 72 | options.vueRouterAdditionalEventData, 73 | ); 74 | } 75 | 76 | // Load GTM script when enabled 77 | if (gtmPlugin.options.enabled && gtmPlugin.options.loadScript) { 78 | if (Array.isArray(options.id)) { 79 | options.id.forEach((id: string | GtmIdContainer) => { 80 | if (typeof id === 'string') { 81 | loadScript(id, options as LoadScriptOptions); 82 | } else { 83 | const newConf: VueGtmUseOptions = { 84 | ...options, 85 | }; 86 | 87 | if (id.queryParams != null) { 88 | newConf.queryParams = { 89 | ...newConf.queryParams, 90 | ...id.queryParams, 91 | } as GtmQueryParams; 92 | } 93 | 94 | loadScript(id.id, newConf as LoadScriptOptions); 95 | } 96 | }); 97 | } else { 98 | loadScript(options.id, options as LoadScriptOptions); 99 | } 100 | } 101 | } 102 | 103 | app.provide('gtm', options); 104 | } 105 | 106 | // eslint-disable-next-line jsdoc/require-jsdoc 107 | type NavigationFailureType = 108 | | ErrorTypes.NAVIGATION_ABORTED 109 | | ErrorTypes.NAVIGATION_CANCELLED 110 | | ErrorTypes.NAVIGATION_DUPLICATED; 111 | 112 | /** 113 | * Initialize the router guard. 114 | * 115 | * @param app The Vue app instance. 116 | * @param vueRouter The Vue router instance to attach the guard. 117 | * @param ignoredViews An array of route name that will be ignored. 118 | * @param trackOnNextTick Whether or not to call `trackView` in `Vue.nextTick`. 119 | * @param deriveAdditionalEventData Callback to derive additional event data. 120 | */ 121 | function initVueRouterGuard( 122 | app: App, 123 | vueRouter: Exclude, 124 | ignoredViews: VueGtmUseOptions['ignoredViews'] = [], 125 | trackOnNextTick: VueGtmUseOptions['trackOnNextTick'], 126 | deriveAdditionalEventData: VueGtmUseOptions['vueRouterAdditionalEventData'] = () => ({}), 127 | ): void { 128 | // eslint-disable-next-line jsdoc/require-jsdoc 129 | function isNavigationFailure( 130 | failure: void | NavigationFailure | undefined, 131 | navigationFailureType: NavigationFailureType, 132 | ): boolean { 133 | if (!(failure instanceof Error)) { 134 | return false; 135 | } 136 | return !!(failure.type & navigationFailureType); 137 | } 138 | 139 | vueRouter.afterEach(async (to, from, failure) => { 140 | // Ignore some routes 141 | if ( 142 | typeof to.name !== 'string' || 143 | (Array.isArray(ignoredViews) && ignoredViews.includes(to.name)) || 144 | (typeof ignoredViews === 'function' && ignoredViews(to, from)) 145 | ) { 146 | return; 147 | } 148 | 149 | // Dispatch vue event using meta gtm value if defined otherwise fallback to route name 150 | const name: string = 151 | to.meta && typeof to.meta.gtm === 'string' && !!to.meta.gtm 152 | ? to.meta.gtm 153 | : to.name; 154 | 155 | if (isNavigationFailure(failure, 4 /* NAVIGATION_ABORTED */)) { 156 | if (gtmPlugin?.debugEnabled()) { 157 | console.log( 158 | `[VueGtm]: '${name}' not tracked due to navigation aborted`, 159 | ); 160 | } 161 | } else if (isNavigationFailure(failure, 8 /* NAVIGATION_CANCELLED */)) { 162 | if (gtmPlugin?.debugEnabled()) { 163 | console.log( 164 | `[VueGtm]: '${name}' not tracked due to navigation cancelled`, 165 | ); 166 | } 167 | } 168 | 169 | const additionalEventData: Record = { 170 | ...(await deriveAdditionalEventData(to, from)), 171 | ...(to.meta?.gtmAdditionalEventData as Record), 172 | }; 173 | const baseUrl: string = vueRouter.options?.history?.base ?? ''; 174 | let fullUrl: string = baseUrl; 175 | if (!fullUrl.endsWith('/')) { 176 | fullUrl += '/'; 177 | } 178 | fullUrl += to.fullPath.startsWith('/') 179 | ? to.fullPath.substring(1) 180 | : to.fullPath; 181 | 182 | if (trackOnNextTick) { 183 | void nextTick(() => { 184 | gtmPlugin?.trackView(name, fullUrl, additionalEventData); 185 | }); 186 | } else { 187 | gtmPlugin?.trackView(name, fullUrl, additionalEventData); 188 | } 189 | }); 190 | } 191 | 192 | /** 193 | * Create the Vue GTM instance. 194 | * 195 | * @param options Options. 196 | * @returns The Vue GTM plugin instance. 197 | */ 198 | export function createGtm(options: VueGtmUseOptions): VueGtmPlugin { 199 | return { install: (app: App) => install(app, options) }; 200 | } 201 | 202 | declare module 'vue' { 203 | // eslint-disable-next-line jsdoc/require-jsdoc 204 | export interface ComponentCustomProperties { 205 | /** 206 | * The Vue GTM Plugin instance. 207 | */ 208 | $gtm: GtmPlugin; 209 | } 210 | } 211 | 212 | /** 213 | * Vue GTM Plugin. 214 | */ 215 | export type VueGtmPlugin = Plugin; 216 | 217 | const _default: VueGtmPlugin = { install }; 218 | 219 | export { 220 | assertIsGtmId, 221 | GtmSupport, 222 | hasScript, 223 | loadScript, 224 | } from '@gtm-support/core'; 225 | export type { 226 | DataLayerObject, 227 | GtmIdContainer, 228 | GtmQueryParams, 229 | GtmSupportOptions, 230 | LoadScriptOptions, 231 | TrackEventOptions, 232 | } from '@gtm-support/core'; 233 | export { GtmPlugin }; 234 | export default _default; 235 | 236 | /** 237 | * Returns GTM plugin instance to be used via Composition API inside setup method. 238 | * 239 | * @returns The Vue GTM instance if the it was installed, otherwise `undefined`. 240 | */ 241 | export function useGtm(): GtmPlugin | undefined { 242 | return ( 243 | getCurrentInstance()?.appContext?.app?.config?.globalProperties?.$gtm ?? 244 | gtmPlugin 245 | ); 246 | } 247 | -------------------------------------------------------------------------------- /tests/index.test.ts: -------------------------------------------------------------------------------- 1 | import { afterEach, describe, expect, test } from 'vitest'; 2 | import type { App } from 'vue'; 3 | import VueGtm, { createGtm, useGtm } from '../src/index'; 4 | import { 5 | appendAppDivToBody, 6 | createAppWithComponent, 7 | resetDataLayer, 8 | resetHtml, 9 | } from './vue-helper'; 10 | 11 | describe('Default', () => { 12 | afterEach(() => { 13 | resetHtml(); 14 | resetDataLayer(); 15 | }); 16 | 17 | test('should expose Vue plugin', () => { 18 | expect(VueGtm).toBeDefined(); 19 | expect(VueGtm.install).toBeDefined(); 20 | expect(VueGtm.install).toBeInstanceOf(Function); 21 | }); 22 | 23 | test('should throw Error if GTM-ID is invalid', () => { 24 | const validGtmId: string = 'GTM-X'; 25 | const invalidGtmIds: string[] = ['GTM-x', 'a', 'gtm-a', 'Error: ', 'Error']; 26 | const fakeVueInstance: App = null as unknown as App; 27 | for (const invalidGtmId of invalidGtmIds) { 28 | const suggestion: string = String(invalidGtmId) 29 | .toUpperCase() 30 | .replace(/.*-|[^0-9A-Z]/g, ''); 31 | 32 | const expectedErrorMessage: string = `'${invalidGtmId}' is not a valid GTM-ID (/^(GTM|G)-[0-9A-Z]+$/). Did you mean 'GTM-${suggestion}' or 'G-${suggestion}'?`; 33 | 34 | expect(() => { 35 | VueGtm.install?.(fakeVueInstance, { id: invalidGtmId }); 36 | }).toThrowError(new Error(expectedErrorMessage)); 37 | expect(() => { 38 | VueGtm.install?.(fakeVueInstance, { id: [invalidGtmId] }); 39 | }).toThrowError(new Error(expectedErrorMessage)); 40 | expect(() => { 41 | VueGtm.install?.(fakeVueInstance, { id: [validGtmId, invalidGtmId] }); 42 | }).toThrowError(new Error(expectedErrorMessage)); 43 | expect(() => { 44 | VueGtm.install?.(fakeVueInstance, { id: [{ id: invalidGtmId }] }); 45 | }).toThrowError(new Error(expectedErrorMessage)); 46 | expect(() => { 47 | VueGtm.install?.(fakeVueInstance, { 48 | id: [{ id: validGtmId }, { id: invalidGtmId }], 49 | }); 50 | }).toThrowError(new Error(expectedErrorMessage)); 51 | } 52 | }); 53 | 54 | test('should expose useGtm function', () => { 55 | expect(useGtm).toBeInstanceOf(Function); 56 | 57 | // If the plugin was not used, it returns undefined 58 | expect(useGtm()).toBeUndefined(); 59 | 60 | appendAppDivToBody(); 61 | const { app } = createAppWithComponent(); 62 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 63 | 64 | expect(useGtm()).toBeDefined(); 65 | expect(useGtm()).toStrictEqual(app.config.globalProperties.$gtm); 66 | }); 67 | }); 68 | -------------------------------------------------------------------------------- /tests/plugin.test.ts: -------------------------------------------------------------------------------- 1 | import { describe, expect, test } from 'vitest'; 2 | import { GtmPlugin as VueGtmPlugin } from '../src/index'; 3 | 4 | describe('Plugin', () => { 5 | test('should apply default options', () => { 6 | const instance: VueGtmPlugin = new VueGtmPlugin({ id: 'GTM-DEMO' }); 7 | expect(instance.options).toEqual({ 8 | compatibility: false, 9 | dataLayerName: 'dataLayer', 10 | debug: false, 11 | defer: false, 12 | enabled: true, 13 | loadScript: true, 14 | }); 15 | }); 16 | 17 | test('should apply id when passed as string', () => { 18 | const instance: VueGtmPlugin = new VueGtmPlugin({ id: 'GTM-DEMO' }); 19 | expect(instance.id).toEqual('GTM-DEMO'); 20 | }); 21 | 22 | test('should apply id when passed as array', () => { 23 | const instance: VueGtmPlugin = new VueGtmPlugin({ 24 | id: ['GTM-DEMO1', 'GTM-DEMO2'], 25 | }); 26 | expect(instance.id).toEqual(['GTM-DEMO1', 'GTM-DEMO2']); 27 | }); 28 | 29 | test('should apply id when passed as container array', () => { 30 | const instance: VueGtmPlugin = new VueGtmPlugin({ 31 | id: [{ id: 'GTM-DEMO1' }, { id: 'GTM-DEMO2' }], 32 | }); 33 | expect(instance.id).toEqual([{ id: 'GTM-DEMO1' }, { id: 'GTM-DEMO2' }]); 34 | }); 35 | 36 | test("should have `isInBrowserContext` defined and it's overridable", () => { 37 | const instance: VueGtmPlugin = new VueGtmPlugin({ id: 'GTM-DEMO' }); 38 | expect(instance.isInBrowserContext).toBeDefined(); 39 | expect(instance.isInBrowserContext).toBeInstanceOf(Function); 40 | expect(instance.isInBrowserContext()).toBeTruthy(); 41 | 42 | instance.isInBrowserContext = () => false; 43 | expect(instance.isInBrowserContext()).toBeFalsy(); 44 | }); 45 | }); 46 | -------------------------------------------------------------------------------- /tests/ssg-mode.test.ts: -------------------------------------------------------------------------------- 1 | /** 2 | * @vitest-environment node 3 | */ 4 | 5 | import { describe, expect, test } from 'vitest'; 6 | import { createGtm, useGtm } from '../src/index'; 7 | import { createAppWithComponent } from './vue-helper'; 8 | 9 | describe('SSG Mode', () => { 10 | test('should expose useGtm function but not trigger loadScript() due to Node env', () => { 11 | const { app } = createAppWithComponent(); 12 | app.use(createGtm({ id: 'GTM-DEMO' })); 13 | 14 | expect(useGtm()).toBeDefined(); 15 | expect(useGtm()).toStrictEqual(app.config.globalProperties.$gtm); 16 | }); 17 | }); 18 | -------------------------------------------------------------------------------- /tests/vue-helper.ts: -------------------------------------------------------------------------------- 1 | import type { App } from 'vue'; 2 | import { createApp, defineComponent } from 'vue'; 3 | import type { RouteRecordRaw, Router } from 'vue-router'; 4 | import { createMemoryHistory, createRouter } from 'vue-router'; 5 | 6 | export function appendAppDivToBody(): void { 7 | const appDiv: HTMLDivElement = document.createElement('div'); 8 | appDiv.id = 'app'; 9 | document.body.appendChild(appDiv); 10 | } 11 | 12 | // eslint-disable-next-line @typescript-eslint/explicit-function-return-type 13 | export function createAppWithComponent() { 14 | // eslint-disable-next-line @typescript-eslint/typedef 15 | const appComponent = defineComponent({ 16 | name: 'App', 17 | render() { 18 | return null; 19 | }, 20 | }); 21 | const app: App = createApp(appComponent); 22 | return { app, component: appComponent }; 23 | } 24 | 25 | // eslint-disable-next-line @typescript-eslint/explicit-function-return-type 26 | export function createAppWithRouter(routes: RouteRecordRaw[]) { 27 | const router: Router = createRouter({ 28 | history: createMemoryHistory(), 29 | routes, 30 | }); 31 | // eslint-disable-next-line @typescript-eslint/typedef 32 | const appComponent = defineComponent({ 33 | name: 'App', 34 | render() { 35 | return null; 36 | }, 37 | }); 38 | const app: App = createApp(appComponent); 39 | app.use(router); 40 | return { app, router }; 41 | } 42 | 43 | export function resetHtml(): void { 44 | const html: HTMLHtmlElement = document.getElementsByTagName( 45 | 'html', 46 | )[0] as HTMLHtmlElement; 47 | html.innerHTML = ''; 48 | } 49 | 50 | export function resetDataLayer(): void { 51 | delete window['dataLayer']; 52 | } 53 | -------------------------------------------------------------------------------- /tests/vue-use.test.ts: -------------------------------------------------------------------------------- 1 | import { afterEach, describe, expect, test } from 'vitest'; 2 | import type { DataLayerObject, GtmPlugin as VueGtmPlugin } from '../src/index'; 3 | import { createGtm } from '../src/index'; 4 | import { 5 | appendAppDivToBody, 6 | createAppWithComponent, 7 | createAppWithRouter, 8 | resetDataLayer, 9 | resetHtml, 10 | } from './vue-helper'; 11 | 12 | describe('Vue.use', () => { 13 | afterEach(() => { 14 | resetHtml(); 15 | resetDataLayer(); 16 | }); 17 | 18 | test('should append google tag manager script to DOM', () => { 19 | appendAppDivToBody(); 20 | const { app } = createAppWithComponent(); 21 | 22 | expect(window['dataLayer']).toBeUndefined(); 23 | expect(document.scripts.length).toBe(0); 24 | 25 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 26 | 27 | expect(window['dataLayer']).toBeDefined(); 28 | expect(document.scripts.length).toBe(1); 29 | expect(document.scripts.item(0)).toBeDefined(); 30 | expect(document.scripts.item(0)?.src).toBe( 31 | 'https://www.googletagmanager.com/gtm.js?id=GTM-DEMO', 32 | ); 33 | }); 34 | 35 | test('should append multiple google tag manager scripts to DOM', () => { 36 | appendAppDivToBody(); 37 | const { app } = createAppWithComponent(); 38 | 39 | expect(window['dataLayer']).toBeUndefined(); 40 | expect(document.scripts.length).toBe(0); 41 | 42 | app 43 | .use( 44 | createGtm({ 45 | id: [ 46 | { 47 | id: 'GTM-DEMO', 48 | queryParams: { 49 | gtm_auth: 'abc123', 50 | gtm_preview: 'env-1', 51 | gtm_cookies_win: 'x', 52 | }, 53 | }, 54 | { 55 | id: 'GTM-DEMO2', 56 | queryParams: { 57 | gtm_auth: 'abc234', 58 | gtm_preview: 'env-2', 59 | gtm_cookies_win: 'x', 60 | }, 61 | }, 62 | ], 63 | }), 64 | ) 65 | .mount('#app'); 66 | 67 | expect(window['dataLayer']).toBeDefined(); 68 | expect(document.scripts.length).toBe(2); 69 | expect(document.scripts.item(0)).toBeDefined(); 70 | expect(document.scripts.item(0)?.src).toBe( 71 | 'https://www.googletagmanager.com/gtm.js?id=GTM-DEMO>m_auth=abc123>m_preview=env-1>m_cookies_win=x', 72 | ); 73 | expect(document.scripts.item(1)?.src).toBe( 74 | 'https://www.googletagmanager.com/gtm.js?id=GTM-DEMO2>m_auth=abc234>m_preview=env-2>m_cookies_win=x', 75 | ); 76 | }); 77 | 78 | test('should not append google tag manager script to DOM if disabled', () => { 79 | appendAppDivToBody(); 80 | const { app } = createAppWithComponent(); 81 | 82 | expect(window['dataLayer']).toBeUndefined(); 83 | expect(document.scripts.length).toBe(0); 84 | 85 | app.use(createGtm({ id: 'GTM-DEMO', enabled: false })).mount('#app'); 86 | 87 | expect(window['dataLayer']).toBeUndefined(); 88 | expect(document.scripts.length).toBe(0); 89 | }); 90 | 91 | test('should append google tag manager script to DOM after lazy enable', () => { 92 | appendAppDivToBody(); 93 | const { app } = createAppWithComponent(); 94 | 95 | expect(window['dataLayer']).toBeUndefined(); 96 | expect(document.scripts.length).toBe(0); 97 | 98 | app.use(createGtm({ id: 'GTM-DEMO', enabled: false })).mount('#app'); 99 | 100 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 101 | expect(gtmPlugin).toBeDefined(); 102 | 103 | gtmPlugin.enable(true); 104 | 105 | expect(window['dataLayer']).toBeDefined(); 106 | expect(document.scripts.length).toBe(1); 107 | expect(document.scripts.item(0)).toBeDefined(); 108 | expect(document.scripts.item(0)?.src).toBe( 109 | 'https://www.googletagmanager.com/gtm.js?id=GTM-DEMO&l=dataLayer', 110 | ); 111 | }); 112 | 113 | describe('Check src.nonce', () => { 114 | afterEach(() => { 115 | resetHtml(); 116 | }); 117 | 118 | test('should not set src.nonce by default', () => { 119 | appendAppDivToBody(); 120 | const { app } = createAppWithComponent(); 121 | 122 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 123 | 124 | expect(document.scripts.length).toBe(1); 125 | expect(document.scripts.item(0)).toBeDefined(); 126 | expect(document.scripts.item(0)?.nonce).toBe(''); 127 | }); 128 | 129 | test('should set src.nonce if configured', () => { 130 | appendAppDivToBody(); 131 | const { app } = createAppWithComponent(); 132 | 133 | const nonce: string = '2726c7f26c'; 134 | 135 | app.use(createGtm({ id: 'GTM-DEMO', nonce })).mount('#app'); 136 | 137 | expect(document.scripts.length).toBe(1); 138 | expect(document.scripts.item(0)).toBeDefined(); 139 | expect(document.scripts.item(0)?.nonce).toBe(nonce); 140 | }); 141 | 142 | test('should set src.nonce to empty', () => { 143 | appendAppDivToBody(); 144 | const { app } = createAppWithComponent(); 145 | 146 | app.use(createGtm({ id: 'GTM-DEMO', nonce: '' })).mount('#app'); 147 | 148 | expect(document.scripts.length).toBe(1); 149 | expect(document.scripts.item(0)).toBeDefined(); 150 | expect(document.scripts.item(0)?.nonce).toBe(''); 151 | }); 152 | }); 153 | 154 | test('should expose enable and enabled function', () => { 155 | appendAppDivToBody(); 156 | const { app } = createAppWithComponent(); 157 | app.use(createGtm({ id: 'GTM-DEMO', enabled: false })).mount('#app'); 158 | 159 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 160 | 161 | expect(gtmPlugin.enable).toBeInstanceOf(Function); 162 | expect(gtmPlugin.enabled).toBeInstanceOf(Function); 163 | 164 | expect(gtmPlugin.enabled()).toBeFalsy(); 165 | 166 | gtmPlugin.enable(true); 167 | expect(gtmPlugin.enabled()).toBeTruthy(); 168 | 169 | gtmPlugin.enable(false); 170 | expect(gtmPlugin.enabled()).toBeFalsy(); 171 | 172 | gtmPlugin.enable(true); 173 | expect(gtmPlugin.enabled()).toBeTruthy(); 174 | }); 175 | 176 | test('should expose debug functions', () => { 177 | appendAppDivToBody(); 178 | const { app } = createAppWithComponent(); 179 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 180 | 181 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 182 | 183 | expect(gtmPlugin.debug).toBeInstanceOf(Function); 184 | expect(gtmPlugin.debugEnabled).toBeInstanceOf(Function); 185 | 186 | expect(gtmPlugin.debugEnabled()).toBeFalsy(); 187 | 188 | gtmPlugin.debug(true); 189 | expect(gtmPlugin.debugEnabled()).toBeTruthy(); 190 | 191 | gtmPlugin.debug(false); 192 | expect(gtmPlugin.debugEnabled()).toBeFalsy(); 193 | }); 194 | 195 | test('should expose dataLayer function', () => { 196 | appendAppDivToBody(); 197 | const { app } = createAppWithComponent(); 198 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 199 | 200 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 201 | 202 | expect(gtmPlugin.dataLayer).toBeInstanceOf(Function); 203 | expect(gtmPlugin.dataLayer()).toEqual(window['dataLayer']); 204 | 205 | gtmPlugin.enable(false); 206 | expect(gtmPlugin.dataLayer()).toBeFalsy(); 207 | 208 | gtmPlugin.enable(true); 209 | expect(gtmPlugin.dataLayer()).toEqual(window['dataLayer']); 210 | }); 211 | 212 | test('should allow dataLayer to be called with no event, without Typescript error', () => { 213 | appendAppDivToBody(); 214 | const { app } = createAppWithComponent(); 215 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 216 | 217 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 218 | 219 | const dataLayer: DataLayerObject[] | false = gtmPlugin.dataLayer(); 220 | if (dataLayer) { 221 | dataLayer.push({ 'user-id': 'user-123' }); 222 | } 223 | 224 | expect(window['dataLayer']).toEqual( 225 | expect.arrayContaining([ 226 | expect.objectContaining({ 227 | 'user-id': 'user-123', 228 | }), 229 | ]), 230 | ); 231 | }); 232 | 233 | test('should expose trackView function', () => { 234 | appendAppDivToBody(); 235 | const { app } = createAppWithComponent(); 236 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 237 | 238 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 239 | 240 | expect(gtmPlugin.trackView).toBeInstanceOf(Function); 241 | 242 | gtmPlugin.trackView('ScreenName', 'Path'); 243 | 244 | expect(window['dataLayer']).toEqual( 245 | expect.arrayContaining([ 246 | expect.objectContaining({ 247 | event: 'gtm.js', 248 | 'gtm.start': expect.any(Number), 249 | }), 250 | expect.objectContaining({ 251 | 'content-name': 'Path', 252 | 'content-view-name': 'ScreenName', 253 | event: 'content-view', 254 | }), 255 | ]), 256 | ); 257 | }); 258 | 259 | test('should expose trackEvent function', () => { 260 | appendAppDivToBody(); 261 | const { app } = createAppWithComponent(); 262 | app.use(createGtm({ id: 'GTM-DEMO' })).mount('#app'); 263 | 264 | const gtmPlugin: VueGtmPlugin = app.config.globalProperties.$gtm; 265 | 266 | expect(gtmPlugin.trackEvent).toBeInstanceOf(Function); 267 | 268 | gtmPlugin.trackEvent(); 269 | 270 | expect(window['dataLayer']).toEqual( 271 | expect.arrayContaining([ 272 | expect.objectContaining({ 273 | event: 'gtm.js', 274 | 'gtm.start': expect.any(Number), 275 | }), 276 | expect.objectContaining({ 277 | action: null, 278 | event: 'interaction', 279 | 'interaction-type': false, 280 | target: null, 281 | 'target-properties': null, 282 | value: null, 283 | }), 284 | ]), 285 | ); 286 | }); 287 | 288 | describe('router', () => { 289 | test('should add additional event after navigation', async () => { 290 | appendAppDivToBody(); 291 | const { app, router } = createAppWithRouter([ 292 | { 293 | name: 'Home', 294 | path: '/', 295 | component: { 296 | template: '
Home
', 297 | }, 298 | meta: { 299 | gtmAdditionalEventData: { 300 | someProperty: 'home-value', 301 | }, 302 | }, 303 | }, 304 | { 305 | name: 'About', 306 | path: '/about', 307 | component: { 308 | template: '
About
', 309 | }, 310 | meta: { 311 | gtmAdditionalEventData: { 312 | someProperty: 'about-value', 313 | }, 314 | }, 315 | }, 316 | ]); 317 | app 318 | .use( 319 | createGtm({ 320 | id: 'GTM-DEMO', 321 | vueRouter: router, 322 | }), 323 | ) 324 | .mount('#app'); 325 | await router.push('/about'); 326 | expect(window['dataLayer']).toEqual( 327 | expect.arrayContaining([ 328 | expect.objectContaining({ 329 | event: 'gtm.js', 330 | 'gtm.start': expect.any(Number), 331 | }), 332 | expect.objectContaining({ 333 | 'content-name': '/', 334 | 'content-view-name': 'Home', 335 | event: 'content-view', 336 | someProperty: 'home-value', 337 | }), 338 | expect.objectContaining({ 339 | 'content-name': '/about', 340 | 'content-view-name': 'About', 341 | event: 'content-view', 342 | someProperty: 'about-value', 343 | }), 344 | ]), 345 | ); 346 | }); 347 | 348 | test('should derive additional event data after navigation', async () => { 349 | appendAppDivToBody(); 350 | const { app, router } = createAppWithRouter([ 351 | { 352 | name: 'Home', 353 | path: '/', 354 | component: { 355 | template: '
Home
', 356 | }, 357 | }, 358 | { 359 | name: 'About', 360 | path: '/about', 361 | component: { 362 | template: '
About
', 363 | }, 364 | }, 365 | ]); 366 | app 367 | .use( 368 | createGtm({ 369 | id: 'GTM-DEMO', 370 | vueRouter: router, 371 | vueRouterAdditionalEventData: () => ({ 372 | someProperty: 'some-value', 373 | }), 374 | }), 375 | ) 376 | .mount('#app'); 377 | await router.push('/about'); 378 | expect(window['dataLayer']).toEqual( 379 | expect.arrayContaining([ 380 | expect.objectContaining({ 381 | event: 'gtm.js', 382 | 'gtm.start': expect.any(Number), 383 | }), 384 | expect.objectContaining({ 385 | 'content-name': '/', 386 | 'content-view-name': 'Home', 387 | event: 'content-view', 388 | someProperty: 'some-value', 389 | }), 390 | expect.objectContaining({ 391 | 'content-name': '/about', 392 | 'content-view-name': 'About', 393 | event: 'content-view', 394 | someProperty: 'some-value', 395 | }), 396 | ]), 397 | ); 398 | }); 399 | 400 | test('should asynchronously derive additional event data after navigation', async () => { 401 | appendAppDivToBody(); 402 | const { app, router } = createAppWithRouter([ 403 | { 404 | name: 'Home', 405 | path: '/', 406 | component: { 407 | template: '
Home
', 408 | }, 409 | }, 410 | { 411 | name: 'About', 412 | path: '/about', 413 | component: { 414 | template: '
About
', 415 | }, 416 | }, 417 | ]); 418 | app 419 | .use( 420 | createGtm({ 421 | id: 'GTM-DEMO', 422 | vueRouter: router, 423 | vueRouterAdditionalEventData: () => 424 | Promise.resolve({ 425 | someProperty: 'some-async-value', 426 | }), 427 | }), 428 | ) 429 | .mount('#app'); 430 | await router.push('/about'); 431 | // flush pending promises 432 | await new Promise((resolve) => setTimeout(resolve, 0)); 433 | expect(window['dataLayer']).toEqual( 434 | expect.arrayContaining([ 435 | expect.objectContaining({ 436 | event: 'gtm.js', 437 | 'gtm.start': expect.any(Number), 438 | }), 439 | expect.objectContaining({ 440 | 'content-name': '/', 441 | 'content-view-name': 'Home', 442 | event: 'content-view', 443 | someProperty: 'some-async-value', 444 | }), 445 | expect.objectContaining({ 446 | 'content-name': '/about', 447 | 'content-view-name': 'About', 448 | event: 'content-view', 449 | someProperty: 'some-async-value', 450 | }), 451 | ]), 452 | ); 453 | }); 454 | 455 | test('should override derived additional event data with route level event data', async () => { 456 | appendAppDivToBody(); 457 | const { app, router } = createAppWithRouter([ 458 | { 459 | name: 'Home', 460 | path: '/', 461 | component: { 462 | template: '
Home
', 463 | }, 464 | meta: { 465 | gtmAdditionalEventData: { 466 | someProperty: 'home-value', 467 | }, 468 | }, 469 | }, 470 | { 471 | name: 'About', 472 | path: '/about', 473 | component: { 474 | template: '
About
', 475 | }, 476 | meta: { 477 | gtmAdditionalEventData: { 478 | someProperty: 'about-value', 479 | }, 480 | }, 481 | }, 482 | ]); 483 | app 484 | .use( 485 | createGtm({ 486 | id: 'GTM-DEMO', 487 | vueRouter: router, 488 | vueRouterAdditionalEventData: () => ({ 489 | someProperty: 'some-value', 490 | }), 491 | }), 492 | ) 493 | .mount('#app'); 494 | await router.push('/about'); 495 | expect(window['dataLayer']).toEqual( 496 | expect.arrayContaining([ 497 | expect.objectContaining({ 498 | event: 'gtm.js', 499 | 'gtm.start': expect.any(Number), 500 | }), 501 | expect.objectContaining({ 502 | 'content-name': '/', 503 | 'content-view-name': 'Home', 504 | event: 'content-view', 505 | someProperty: 'home-value', 506 | }), 507 | expect.objectContaining({ 508 | 'content-name': '/about', 509 | 'content-view-name': 'About', 510 | event: 'content-view', 511 | someProperty: 'about-value', 512 | }), 513 | ]), 514 | ); 515 | }); 516 | }); 517 | }); 518 | -------------------------------------------------------------------------------- /tsconfig.json: -------------------------------------------------------------------------------- 1 | { 2 | "compilerOptions": { 3 | "target": "ES2022", 4 | "module": "ESNext", 5 | "moduleResolution": "Node", 6 | "strict": true, 7 | "noEmit": true, 8 | "esModuleInterop": true, 9 | "declaration": true, 10 | "stripInternal": true, 11 | "noImplicitOverride": true, 12 | "noUncheckedIndexedAccess": true, 13 | "removeComments": true, 14 | "rootDir": ".", 15 | "baseUrl": "./", 16 | "skipLibCheck": true 17 | }, 18 | "exclude": ["node_modules", "dist"] 19 | } 20 | -------------------------------------------------------------------------------- /tsup.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'tsup'; 2 | 3 | export default defineConfig({ 4 | entry: ['src/index.ts'], 5 | outDir: 'dist', 6 | clean: true, 7 | target: ['es2022', 'node20'], 8 | minify: true, 9 | sourcemap: true, 10 | format: 'esm', 11 | dts: true, 12 | }); 13 | -------------------------------------------------------------------------------- /vitest.config.ts: -------------------------------------------------------------------------------- 1 | import { defineConfig } from 'vitest/config'; 2 | 3 | export default defineConfig({ 4 | test: { 5 | environment: 'jsdom', 6 | }, 7 | }); 8 | --------------------------------------------------------------------------------