diff --git a/.circleci/config.yml b/.circleci/config.yml deleted file mode 100644 index 4994277..0000000 --- a/.circleci/config.yml +++ /dev/null @@ -1,108 +0,0 @@ -version: 2 - -jobs: - dependencies: - docker: - - image: circleci/node:12.18.1 - steps: - - checkout - - restore_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - - run: - command: yarn - - save_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - paths: - - ./node_modules - test: - docker: - - image: circleci/node:12.18.1 - steps: - - checkout - - restore_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - - run: - command: yarn test - - lint: - docker: - - image: circleci/node:12.18.1 - steps: - - checkout - - restore_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - - run: - command: yarn lint - - code_climate: - docker: - - image: circleci/node:12.18.1 - steps: - - checkout - - restore_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - - run: - command: | - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter - chmod +x ./cc-test-reporter - ./cc-test-reporter before-build - yarn coverage:lcov - ./cc-test-reporter after-build - - build: - docker: - - image: circleci/node:12.18.1 - steps: - - checkout - - restore_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - - run: - command: yarn build - - semantic_release: - docker: - - image: circleci/node:12.18.1 - steps: - - checkout - - restore_cache: - key: v1-yarn-{{ checksum "yarn.lock" }} - - run: yarn semantic-release - - -workflows: - version: 2 - workflow: - jobs: - - dependencies - - - lint: - requires: - - dependencies - - - test: - requires: - - dependencies - - - code_climate: - filters: - branches: - only: - - master - requires: - - test - - lint - - - build: - requires: - - test - - lint - - code_climate - - - semantic_release: - filters: - branches: - only: - - master - requires: - - build - diff --git a/.codeclimate.yml b/.codeclimate.yml deleted file mode 100644 index 986e516..0000000 --- a/.codeclimate.yml +++ /dev/null @@ -1,4 +0,0 @@ -exclude_patterns: -- "__tests__" -- "!src/**/*" -- "webpack.config.js" \ No newline at end of file diff --git a/.eslintignore b/.eslintignore deleted file mode 100644 index 94e91bb..0000000 --- a/.eslintignore +++ /dev/null @@ -1,3 +0,0 @@ -dist/ -coverage/ -*.ts \ No newline at end of file diff --git a/.eslintrc.js b/.eslintrc.js deleted file mode 100644 index 9938069..0000000 --- a/.eslintrc.js +++ /dev/null @@ -1,29 +0,0 @@ -module.exports = { - root: true, - env: { - node: true, - "jest/globals": true - }, - plugins: [ - "jest" - ], - extends: [ - "plugin:vue/recommended", - "eslint:recommended", - "prettier/vue", - "plugin:prettier/recommended" - ], - rules: { - "jest/no-disabled-tests": "warn", - "jest/no-focused-tests": "error", - "jest/no-identical-title": "error", - "jest/prefer-to-have-length": "warn", - "jest/valid-expect": "error", - "vue/component-name-in-template-casing": ["error", "PascalCase"], - "no-console": process.env.NODE_ENV === "production" ? "error" : "off", - "no-debugger": process.env.NODE_ENV === "production" ? "error" : "off" - }, - parserOptions: { - parser: "babel-eslint" - } -}; \ No newline at end of file diff --git a/.github/dependabot.yml b/.github/dependabot.yml deleted file mode 100644 index 59a994c..0000000 --- a/.github/dependabot.yml +++ /dev/null @@ -1,45 +0,0 @@ -version: 2 -updates: -- package-ecosystem: npm - directory: "/" - schedule: - interval: monthly - time: "04:00" - open-pull-requests-limit: 10 - ignore: - - dependency-name: semantic-release - versions: - - "> 15.14.0" - - dependency-name: "@vue/test-utils" - versions: - - 1.1.2 - - 1.1.3 - - dependency-name: "@babel/core" - versions: - - 7.12.10 - - 7.13.8 - - dependency-name: eslint-plugin-jest - versions: - - 24.1.5 - - dependency-name: eslint-plugin-vue - versions: - - 7.4.0 - - 7.5.0 - - 7.6.0 - - dependency-name: "@babel/preset-env" - versions: - - 7.12.11 - - 7.13.8 - - dependency-name: vue-router - versions: - - 3.5.1 - - dependency-name: commitizen - versions: - - 4.2.3 - - dependency-name: eslint-plugin-prettier - versions: - - 3.3.0 - - 3.3.1 - - dependency-name: prettier - versions: - - 2.2.1 diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml new file mode 100644 index 0000000..c8f9a81 --- /dev/null +++ b/.github/workflows/deployment.yml @@ -0,0 +1,41 @@ +name: CI + +on: + push: + branches: + - main + pull_request: + branches: + - main + +jobs: + build: + runs-on: ubuntu-latest + + strategy: + matrix: + node-version: [23.5.0] + + steps: + - uses: actions/checkout@v2 + + - name: Use Node.js ${{ matrix.node-version }} + uses: actions/setup-node@v3 + with: + node-version: ${{ matrix.node-version }} + cache: 'pnpm' + + - name: Install dependencies + run: pnpm install + + # Linting + - name: Run ESLint + run: pnpm exec eslint . + + # Testing + - name: Run tests + run: pnpm test + + # Building + - name: Build the project + run: pnpm build \ No newline at end of file diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..34b3712 --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,8 @@ +{ + "editor.defaultFormatter": "biomejs.biome", + "editor.formatOnSave": true, + "editor.codeActionsOnSave": { + "quickfix.biome": "explicit", + "source.organizeImports.biome": "explicit" + } +} diff --git a/__old_config_bili b/__old_config_bili new file mode 100644 index 0000000..22ceecf --- /dev/null +++ b/__old_config_bili @@ -0,0 +1,26 @@ +// import path from "path"; +// import { name } from "./package.json"; + +// const isDev = process.env.NODE_ENV === "dev"; + +// const config = { +// input: { +// [name]: "./src/index.js", +// }, +// externals: ["vue"], +// plugins: { +// alias: { +// resolve: [".js"], +// entries: [ +// { find: /^@\/(.*)/, replacement: path.resolve(__dirname, "src/$1") }, +// ], +// }, +// }, +// output: { +// dir: "./dist/", +// format: isDev ? ["esm"] : ["esm", "cjs", "umd", "umd-min"], +// moduleName: "VueGtag", +// }, +// }; + +// export default config; diff --git a/_config.yml b/_config.yml deleted file mode 100644 index c419263..0000000 --- a/_config.yml +++ /dev/null @@ -1 +0,0 @@ -theme: jekyll-theme-cayman \ No newline at end of file diff --git a/babel.config.js b/babel.config.js deleted file mode 100644 index 9a46be1..0000000 --- a/babel.config.js +++ /dev/null @@ -1,3 +0,0 @@ -module.exports = { - presets: ["@babel/preset-env"], -}; diff --git a/bili.config.js b/bili.config.js deleted file mode 100644 index 339e669..0000000 --- a/bili.config.js +++ /dev/null @@ -1,26 +0,0 @@ -import path from "path"; -import { name } from "./package.json"; - -const isDev = process.env.NODE_ENV === "dev"; - -const config = { - input: { - [name]: "./src/index.js", - }, - externals: ["vue"], - plugins: { - alias: { - resolve: [".js"], - entries: [ - { find: /^@\/(.*)/, replacement: path.resolve(__dirname, "src/$1") }, - ], - }, - }, - output: { - dir: "./dist/", - format: isDev ? ["esm"] : ["esm", "cjs", "umd", "umd-min"], - moduleName: "VueGtag", - }, -}; - -export default config; diff --git a/biome.json b/biome.json new file mode 100644 index 0000000..79e8487 --- /dev/null +++ b/biome.json @@ -0,0 +1,31 @@ +{ + "$schema": "https://biomejs.dev/schemas/1.9.4/schema.json", + "vcs": { + "enabled": false, + "clientKind": "git", + "useIgnoreFile": false + }, + "files": { + "ignoreUnknown": false, + "ignore": ["dist"] + }, + "formatter": { + "enabled": true, + "indentStyle": "tab" + }, + "organizeImports": { + "enabled": true + }, + "linter": { + "enabled": true, + "ignore": ["vue-gtag.d.ts"], + "rules": { + "recommended": true + } + }, + "javascript": { + "formatter": { + "quoteStyle": "double" + } + } +} diff --git a/jest/init.js b/jest/init.js deleted file mode 100644 index 32651f5..0000000 --- a/jest/init.js +++ /dev/null @@ -1,2 +0,0 @@ -import "core-js/stable"; -import "regenerator-runtime/runtime"; diff --git a/package.json b/package.json index bb02a62..75dcd47 100644 --- a/package.json +++ b/package.json @@ -1,114 +1,58 @@ { - "name": "vue-gtag", - "description": "Global Site Tag (gtag.js) plugin for Vue", - "version": "0.0.0-development", - "author": { - "name": "Matteo Gabriele", - "email": "m.gabriele.dev@gmail.com" - }, - "license": "MIT", - "repository": { - "type": "git", - "url": "https://github.com/MatteoGabriele/vue-gtag" - }, - "release": { - "branches": ["master", "next"] - }, - "scripts": { - "commit": "git-cz", - "clean": "del-cli dist", - "prebuild": "yarn clean", - "build": "bili", - "dev": "NODE_ENV=dev bili --watch", - "lint": "eslint --ext .js .", - "lint:fix": "yarn lint --fix", - "test": "TZ=UTC jest", - "test:ci": "TZ=UTC jest --coverage --bail --runInBand --verbose=false", - "coverage": "TZ=UTC jest --coverage", - "coverage:html": "TZ=UTC jest --coverage --coverageReporters=html", - "coverage:text": "TZ=UTC jest --coverage --coverageReporters=text", - "coverage:lcov": "TZ=UTC jest --coverage --coverageReporters=lcov", - "prepublishOnly": "TZ=UTC yarn lint && yarn test && yarn build", - "semantic-release": "semantic-release" - }, - "config": { - "commitizen": { - "path": "cz-conventional-changelog" - } - }, - "jest": { - "setupFiles": [ - "/jest/init.js" - ], - "testMatch": [ - "**/test/**/*.spec.js" - ], - "setupFilesAfterEnv": [ - "jest-extended" - ], - "collectCoverage": true, - "coverageReporters": [ - "json", - "html" - ], - "moduleNameMapper": { - "@/(.*)$": "/src/$1" - } - }, - "keywords": [ - "google", - "google analytics", - "tracking", - "google tracking", - "vue-analytics", - "vue-gtag", - "gtag", - "gtag.js", - "global site tag", - "vue", - "vuejs" - ], - "main": "./dist/vue-gtag.js", - "module": "./dist/vue-gtag.esm.js", - "unpkg": "./dist/vue-gtag.umd.js", - "jsdelivr": "./dist/vue-gtag.umd.js", - "types": "vue-gtag.d.ts", - "files": [ - "dist", - "vue-gtag.d.ts" - ], - "bugs": { - "url": "https://github.com/MatteoGabriele/vue-gtag/issues" - }, - "homepage": "https://github.com/MatteoGabriele/vue-gtag#readme", - "peerDependencies": { - "vue": "^3.0.0" - }, - "devDependencies": { - "@babel/core": "^7.7.2", - "@babel/preset-env": "^7.7.1", - "babel-eslint": "^10.0.3", - "bili": "^5.0.5", - "commitizen": "^4.0.3", - "core-js": "^3.10.1", - "cz-conventional-changelog": "^3.0.2", - "del-cli": "^3.0.0", - "eslint": "^6.6.0", - "eslint-config-prettier": "^6.7.0", - "eslint-plugin-jest": "^24.3.6", - "eslint-plugin-prettier": "^3.1.1", - "eslint-plugin-vue": "^7.9.0", - "flush-promises": "^1.0.2", - "jest": "^26.0.1", - "jest-extended": "^0.11.5", - "mockdate": "^3.0.5", - "prettier": "^2.0.5", - "regenerator-runtime": "^0.13.7", - "rollup-plugin-alias": "^2.2.0", - "rollup-plugin-resolve": "^0.0.1-predev.1", - "semantic-release": "^15.13.31", - "vue": "^3.0.0", - "vue-router": "^4.0.6", - "vue-template-compiler": "^2.6.10" - } + "name": "vue-gtag", + "description": "Global Site Tag (gtag.js) plugin for Vue", + "type": "module", + "version": "2.0.1", + "author": { + "name": "Matteo Gabriele", + "email": "m.gabriele.dev@gmail.com" + }, + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/MatteoGabriele/vue-gtag" + }, + "scripts": { + "dev": "vite", + "build": "vite build", + "lint": "biome check", + "test": "vitest run", + "prepublishOnly": "yarn lint && yarn test && yarn build" + }, + "keywords": [ + "google", + "google analytics", + "tracking", + "google tracking", + "vue-analytics", + "vue-gtag", + "gtag", + "gtag.js", + "global site tag", + "vue", + "vuejs" + ], + "main": "./dist/vue-gtag.cjs.js", + "module": "./dist/vue-gtag.es.js", + "unpkg": "./dist/vue-gtag.umd.js", + "jsdelivr": "./dist/vue-gtag.umd.js", + "types": "vue-gtag.d.ts", + "files": ["dist", "vue-gtag.d.ts"], + "bugs": { + "url": "https://github.com/MatteoGabriele/vue-gtag/issues" + }, + "homepage": "https://github.com/MatteoGabriele/vue-gtag#readme", + "peerDependencies": { + "vue": "^3.0.0" + }, + "devDependencies": { + "@biomejs/biome": "1.9.4", + "flush-promises": "^1.0.2", + "jsdom": "^26.0.0", + "mockdate": "^3.0.5", + "vite": "^6.1.0", + "vitest": "^3.0.5", + "vue": "^3.0.0", + "vue-router": "^4.5.0" + } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml new file mode 100644 index 0000000..a20dcc9 --- /dev/null +++ b/pnpm-lock.yaml @@ -0,0 +1,1580 @@ +lockfileVersion: '9.0' + +settings: + autoInstallPeers: true + excludeLinksFromLockfile: false + +importers: + + .: + devDependencies: + '@biomejs/biome': + specifier: 1.9.4 + version: 1.9.4 + flush-promises: + specifier: ^1.0.2 + version: 1.0.2 + jsdom: + specifier: ^26.0.0 + version: 26.0.0 + mockdate: + specifier: ^3.0.5 + version: 3.0.5 + vite: + specifier: ^6.1.0 + version: 6.1.0(terser@5.38.1) + vitest: + specifier: ^3.0.5 + version: 3.0.5(jsdom@26.0.0)(terser@5.38.1) + vue: + specifier: ^3.0.0 + version: 3.5.13 + vue-router: + specifier: ^4.5.0 + version: 4.5.0(vue@3.5.13) + +packages: + + '@asamuzakjp/css-color@2.8.3': + resolution: {integrity: sha512-GIc76d9UI1hCvOATjZPyHFmE5qhRccp3/zGfMPapK3jBi+yocEzp6BBB0UnfRYP9NP4FANqUZYb0hnfs3TM3hw==} + + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + engines: {node: '>=6.9.0'} + + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + engines: {node: '>=6.9.0'} + + '@babel/parser@7.26.8': + resolution: {integrity: sha512-TZIQ25pkSoaKEYYaHbbxkfL36GNsQ6iFiBbeuzAkLnXayKR1yP1zFe+NxuZWWsUyvt8icPU9CCq0sgWGXR1GEw==} + engines: {node: '>=6.0.0'} + hasBin: true + + '@babel/types@7.26.8': + resolution: {integrity: sha512-eUuWapzEGWFEpHFxgEaBG8e3n6S8L3MSu0oda755rOfabWPnh0Our1AozNFVUxGFIhbKgd1ksprsoDGMinTOTA==} + engines: {node: '>=6.9.0'} + + '@biomejs/biome@1.9.4': + resolution: {integrity: sha512-1rkd7G70+o9KkTn5KLmDYXihGoTaIGO9PIIN2ZB7UJxFrWw04CZHPYiMRjYsaDvVV7hP1dYNRLxSANLaBFGpog==} + engines: {node: '>=14.21.3'} + hasBin: true + + '@biomejs/cli-darwin-arm64@1.9.4': + resolution: {integrity: sha512-bFBsPWrNvkdKrNCYeAp+xo2HecOGPAy9WyNyB/jKnnedgzl4W4Hb9ZMzYNbf8dMCGmUdSavlYHiR01QaYR58cw==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [darwin] + + '@biomejs/cli-darwin-x64@1.9.4': + resolution: {integrity: sha512-ngYBh/+bEedqkSevPVhLP4QfVPCpb+4BBe2p7Xs32dBgs7rh9nY2AIYUL6BgLw1JVXV8GlpKmb/hNiuIxfPfZg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [darwin] + + '@biomejs/cli-linux-arm64-musl@1.9.4': + resolution: {integrity: sha512-v665Ct9WCRjGa8+kTr0CzApU0+XXtRgwmzIf1SeKSGAv+2scAlW6JR5PMFo6FzqqZ64Po79cKODKf3/AAmECqA==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-arm64@1.9.4': + resolution: {integrity: sha512-fJIW0+LYujdjUgJJuwesP4EjIBl/N/TcOX3IvIHJQNsAqvV2CHIogsmA94BPG6jZATS4Hi+xv4SkBBQSt1N4/g==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [linux] + + '@biomejs/cli-linux-x64-musl@1.9.4': + resolution: {integrity: sha512-gEhi/jSBhZ2m6wjV530Yy8+fNqG8PAinM3oV7CyO+6c3CEh16Eizm21uHVsyVBEB6RIM8JHIl6AGYCv6Q6Q9Tg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-linux-x64@1.9.4': + resolution: {integrity: sha512-lRCJv/Vi3Vlwmbd6K+oQ0KhLHMAysN8lXoCI7XeHlxaajk06u7G+UsFSO01NAs5iYuWKmVZjmiOzJ0OJmGsMwg==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [linux] + + '@biomejs/cli-win32-arm64@1.9.4': + resolution: {integrity: sha512-tlbhLk+WXZmgwoIKwHIHEBZUwxml7bRJgk0X2sPyNR3S93cdRq6XulAZRQJ17FYGGzWne0fgrXBKpl7l4M87Hg==} + engines: {node: '>=14.21.3'} + cpu: [arm64] + os: [win32] + + '@biomejs/cli-win32-x64@1.9.4': + resolution: {integrity: sha512-8Y5wMhVIPaWe6jw2H+KlEm4wP/f7EW3810ZLmDlrEEy5KvBsb9ECEfu/kMWD484ijfQ8+nIi0giMgu9g1UAuuA==} + engines: {node: '>=14.21.3'} + cpu: [x64] + os: [win32] + + '@csstools/color-helpers@5.0.1': + resolution: {integrity: sha512-MKtmkA0BX87PKaO1NFRTFH+UnkgnmySQOvNxJubsadusqPEC2aJ9MOQiMceZJJ6oitUl/i0L6u0M1IrmAOmgBA==} + engines: {node: '>=18'} + + '@csstools/css-calc@2.1.1': + resolution: {integrity: sha512-rL7kaUnTkL9K+Cvo2pnCieqNpTKgQzy5f+N+5Iuko9HAoasP+xgprVh7KN/MaJVvVL1l0EzQq2MoqBHKSrDrag==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-color-parser@3.0.7': + resolution: {integrity: sha512-nkMp2mTICw32uE5NN+EsJ4f5N+IGFeCFu4bGpiKgb2Pq/7J/MpyLBeQ5ry4KKtRFZaYs6sTmcMYrSRIyj5DFKA==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-parser-algorithms': ^3.0.4 + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-parser-algorithms@3.0.4': + resolution: {integrity: sha512-Up7rBoV77rv29d3uKHUIVubz1BTcgyUK72IvCQAbfbMv584xHcGKCKbWh7i8hPrRJ7qU4Y8IO3IY9m+iTB7P3A==} + engines: {node: '>=18'} + peerDependencies: + '@csstools/css-tokenizer': ^3.0.3 + + '@csstools/css-tokenizer@3.0.3': + resolution: {integrity: sha512-UJnjoFsmxfKUdNYdWgOB0mWUypuLvAfQPH1+pyvRJs6euowbFkFC6P13w1l8mJyi3vxYMxc9kld5jZEGRQs6bw==} + engines: {node: '>=18'} + + '@esbuild/aix-ppc64@0.24.2': + resolution: {integrity: sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [aix] + + '@esbuild/android-arm64@0.24.2': + resolution: {integrity: sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [android] + + '@esbuild/android-arm@0.24.2': + resolution: {integrity: sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==} + engines: {node: '>=18'} + cpu: [arm] + os: [android] + + '@esbuild/android-x64@0.24.2': + resolution: {integrity: sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==} + engines: {node: '>=18'} + cpu: [x64] + os: [android] + + '@esbuild/darwin-arm64@0.24.2': + resolution: {integrity: sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==} + engines: {node: '>=18'} + cpu: [arm64] + os: [darwin] + + '@esbuild/darwin-x64@0.24.2': + resolution: {integrity: sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==} + engines: {node: '>=18'} + cpu: [x64] + os: [darwin] + + '@esbuild/freebsd-arm64@0.24.2': + resolution: {integrity: sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [freebsd] + + '@esbuild/freebsd-x64@0.24.2': + resolution: {integrity: sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [freebsd] + + '@esbuild/linux-arm64@0.24.2': + resolution: {integrity: sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==} + engines: {node: '>=18'} + cpu: [arm64] + os: [linux] + + '@esbuild/linux-arm@0.24.2': + resolution: {integrity: sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==} + engines: {node: '>=18'} + cpu: [arm] + os: [linux] + + '@esbuild/linux-ia32@0.24.2': + resolution: {integrity: sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==} + engines: {node: '>=18'} + cpu: [ia32] + os: [linux] + + '@esbuild/linux-loong64@0.24.2': + resolution: {integrity: sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==} + engines: {node: '>=18'} + cpu: [loong64] + os: [linux] + + '@esbuild/linux-mips64el@0.24.2': + resolution: {integrity: sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==} + engines: {node: '>=18'} + cpu: [mips64el] + os: [linux] + + '@esbuild/linux-ppc64@0.24.2': + resolution: {integrity: sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==} + engines: {node: '>=18'} + cpu: [ppc64] + os: [linux] + + '@esbuild/linux-riscv64@0.24.2': + resolution: {integrity: sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==} + engines: {node: '>=18'} + cpu: [riscv64] + os: [linux] + + '@esbuild/linux-s390x@0.24.2': + resolution: {integrity: sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==} + engines: {node: '>=18'} + cpu: [s390x] + os: [linux] + + '@esbuild/linux-x64@0.24.2': + resolution: {integrity: sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==} + engines: {node: '>=18'} + cpu: [x64] + os: [linux] + + '@esbuild/netbsd-arm64@0.24.2': + resolution: {integrity: sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==} + engines: {node: '>=18'} + cpu: [arm64] + os: [netbsd] + + '@esbuild/netbsd-x64@0.24.2': + resolution: {integrity: sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==} + engines: {node: '>=18'} + cpu: [x64] + os: [netbsd] + + '@esbuild/openbsd-arm64@0.24.2': + resolution: {integrity: sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==} + engines: {node: '>=18'} + cpu: [arm64] + os: [openbsd] + + '@esbuild/openbsd-x64@0.24.2': + resolution: {integrity: sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==} + engines: {node: '>=18'} + cpu: [x64] + os: [openbsd] + + '@esbuild/sunos-x64@0.24.2': + resolution: {integrity: sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==} + engines: {node: '>=18'} + cpu: [x64] + os: [sunos] + + '@esbuild/win32-arm64@0.24.2': + resolution: {integrity: sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==} + engines: {node: '>=18'} + cpu: [arm64] + os: [win32] + + '@esbuild/win32-ia32@0.24.2': + resolution: {integrity: sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==} + engines: {node: '>=18'} + cpu: [ia32] + os: [win32] + + '@esbuild/win32-x64@0.24.2': + resolution: {integrity: sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==} + engines: {node: '>=18'} + cpu: [x64] + os: [win32] + + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/source-map@0.3.6': + resolution: {integrity: sha512-1ZJTZebgqllO79ue2bm3rIGud/bOe0pP5BjSRCRxxYkEZS8STV7zN84UBbiYu7jy+eCKSnVIUgoWWE/tt+shMQ==} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} + + '@rollup/rollup-android-arm-eabi@4.34.6': + resolution: {integrity: sha512-+GcCXtOQoWuC7hhX1P00LqjjIiS/iOouHXhMdiDSnq/1DGTox4SpUvO52Xm+div6+106r+TcvOeo/cxvyEyTgg==} + cpu: [arm] + os: [android] + + '@rollup/rollup-android-arm64@4.34.6': + resolution: {integrity: sha512-E8+2qCIjciYUnCa1AiVF1BkRgqIGW9KzJeesQqVfyRITGQN+dFuoivO0hnro1DjT74wXLRZ7QF8MIbz+luGaJA==} + cpu: [arm64] + os: [android] + + '@rollup/rollup-darwin-arm64@4.34.6': + resolution: {integrity: sha512-z9Ib+OzqN3DZEjX7PDQMHEhtF+t6Mi2z/ueChQPLS/qUMKY7Ybn5A2ggFoKRNRh1q1T03YTQfBTQCJZiepESAg==} + cpu: [arm64] + os: [darwin] + + '@rollup/rollup-darwin-x64@4.34.6': + resolution: {integrity: sha512-PShKVY4u0FDAR7jskyFIYVyHEPCPnIQY8s5OcXkdU8mz3Y7eXDJPdyM/ZWjkYdR2m0izD9HHWA8sGcXn+Qrsyg==} + cpu: [x64] + os: [darwin] + + '@rollup/rollup-freebsd-arm64@4.34.6': + resolution: {integrity: sha512-YSwyOqlDAdKqs0iKuqvRHLN4SrD2TiswfoLfvYXseKbL47ht1grQpq46MSiQAx6rQEN8o8URtpXARCpqabqxGQ==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.34.6': + resolution: {integrity: sha512-HEP4CgPAY1RxXwwL5sPFv6BBM3tVeLnshF03HMhJYCNc6kvSqBgTMmsEjb72RkZBAWIqiPUyF1JpEBv5XT9wKQ==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + resolution: {integrity: sha512-88fSzjC5xeH9S2Vg3rPgXJULkHcLYMkh8faix8DX4h4TIAL65ekwuQMA/g2CXq8W+NJC43V6fUpYZNjaX3+IIg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + resolution: {integrity: sha512-wM4ztnutBqYFyvNeR7Av+reWI/enK9tDOTKNF+6Kk2Q96k9bwhDDOlnCUNRPvromlVXo04riSliMBs/Z7RteEg==} + cpu: [arm] + os: [linux] + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + resolution: {integrity: sha512-9RyprECbRa9zEjXLtvvshhw4CMrRa3K+0wcp3KME0zmBe1ILmvcVHnypZ/aIDXpRyfhSYSuN4EPdCCj5Du8FIA==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-arm64-musl@4.34.6': + resolution: {integrity: sha512-qTmklhCTyaJSB05S+iSovfo++EwnIEZxHkzv5dep4qoszUMX5Ca4WM4zAVUMbfdviLgCSQOu5oU8YoGk1s6M9Q==} + cpu: [arm64] + os: [linux] + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + resolution: {integrity: sha512-4Qmkaps9yqmpjY5pvpkfOerYgKNUGzQpFxV6rnS7c/JfYbDSU0y6WpbbredB5cCpLFGJEqYX40WUmxMkwhWCjw==} + cpu: [loong64] + os: [linux] + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + resolution: {integrity: sha512-Zsrtux3PuaxuBTX/zHdLaFmcofWGzaWW1scwLU3ZbW/X+hSsFbz9wDIp6XvnT7pzYRl9MezWqEqKy7ssmDEnuQ==} + cpu: [ppc64] + os: [linux] + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + resolution: {integrity: sha512-aK+Zp+CRM55iPrlyKiU3/zyhgzWBxLVrw2mwiQSYJRobCURb781+XstzvA8Gkjg/hbdQFuDw44aUOxVQFycrAg==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + resolution: {integrity: sha512-WoKLVrY9ogmaYPXwTH326+ErlCIgMmsoRSx6bO+l68YgJnlOXhygDYSZe/qbUJCSiCiZAQ+tKm88NcWuUXqOzw==} + cpu: [s390x] + os: [linux] + + '@rollup/rollup-linux-x64-gnu@4.34.6': + resolution: {integrity: sha512-Sht4aFvmA4ToHd2vFzwMFaQCiYm2lDFho5rPcvPBT5pCdC+GwHG6CMch4GQfmWTQ1SwRKS0dhDYb54khSrjDWw==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-linux-x64-musl@4.34.6': + resolution: {integrity: sha512-zmmpOQh8vXc2QITsnCiODCDGXFC8LMi64+/oPpPx5qz3pqv0s6x46ps4xoycfUiVZps5PFn1gksZzo4RGTKT+A==} + cpu: [x64] + os: [linux] + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + resolution: {integrity: sha512-3/q1qUsO/tLqGBaD4uXsB6coVGB3usxw3qyeVb59aArCgedSF66MPdgRStUd7vbZOsko/CgVaY5fo2vkvPLWiA==} + cpu: [arm64] + os: [win32] + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + resolution: {integrity: sha512-oLHxuyywc6efdKVTxvc0135zPrRdtYVjtVD5GUm55I3ODxhU/PwkQFD97z16Xzxa1Fz0AEe4W/2hzRtd+IfpOA==} + cpu: [ia32] + os: [win32] + + '@rollup/rollup-win32-x64-msvc@4.34.6': + resolution: {integrity: sha512-0PVwmgzZ8+TZ9oGBmdZoQVXflbvuwzN/HRclujpl4N/q3i+y0lqLw8n1bXA8ru3sApDjlmONaNAuYr38y1Kr9w==} + cpu: [x64] + os: [win32] + + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + + '@vitest/expect@3.0.5': + resolution: {integrity: sha512-nNIOqupgZ4v5jWuQx2DSlHLEs7Q4Oh/7AYwNyE+k0UQzG7tSmjPXShUikn1mpNGzYEN2jJbTvLejwShMitovBA==} + + '@vitest/mocker@3.0.5': + resolution: {integrity: sha512-CLPNBFBIE7x6aEGbIjaQAX03ZZlBMaWwAjBdMkIf/cAn6xzLTiM3zYqO/WAbieEjsAZir6tO71mzeHZoodThvw==} + peerDependencies: + msw: ^2.4.9 + vite: ^5.0.0 || ^6.0.0 + peerDependenciesMeta: + msw: + optional: true + vite: + optional: true + + '@vitest/pretty-format@3.0.5': + resolution: {integrity: sha512-CjUtdmpOcm4RVtB+up8r2vVDLR16Mgm/bYdkGFe3Yj/scRfCpbSi2W/BDSDcFK7ohw8UXvjMbOp9H4fByd/cOA==} + + '@vitest/runner@3.0.5': + resolution: {integrity: sha512-BAiZFityFexZQi2yN4OX3OkJC6scwRo8EhRB0Z5HIGGgd2q+Nq29LgHU/+ovCtd0fOfXj5ZI6pwdlUmC5bpi8A==} + + '@vitest/snapshot@3.0.5': + resolution: {integrity: sha512-GJPZYcd7v8QNUJ7vRvLDmRwl+a1fGg4T/54lZXe+UOGy47F9yUfE18hRCtXL5aHN/AONu29NGzIXSVFh9K0feA==} + + '@vitest/spy@3.0.5': + resolution: {integrity: sha512-5fOzHj0WbUNqPK6blI/8VzZdkBlQLnT25knX0r4dbZI9qoZDf3qAdjoMmDcLG5A83W6oUUFJgUd0EYBc2P5xqg==} + + '@vitest/utils@3.0.5': + resolution: {integrity: sha512-N9AX0NUoUtVwKwy21JtwzaqR5L5R5A99GAbrHfCCXK1lp593i/3AZAXhSP43wRQuxYsflrdzEfXZFo1reR1Nkg==} + + '@vue/compiler-core@3.5.13': + resolution: {integrity: sha512-oOdAkwqUfW1WqpwSYJce06wvt6HljgY3fGeM9NcVA1HaYOij3mZG9Rkysn0OHuyUAGMbEbARIpsG+LPVlBJ5/Q==} + + '@vue/compiler-dom@3.5.13': + resolution: {integrity: sha512-ZOJ46sMOKUjO3e94wPdCzQ6P1Lx/vhp2RSvfaab88Ajexs0AHeV0uasYhi99WPaogmBlRHNRuly8xV75cNTMDA==} + + '@vue/compiler-sfc@3.5.13': + resolution: {integrity: sha512-6VdaljMpD82w6c2749Zhf5T9u5uLBWKnVue6XWxprDobftnletJ8+oel7sexFfM3qIxNmVE7LSFGTpv6obNyaQ==} + + '@vue/compiler-ssr@3.5.13': + resolution: {integrity: sha512-wMH6vrYHxQl/IybKJagqbquvxpWCuVYpoUJfCqFZwa/JY1GdATAQ+TgVtgrwwMZ0D07QhA99rs/EAAWfvG6KpA==} + + '@vue/devtools-api@6.6.4': + resolution: {integrity: sha512-sGhTPMuXqZ1rVOk32RylztWkfXTRhuS7vgAKv0zjqk8gbsHkJ7xfFf+jbySxt7tWObEJwyKaHMikV/WGDiQm8g==} + + '@vue/reactivity@3.5.13': + resolution: {integrity: sha512-NaCwtw8o48B9I6L1zl2p41OHo/2Z4wqYGGIK1Khu5T7yxrn+ATOixn/Udn2m+6kZKB/J7cuT9DbWWhRxqixACg==} + + '@vue/runtime-core@3.5.13': + resolution: {integrity: sha512-Fj4YRQ3Az0WTZw1sFe+QDb0aXCerigEpw418pw1HBUKFtnQHWzwojaukAs2X/c9DQz4MQ4bsXTGlcpGxU/RCIw==} + + '@vue/runtime-dom@3.5.13': + resolution: {integrity: sha512-dLaj94s93NYLqjLiyFzVs9X6dWhTdAlEAciC3Moq7gzAc13VJUdCnjjRurNM6uTLFATRHexHCTu/Xp3eW6yoog==} + + '@vue/server-renderer@3.5.13': + resolution: {integrity: sha512-wAi4IRJV/2SAW3htkTlB+dHeRmpTiVIK1OGLWV1yeStVSebSQQOwGwIq0D3ZIoBj2C2qpgz5+vX9iEBkTdk5YA==} + peerDependencies: + vue: 3.5.13 + + '@vue/shared@3.5.13': + resolution: {integrity: sha512-/hnE/qP5ZoGpol0a5mDi45bOd7t3tjYJBjsgCsivow7D48cJeV5l05RD82lPqi7gRiphZM37rnhW1l6ZoCNNnQ==} + + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + engines: {node: '>=0.4.0'} + hasBin: true + + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + + assertion-error@2.0.1: + resolution: {integrity: sha512-Izi8RQcffqCeNVgFigKli1ssklIbpHnCYc6AknXGYoB6grJqyeby7jv12JUQgmTAnIDnbck1uxksT4dzN3PWBA==} + engines: {node: '>=12'} + + asynckit@0.4.0: + resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} + + buffer-from@1.1.2: + resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} + + cac@6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + + chai@5.1.2: + resolution: {integrity: sha512-aGtmf24DW6MLHHG5gCx4zaI3uBq3KRtxeVs0DjFH6Z0rDNbsvTxFASFvdj79pxjxZ8/5u3PIiN3IwEIQkiiuPw==} + engines: {node: '>=12'} + + check-error@2.1.1: + resolution: {integrity: sha512-OAlb+T7V4Op9OwdkjmguYRqncdlx5JiofwOAUkmTF+jNdHwzTaTs4sRAGpzLF3oOz5xAyDGrPgeIDFQmDOTiJw==} + engines: {node: '>= 16'} + + combined-stream@1.0.8: + resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} + engines: {node: '>= 0.8'} + + commander@2.20.3: + resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} + + cssstyle@4.2.1: + resolution: {integrity: sha512-9+vem03dMXG7gDmZ62uqmRiMRNtinIZ9ZyuF6BdxzfOD+FdN5hretzynkn0ReS2DO2GSw76RWHs0UmJPI2zUjw==} + engines: {node: '>=18'} + + csstype@3.1.3: + resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} + + data-urls@5.0.0: + resolution: {integrity: sha512-ZYP5VBHshaDAiVZxjbRVcFJpc+4xGgT0bK3vzy1HLN8jTO975HEbuYzZJcHoQEY5K1a0z8YayJkyVETa08eNTg==} + engines: {node: '>=18'} + + debug@4.4.0: + resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + engines: {node: '>=6.0'} + peerDependencies: + supports-color: '*' + peerDependenciesMeta: + supports-color: + optional: true + + decimal.js@10.5.0: + resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} + + deep-eql@5.0.2: + resolution: {integrity: sha512-h5k/5U50IJJFpzfL6nO9jaaumfjO/f2NjK/oYB2Djzm4p9L+3T9qWpZqZ2hAbLPuuYq9wrU08WQyBTL5GbPk5Q==} + engines: {node: '>=6'} + + delayed-stream@1.0.0: + resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} + engines: {node: '>=0.4.0'} + + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + es-module-lexer@1.6.0: + resolution: {integrity: sha512-qqnD1yMU6tk/jnaMosogGySTZP8YtUgAffA9nMN+E/rjxcfRQ6IEk7IiozUjgxKoFHBGjTLnrHB/YC45r/59EQ==} + + esbuild@0.24.2: + resolution: {integrity: sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==} + engines: {node: '>=18'} + hasBin: true + + estree-walker@2.0.2: + resolution: {integrity: sha512-Rfkk/Mp/DL7JVje3u18FxFujQlTNR2q6QfMSMB7AvCBx91NGj/ba3kCfza0f6dVDbw7YlRf/nDrn7pQrCCyQ/w==} + + estree-walker@3.0.3: + resolution: {integrity: sha512-7RUKfXgSMMkzt6ZuXmqapOurLGPPfgj6l9uRZ7lRGolvk0y2yocc35LdcxKC5PQZdn2DMqioAQ2NoWcrTKmm6g==} + + expect-type@1.1.0: + resolution: {integrity: sha512-bFi65yM+xZgk+u/KRIpekdSYkTB5W1pEf0Lt8Q8Msh7b+eQ7LXVtIB1Bkm4fvclDEL1b2CZkMhv2mOeF8tMdkA==} + engines: {node: '>=12.0.0'} + + flush-promises@1.0.2: + resolution: {integrity: sha512-G0sYfLQERwKz4+4iOZYQEZVpOt9zQrlItIxQAAYAWpfby3gbHrx0osCHz5RLl/XoXevXk0xoN4hDFky/VV9TrA==} + + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} + engines: {node: '>= 6'} + + fsevents@2.3.3: + resolution: {integrity: sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==} + engines: {node: ^8.16.0 || ^10.6.0 || >=11.0.0} + os: [darwin] + + html-encoding-sniffer@4.0.0: + resolution: {integrity: sha512-Y22oTqIU4uuPgEemfz7NDJz6OeKf12Lsu+QC+s3BVpda64lTiMYCyGwg5ki4vFxkMwQdeZDl2adZoqUgdFuTgQ==} + engines: {node: '>=18'} + + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + + is-potential-custom-element-name@1.0.1: + resolution: {integrity: sha512-bCYeRA2rVibKZd+s2625gGnGF/t7DSqDs4dP7CrLA1m7jKWz6pps0LpYLJN8Q64HtmPKJ1hrN3nzPNKFEKOUiQ==} + + jsdom@26.0.0: + resolution: {integrity: sha512-BZYDGVAIriBWTpIxYzrXjv3E/4u8+/pSG5bQdIYCbNCGOvsPkDQfTVLAIXAf9ETdCpduCVTkDe2NNZ8NIwUVzw==} + engines: {node: '>=18'} + peerDependencies: + canvas: ^3.0.0 + peerDependenciesMeta: + canvas: + optional: true + + loupe@3.1.3: + resolution: {integrity: sha512-kkIp7XSkP78ZxJEsSxW3712C6teJVoeHHwgo9zJ380de7IYyJ2ISlxojcH2pC5OFLewESmnRi/+XCDIEEVyoug==} + + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} + + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} + + mime-db@1.52.0: + resolution: {integrity: sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==} + engines: {node: '>= 0.6'} + + mime-types@2.1.35: + resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} + engines: {node: '>= 0.6'} + + mockdate@3.0.5: + resolution: {integrity: sha512-iniQP4rj1FhBdBYS/+eQv7j1tadJ9lJtdzgOpvsOHng/GbcDh2Fhdeq+ZRldrPYdXvCyfFUmFeEwEGXZB5I/AQ==} + + ms@2.1.3: + resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} + + nanoid@3.3.8: + resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} + hasBin: true + + nwsapi@2.2.16: + resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + + pathe@2.0.2: + resolution: {integrity: sha512-15Ztpk+nov8DR524R4BF7uEuzESgzUEAV4Ah7CUMNGXdE5ELuvxElxGXndBl32vMSsWa1jpNf22Z+Er3sKwq+w==} + + pathval@2.0.0: + resolution: {integrity: sha512-vE7JKRyES09KiunauX7nd2Q9/L7lhok4smP9RZTDeD4MVs72Dp2qNFVz39Nz5a0FVEW0BJR6C0DYrq6unoziZA==} + engines: {node: '>= 14.16'} + + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} + + postcss@8.5.1: + resolution: {integrity: sha512-6oz2beyjc5VMn/KV1pPw8fliQkhBXrVn1Z3TVyqZxU8kZpzEKhBdmCFqI6ZbmGtamQvQGuU1sgPTk8ZrXDD7jQ==} + engines: {node: ^10 || ^12 || >=14} + + punycode@2.3.1: + resolution: {integrity: sha512-vYt7UD1U9Wg6138shLtLOvdAu+8DsC/ilFtEVHcH+wydcSpNE20AfSOduf6MkRFahL5FY7X1oU7nKVZFtfq8Fg==} + engines: {node: '>=6'} + + rollup@4.34.6: + resolution: {integrity: sha512-wc2cBWqJgkU3Iz5oztRkQbfVkbxoz5EhnCGOrnJvnLnQ7O0WhQUYyv18qQI79O8L7DdHrrlJNeCHd4VGpnaXKQ==} + engines: {node: '>=18.0.0', npm: '>=8.0.0'} + hasBin: true + + rrweb-cssom@0.8.0: + resolution: {integrity: sha512-guoltQEx+9aMf2gDZ0s62EcV8lsXR+0w8915TC3ITdn2YueuNjdAYh/levpU9nFaoChh9RUS5ZdQMrKfVEN9tw==} + + safer-buffer@2.1.2: + resolution: {integrity: sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==} + + saxes@6.0.0: + resolution: {integrity: sha512-xAg7SOnEhrm5zI3puOOKyy1OMcMlIJZYNJY7xLBwSze0UjhPLnWfj2GF2EpT0jmzaJKIWKHLsaSSajf35bcYnA==} + engines: {node: '>=v12.22.7'} + + siginfo@2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} + + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} + engines: {node: '>=0.10.0'} + + source-map-support@0.5.21: + resolution: {integrity: sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==} + + source-map@0.6.1: + resolution: {integrity: sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==} + engines: {node: '>=0.10.0'} + + stackback@0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + + std-env@3.8.0: + resolution: {integrity: sha512-Bc3YwwCB+OzldMxOXJIIvC6cPRWr/LxOp48CdQTOkPyk/t4JWWJbrilwBd7RJzKV8QW7tJkcgAmeuLLJugl5/w==} + + symbol-tree@3.2.4: + resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} + + terser@5.38.1: + resolution: {integrity: sha512-GWANVlPM/ZfYzuPHjq0nxT+EbOEDDN3Jwhwdg1D8TU8oSkktp8w64Uq4auuGLxFSoNTRDncTq2hQHX1Ld9KHkA==} + engines: {node: '>=10'} + hasBin: true + + tinybench@2.9.0: + resolution: {integrity: sha512-0+DUvqWMValLmha6lr4kD8iAMK1HzV0/aKnCtWb9v9641TnP/MFb7Pc2bxoxQjTXAErryXVgUOfv2YqNllqGeg==} + + tinyexec@0.3.2: + resolution: {integrity: sha512-KQQR9yN7R5+OSwaK0XQoj22pwHoTlgYqmUscPYoknOoWCWfj/5/ABTMRi69FrKU5ffPVh5QcFikpWJI/P1ocHA==} + + tinypool@1.0.2: + resolution: {integrity: sha512-al6n+QEANGFOMf/dmUMsuS5/r9B06uwlyNjZZql/zv8J7ybHCgoihBNORZCY2mzUuAnomQa2JdhyHKzZxPCrFA==} + engines: {node: ^18.0.0 || >=20.0.0} + + tinyrainbow@2.0.0: + resolution: {integrity: sha512-op4nsTR47R6p0vMUUoYl/a+ljLFVtlfaXkLQmqfLR1qHma1h/ysYk4hEXZ880bf2CYgTskvTa/e196Vd5dDQXw==} + engines: {node: '>=14.0.0'} + + tinyspy@3.0.2: + resolution: {integrity: sha512-n1cw8k1k0x4pgA2+9XrOkFydTerNcJ1zWCO5Nn9scWHTD+5tp8dghT2x1uduQePZTZgd3Tupf+x9BxJjeJi77Q==} + engines: {node: '>=14.0.0'} + + tldts-core@6.1.77: + resolution: {integrity: sha512-bCaqm24FPk8OgBkM0u/SrEWJgHnhBWYqeBo6yUmcZJDCHt/IfyWBb+14CXdGi4RInMv4v7eUAin15W0DoA+Ytg==} + + tldts@6.1.77: + resolution: {integrity: sha512-lBpoWgy+kYmuXWQ83+R7LlJCnsd9YW8DGpZSHhrMl4b8Ly/1vzOie3OdtmUJDkKxcgRGOehDu5btKkty+JEe+g==} + hasBin: true + + tough-cookie@5.1.1: + resolution: {integrity: sha512-Ek7HndSVkp10hmHP9V4qZO1u+pn1RU5sI0Fw+jCU3lyvuMZcgqsNgc6CmJJZyByK4Vm/qotGRJlfgAX8q+4JiA==} + engines: {node: '>=16'} + + tr46@5.0.0: + resolution: {integrity: sha512-tk2G5R2KRwBd+ZN0zaEXpmzdKyOYksXwywulIX95MBODjSzMIuQnQ3m8JxgbhnL1LeVo7lqQKsYa1O3Htl7K5g==} + engines: {node: '>=18'} + + vite-node@3.0.5: + resolution: {integrity: sha512-02JEJl7SbtwSDJdYS537nU6l+ktdvcREfLksk/NDAqtdKWGqHl+joXzEubHROmS3E6pip+Xgu2tFezMu75jH7A==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + + vite@6.1.0: + resolution: {integrity: sha512-RjjMipCKVoR4hVfPY6GQTgveinjNuyLw+qruksLDvA5ktI1150VmcMBKmQaEWJhg/j6Uaf6dNCNA0AfdzUb/hQ==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + jiti: '>=1.21.0' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + sass-embedded: '*' + stylus: '*' + sugarss: '*' + terser: ^5.16.0 + tsx: ^4.8.1 + yaml: ^2.4.2 + peerDependenciesMeta: + '@types/node': + optional: true + jiti: + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + sass-embedded: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + tsx: + optional: true + yaml: + optional: true + + vitest@3.0.5: + resolution: {integrity: sha512-4dof+HvqONw9bvsYxtkfUp2uHsTN9bV2CZIi1pWgoFpL1Lld8LA1ka9q/ONSsoScAKG7NVGf2stJTI7XRkXb2Q==} + engines: {node: ^18.0.0 || ^20.0.0 || >=22.0.0} + hasBin: true + peerDependencies: + '@edge-runtime/vm': '*' + '@types/debug': ^4.1.12 + '@types/node': ^18.0.0 || ^20.0.0 || >=22.0.0 + '@vitest/browser': 3.0.5 + '@vitest/ui': 3.0.5 + happy-dom: '*' + jsdom: '*' + peerDependenciesMeta: + '@edge-runtime/vm': + optional: true + '@types/debug': + optional: true + '@types/node': + optional: true + '@vitest/browser': + optional: true + '@vitest/ui': + optional: true + happy-dom: + optional: true + jsdom: + optional: true + + vue-router@4.5.0: + resolution: {integrity: sha512-HDuk+PuH5monfNuY+ct49mNmkCRK4xJAV9Ts4z9UFc4rzdDnxQLyCMGGc8pKhZhHTVzfanpNwB/lwqevcBwI4w==} + peerDependencies: + vue: ^3.2.0 + + vue@3.5.13: + resolution: {integrity: sha512-wmeiSMxkZCSc+PM2w2VRsOYAZC8GdipNFRTsLSfodVqI9mbejKeXEGr8SckuLnrQPGe3oJN5c3K0vpoU9q/wCQ==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + w3c-xmlserializer@5.0.0: + resolution: {integrity: sha512-o8qghlI8NZHU1lLPrpi2+Uq7abh4GGPpYANlalzWxyWteJOCsr/P+oPBA49TOLu5FTZO4d3F9MnWJfiMo4BkmA==} + engines: {node: '>=18'} + + webidl-conversions@7.0.0: + resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==} + engines: {node: '>=12'} + + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + + whatwg-url@14.1.0: + resolution: {integrity: sha512-jlf/foYIKywAt3x/XWKZ/3rz8OSJPiWktjmk891alJUEjiVxKX9LEO92qH3hv4aJ0mN3MWPvGMCy8jQi95xK4w==} + engines: {node: '>=18'} + + why-is-node-running@2.3.0: + resolution: {integrity: sha512-hUrmaWBdVDcxvYqnyh09zunKzROWjbZTiNy8dBEjkS7ehEDQibXJ7XvlmtbwuTclUiIyN+CyXQD4Vmko8fNm8w==} + engines: {node: '>=8'} + hasBin: true + + ws@8.18.0: + resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + engines: {node: '>=10.0.0'} + peerDependencies: + bufferutil: ^4.0.1 + utf-8-validate: '>=5.0.2' + peerDependenciesMeta: + bufferutil: + optional: true + utf-8-validate: + optional: true + + xml-name-validator@5.0.0: + resolution: {integrity: sha512-EvGK8EJ3DhaHfbRlETOWAS5pO9MZITeauHKJyb8wyajUfQUenkIg2MvLDTZ4T/TgIcm3HU0TFBgWWboAZ30UHg==} + engines: {node: '>=18'} + + xmlchars@2.2.0: + resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} + +snapshots: + + '@asamuzakjp/css-color@2.8.3': + dependencies: + '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-color-parser': 3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + lru-cache: 10.4.3 + + '@babel/helper-string-parser@7.25.9': {} + + '@babel/helper-validator-identifier@7.25.9': {} + + '@babel/parser@7.26.8': + dependencies: + '@babel/types': 7.26.8 + + '@babel/types@7.26.8': + dependencies: + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + + '@biomejs/biome@1.9.4': + optionalDependencies: + '@biomejs/cli-darwin-arm64': 1.9.4 + '@biomejs/cli-darwin-x64': 1.9.4 + '@biomejs/cli-linux-arm64': 1.9.4 + '@biomejs/cli-linux-arm64-musl': 1.9.4 + '@biomejs/cli-linux-x64': 1.9.4 + '@biomejs/cli-linux-x64-musl': 1.9.4 + '@biomejs/cli-win32-arm64': 1.9.4 + '@biomejs/cli-win32-x64': 1.9.4 + + '@biomejs/cli-darwin-arm64@1.9.4': + optional: true + + '@biomejs/cli-darwin-x64@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-arm64@1.9.4': + optional: true + + '@biomejs/cli-linux-x64-musl@1.9.4': + optional: true + + '@biomejs/cli-linux-x64@1.9.4': + optional: true + + '@biomejs/cli-win32-arm64@1.9.4': + optional: true + + '@biomejs/cli-win32-x64@1.9.4': + optional: true + + '@csstools/color-helpers@5.0.1': {} + + '@csstools/css-calc@2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-color-parser@3.0.7(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/color-helpers': 5.0.1 + '@csstools/css-calc': 2.1.1(@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3))(@csstools/css-tokenizer@3.0.3) + '@csstools/css-parser-algorithms': 3.0.4(@csstools/css-tokenizer@3.0.3) + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-parser-algorithms@3.0.4(@csstools/css-tokenizer@3.0.3)': + dependencies: + '@csstools/css-tokenizer': 3.0.3 + + '@csstools/css-tokenizer@3.0.3': {} + + '@esbuild/aix-ppc64@0.24.2': + optional: true + + '@esbuild/android-arm64@0.24.2': + optional: true + + '@esbuild/android-arm@0.24.2': + optional: true + + '@esbuild/android-x64@0.24.2': + optional: true + + '@esbuild/darwin-arm64@0.24.2': + optional: true + + '@esbuild/darwin-x64@0.24.2': + optional: true + + '@esbuild/freebsd-arm64@0.24.2': + optional: true + + '@esbuild/freebsd-x64@0.24.2': + optional: true + + '@esbuild/linux-arm64@0.24.2': + optional: true + + '@esbuild/linux-arm@0.24.2': + optional: true + + '@esbuild/linux-ia32@0.24.2': + optional: true + + '@esbuild/linux-loong64@0.24.2': + optional: true + + '@esbuild/linux-mips64el@0.24.2': + optional: true + + '@esbuild/linux-ppc64@0.24.2': + optional: true + + '@esbuild/linux-riscv64@0.24.2': + optional: true + + '@esbuild/linux-s390x@0.24.2': + optional: true + + '@esbuild/linux-x64@0.24.2': + optional: true + + '@esbuild/netbsd-arm64@0.24.2': + optional: true + + '@esbuild/netbsd-x64@0.24.2': + optional: true + + '@esbuild/openbsd-arm64@0.24.2': + optional: true + + '@esbuild/openbsd-x64@0.24.2': + optional: true + + '@esbuild/sunos-x64@0.24.2': + optional: true + + '@esbuild/win32-arm64@0.24.2': + optional: true + + '@esbuild/win32-ia32@0.24.2': + optional: true + + '@esbuild/win32-x64@0.24.2': + optional: true + + '@jridgewell/gen-mapping@0.3.8': + dependencies: + '@jridgewell/set-array': 1.2.1 + '@jridgewell/sourcemap-codec': 1.5.0 + '@jridgewell/trace-mapping': 0.3.25 + optional: true + + '@jridgewell/resolve-uri@3.1.2': + optional: true + + '@jridgewell/set-array@1.2.1': + optional: true + + '@jridgewell/source-map@0.3.6': + dependencies: + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 + optional: true + + '@jridgewell/sourcemap-codec@1.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 + optional: true + + '@rollup/rollup-android-arm-eabi@4.34.6': + optional: true + + '@rollup/rollup-android-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-arm64@4.34.6': + optional: true + + '@rollup/rollup-darwin-x64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-arm64@4.34.6': + optional: true + + '@rollup/rollup-freebsd-x64@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-gnueabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm-musleabihf@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-arm64-musl@4.34.6': + optional: true + + '@rollup/rollup-linux-loongarch64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-powerpc64le-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-riscv64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-s390x-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-gnu@4.34.6': + optional: true + + '@rollup/rollup-linux-x64-musl@4.34.6': + optional: true + + '@rollup/rollup-win32-arm64-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-ia32-msvc@4.34.6': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.34.6': + optional: true + + '@types/estree@1.0.6': {} + + '@vitest/expect@3.0.5': + dependencies: + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + tinyrainbow: 2.0.0 + + '@vitest/mocker@3.0.5(vite@6.1.0(terser@5.38.1))': + dependencies: + '@vitest/spy': 3.0.5 + estree-walker: 3.0.3 + magic-string: 0.30.17 + optionalDependencies: + vite: 6.1.0(terser@5.38.1) + + '@vitest/pretty-format@3.0.5': + dependencies: + tinyrainbow: 2.0.0 + + '@vitest/runner@3.0.5': + dependencies: + '@vitest/utils': 3.0.5 + pathe: 2.0.2 + + '@vitest/snapshot@3.0.5': + dependencies: + '@vitest/pretty-format': 3.0.5 + magic-string: 0.30.17 + pathe: 2.0.2 + + '@vitest/spy@3.0.5': + dependencies: + tinyspy: 3.0.2 + + '@vitest/utils@3.0.5': + dependencies: + '@vitest/pretty-format': 3.0.5 + loupe: 3.1.3 + tinyrainbow: 2.0.0 + + '@vue/compiler-core@3.5.13': + dependencies: + '@babel/parser': 7.26.8 + '@vue/shared': 3.5.13 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.1 + + '@vue/compiler-dom@3.5.13': + dependencies: + '@vue/compiler-core': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/compiler-sfc@3.5.13': + dependencies: + '@babel/parser': 7.26.8 + '@vue/compiler-core': 3.5.13 + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + estree-walker: 2.0.2 + magic-string: 0.30.17 + postcss: 8.5.1 + source-map-js: 1.2.1 + + '@vue/compiler-ssr@3.5.13': + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/devtools-api@6.6.4': {} + + '@vue/reactivity@3.5.13': + dependencies: + '@vue/shared': 3.5.13 + + '@vue/runtime-core@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/shared': 3.5.13 + + '@vue/runtime-dom@3.5.13': + dependencies: + '@vue/reactivity': 3.5.13 + '@vue/runtime-core': 3.5.13 + '@vue/shared': 3.5.13 + csstype: 3.1.3 + + '@vue/server-renderer@3.5.13(vue@3.5.13)': + dependencies: + '@vue/compiler-ssr': 3.5.13 + '@vue/shared': 3.5.13 + vue: 3.5.13 + + '@vue/shared@3.5.13': {} + + acorn@8.14.0: + optional: true + + agent-base@7.1.3: {} + + assertion-error@2.0.1: {} + + asynckit@0.4.0: {} + + buffer-from@1.1.2: + optional: true + + cac@6.7.14: {} + + chai@5.1.2: + dependencies: + assertion-error: 2.0.1 + check-error: 2.1.1 + deep-eql: 5.0.2 + loupe: 3.1.3 + pathval: 2.0.0 + + check-error@2.1.1: {} + + combined-stream@1.0.8: + dependencies: + delayed-stream: 1.0.0 + + commander@2.20.3: + optional: true + + cssstyle@4.2.1: + dependencies: + '@asamuzakjp/css-color': 2.8.3 + rrweb-cssom: 0.8.0 + + csstype@3.1.3: {} + + data-urls@5.0.0: + dependencies: + whatwg-mimetype: 4.0.0 + whatwg-url: 14.1.0 + + debug@4.4.0: + dependencies: + ms: 2.1.3 + + decimal.js@10.5.0: {} + + deep-eql@5.0.2: {} + + delayed-stream@1.0.0: {} + + entities@4.5.0: {} + + es-module-lexer@1.6.0: {} + + esbuild@0.24.2: + optionalDependencies: + '@esbuild/aix-ppc64': 0.24.2 + '@esbuild/android-arm': 0.24.2 + '@esbuild/android-arm64': 0.24.2 + '@esbuild/android-x64': 0.24.2 + '@esbuild/darwin-arm64': 0.24.2 + '@esbuild/darwin-x64': 0.24.2 + '@esbuild/freebsd-arm64': 0.24.2 + '@esbuild/freebsd-x64': 0.24.2 + '@esbuild/linux-arm': 0.24.2 + '@esbuild/linux-arm64': 0.24.2 + '@esbuild/linux-ia32': 0.24.2 + '@esbuild/linux-loong64': 0.24.2 + '@esbuild/linux-mips64el': 0.24.2 + '@esbuild/linux-ppc64': 0.24.2 + '@esbuild/linux-riscv64': 0.24.2 + '@esbuild/linux-s390x': 0.24.2 + '@esbuild/linux-x64': 0.24.2 + '@esbuild/netbsd-arm64': 0.24.2 + '@esbuild/netbsd-x64': 0.24.2 + '@esbuild/openbsd-arm64': 0.24.2 + '@esbuild/openbsd-x64': 0.24.2 + '@esbuild/sunos-x64': 0.24.2 + '@esbuild/win32-arm64': 0.24.2 + '@esbuild/win32-ia32': 0.24.2 + '@esbuild/win32-x64': 0.24.2 + + estree-walker@2.0.2: {} + + estree-walker@3.0.3: + dependencies: + '@types/estree': 1.0.6 + + expect-type@1.1.0: {} + + flush-promises@1.0.2: {} + + form-data@4.0.1: + dependencies: + asynckit: 0.4.0 + combined-stream: 1.0.8 + mime-types: 2.1.35 + + fsevents@2.3.3: + optional: true + + html-encoding-sniffer@4.0.0: + dependencies: + whatwg-encoding: 3.1.1 + + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.4.0 + transitivePeerDependencies: + - supports-color + + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + + is-potential-custom-element-name@1.0.1: {} + + jsdom@26.0.0: + dependencies: + cssstyle: 4.2.1 + data-urls: 5.0.0 + decimal.js: 10.5.0 + form-data: 4.0.1 + html-encoding-sniffer: 4.0.0 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + is-potential-custom-element-name: 1.0.1 + nwsapi: 2.2.16 + parse5: 7.2.1 + rrweb-cssom: 0.8.0 + saxes: 6.0.0 + symbol-tree: 3.2.4 + tough-cookie: 5.1.1 + w3c-xmlserializer: 5.0.0 + webidl-conversions: 7.0.0 + whatwg-encoding: 3.1.1 + whatwg-mimetype: 4.0.0 + whatwg-url: 14.1.0 + ws: 8.18.0 + xml-name-validator: 5.0.0 + transitivePeerDependencies: + - bufferutil + - supports-color + - utf-8-validate + + loupe@3.1.3: {} + + lru-cache@10.4.3: {} + + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 + + mime-db@1.52.0: {} + + mime-types@2.1.35: + dependencies: + mime-db: 1.52.0 + + mockdate@3.0.5: {} + + ms@2.1.3: {} + + nanoid@3.3.8: {} + + nwsapi@2.2.16: {} + + parse5@7.2.1: + dependencies: + entities: 4.5.0 + + pathe@2.0.2: {} + + pathval@2.0.0: {} + + picocolors@1.1.1: {} + + postcss@8.5.1: + dependencies: + nanoid: 3.3.8 + picocolors: 1.1.1 + source-map-js: 1.2.1 + + punycode@2.3.1: {} + + rollup@4.34.6: + dependencies: + '@types/estree': 1.0.6 + optionalDependencies: + '@rollup/rollup-android-arm-eabi': 4.34.6 + '@rollup/rollup-android-arm64': 4.34.6 + '@rollup/rollup-darwin-arm64': 4.34.6 + '@rollup/rollup-darwin-x64': 4.34.6 + '@rollup/rollup-freebsd-arm64': 4.34.6 + '@rollup/rollup-freebsd-x64': 4.34.6 + '@rollup/rollup-linux-arm-gnueabihf': 4.34.6 + '@rollup/rollup-linux-arm-musleabihf': 4.34.6 + '@rollup/rollup-linux-arm64-gnu': 4.34.6 + '@rollup/rollup-linux-arm64-musl': 4.34.6 + '@rollup/rollup-linux-loongarch64-gnu': 4.34.6 + '@rollup/rollup-linux-powerpc64le-gnu': 4.34.6 + '@rollup/rollup-linux-riscv64-gnu': 4.34.6 + '@rollup/rollup-linux-s390x-gnu': 4.34.6 + '@rollup/rollup-linux-x64-gnu': 4.34.6 + '@rollup/rollup-linux-x64-musl': 4.34.6 + '@rollup/rollup-win32-arm64-msvc': 4.34.6 + '@rollup/rollup-win32-ia32-msvc': 4.34.6 + '@rollup/rollup-win32-x64-msvc': 4.34.6 + fsevents: 2.3.3 + + rrweb-cssom@0.8.0: {} + + safer-buffer@2.1.2: {} + + saxes@6.0.0: + dependencies: + xmlchars: 2.2.0 + + siginfo@2.0.0: {} + + source-map-js@1.2.1: {} + + source-map-support@0.5.21: + dependencies: + buffer-from: 1.1.2 + source-map: 0.6.1 + optional: true + + source-map@0.6.1: + optional: true + + stackback@0.0.2: {} + + std-env@3.8.0: {} + + symbol-tree@3.2.4: {} + + terser@5.38.1: + dependencies: + '@jridgewell/source-map': 0.3.6 + acorn: 8.14.0 + commander: 2.20.3 + source-map-support: 0.5.21 + optional: true + + tinybench@2.9.0: {} + + tinyexec@0.3.2: {} + + tinypool@1.0.2: {} + + tinyrainbow@2.0.0: {} + + tinyspy@3.0.2: {} + + tldts-core@6.1.77: {} + + tldts@6.1.77: + dependencies: + tldts-core: 6.1.77 + + tough-cookie@5.1.1: + dependencies: + tldts: 6.1.77 + + tr46@5.0.0: + dependencies: + punycode: 2.3.1 + + vite-node@3.0.5(terser@5.38.1): + dependencies: + cac: 6.7.14 + debug: 4.4.0 + es-module-lexer: 1.6.0 + pathe: 2.0.2 + vite: 6.1.0(terser@5.38.1) + transitivePeerDependencies: + - '@types/node' + - jiti + - less + - lightningcss + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vite@6.1.0(terser@5.38.1): + dependencies: + esbuild: 0.24.2 + postcss: 8.5.1 + rollup: 4.34.6 + optionalDependencies: + fsevents: 2.3.3 + terser: 5.38.1 + + vitest@3.0.5(jsdom@26.0.0)(terser@5.38.1): + dependencies: + '@vitest/expect': 3.0.5 + '@vitest/mocker': 3.0.5(vite@6.1.0(terser@5.38.1)) + '@vitest/pretty-format': 3.0.5 + '@vitest/runner': 3.0.5 + '@vitest/snapshot': 3.0.5 + '@vitest/spy': 3.0.5 + '@vitest/utils': 3.0.5 + chai: 5.1.2 + debug: 4.4.0 + expect-type: 1.1.0 + magic-string: 0.30.17 + pathe: 2.0.2 + std-env: 3.8.0 + tinybench: 2.9.0 + tinyexec: 0.3.2 + tinypool: 1.0.2 + tinyrainbow: 2.0.0 + vite: 6.1.0(terser@5.38.1) + vite-node: 3.0.5(terser@5.38.1) + why-is-node-running: 2.3.0 + optionalDependencies: + jsdom: 26.0.0 + transitivePeerDependencies: + - jiti + - less + - lightningcss + - msw + - sass + - sass-embedded + - stylus + - sugarss + - supports-color + - terser + - tsx + - yaml + + vue-router@4.5.0(vue@3.5.13): + dependencies: + '@vue/devtools-api': 6.6.4 + vue: 3.5.13 + + vue@3.5.13: + dependencies: + '@vue/compiler-dom': 3.5.13 + '@vue/compiler-sfc': 3.5.13 + '@vue/runtime-dom': 3.5.13 + '@vue/server-renderer': 3.5.13(vue@3.5.13) + '@vue/shared': 3.5.13 + + w3c-xmlserializer@5.0.0: + dependencies: + xml-name-validator: 5.0.0 + + webidl-conversions@7.0.0: {} + + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + + whatwg-mimetype@4.0.0: {} + + whatwg-url@14.1.0: + dependencies: + tr46: 5.0.0 + webidl-conversions: 7.0.0 + + why-is-node-running@2.3.0: + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + + ws@8.18.0: {} + + xml-name-validator@5.0.0: {} + + xmlchars@2.2.0: {} diff --git a/src/add-configuration.js b/src/add-configuration.js index b66e227..73a48bf 100644 --- a/src/add-configuration.js +++ b/src/add-configuration.js @@ -2,18 +2,18 @@ import * as api from "@/api"; import { getOptions } from "@/options"; const mergeDefaultParams = (params) => ({ - send_page_view: false, - ...params, + send_page_view: false, + ...params, }); export default () => { - const { config, includes } = getOptions(); + const { config, includes } = getOptions(); - api.query("config", config.id, mergeDefaultParams(config.params)); + api.query("config", config.id, mergeDefaultParams(config.params)); - if (Array.isArray(includes)) { - includes.forEach((domain) => { - api.query("config", domain.id, mergeDefaultParams(domain.params)); - }); - } + if (Array.isArray(includes)) { + for (const domain of includes) { + api.query("config", domain.id, mergeDefaultParams(domain.params)); + } + } }; diff --git a/src/add-routes-tracker.js b/src/add-routes-tracker.js index cc9dd13..3d94dc0 100644 --- a/src/add-routes-tracker.js +++ b/src/add-routes-tracker.js @@ -1,48 +1,48 @@ -import { nextTick } from "vue"; -import { isFn } from "@/utils"; -import { getRouter } from "@/router"; -import { getOptions } from "@/options"; import addConfiguration from "@/add-configuration"; +import { getOptions } from "@/options"; +import { getRouter } from "@/router"; import track from "@/track"; +import { isFn } from "@/utils"; +import { nextTick } from "vue"; const isRouteExcluded = (route) => { - const { pageTrackerExcludedRoutes: routes } = getOptions(); - return routes.includes(route.path) || routes.includes(route.name); + const { pageTrackerExcludedRoutes: routes } = getOptions(); + return routes.includes(route.path) || routes.includes(route.name); }; export default () => { - const { onBeforeTrack, onAfterTrack } = getOptions(); - const router = getRouter(); + const { onBeforeTrack, onAfterTrack } = getOptions(); + const router = getRouter(); - router.isReady().then(() => { - nextTick().then(() => { - const { currentRoute } = router; + router.isReady().then(() => { + nextTick().then(() => { + const { currentRoute } = router; - addConfiguration(); + addConfiguration(); - if (isRouteExcluded(currentRoute.value)) { - return; - } + if (isRouteExcluded(currentRoute.value)) { + return; + } - track(currentRoute.value); - }); + track(currentRoute.value); + }); - router.afterEach((to, from) => { - nextTick().then(() => { - if (isRouteExcluded(to)) { - return; - } + router.afterEach((to, from) => { + nextTick().then(() => { + if (isRouteExcluded(to)) { + return; + } - if (isFn(onBeforeTrack)) { - onBeforeTrack(to, from); - } + if (isFn(onBeforeTrack)) { + onBeforeTrack(to, from); + } - track(to, from); + track(to, from); - if (isFn(onAfterTrack)) { - onAfterTrack(to, from); - } - }); - }); - }); + if (isFn(onAfterTrack)) { + onAfterTrack(to, from); + } + }); + }); + }); }; diff --git a/src/api/config.js b/src/api/config.js index 7683873..3b8415e 100644 --- a/src/api/config.js +++ b/src/api/config.js @@ -2,13 +2,13 @@ import query from "@/api/query"; import { getOptions } from "@/options"; export default (...args) => { - const { config, includes } = getOptions(); + const { config, includes } = getOptions(); - query("config", config.id, ...args); + query("config", config.id, ...args); - if (Array.isArray(includes)) { - includes.forEach((domain) => { - query("config", domain.id, ...args); - }); - } + if (Array.isArray(includes)) { + for (const domain of includes) { + query("config", domain.id, ...args); + } + } }; diff --git a/src/api/custom-map.js b/src/api/custom-map.js index 5c11f0c..68f913d 100644 --- a/src/api/custom-map.js +++ b/src/api/custom-map.js @@ -1,7 +1,7 @@ import config from "@/api/config"; export default (map) => { - config({ - custom_map: map, - }); + config({ + custom_map: map, + }); }; diff --git a/src/api/disable.js b/src/api/disable.js index 476ed81..a890fc5 100644 --- a/src/api/disable.js +++ b/src/api/disable.js @@ -1,20 +1,22 @@ -import { isBrowser } from "@/utils"; import { getOptions } from "@/options"; +import { isBrowser } from "@/utils"; const assignGlobalProperty = (id, value) => { - if (!isBrowser()) { - return; - } + if (!isBrowser()) { + return; + } - window[`ga-disable-${id}`] = value; + window[`ga-disable-${id}`] = value; }; export default (value = true) => { - const { config, includes } = getOptions(); + const { config, includes } = getOptions(); - assignGlobalProperty(config.id, value); + assignGlobalProperty(config.id, value); - if (Array.isArray(includes)) { - includes.forEach((domain) => assignGlobalProperty(domain.id, value)); - } + if (Array.isArray(includes)) { + for (const domain of includes) { + assignGlobalProperty(domain.id, value); + } + } }; diff --git a/src/api/event.js b/src/api/event.js index ed852f1..85d9323 100644 --- a/src/api/event.js +++ b/src/api/event.js @@ -1,14 +1,14 @@ -import { getOptions } from "@/options"; import query from "@/api/query"; +import { getOptions } from "@/options"; export default (name, params = {}) => { - const { includes, defaultGroupName } = getOptions(); + const { includes, defaultGroupName } = getOptions(); - if (params.send_to == null && Array.isArray(includes) && includes.length) { - params.send_to = includes - .map((domain) => domain.id) - .concat(defaultGroupName); - } + if (params.send_to == null && Array.isArray(includes) && includes.length) { + params.send_to = includes + .map((domain) => domain.id) + .concat(defaultGroupName); + } - query("event", name, params); + query("event", name, params); }; diff --git a/src/api/exception.js b/src/api/exception.js index 85d36d0..c508f72 100644 --- a/src/api/exception.js +++ b/src/api/exception.js @@ -1,5 +1,5 @@ import event from "@/api/event"; export default (...args) => { - event("exception", ...args); + event("exception", ...args); }; diff --git a/src/api/linker.js b/src/api/linker.js index 4fdde2b..ebe3352 100644 --- a/src/api/linker.js +++ b/src/api/linker.js @@ -1,5 +1,5 @@ import config from "./config"; export default (params) => { - config("linker", params); + config("linker", params); }; diff --git a/src/api/opt-in.js b/src/api/opt-in.js index 1a4899b..09f1f71 100644 --- a/src/api/opt-in.js +++ b/src/api/opt-in.js @@ -1,5 +1,5 @@ import disable from "@/api/disable"; export default () => { - disable(false); + disable(false); }; diff --git a/src/api/opt-out.js b/src/api/opt-out.js index 5d86094..32b246c 100644 --- a/src/api/opt-out.js +++ b/src/api/opt-out.js @@ -1,5 +1,5 @@ import disable from "@/api/disable"; export default () => { - disable(true); + disable(true); }; diff --git a/src/api/pageview.js b/src/api/pageview.js index 1541d6a..e903499 100644 --- a/src/api/pageview.js +++ b/src/api/pageview.js @@ -1,43 +1,43 @@ +import event from "@/api/event"; import { getOptions } from "@/options"; import { getRouter } from "@/router"; import { getPathWithBase, isBrowser } from "@/utils"; -import event from "@/api/event"; export default (param) => { - if (!isBrowser()) { - return; - } + if (!isBrowser()) { + return; + } - let template; + let template; - if (typeof param === "string") { - template = { - page_path: param, - }; - } else if (param.path || param.fullPath) { - const { - pageTrackerUseFullPath: useFullPath, - pageTrackerPrependBase: useBase, - } = getOptions(); - const router = getRouter(); - const base = router && router.options.base; - const path = useFullPath ? param.fullPath : param.path; + if (typeof param === "string") { + template = { + page_path: param, + }; + } else if (param.path || param.fullPath) { + const { + pageTrackerUseFullPath: useFullPath, + pageTrackerPrependBase: useBase, + } = getOptions(); + const router = getRouter(); + const base = router?.options.base; + const path = useFullPath ? param.fullPath : param.path; - template = { - ...(param.name && { page_title: param.name }), - page_path: useBase ? getPathWithBase(path, base) : path, - }; - } else { - template = param; - } + template = { + ...(param.name && { page_title: param.name }), + page_path: useBase ? getPathWithBase(path, base) : path, + }; + } else { + template = param; + } - if (template.page_location == null) { - template.page_location = window.location.href; - } + if (template.page_location == null) { + template.page_location = window.location.href; + } - if (template.send_page_view == null) { - template.send_page_view = true; - } + if (template.send_page_view == null) { + template.send_page_view = true; + } - event("page_view", template); + event("page_view", template); }; diff --git a/src/api/purchase.js b/src/api/purchase.js index 131fc80..e1371df 100644 --- a/src/api/purchase.js +++ b/src/api/purchase.js @@ -1,5 +1,5 @@ import event from "@/api/event"; export default (params) => { - event("purchase", params); + event("purchase", params); }; diff --git a/src/api/query.js b/src/api/query.js index 2b6bd5c..b638bf9 100644 --- a/src/api/query.js +++ b/src/api/query.js @@ -2,11 +2,11 @@ import { getOptions } from "@/options"; import { isBrowser } from "@/utils"; export default (...args) => { - const { globalObjectName } = getOptions(); + const { globalObjectName } = getOptions(); - if (!isBrowser() || typeof window[globalObjectName] === "undefined") { - return; - } + if (!isBrowser() || typeof window[globalObjectName] === "undefined") { + return; + } - window[globalObjectName](...args); + window[globalObjectName](...args); }; diff --git a/src/api/refund.js b/src/api/refund.js index 2830a17..8b28d60 100644 --- a/src/api/refund.js +++ b/src/api/refund.js @@ -1,5 +1,5 @@ import event from "@/api/event"; export default (...args) => { - event("refund", ...args); + event("refund", ...args); }; diff --git a/src/api/screenview.js b/src/api/screenview.js index d9a1e07..9b741d5 100644 --- a/src/api/screenview.js +++ b/src/api/screenview.js @@ -1,24 +1,24 @@ -import { getOptions } from "@/options"; import event from "@/api/event"; +import { getOptions } from "@/options"; export default (param) => { - const { appName } = getOptions(); + const { appName } = getOptions(); - if (!param) { - return; - } + if (!param) { + return; + } - let template; + let template; - if (typeof param === "string") { - template = { - screen_name: param, - }; - } else { - template = param; - } + if (typeof param === "string") { + template = { + screen_name: param, + }; + } else { + template = param; + } - template.app_name = template.app_name || appName; + template.app_name = template.app_name || appName; - event("screen_view", template); + event("screen_view", template); }; diff --git a/src/api/set.js b/src/api/set.js index 57be6e3..c4671a7 100644 --- a/src/api/set.js +++ b/src/api/set.js @@ -1,5 +1,5 @@ import query from "@/api/query"; export default (...args) => { - query("set", ...args); + query("set", ...args); }; diff --git a/src/api/time.js b/src/api/time.js index a338144..dbf6658 100644 --- a/src/api/time.js +++ b/src/api/time.js @@ -1,5 +1,5 @@ import event from "@/api/event"; export default (params) => { - event("timing_complete", params); + event("timing_complete", params); }; diff --git a/src/attach-api.js b/src/attach-api.js index 8cfbeb8..670bf9e 100644 --- a/src/attach-api.js +++ b/src/attach-api.js @@ -1,7 +1,7 @@ import * as api from "@/api"; const attachApi = (app) => { - app.config.globalProperties.$gtag = api; + app.config.globalProperties.$gtag = api; }; export default attachApi; diff --git a/src/bootstrap.js b/src/bootstrap.js index ebfcf06..7603cc8 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -1,52 +1,52 @@ -import { load } from "@/utils"; -import registerGlobals from "@/register-globals"; +import addConfiguration from "@/add-configuration"; import addRoutesTracker from "@/add-routes-tracker"; import { getOptions } from "@/options"; +import registerGlobals from "@/register-globals"; import { getRouter } from "@/router"; -import addConfiguration from "@/add-configuration"; +import { load } from "@/utils"; export default () => { - const { - onReady, - onError, - globalObjectName, - globalDataLayerName, - config, - customResourceURL, - customPreconnectOrigin, - deferScriptLoad, - pageTrackerEnabled, - disableScriptLoad, - } = getOptions(); + const { + onReady, + onError, + globalObjectName, + globalDataLayerName, + config, + customResourceURL, + customPreconnectOrigin, + deferScriptLoad, + pageTrackerEnabled, + disableScriptLoad, + } = getOptions(); - const isPageTrackerEnabled = Boolean(pageTrackerEnabled && getRouter()); + const isPageTrackerEnabled = Boolean(pageTrackerEnabled && getRouter()); - registerGlobals(); + registerGlobals(); - if (isPageTrackerEnabled) { - addRoutesTracker(); - } else { - addConfiguration(); - } + if (isPageTrackerEnabled) { + addRoutesTracker(); + } else { + addConfiguration(); + } - if (disableScriptLoad) { - return; - } + if (disableScriptLoad) { + return; + } - return load(`${customResourceURL}?id=${config.id}&l=${globalDataLayerName}`, { - preconnectOrigin: customPreconnectOrigin, - defer: deferScriptLoad, - }) - .then(() => { - if (onReady) { - onReady(window[globalObjectName]); - } - }) - .catch((error) => { - if (onError) { - onError(error); - } + return load(`${customResourceURL}?id=${config.id}&l=${globalDataLayerName}`, { + preconnectOrigin: customPreconnectOrigin, + defer: deferScriptLoad, + }) + .then(() => { + if (onReady) { + onReady(window[globalObjectName]); + } + }) + .catch((error) => { + if (onError) { + onError(error); + } - return error; - }); + return error; + }); }; diff --git a/src/index.js b/src/index.js index 221c331..25f7500 100644 --- a/src/index.js +++ b/src/index.js @@ -1,16 +1,16 @@ import attachApi from "@/attach-api"; -import { setOptions, getOptions } from "@/options"; import bootstrap from "@/bootstrap"; +import { getOptions, setOptions } from "@/options"; import { setRouter } from "@/router"; -const install = (app, options = {}, router) => { - attachApi(app); - setOptions(options); - setRouter(router); +const install = (app, options, router) => { + attachApi(app); + setOptions(options); + setRouter(router); - if (getOptions().bootstrap) { - bootstrap(); - } + if (getOptions().bootstrap) { + bootstrap(); + } }; export { default as query } from "@/api/query"; diff --git a/src/options.js b/src/options.js index c0a2a91..c18cf82 100644 --- a/src/options.js +++ b/src/options.js @@ -1,43 +1,43 @@ import { mergeDeep } from "@/utils"; export const getDefaultParams = () => ({ - bootstrap: true, - onReady: null, - onError: null, - onBeforeTrack: null, - onAfterTrack: null, - pageTrackerTemplate: null, - customResourceURL: "https://www.googletagmanager.com/gtag/js", - customPreconnectOrigin: "https://www.googletagmanager.com", - deferScriptLoad: false, - pageTrackerExcludedRoutes: [], - pageTrackerEnabled: true, - enabled: true, - disableScriptLoad: false, - pageTrackerScreenviewEnabled: false, - appName: null, - pageTrackerUseFullPath: false, - pageTrackerPrependBase: true, - pageTrackerSkipSamePath: true, - globalDataLayerName: "dataLayer", - globalObjectName: "gtag", - defaultGroupName: "default", - includes: null, - config: { - id: null, - params: { - send_page_view: false, - }, - }, + bootstrap: true, + onReady: null, + onError: null, + onBeforeTrack: null, + onAfterTrack: null, + pageTrackerTemplate: null, + customResourceURL: "https://www.googletagmanager.com/gtag/js", + customPreconnectOrigin: "https://www.googletagmanager.com", + deferScriptLoad: false, + pageTrackerExcludedRoutes: [], + pageTrackerEnabled: true, + enabled: true, + disableScriptLoad: false, + pageTrackerScreenviewEnabled: false, + appName: null, + pageTrackerUseFullPath: false, + pageTrackerPrependBase: true, + pageTrackerSkipSamePath: true, + globalDataLayerName: "dataLayer", + globalObjectName: "gtag", + defaultGroupName: "default", + includes: null, + config: { + id: null, + params: { + send_page_view: false, + }, + }, }); let params = {}; export const setOptions = (options = {}) => { - const defaultParams = getDefaultParams(); - params = mergeDeep(defaultParams, options); + const defaultParams = getDefaultParams(); + params = mergeDeep(defaultParams, options); }; export const getOptions = () => { - return params; + return params; }; diff --git a/src/register-globals.js b/src/register-globals.js index 7a74d31..5e79fe2 100644 --- a/src/register-globals.js +++ b/src/register-globals.js @@ -1,26 +1,26 @@ -import { isBrowser } from "@/utils"; -import { getOptions } from "@/options"; import * as api from "@/api"; +import { getOptions } from "@/options"; +import { isBrowser } from "@/utils"; export default () => { - if (!isBrowser()) { - return; - } + if (!isBrowser()) { + return; + } - const { enabled, globalObjectName, globalDataLayerName } = getOptions(); + const { enabled, globalObjectName, globalDataLayerName } = getOptions(); - if (window[globalObjectName] == null) { - window[globalDataLayerName] = window[globalDataLayerName] || []; - window[globalObjectName] = function () { - window[globalDataLayerName].push(arguments); - }; - } + if (window[globalObjectName] == null) { + window[globalDataLayerName] = window[globalDataLayerName] || []; + window[globalObjectName] = (...args) => { + window[globalDataLayerName].push(...args); + }; + } - window[globalObjectName]("js", new Date()); + window[globalObjectName]("js", new Date()); - if (!enabled) { - api.optOut(); - } + if (!enabled) { + api.optOut(); + } - return window[globalObjectName]; + return window[globalObjectName]; }; diff --git a/src/router.js b/src/router.js index 34ba8aa..a14ab2e 100644 --- a/src/router.js +++ b/src/router.js @@ -1,7 +1,7 @@ let router; export const setRouter = (instance) => { - router = instance; + router = instance; }; export const getRouter = () => router; diff --git a/src/track.js b/src/track.js index 1a08807..26b9a80 100644 --- a/src/track.js +++ b/src/track.js @@ -1,34 +1,34 @@ -import { getOptions } from "@/options"; -import { validateScreenviewShape, isFn } from "@/utils"; import * as api from "@/api"; +import { getOptions } from "@/options"; +import { isFn, validateScreenviewShape } from "@/utils"; export default (to = {}, from = {}) => { - const { - appName, - pageTrackerTemplate: proxy, - pageTrackerScreenviewEnabled: useScreenview, - pageTrackerSkipSamePath: skipSamePath, - } = getOptions(); + const { + appName, + pageTrackerTemplate: proxy, + pageTrackerScreenviewEnabled: useScreenview, + pageTrackerSkipSamePath: skipSamePath, + } = getOptions(); - if (skipSamePath && to.path === from.path) { - return; - } + if (skipSamePath && to.path === from.path) { + return; + } - let template = to; + let template = to; - if (isFn(proxy)) { - template = proxy(to, from); - } else if (useScreenview) { - template = validateScreenviewShape({ - app_name: appName, - screen_name: to.name, - }); - } + if (isFn(proxy)) { + template = proxy(to, from); + } else if (useScreenview) { + template = validateScreenviewShape({ + app_name: appName, + screen_name: to.name, + }); + } - if (useScreenview) { - api.screenview(template); - return; - } + if (useScreenview) { + api.screenview(template); + return; + } - api.pageview(template); + api.pageview(template); }; diff --git a/src/utils.js b/src/utils.js index 86784f7..4823b86 100644 --- a/src/utils.js +++ b/src/utils.js @@ -1,102 +1,102 @@ export const load = (url, options = {}) => { - return new Promise((resolve, reject) => { - if (typeof document === "undefined") { - return; - } + return new Promise((resolve, reject) => { + if (typeof document === "undefined") { + return; + } - const head = document.head || document.getElementsByTagName("head")[0]; - const script = document.createElement("script"); + const head = document.head || document.getElementsByTagName("head")[0]; + const script = document.createElement("script"); - script.async = true; - script.src = url; - script.defer = options.defer; + script.async = true; + script.src = url; + script.defer = options.defer; - if (options.preconnectOrigin) { - const link = document.createElement("link"); + if (options.preconnectOrigin) { + const link = document.createElement("link"); - link.href = options.preconnectOrigin; - link.rel = "preconnect"; + link.href = options.preconnectOrigin; + link.rel = "preconnect"; - head.appendChild(link); - } + head.appendChild(link); + } - head.appendChild(script); + head.appendChild(script); - script.onload = resolve; - script.onerror = reject; - }); + script.onload = resolve; + script.onerror = reject; + }); }; export const isFn = (fn) => typeof fn === "function"; export const isObject = (item) => { - return item && typeof item === "object" && !Array.isArray(item); + return item && typeof item === "object" && !Array.isArray(item); }; export const mergeDeep = (target, ...sources) => { - if (!sources.length) { - return target; - } + if (!sources.length) { + return target; + } - const source = sources.shift(); + const source = sources.shift(); - if (!isObject(target) || !isObject(source)) { - return; - } + if (!isObject(target) || !isObject(source)) { + return; + } - for (const key in source) { - if (isObject(source[key])) { - if (!target[key]) { - Object.assign(target, { [key]: {} }); - } + for (const key in source) { + if (isObject(source[key])) { + if (!target[key]) { + Object.assign(target, { [key]: {} }); + } - mergeDeep(target[key], source[key]); - } else { - Object.assign(target, { [key]: source[key] }); - } - } + mergeDeep(target[key], source[key]); + } else { + Object.assign(target, { [key]: source[key] }); + } + } - return mergeDeep(target, ...sources); + return mergeDeep(target, ...sources); }; export const isBrowser = () => { - if (typeof window === "undefined" || typeof document === "undefined") { - return false; - } + if (typeof window === "undefined" || typeof document === "undefined") { + return false; + } - return true; + return true; }; export const warn = (text, shouldLog = true) => { - if (!isBrowser() || process.env.NODE_ENV === "production") { - return; - } + if (!isBrowser() || process.env.NODE_ENV === "production") { + return; + } - if (!shouldLog) { - return; - } + if (!shouldLog) { + return; + } - console.warn(`[vue-gtag] ${text}`); + console.warn(`[vue-gtag] ${text}`); }; export const validateScreenviewShape = (obj = {}) => { - warn( - `Missing "appName" property inside the plugin options.`, - obj.app_name == null - ); + warn( + `Missing "appName" property inside the plugin options.`, + obj.app_name == null, + ); - warn(`Missing "name" property in the route.`, obj.screen_name == null); + warn(`Missing "name" property in the route.`, obj.screen_name == null); - return obj; + return obj; }; export function getPathWithBase(path = "", base = "") { - const pathAsArray = path.split("/"); - const baseAsArray = base.split("/"); + const pathAsArray = path.split("/"); + const baseAsArray = base.split("/"); - if (pathAsArray[0] === "" && base[base.length - 1] === "/") { - pathAsArray.shift(); - } + if (pathAsArray[0] === "" && base[base.length - 1] === "/") { + pathAsArray.shift(); + } - return baseAsArray.join("/") + pathAsArray.join("/"); + return baseAsArray.join("/") + pathAsArray.join("/"); } diff --git a/test/__snapshots__/options.spec.js.snap b/test/__snapshots__/options.spec.js.snap index 02e0449..47db901 100644 --- a/test/__snapshots__/options.spec.js.snap +++ b/test/__snapshots__/options.spec.js.snap @@ -1,12 +1,12 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`options getDefaultParams 1`] = ` -Object { +exports[`options > getDefaultParams 1`] = ` +{ "appName": null, "bootstrap": true, - "config": Object { + "config": { "id": null, - "params": Object { + "params": { "send_page_view": false, }, }, @@ -24,7 +24,7 @@ Object { "onError": null, "onReady": null, "pageTrackerEnabled": true, - "pageTrackerExcludedRoutes": Array [], + "pageTrackerExcludedRoutes": [], "pageTrackerPrependBase": true, "pageTrackerScreenviewEnabled": false, "pageTrackerSkipSamePath": true, @@ -33,13 +33,13 @@ Object { } `; -exports[`options set and get options 1`] = ` -Object { +exports[`options > set and get options 1`] = ` +{ "appName": null, "bootstrap": true, - "config": Object { + "config": { "id": 1, - "params": Object { + "params": { "send_page_view": false, }, }, @@ -57,7 +57,7 @@ Object { "onError": null, "onReady": null, "pageTrackerEnabled": true, - "pageTrackerExcludedRoutes": Array [], + "pageTrackerExcludedRoutes": [], "pageTrackerPrependBase": true, "pageTrackerScreenviewEnabled": false, "pageTrackerSkipSamePath": true, diff --git a/test/__snapshots__/register-globals.spec.js.snap b/test/__snapshots__/register-globals.spec.js.snap index d9b792c..bc25154 100644 --- a/test/__snapshots__/register-globals.spec.js.snap +++ b/test/__snapshots__/register-globals.spec.js.snap @@ -1,10 +1,8 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`registerGlobals first hit is current date 1`] = ` -Array [ - Arguments [ - "js", - 2021-04-20T10:00:00.000Z, - ], +exports[`registerGlobals > first hit is current date 1`] = ` +[ + "js", + 2021-04-20T08:00:00.000Z, ] `; diff --git a/test/__snapshots__/utils.spec.js.snap b/test/__snapshots__/utils.spec.js.snap index 77c08ca..5ca4505 100644 --- a/test/__snapshots__/utils.spec.js.snap +++ b/test/__snapshots__/utils.spec.js.snap @@ -1,6 +1,6 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html -exports[`load should create a link for domain preconnect 1`] = ` +exports[`load > should create a link for domain preconnect 1`] = ` `; -exports[`load should create a script tag 1`] = ` +exports[`load > should create a script tag 1`] = `