diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml
index a1b6dd0a..65f0c44a 100644
--- a/.github/workflows/ci.yml
+++ b/.github/workflows/ci.yml
@@ -39,25 +39,90 @@ env:
NUXT_PUBLIC_FIREBASE_STORAGE_BUCKET: fake
NUXT_PUBLIC_STRIPE_MONTHLY_PRICE:
jobs:
+ install-dependencies:
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v3
+ - name: Install Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ run_install: false
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - name: Setup pnpm cache
+ uses: actions/cache@v3
+ with:
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: ${{ env.STORE_PATH }}
+ restore-keys: ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install --shamefully-hoist
lint:
+ needs:
+ - install-dependencies
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-node@v3
+ - name: Checkout the repository
+ uses: actions/checkout@v3
+ - name: Install Node
+ uses: actions/setup-node@v3
with:
node-version: 16
- - uses: pnpm/action-setup@v2
- - run: pnpm install --shamefully-hoist
- - run: pnpm lint
- test-cypress:
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ run_install: false
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - name: Setup pnpm cache
+ uses: actions/cache@v3
+ with:
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: ${{ env.STORE_PATH }}
+ restore-keys: ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install --shamefully-hoist
+ - name: Run linter
+ run: pnpm lint
+ test-e2e:
+ needs:
+ - install-dependencies
runs-on: ubuntu-latest
steps:
- - uses: actions/checkout@v3
- - uses: actions/setup-node@v3
+ - name: Checkout the repository
+ uses: actions/checkout@v3
+ - name: Install Node
+ uses: actions/setup-node@v3
with:
node-version: 16
- - uses: pnpm/action-setup@v2
- - run: pnpm install --shamefully-hoist
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ run_install: false
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - name: Setup pnpm cache
+ uses: actions/cache@v3
+ with:
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: ${{ env.STORE_PATH }}
+ restore-keys: ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install --shamefully-hoist
- run: docker-compose up -d
- uses: cypress-io/github-action@v4.2.2
with:
@@ -75,3 +140,63 @@ jobs:
with:
name: cypress-videos
path: test/cypress/videos
+ test-unit:
+ needs:
+ - install-dependencies
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v3
+ - name: Install Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ run_install: false
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - name: Setup pnpm cache
+ uses: actions/cache@v3
+ with:
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: ${{ env.STORE_PATH }}
+ restore-keys: ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install --shamefully-hoist
+ - run: pnpm nuxi prepare
+ - run: pnpm test:unit
+ typecheck:
+ needs:
+ - install-dependencies
+ runs-on: ubuntu-latest
+ steps:
+ - name: Checkout the repository
+ uses: actions/checkout@v3
+ - name: Install Node
+ uses: actions/setup-node@v3
+ with:
+ node-version: 16
+ - name: Install pnpm
+ uses: pnpm/action-setup@v2
+ with:
+ version: 8
+ run_install: false
+ - name: Get pnpm store directory
+ shell: bash
+ run: |
+ echo "STORE_PATH=$(pnpm store path --silent)" >> $GITHUB_ENV
+ - name: Setup pnpm cache
+ uses: actions/cache@v3
+ with:
+ key: ${{ runner.os }}-pnpm-store-${{ hashFiles('**/pnpm-lock.yaml') }}
+ path: ${{ env.STORE_PATH }}
+ restore-keys: ${{ runner.os }}-pnpm-store-
+ - name: Install dependencies
+ run: pnpm install --shamefully-hoist
+ - run: pnpm nuxi prepare
+ - run: pnpm typecheck
diff --git a/env.d.ts b/env.d.ts
index fe38a1a3..eb82b1bc 100644
--- a/env.d.ts
+++ b/env.d.ts
@@ -1,4 +1,3 @@
-///
///
import { type Instance } from 'ink-mde'
@@ -9,14 +8,6 @@ import * as appEvents from '#helpers/app'
declare global {
var isNuxt: boolean
- namespace Cypress {
- interface Chainable {
- clearIDB: () => Cypress.Promise,
- waitForAppReady: () => Cypress.Promise,
- waitForHook: (name: AppEventType) => Cypress.Promise,
- }
- }
-
interface Navigator {
userAgentData?: {
platform: string,
diff --git a/nuxt.config.ts b/nuxt.config.ts
index a57ff925..2ee6869e 100644
--- a/nuxt.config.ts
+++ b/nuxt.config.ts
@@ -20,6 +20,8 @@ export default defineNuxtConfig({
'#composables': join(root, './composables'),
'#helpers': join(root, './helpers'),
'#root': join(root, '.'),
+ '#test': join(root, './test'),
+ '#test-utils': join(root, './test/utils'),
},
app: {
head: {
diff --git a/package.json b/package.json
index 89c28987..5878cabd 100644
--- a/package.json
+++ b/package.json
@@ -7,15 +7,17 @@
"scripts": {
"build": "nuxt prepare && nuxt typecheck && tsx manifest.ts && nuxt generate",
"clean": "rimraf .output dev-dist dist",
- "cypress": "cypress run",
- "cypress:dev": "cypress open",
"dev": "nuxt dev --port 8888",
"lint": "eslint .",
"lint:fix": "eslint --fix .",
"lint:todo": "eslint-generate-todo --format json .",
"preview": "serve -p 8889 -s ./.output/public",
- "test": "run-s cypress",
- "typecheck": "nuxt typecheck"
+ "test": "run-p test:unit test:e2e",
+ "test:e2e": "cypress run",
+ "test:unit": "vitest",
+ "typecheck": "run-s typecheck:app typecheck:cypress",
+ "typecheck:app": "nuxt typecheck",
+ "typecheck:cypress": "tsc --project ./test/cypress/tsconfig.json"
},
"dependencies": {
"@headlessui/tailwindcss": "^0.2.0",
@@ -56,17 +58,19 @@
"@types/node": "^18.16.18",
"@types/remarkable": "^2.0.3",
"@vite-pwa/nuxt": "^0.0.4",
+ "@vue/test-utils": "^2.4.1",
"@vueuse/core": "^10.2.0",
"@vueuse/head": "^1.1.26",
"@vueuse/nuxt": "^9.13.0",
"@vueuse/rxjs": "^10.2.0",
"autoprefixer": "^10.4.13",
- "cypress": "^12.0.2",
+ "cypress": "^13.3.0",
"cypress-network-idle": "^1.11.2",
"deepmerge-ts": "^4.2.1",
"eslint": "^8.48.0",
"eslint-config-artisan": "^0.2.1",
"eslint-generate-todo": "^0.2.0",
+ "happy-dom": "^12.6.0",
"micromark": "^3.1.0",
"npm-run-all": "^4.1.5",
"nuxt": "^3.5.3",
@@ -81,13 +85,26 @@
"vite-plugin-node-polyfills": "^0.14.0",
"vite-plugin-pwa": "^0.14.1",
"vite-svg-loader": "^3.6.0",
+ "vitest": "^0.34.6",
"vue-tsc": "^1.8.0",
"workbox-build": "^6.5.4",
"workbox-window": "^6.5.4"
},
"imports": {
+ "#composables/*": {
+ "default": "./composables/*"
+ },
"#root/*": {
"default": "./*"
+ },
+ "#test/*": {
+ "default": "./test/*"
+ },
+ "#test-utils": {
+ "default": "./test/utils/index.ts"
+ },
+ "#test-utils/*": {
+ "default": "./test/utils/*"
}
},
"packageManager": "pnpm@8.6.6",
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index c7ca289b..ff928aab 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -118,6 +118,9 @@ devDependencies:
'@vite-pwa/nuxt':
specifier: ^0.0.4
version: 0.0.4(@nuxt/kit@3.7.4)(vite-plugin-pwa@0.14.1)
+ '@vue/test-utils':
+ specifier: ^2.4.1
+ version: 2.4.1(vue@3.3.4)
'@vueuse/core':
specifier: ^10.2.0
version: 10.2.0(vue@3.3.4)
@@ -134,8 +137,8 @@ devDependencies:
specifier: ^10.4.13
version: 10.4.14(postcss@8.4.30)
cypress:
- specifier: ^12.0.2
- version: 12.0.2
+ specifier: ^13.3.0
+ version: 13.3.0
cypress-network-idle:
specifier: ^1.11.2
version: 1.11.2
@@ -151,6 +154,9 @@ devDependencies:
eslint-generate-todo:
specifier: ^0.2.0
version: 0.2.0(eslint@8.48.0)
+ happy-dom:
+ specifier: ^12.6.0
+ version: 12.6.0
npm-run-all:
specifier: ^4.1.5
version: 4.1.5
@@ -190,6 +196,9 @@ devDependencies:
vite-svg-loader:
specifier: ^3.6.0
version: 3.6.0
+ vitest:
+ specifier: ^0.34.6
+ version: 0.34.6(happy-dom@12.6.0)
vue-tsc:
specifier: ^1.8.0
version: 1.8.0(typescript@5.1.3)
@@ -1840,12 +1849,12 @@ packages:
postcss-selector-parser: 6.0.13
dev: true
- /@cypress/request@2.88.10:
- resolution: {integrity: sha512-Zp7F+R93N0yZyG34GutyTNr+okam7s/Fzc1+i3kcqOP8vk6OuajuE9qZJ6Rs+10/1JFtXFYMdyarnU1rZuJesg==}
+ /@cypress/request@3.0.1:
+ resolution: {integrity: sha512-TWivJlJi8ZDx2wGOw1dbLuHJKUYX7bWySw377nlnGOW3hP9/MUKIsEdXT/YngWxVdgNCHRBmFlBipE+5/2ZZlQ==}
engines: {node: '>= 6'}
dependencies:
aws-sign2: 0.7.0
- aws4: 1.11.0
+ aws4: 1.12.0
caseless: 0.12.0
combined-stream: 1.0.8
extend: 3.0.2
@@ -1857,9 +1866,9 @@ packages:
json-stringify-safe: 5.0.1
mime-types: 2.1.35
performance-now: 2.1.0
- qs: 6.5.3
+ qs: 6.10.4
safe-buffer: 5.2.1
- tough-cookie: 2.5.0
+ tough-cookie: 4.1.3
tunnel-agent: 0.6.0
uuid: 8.3.2
dev: true
@@ -2870,6 +2879,13 @@ packages:
resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==}
dev: true
+ /@jest/schemas@29.6.3:
+ resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dependencies:
+ '@sinclair/typebox': 0.27.8
+ dev: true
+
/@jridgewell/gen-mapping@0.3.3:
resolution: {integrity: sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==}
engines: {node: '>=6.0.0'}
@@ -3306,6 +3322,10 @@ packages:
- webpack
dev: true
+ /@one-ini/wasm@0.1.1:
+ resolution: {integrity: sha512-XuySG1E38YScSJoMlqovLru4KTUNSjgVTIjyh7qMX6aNN5HY5Ct5LhRJdxO79JtTzKfzV/bnWpz+zquYrISsvw==}
+ dev: true
+
/@pinia/nuxt@0.4.11(rollup@2.79.1)(typescript@5.1.3)(vue@3.3.4):
resolution: {integrity: sha512-bhuNFngJpmBCdAqWguezNJ/oJFR7wvKieqiZrmmdmPR07XjsidAw8RLXHMZE9kUm32M9E6T057OBbG/22jERTg==}
dependencies:
@@ -3617,6 +3637,10 @@ packages:
rollup: 3.29.2
dev: true
+ /@sinclair/typebox@0.27.8:
+ resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==}
+ dev: true
+
/@sindresorhus/is@0.14.0:
resolution: {integrity: sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ==}
engines: {node: '>=6'}
@@ -3668,6 +3692,16 @@ packages:
resolution: {integrity: sha512-lB9lMjuqjtuJrx7/kOkqQBtllspPIN+96OvTCeJ2j5FEzinoAXTdAMFnDAQT1KVPRlnYfBrqxtqP66vDM40xxQ==}
dev: false
+ /@types/chai-subset@1.3.3:
+ resolution: {integrity: sha512-frBecisrNGz+F4T6bcc+NLeolfiojh5FxW2klu669+8BARtyQv2C/GkNW6FUodVe4BroGMP/wER/YDGc7rEllw==}
+ dependencies:
+ '@types/chai': 4.3.6
+ dev: true
+
+ /@types/chai@4.3.6:
+ resolution: {integrity: sha512-VOVRLM1mBxIRxydiViqPcKn6MIxZytrbMpd6RJLIWKxUNr3zux8no0Oc7kJx0WAPIitgZ0gkrDS+btlqQpubpw==}
+ dev: true
+
/@types/debug@4.1.7:
resolution: {integrity: sha512-9AonUzyTjXXhEOa0DnqpzZi6VHlqKMswga9EXjpXnnqxwLtdvPPtlO8evrI5D9S6asFRCQ6v+wpiUKbw+vKqyg==}
dependencies:
@@ -3743,13 +3777,13 @@ packages:
resolution: {integrity: sha512-qelS/Ra6sacc4loe/3MSjXNL1dNQ/GjxNHVzuChwMfmk7HuycRLVQN2qNY3XahK+fZc5E2szqQSKUyAF0E+2bg==}
dev: true
- /@types/node@14.18.51:
- resolution: {integrity: sha512-P9bsdGFPpVtofEKlhWMVS2qqx1A/rt9QBfihWlklfHHpUpjtYse5AzFz6j4DWrARLYh6gRnw9+5+DJcrq3KvBA==}
- dev: true
-
/@types/node@18.18.0:
resolution: {integrity: sha512-3xA4X31gHT1F1l38ATDIL9GpRLdwVhnEFC8Uikv5ZLlXATwrCYyPq7ZWHxzxc3J/30SUiwiYT+bQe0/XvKlWbw==}
+ /@types/node@18.18.3:
+ resolution: {integrity: sha512-0OVfGupTl3NBFr8+iXpfZ8NR7jfFO+P1Q+IO/q0wbo02wYkP5gy36phojeYWpLQ6WAMjl+VfmqUk2YbUfp0irA==}
+ dev: true
+
/@types/normalize-package-data@2.4.1:
resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==}
dev: true
@@ -3793,8 +3827,8 @@ packages:
resolution: {integrity: sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g==}
dev: true
- /@types/sizzle@2.3.3:
- resolution: {integrity: sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ==}
+ /@types/sizzle@2.3.4:
+ resolution: {integrity: sha512-jA2llq2zNkg8HrALI7DtWzhALcVH0l7i89yhY3iBdOz6cBPeACoFq+fkQrjHA39t1hnSFOboZ7A/AY5MMZSlag==}
dev: true
/@types/trusted-types@2.0.2:
@@ -4158,6 +4192,44 @@ packages:
vue: 3.3.4
dev: true
+ /@vitest/expect@0.34.6:
+ resolution: {integrity: sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==}
+ dependencies:
+ '@vitest/spy': 0.34.6
+ '@vitest/utils': 0.34.6
+ chai: 4.3.10
+ dev: true
+
+ /@vitest/runner@0.34.6:
+ resolution: {integrity: sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==}
+ dependencies:
+ '@vitest/utils': 0.34.6
+ p-limit: 4.0.0
+ pathe: 1.1.1
+ dev: true
+
+ /@vitest/snapshot@0.34.6:
+ resolution: {integrity: sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==}
+ dependencies:
+ magic-string: 0.30.3
+ pathe: 1.1.1
+ pretty-format: 29.7.0
+ dev: true
+
+ /@vitest/spy@0.34.6:
+ resolution: {integrity: sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==}
+ dependencies:
+ tinyspy: 2.2.0
+ dev: true
+
+ /@vitest/utils@0.34.6:
+ resolution: {integrity: sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==}
+ dependencies:
+ diff-sequences: 29.6.3
+ loupe: 2.3.6
+ pretty-format: 29.7.0
+ dev: true
+
/@volar/language-core@1.7.6:
resolution: {integrity: sha512-r+82YGjae8ALzaX+TaESpeBOrp/H5MQnPYZLq4WKd8rsPrCAPbMwelwHLHhFpyjy66BK/cKreJAcvOc6YEwyFA==}
dependencies:
@@ -4312,6 +4384,20 @@ packages:
/@vue/shared@3.3.4:
resolution: {integrity: sha512-7OjdcV8vQ74eiz1TZLzZP4JwqM5fA94K6yntPS5Z25r9HDuGNzaGdgvwKYq6S+MxwF0TFRwe50fIR/MYnakdkQ==}
+ /@vue/test-utils@2.4.1(vue@3.3.4):
+ resolution: {integrity: sha512-VO8nragneNzUZUah6kOjiFmD/gwRjUauG9DROh6oaOeFwX1cZRUNHhdeogE8635cISigXFTtGLUQWx5KCb0xeg==}
+ peerDependencies:
+ '@vue/server-renderer': ^3.0.1
+ vue: ^3.0.1
+ peerDependenciesMeta:
+ '@vue/server-renderer':
+ optional: true
+ dependencies:
+ js-beautify: 1.14.9
+ vue: 3.3.4
+ vue-component-type-helpers: 1.8.4
+ dev: true
+
/@vue/typescript@1.8.0(typescript@5.1.3):
resolution: {integrity: sha512-swi0NM+dpZCldXkMGS8wCxvoiRgA0PJw0UQeSTA7PqB2/5LsOQ8pmxyqLPE6YsbEdn0XqI9a7QgKOmmElkaMOA==}
dependencies:
@@ -4563,6 +4649,11 @@ packages:
dependencies:
acorn: 8.10.0
+ /acorn-walk@8.2.0:
+ resolution: {integrity: sha512-k+iyHEuPgSw6SbuDpGQM+06HQUa04DZ3o+F6CSzXMvvI5KMvnaEqXe+YVe555R9nn6GPt404fos4wcgpw12SDA==}
+ engines: {node: '>=0.4.0'}
+ dev: true
+
/acorn@8.10.0:
resolution: {integrity: sha512-F0SAmZ8iUtS//m8DmCTA0jlh6TDKkHQyK6xc6V4KDTyZKA9dnvX9/3sRTVQrWm79glUAZbnmmNcdYwUIHWVybw==}
engines: {node: '>=0.4.0'}
@@ -4682,7 +4773,6 @@ packages:
/ansi-styles@5.2.0:
resolution: {integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==}
engines: {node: '>=10'}
- dev: false
/ansi-styles@6.2.1:
resolution: {integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==}
@@ -4866,6 +4956,10 @@ packages:
util: 0.12.5
dev: true
+ /assertion-error@1.1.0:
+ resolution: {integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw==}
+ dev: true
+
/ast-kit@0.6.5(rollup@2.79.1):
resolution: {integrity: sha512-XCg0VWvmWU2T/6aMp8VRfJWZ6LZv1P0o8otWY7RAGtfKj0qGi45vtnKNkltJhu9tmbQNZxv+gJA4o7FtLDfmWg==}
engines: {node: '>=16.14.0'}
@@ -4943,8 +5037,8 @@ packages:
resolution: {integrity: sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA==}
dev: true
- /aws4@1.11.0:
- resolution: {integrity: sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==}
+ /aws4@1.12.0:
+ resolution: {integrity: sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg==}
dev: true
/axios@0.26.1:
@@ -5181,6 +5275,17 @@ packages:
update-browserslist-db: 1.0.13(browserslist@4.22.0)
dev: true
+ /browserslist@4.22.1:
+ resolution: {integrity: sha512-FEVc202+2iuClEhZhrWy6ZiAcRLvNMyYcxZ8raemul1DYVOVdFsbqckWLdsixQZCpJlwe77Z3UTalE7jsjnKfQ==}
+ engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7}
+ hasBin: true
+ dependencies:
+ caniuse-lite: 1.0.30001542
+ electron-to-chromium: 1.4.539
+ node-releases: 2.0.13
+ update-browserslist-db: 1.0.13(browserslist@4.22.1)
+ dev: true
+
/buffer-crc32@0.2.13:
resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==}
dev: true
@@ -5277,8 +5382,8 @@ packages:
responselike: 1.0.2
dev: true
- /cachedir@2.3.0:
- resolution: {integrity: sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw==}
+ /cachedir@2.4.0:
+ resolution: {integrity: sha512-9EtFOZR8g22CL7BWjJ9BUx1+A/djkofnyW3aOXZORNW2kxoUpx2h+uN2cOqwPmFhnpVmxg+KW2OjOSgChTEvsQ==}
engines: {node: '>=6'}
dev: true
@@ -5319,6 +5424,10 @@ packages:
resolution: {integrity: sha512-9JL38jscuTJBTcuETxm8QLsFr/F6v0CYYTEU6r5+qSM98P2Q0Hmu0eG1dTG5GBUmywU3UlcVOUSIJYY47rdFSw==}
dev: true
+ /caniuse-lite@1.0.30001542:
+ resolution: {integrity: sha512-UrtAXVcj1mvPBFQ4sKd38daP8dEcXXr5sQe6QNNinaPd0iA/cxg9/l3VrSdL73jgw5sKyuQ6jNgiKO12W3SsVA==}
+ dev: true
+
/canvas-color-tracker@1.1.5:
resolution: {integrity: sha512-J0tDDrMU2PJfmIVWwuaU1/uPZ+d3ISmpaYZLrvd7s27ydvafl3HgNzg00DEQHLcqRZLoelBLIm8aVvNCmB582g==}
dependencies:
@@ -5346,6 +5455,19 @@ packages:
resolution: {integrity: sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw==}
dev: true
+ /chai@4.3.10:
+ resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==}
+ engines: {node: '>=4'}
+ dependencies:
+ assertion-error: 1.1.0
+ check-error: 1.0.3
+ deep-eql: 4.1.3
+ get-func-name: 2.0.2
+ loupe: 2.3.6
+ pathval: 1.1.1
+ type-detect: 4.0.8
+ dev: true
+
/chalk-template@0.4.0:
resolution: {integrity: sha512-/ghrgmhfY8RaSdeo43hNXxpoHAtxdbskUHjPpfqUWGttFgycUhYPGx3YZBCnUCvOa7Doivn1IZec3DEGFoMgLg==}
engines: {node: '>=12'}
@@ -5409,6 +5531,12 @@ packages:
resolution: {integrity: sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==}
dev: true
+ /check-error@1.0.3:
+ resolution: {integrity: sha512-iKEoDYaRmd1mxM90a2OEfWhjsjPpYPuQ+lMYsoxB126+t8fw7ySEO48nmDg5COTjxDI65/Y2OWpeEHk3ZOe8zg==}
+ dependencies:
+ get-func-name: 2.0.2
+ dev: true
+
/check-more-types@2.24.0:
resolution: {integrity: sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA==}
engines: {node: '>= 0.8.0'}
@@ -5666,7 +5794,6 @@ packages:
/commander@10.0.1:
resolution: {integrity: sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug==}
engines: {node: '>=14'}
- dev: false
/commander@2.20.3:
resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==}
@@ -5675,11 +5802,6 @@ packages:
resolution: {integrity: sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==}
engines: {node: '>= 6'}
- /commander@5.1.0:
- resolution: {integrity: sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg==}
- engines: {node: '>= 6'}
- dev: true
-
/commander@6.2.1:
resolution: {integrity: sha512-U7VdrJFnJgo4xjrHpTzu0yrHPGImdsmD95ZlgYSEajAn2JKzDhDTPG9kBTefmObL2w/ngeZnilk+OV9CG3d7UA==}
engines: {node: '>= 6'}
@@ -5747,6 +5869,13 @@ packages:
typedarray: 0.0.6
dev: true
+ /config-chain@1.1.13:
+ resolution: {integrity: sha512-qj+f8APARXHrM0hraqXYb2/bOVSV4PvJQlNZ/DVj0QrmNM2q2euizkeuVckQ57J+W0mRH6Hvi+k50M4Jul2VRQ==}
+ dependencies:
+ ini: 1.3.8
+ proto-list: 1.2.4
+ dev: true
+
/configstore@5.0.1:
resolution: {integrity: sha512-aMKprgk5YhBNyH25hj8wGt2+D52Sw1DRRIzqBwLp2Ya9mFmY8KPvvtvmna8SxVR9JMZ4kzMD68N22vlaRpkeFA==}
engines: {node: '>=8'}
@@ -6026,6 +6155,10 @@ packages:
engines: {node: '>= 6'}
dev: true
+ /css.escape@1.5.1:
+ resolution: {integrity: sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg==}
+ dev: true
+
/cssesc@3.0.0:
resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==}
engines: {node: '>=4'}
@@ -6119,31 +6252,31 @@ packages:
resolution: {integrity: sha512-0xOA1OMiecfJuZ9uyOv0UaU/57nLXrthRKCzNQNuNZcwgdrMt6f9/MwmTye4WbQbA2YaoeVmQbuIWUzZaoelfA==}
dev: true
- /cypress@12.0.2:
- resolution: {integrity: sha512-WnLx1DpnbF1vbpDBkgP14rK5yS3U+Gvxrv2fsB4Owma26oIyENj7DDRnsJbSZuTfG4mcuUJxAkRHJR2wBqBfMA==}
- engines: {node: ^14.0.0 || ^16.0.0 || >=18.0.0}
+ /cypress@13.3.0:
+ resolution: {integrity: sha512-mpI8qcTwLGiA4zEQvTC/U1xGUezVV4V8HQCOYjlEOrVmU1etVvxOjkCXHGwrlYdZU/EPmUiWfsO3yt1o+Q2bgw==}
+ engines: {node: ^16.0.0 || ^18.0.0 || >=20.0.0}
hasBin: true
requiresBuild: true
dependencies:
- '@cypress/request': 2.88.10
+ '@cypress/request': 3.0.1
'@cypress/xvfb': 1.2.4(supports-color@8.1.1)
- '@types/node': 14.18.51
+ '@types/node': 18.18.0
'@types/sinonjs__fake-timers': 8.1.1
- '@types/sizzle': 2.3.3
+ '@types/sizzle': 2.3.4
arch: 2.2.0
blob-util: 2.0.2
bluebird: 3.7.2
buffer: 5.7.1
- cachedir: 2.3.0
+ cachedir: 2.4.0
chalk: 4.1.2
check-more-types: 2.24.0
cli-cursor: 3.1.0
cli-table3: 0.6.3
- commander: 5.1.0
+ commander: 6.2.1
common-tags: 1.8.2
- dayjs: 1.11.7
+ dayjs: 1.11.10
debug: 4.3.4(supports-color@8.1.1)
- enquirer: 2.3.6
+ enquirer: 2.4.1
eventemitter2: 6.4.7
execa: 4.1.0
executable: 4.1.1
@@ -6154,12 +6287,13 @@ packages:
is-ci: 3.0.1
is-installed-globally: 0.4.0
lazy-ass: 1.6.0
- listr2: 3.14.0(enquirer@2.3.6)
+ listr2: 3.14.0(enquirer@2.4.1)
lodash: 4.17.21
log-symbols: 4.1.0
- minimist: 1.2.7
+ minimist: 1.2.8
ospath: 1.2.2
pretty-bytes: 5.6.0
+ process: 0.11.10
proxy-from-env: 1.0.0
request-progress: 3.0.0
semver: 7.5.4
@@ -6707,8 +6841,8 @@ packages:
engines: {node: '>= 12'}
dev: true
- /dayjs@1.11.7:
- resolution: {integrity: sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ==}
+ /dayjs@1.11.10:
+ resolution: {integrity: sha512-vjAczensTgRcqDERK0SR2XMwsF/tSvnvlv6VcF2GIhg6Sx4yOIt/irsr1RDJsKiIyBzJDpCoXiWWq28MqH2cnQ==}
dev: true
/de-indent@1.0.2:
@@ -6772,6 +6906,13 @@ packages:
mimic-response: 1.0.1
dev: true
+ /deep-eql@4.1.3:
+ resolution: {integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw==}
+ engines: {node: '>=6'}
+ dependencies:
+ type-detect: 4.0.8
+ dev: true
+
/deep-equal@1.0.1:
resolution: {integrity: sha512-bHtC0iYvWhyaTzvV3CZgPeZQqCOBGyGsVV7v4eevpdkLHfiSrXUdBG+qAuSz4RI70sszvjQ1QSZ98An1yNwpSw==}
dev: true
@@ -6905,6 +7046,11 @@ packages:
/didyoumean@1.2.2:
resolution: {integrity: sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==}
+ /diff-sequences@29.6.3:
+ resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dev: true
+
/diff@4.0.2:
resolution: {integrity: sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A==}
engines: {node: '>=0.3.1'}
@@ -7058,6 +7204,17 @@ packages:
time-span: 4.0.0
dev: true
+ /editorconfig@1.0.4:
+ resolution: {integrity: sha512-L9Qe08KWTlqYMVvMcTIvMAdl1cDUubzRNYL+WfA4bLDMHe4nemKkpmYzkznE1FwLKu0EEmy6obgQKzMJrg4x9Q==}
+ engines: {node: '>=14'}
+ hasBin: true
+ dependencies:
+ '@one-ini/wasm': 0.1.1
+ commander: 10.0.1
+ minimatch: 9.0.1
+ semver: 7.5.4
+ dev: true
+
/ee-first@1.1.1:
resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==}
dev: true
@@ -7074,6 +7231,10 @@ packages:
resolution: {integrity: sha512-H6gi5E41Rn3/mhKlPaT1aIMg/71hTAqn0gYEllSuw9igNWtvQwu185jiCZoZD29n7Zukgh7GVZ3zGf0XvkhqjQ==}
dev: true
+ /electron-to-chromium@1.4.539:
+ resolution: {integrity: sha512-wRmWJ8F7rgmINuI32S6r2SLrw/h/bJQsDSvBiq9GBfvc2Lh73qTOwn73r3Cf67mjVgFGJYcYtmERzySa5jIWlg==}
+ dev: true
+
/elliptic@6.5.4:
resolution: {integrity: sha512-iLhC6ULemrljPZb+QutR5TQGB+pdW6KGD5RSegS+8sorOZT+rdQFbsQFJgvN3eRqNALqJer4oQ16YvJHlU8hzQ==}
dependencies:
@@ -7126,11 +7287,12 @@ packages:
tapable: 2.2.1
dev: true
- /enquirer@2.3.6:
- resolution: {integrity: sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg==}
+ /enquirer@2.4.1:
+ resolution: {integrity: sha512-rRqJg/6gd538VHvR3PSrdRBb/1Vy2YfzHqzvbhGIQpDRKIa4FgV/54b5Q1xYSxOOwKvjXweS26E0Q+nAMwp2pQ==}
engines: {node: '>=8.6'}
dependencies:
ansi-colors: 4.1.3
+ strip-ansi: 6.0.1
dev: true
/entities@2.2.0:
@@ -8102,11 +8264,6 @@ packages:
engines: {'0': node >=0.6.0}
dev: true
- /extsprintf@1.4.1:
- resolution: {integrity: sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA==}
- engines: {'0': node >=0.6.0}
- dev: true
-
/eyes@0.1.8:
resolution: {integrity: sha512-GipyPsXO1anza0AOZdy69Im7hGFCNB7Y/NGjDlZGJ3GJJLtwNSb2vrzYrTYJRrRloVx7pl+bhUaTB8yiccPvFQ==}
engines: {node: '> 0.1.90'}
@@ -8457,6 +8614,10 @@ packages:
resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==}
engines: {node: 6.* || 8.* || >= 10.*}
+ /get-func-name@2.0.2:
+ resolution: {integrity: sha512-8vXOvuE167CtIc3OyItco7N/dpRtBbYOsPsXCz7X/PMnlGjYjSGuZJgM1Y7mmew7BKf9BqvLX2tnOVy1BBUsxQ==}
+ dev: true
+
/get-intrinsic@1.2.1:
resolution: {integrity: sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw==}
dependencies:
@@ -8702,6 +8863,17 @@ packages:
uncrypto: 0.1.3
dev: true
+ /happy-dom@12.6.0:
+ resolution: {integrity: sha512-gwin5N69/F6A64Sa8umvduVW5PhZljTILMZN5niyAwPsLTw6fzl+c2CukUNoy5Lc5jb5g32QaMUKw9dBGO+NJw==}
+ dependencies:
+ css.escape: 1.5.1
+ entities: 4.5.0
+ iconv-lite: 0.6.3
+ webidl-conversions: 7.0.0
+ whatwg-encoding: 2.0.0
+ whatwg-mimetype: 3.0.0
+ dev: true
+
/has-ansi@2.0.0:
resolution: {integrity: sha512-C8vBJ8DwUCx19vhm7urhTuUsr4/IyP6l4VzNQDv+ryHQObW3TTTp9yB68WpYgRe2bbaGuZ/se74IqFeVnMnLZg==}
engines: {node: '>=0.10.0'}
@@ -8943,7 +9115,6 @@ packages:
engines: {node: '>=0.10.0'}
dependencies:
safer-buffer: 2.1.2
- dev: false
/icss-utils@5.1.0(postcss@8.4.30):
resolution: {integrity: sha512-soFhflCVWLfRNOPU3iv5Z9VUdT44xFRbzjLsEzSr5AQmgqPMTHdU3PMT1Cf1ssx8fLNJDA1juftYl+PUcv3MqA==}
@@ -9486,7 +9657,7 @@ packages:
resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==}
engines: {node: '>= 10.13.0'}
dependencies:
- '@types/node': 18.18.0
+ '@types/node': 18.18.3
merge-stream: 2.0.0
supports-color: 8.1.1
dev: true
@@ -9495,6 +9666,17 @@ packages:
resolution: {integrity: sha512-3TV69ZbrvV6U5DfQimop50jE9Dl6J8O1ja1dvBbMba/sZ3YBEQqJ2VZRoQPVnhlzjNtU1vaXRZVrVjU4qtm8yA==}
hasBin: true
+ /js-beautify@1.14.9:
+ resolution: {integrity: sha512-coM7xq1syLcMyuVGyToxcj2AlzhkDjmfklL8r0JgJ7A76wyGMpJ1oA35mr4APdYNO/o/4YY8H54NQIJzhMbhBg==}
+ engines: {node: '>=12'}
+ hasBin: true
+ dependencies:
+ config-chain: 1.1.13
+ editorconfig: 1.0.4
+ glob: 8.1.0
+ nopt: 6.0.0
+ dev: true
+
/js-tiktoken@1.0.7:
resolution: {integrity: sha512-biba8u/clw7iesNEWLOLwrNGoBP2lA+hTaBLs/D45pJdUPFXyxD6nhcDVtADChghv4GgyAiMKYMiRx7x6h7Biw==}
dependencies:
@@ -9584,7 +9766,7 @@ packages:
resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==}
hasBin: true
dependencies:
- minimist: 1.2.7
+ minimist: 1.2.8
dev: true
/json5@2.2.3:
@@ -10030,7 +10212,7 @@ packages:
ufo: 1.3.0
dev: true
- /listr2@3.14.0(enquirer@2.3.6):
+ /listr2@3.14.0(enquirer@2.4.1):
resolution: {integrity: sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g==}
engines: {node: '>=10.0.0'}
peerDependencies:
@@ -10041,7 +10223,7 @@ packages:
dependencies:
cli-truncate: 2.1.0
colorette: 2.0.20
- enquirer: 2.3.6
+ enquirer: 2.4.1
log-update: 4.0.0
p-map: 4.0.0
rfdc: 1.3.0
@@ -10201,6 +10383,12 @@ packages:
resolution: {integrity: sha512-GKSNGeNAtw8IryjjkhZxuKB3JzlcLTwjtiQCHKvqQet81I93kXslhDQruGI/QsddO83mcDToBVy7GqGS/zYf/A==}
dev: false
+ /loupe@2.3.6:
+ resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==}
+ dependencies:
+ get-func-name: 2.0.2
+ dev: true
+
/lowercase-keys@1.0.1:
resolution: {integrity: sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA==}
engines: {node: '>=0.10.0'}
@@ -10718,6 +10906,10 @@ packages:
resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==}
dev: true
+ /minimist@1.2.8:
+ resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==}
+ dev: true
+
/minipass@3.3.6:
resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==}
engines: {node: '>=8'}
@@ -10742,7 +10934,7 @@ packages:
resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==}
hasBin: true
dependencies:
- minimist: 1.2.7
+ minimist: 1.2.8
dev: true
/mkdirp@1.0.4:
@@ -11048,6 +11240,14 @@ packages:
abbrev: 1.1.1
dev: true
+ /nopt@6.0.0:
+ resolution: {integrity: sha512-ZwLpbTgdhuZUnZzjd7nb1ZV+4DoiC6/sfiVKok72ym/4Tlf+DFdlHYmT2JPmcNNWV6Pi3SDf1kT+A4r9RTuT9g==}
+ engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0}
+ hasBin: true
+ dependencies:
+ abbrev: 1.1.1
+ dev: true
+
/normalize-package-data@2.5.0:
resolution: {integrity: sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==}
dependencies:
@@ -11468,6 +11668,13 @@ packages:
dependencies:
yocto-queue: 0.1.0
+ /p-limit@4.0.0:
+ resolution: {integrity: sha512-5b0R4txpzjPWVw/cXXUResoD4hb6U/x9BH08L7nw+GN1sezDzPdxeRvpc9c433fZhBan/wusjbCsqwqm4EIBIQ==}
+ engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
+ dependencies:
+ yocto-queue: 1.0.0
+ dev: true
+
/p-locate@4.1.0:
resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==}
engines: {node: '>=8'}
@@ -11672,6 +11879,10 @@ packages:
resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==}
dev: true
+ /pathval@1.1.1:
+ resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==}
+ dev: true
+
/pbkdf2@3.1.2:
resolution: {integrity: sha512-iuh7L6jA7JEGu2WxDwtQP1ddOpaJNC4KlDEFfdQajSGgGPNi4OyDc2R7QnbY2bR9QjBVGwgvTdNJZoE7RaxUMA==}
engines: {node: '>=0.12'}
@@ -12265,6 +12476,15 @@ packages:
engines: {node: ^14.13.1 || >=16.0.0}
dev: true
+ /pretty-format@29.7.0:
+ resolution: {integrity: sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==}
+ engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
+ dependencies:
+ '@jest/schemas': 29.6.3
+ ansi-styles: 5.2.0
+ react-is: 18.2.0
+ dev: true
+
/pretty-ms@7.0.1:
resolution: {integrity: sha512-973driJZvxiGOQ5ONsFhOF/DtzPMOMtgC11kCpUrPGMTgqp2q/1gwzCquocrN33is0VZ5GFHXZYMM9l6h67v2Q==}
engines: {node: '>=10'}
@@ -12296,6 +12516,10 @@ packages:
sisteransi: 1.0.5
dev: true
+ /proto-list@1.2.4:
+ resolution: {integrity: sha512-vtK/94akxsTMhe0/cbfpR+syPuszcuwhqVjJq26CuNDgFGj682oRBXOP5MJpv2r7JtE8MsiepGIqvvOTBwn2vA==}
+ dev: true
+
/protobufjs@6.11.3:
resolution: {integrity: sha512-xL96WDdCZYdU7Slin569tFX712BxsxslWwAfAhCYjQKGTq7dAU91Lomy6nLLhh/dyGhk/YH4TwTSRxTzhuHyZg==}
hasBin: true
@@ -12377,6 +12601,11 @@ packages:
resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==}
engines: {node: '>=6'}
+ /punycode@2.3.0:
+ resolution: {integrity: sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA==}
+ engines: {node: '>=6'}
+ dev: true
+
/pupa@2.1.1:
resolution: {integrity: sha512-l1jNAspIBSFqbT+y+5FosojNpVpF94nlI+wDUpqP9enwOTfHx9f0gh5nB96vl+6yTpsJsypeNrwfzPrKuHB41A==}
engines: {node: '>=8'}
@@ -12384,16 +12613,18 @@ packages:
escape-goat: 2.1.1
dev: true
- /qs@6.11.2:
- resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
+ /qs@6.10.4:
+ resolution: {integrity: sha512-OQiU+C+Ds5qiH91qh/mg0w+8nwQuLjM4F4M/PbmhDOoYehPh+Fb0bDjtR1sOvy7YKxvj28Y/M0PhP5uVX0kB+g==}
engines: {node: '>=0.6'}
dependencies:
side-channel: 1.0.4
dev: true
- /qs@6.5.3:
- resolution: {integrity: sha512-qxXIEh4pCGfHICj1mAJQ2/2XVZkjCDTcEgfoSQxc/fYivUZxTkk7L3bDBJSoNrEzXI17oUO5Dp07ktqE5KzczA==}
+ /qs@6.11.2:
+ resolution: {integrity: sha512-tDNIz22aBzCDxLtVH++VnTfzxlfeK5CbqohpSqpJgj1Wg/cQbStNAz3NuqCs5vV+pjBsK4x4pN9HlVh7rcYRiA==}
engines: {node: '>=0.6'}
+ dependencies:
+ side-channel: 1.0.4
dev: true
/querystring-es3@0.2.1:
@@ -12401,6 +12632,10 @@ packages:
engines: {node: '>=0.4.x'}
dev: true
+ /querystringify@2.2.0:
+ resolution: {integrity: sha512-FIqgj2EUvTa7R50u0rGsyTftzjYmv/a3hO345bZNrqabNqjtgiDMgmo4mkUjd+nzU5oF3dClKqFIPUKybUyqoQ==}
+ dev: true
+
/queue-microtask@1.2.3:
resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==}
@@ -12445,10 +12680,14 @@ packages:
dependencies:
deep-extend: 0.6.0
ini: 1.3.8
- minimist: 1.2.7
+ minimist: 1.2.8
strip-json-comments: 2.0.1
dev: true
+ /react-is@18.2.0:
+ resolution: {integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==}
+ dev: true
+
/read-cache@1.0.0:
resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==}
dependencies:
@@ -13084,6 +13323,10 @@ packages:
object-inspect: 1.12.3
dev: true
+ /siginfo@2.0.0:
+ resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==}
+ dev: true
+
/signal-exit@3.0.7:
resolution: {integrity: sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ==}
dev: true
@@ -13222,6 +13465,10 @@ packages:
resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==}
dev: true
+ /stackback@0.0.2:
+ resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==}
+ dev: true
+
/standard-as-callback@2.1.0:
resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==}
dev: true
@@ -13716,10 +13963,24 @@ packages:
resolution: {integrity: sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==}
dev: true
+ /tinybench@2.5.1:
+ resolution: {integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg==}
+ dev: true
+
/tinycolor2@1.4.2:
resolution: {integrity: sha512-vJhccZPs965sV/L2sU4oRQVAos0pQXwsvTLkWYdqJ+a8Q5kPFzJTuOFwy7UniPli44NKQGAglksjvOcpo95aZA==}
dev: false
+ /tinypool@0.7.0:
+ resolution: {integrity: sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==}
+ engines: {node: '>=14.0.0'}
+ dev: true
+
+ /tinyspy@2.2.0:
+ resolution: {integrity: sha512-d2eda04AN/cPOR89F7Xv5bK/jrQEhmcLFe6HFldoeO9AJtps+fqEnh486vnT/8y4bw38pSyxDcTCAq+Ks2aJTg==}
+ engines: {node: '>=14.0.0'}
+ dev: true
+
/tmp@0.0.29:
resolution: {integrity: sha512-89PTqMWGDva+GqClOqBV9s3SMh7MA3Mq0pJUdAoHuF65YoE7O0LermaZkVfT5/Ngfo18H4eYiyG7zKOtnEbxsw==}
engines: {node: '>=0.4.0'}
@@ -13761,12 +14022,14 @@ packages:
engines: {node: '>=0.6'}
dev: true
- /tough-cookie@2.5.0:
- resolution: {integrity: sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g==}
- engines: {node: '>=0.8'}
+ /tough-cookie@4.1.3:
+ resolution: {integrity: sha512-aX/y5pVRkfRnfmuX+OdbSdXvPe6ieKX/G2s7e98f4poJHnqH3281gDPm/metm6E/WRamfx7WC4HUqkWHfQHprw==}
+ engines: {node: '>=6'}
dependencies:
psl: 1.9.0
- punycode: 2.1.1
+ punycode: 2.3.0
+ universalify: 0.2.0
+ url-parse: 1.5.10
dev: true
/tr46@0.0.3:
@@ -13812,7 +14075,7 @@ packages:
dependencies:
'@types/json5': 0.0.29
json5: 1.0.2
- minimist: 1.2.7
+ minimist: 1.2.8
strip-bom: 3.0.0
dev: true
@@ -13869,6 +14132,11 @@ packages:
dependencies:
prelude-ls: 1.2.1
+ /type-detect@4.0.8:
+ resolution: {integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g==}
+ engines: {node: '>=4'}
+ dev: true
+
/type-fest@0.16.0:
resolution: {integrity: sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==}
engines: {node: '>=10'}
@@ -14092,6 +14360,11 @@ packages:
'@types/unist': 2.0.8
dev: true
+ /universalify@0.2.0:
+ resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==}
+ engines: {node: '>= 4.0.0'}
+ dev: true
+
/universalify@2.0.0:
resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==}
engines: {node: '>= 10.0.0'}
@@ -14216,6 +14489,17 @@ packages:
picocolors: 1.0.0
dev: true
+ /update-browserslist-db@1.0.13(browserslist@4.22.1):
+ resolution: {integrity: sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==}
+ hasBin: true
+ peerDependencies:
+ browserslist: '>= 4.21.0'
+ dependencies:
+ browserslist: 4.22.1
+ escalade: 3.1.1
+ picocolors: 1.0.0
+ dev: true
+
/update-check@1.5.4:
resolution: {integrity: sha512-5YHsflzHP4t1G+8WGPlvKbJEbAJGCgw+Em+dGR1KmBUbr1J36SJBqlHLjR7oob7sco5hWHGQVcr9B2poIVDDTQ==}
dependencies:
@@ -14255,6 +14539,13 @@ packages:
prepend-http: 2.0.0
dev: true
+ /url-parse@1.5.10:
+ resolution: {integrity: sha512-WypcfiRhfeUP9vvF0j6rw0J3hrWrw6iZv3+22h6iRMJ/8z1Tj6XfLP4DsUix5MhMPnXpiHDoKyoZ/bdCkwBCiQ==}
+ dependencies:
+ querystringify: 2.2.0
+ requires-port: 1.0.0
+ dev: true
+
/url@0.11.2:
resolution: {integrity: sha512-7yIgNnrST44S7PJ5+jXbdIupfU1nWUdQJBFBeJRclPXiWgCvrSq5Frw8lr/i//n5sqDfzoKmBymMS81l4U/7cg==}
dependencies:
@@ -14421,7 +14712,7 @@ packages:
dependencies:
assert-plus: 1.0.0
core-util-is: 1.0.2
- extsprintf: 1.4.1
+ extsprintf: 1.3.0
dev: true
/vite-node@0.31.4(@types/node@18.18.0):
@@ -14446,6 +14737,28 @@ packages:
- terser
dev: true
+ /vite-node@0.34.6(@types/node@18.18.0):
+ resolution: {integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==}
+ engines: {node: '>=v14.18.0'}
+ hasBin: true
+ dependencies:
+ cac: 6.7.14
+ debug: 4.3.4(supports-color@8.1.1)
+ mlly: 1.4.2
+ pathe: 1.1.1
+ picocolors: 1.0.0
+ vite: 4.4.9(@types/node@18.18.0)
+ transitivePeerDependencies:
+ - '@types/node'
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ dev: true
+
/vite-plugin-checker@0.6.0(eslint@8.48.0)(typescript@5.1.3)(vite@4.3.9)(vue-tsc@1.8.0):
resolution: {integrity: sha512-DWZ9Hv2TkpjviPxAelNUt4Q3IhSGrx7xrwdM64NI+Q4dt8PaMWJJh4qGNtSrfEuiuIzWWo00Ksvh5It4Y3L9xQ==}
engines: {node: '>=14.16'}
@@ -14609,6 +14922,72 @@ packages:
fsevents: 2.3.3
dev: true
+ /vitest@0.34.6(happy-dom@12.6.0):
+ resolution: {integrity: sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==}
+ engines: {node: '>=v14.18.0'}
+ hasBin: true
+ peerDependencies:
+ '@edge-runtime/vm': '*'
+ '@vitest/browser': '*'
+ '@vitest/ui': '*'
+ happy-dom: '*'
+ jsdom: '*'
+ playwright: '*'
+ safaridriver: '*'
+ webdriverio: '*'
+ peerDependenciesMeta:
+ '@edge-runtime/vm':
+ optional: true
+ '@vitest/browser':
+ optional: true
+ '@vitest/ui':
+ optional: true
+ happy-dom:
+ optional: true
+ jsdom:
+ optional: true
+ playwright:
+ optional: true
+ safaridriver:
+ optional: true
+ webdriverio:
+ optional: true
+ dependencies:
+ '@types/chai': 4.3.6
+ '@types/chai-subset': 1.3.3
+ '@types/node': 18.18.0
+ '@vitest/expect': 0.34.6
+ '@vitest/runner': 0.34.6
+ '@vitest/snapshot': 0.34.6
+ '@vitest/spy': 0.34.6
+ '@vitest/utils': 0.34.6
+ acorn: 8.10.0
+ acorn-walk: 8.2.0
+ cac: 6.7.14
+ chai: 4.3.10
+ debug: 4.3.4(supports-color@8.1.1)
+ happy-dom: 12.6.0
+ local-pkg: 0.4.3
+ magic-string: 0.30.3
+ pathe: 1.1.1
+ picocolors: 1.0.0
+ std-env: 3.4.3
+ strip-literal: 1.3.0
+ tinybench: 2.5.1
+ tinypool: 0.7.0
+ vite: 4.4.9(@types/node@18.18.0)
+ vite-node: 0.34.6(@types/node@18.18.0)
+ why-is-node-running: 2.2.2
+ transitivePeerDependencies:
+ - less
+ - lightningcss
+ - sass
+ - stylus
+ - sugarss
+ - supports-color
+ - terser
+ dev: true
+
/vm-browserify@1.1.2:
resolution: {integrity: sha512-2ham8XPWTONajOR0ohOKOHXkm3+gaBmGut3SRuu75xLd/RRaY6vqgh8NBYYk7+RW3u5AtzPQZG8F10LHkl0lAQ==}
dev: true
@@ -14659,6 +15038,10 @@ packages:
ufo: 1.3.0
dev: true
+ /vue-component-type-helpers@1.8.4:
+ resolution: {integrity: sha512-6bnLkn8O0JJyiFSIF0EfCogzeqNXpnjJ0vW/SZzNHfe6sPx30lTtTXlE5TFs2qhJlAtDFybStVNpL73cPe3OMQ==}
+ dev: true
+
/vue-demi@0.14.5(vue@3.3.4):
resolution: {integrity: sha512-o9NUVpl/YlsGJ7t+xuqJKx8EBGf1quRhCiT6D/J0pfwmk9zUwYkC7yrF4SZCe6fETvSM3UNL2edcbYrSyc4QHA==}
engines: {node: '>=12'}
@@ -14780,6 +15163,11 @@ packages:
resolution: {integrity: sha512-YQ+BmxuTgd6UXZW3+ICGfyqRyHXVlD5GtQr5+qjiNW7bF0cqrzX500HVXPBOvgXb5YnzDd+h0zqyv61KUD7+Sg==}
dev: true
+ /webidl-conversions@7.0.0:
+ resolution: {integrity: sha512-VwddBukDzu71offAQR975unBIGqfKZpM+8ZX6ySk8nYhVoo5CYaZyzt3YBvYtRtO+aoGlqxPg/B87NGVZ/fu6g==}
+ engines: {node: '>=12'}
+ dev: true
+
/webpack-sources@3.2.3:
resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==}
engines: {node: '>=10.13.0'}
@@ -14806,7 +15194,7 @@ packages:
'@webassemblyjs/wasm-parser': 1.11.6
acorn: 8.10.0
acorn-import-assertions: 1.9.0(acorn@8.10.0)
- browserslist: 4.22.0
+ browserslist: 4.22.1
chrome-trace-event: 1.0.3
enhanced-resolve: 5.15.0
es-module-lexer: 1.3.1
@@ -14843,6 +15231,18 @@ packages:
engines: {node: '>=0.8.0'}
dev: false
+ /whatwg-encoding@2.0.0:
+ resolution: {integrity: sha512-p41ogyeMUrw3jWclHWTQg1k05DSVXPLcVxRTYsXUk+ZooOCZLcoYgPZ/HL/D/N+uQPOtcp1me1WhBEaX02mhWg==}
+ engines: {node: '>=12'}
+ dependencies:
+ iconv-lite: 0.6.3
+ dev: true
+
+ /whatwg-mimetype@3.0.0:
+ resolution: {integrity: sha512-nt+N2dzIutVRxARx1nghPKGv1xHikU7HKdfafKkLNLindmPU/ch3U31NOCGGA/dmPcmb1VlofO0vnKAcsm0o/Q==}
+ engines: {node: '>=12'}
+ dev: true
+
/whatwg-url@5.0.0:
resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==}
dependencies:
@@ -14892,6 +15292,15 @@ packages:
dependencies:
isexe: 2.0.0
+ /why-is-node-running@2.2.2:
+ resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==}
+ engines: {node: '>=8'}
+ hasBin: true
+ dependencies:
+ siginfo: 2.0.0
+ stackback: 0.0.2
+ dev: true
+
/wide-align@1.1.5:
resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==}
dependencies:
@@ -15216,6 +15625,11 @@ packages:
resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
engines: {node: '>=10'}
+ /yocto-queue@1.0.0:
+ resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==}
+ engines: {node: '>=12.20'}
+ dev: true
+
/zhead@2.0.4:
resolution: {integrity: sha512-V4R94t3ifk9AURym6OskbKcnowzgp5Z88tkoL/NF67vyryNxC62u6mx5F1Ux4oh4+YN7FFmKYEyWy6m5kfPH6g==}
dev: true
diff --git a/test/cypress/cypress.d.ts b/test/cypress/cypress.d.ts
new file mode 100644
index 00000000..6d4cbd5a
--- /dev/null
+++ b/test/cypress/cypress.d.ts
@@ -0,0 +1 @@
+///
diff --git a/test/cypress/e2e/encryption.cy.ts b/test/cypress/e2e/encryption.cy.ts
index e1cdb1fe..74cec2c6 100644
--- a/test/cypress/e2e/encryption.cy.ts
+++ b/test/cypress/e2e/encryption.cy.ts
@@ -3,10 +3,19 @@ import docs from '#root/test/fixtures/encryption/docs.json'
describe('encryption', () => {
beforeEach(() => {
- cy.clearIDB().then(() => {
- const cache = localforage.createInstance({ name: 'firebase/documents' })
+ cy.clearIDB()
+ cy.wrap(null).then(() => {
+ return new Cypress.Promise(async (resolve, reject) => {
+ try {
+ const cache = localforage.createInstance({ name: 'firebase/documents' })
- return Promise.all(docs.map(doc => cache.setItem(doc.id, doc)))
+ await Promise.all(docs.map(doc => cache.setItem(doc.id, doc)))
+
+ resolve()
+ } catch (error) {
+ reject(error)
+ }
+ })
})
cy.visit('/')
cy.waitForAppReady()
diff --git a/test/cypress/support/commands.ts b/test/cypress/support/commands.ts
index e6ab1a9a..f847fd9c 100644
--- a/test/cypress/support/commands.ts
+++ b/test/cypress/support/commands.ts
@@ -1,7 +1,23 @@
import localforage from 'localforage'
+import type * as appEvents from '#helpers/app'
import 'cypress-network-idle'
+declare global {
+ // eslint-disable-next-line @typescript-eslint/no-namespace
+ namespace Cypress {
+ interface Chainable {
+ clearIDB: () => typeof Cypress.Promise,
+ waitForAppReady: () => typeof Cypress.Promise,
+ waitForHook: (name: appEvents.AppEventType) => typeof Cypress.Promise,
+ }
+ }
+
+ interface Window {
+ appEvents: typeof appEvents,
+ }
+}
+
const signOut = async () => {
const firebaseDb = localforage.createInstance({
name: 'firebaseLocalStorageDb',
@@ -11,9 +27,9 @@ const signOut = async () => {
const keys = await firebaseDb.keys()
return Promise.all(
- keys.map((key) => {
+ keys.map((key) => (
firebaseDb.removeItem(key)
- })
+ )),
)
}
@@ -21,12 +37,20 @@ const signOut = async () => {
Cypress.Commands.add('clearIDB', () => {
const names = ['contexts', 'firebase/documents', 'settings']
- return new Cypress.Promise((resolve, reject) => {
- signOut().then(() => {
- return Promise.all(names.map(name => localforage.createInstance({ name }).clear())).then(things => {
- resolve(things)
- })
- }).catch(reject)
+ cy.wrap(null).then(() => {
+ return new Cypress.Promise(async (resolve, reject) => {
+ try {
+ await signOut()
+
+ for (const name of names) {
+ await localforage.createInstance({ name }).clear()
+ }
+
+ resolve()
+ } catch (error) {
+ reject(error)
+ }
+ })
})
})
diff --git a/test/cypress/tsconfig.json b/test/cypress/tsconfig.json
new file mode 100644
index 00000000..4f245b87
--- /dev/null
+++ b/test/cypress/tsconfig.json
@@ -0,0 +1,11 @@
+{
+ "extends": "../../tsconfig.json",
+ "compilerOptions": {
+ "noEmit": true,
+ "sourceMap": false
+ },
+ "exclude": [],
+ "include": [
+ "./**/*"
+ ]
+}
diff --git a/test/unit/composables/injectOr.test.ts b/test/unit/composables/injectOr.test.ts
new file mode 100644
index 00000000..40a929ee
--- /dev/null
+++ b/test/unit/composables/injectOr.test.ts
@@ -0,0 +1,67 @@
+import { injectOr } from '#composables/injectOr'
+import { describe, expect, it, shallowMount, vi } from '#test-utils'
+
+describe('injectOr', () => {
+ it('returns the injected value', () => {
+ const injectionKey = 'test-key'
+ const injectedValue = 'injected-value'
+ const fallbackValue = 'fallback-value'
+ const config = { global: { provide: { [injectionKey]: injectedValue } } }
+
+ shallowMount({
+ setup: () => {
+ const result = injectOr(injectionKey, () => fallbackValue)
+
+ expect(result).toEqual(injectedValue)
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('returns the fallback value if the injected value is undefined', () => {
+ const injectionKey = 'test-key'
+ const fallbackValue = 'fallback-value'
+ const config = { global: { provide: { [injectionKey]: undefined } } }
+
+ shallowMount({
+ setup: () => {
+ const result = injectOr(injectionKey, () => fallbackValue)
+
+ expect(result).toEqual(fallbackValue)
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('returns the fallback value if the injection key is not present', () => {
+ const injectionKey = 'test-key'
+ const injectedValue = 'injected-value'
+ const fallbackValue = 'fallback-value'
+ const config = { global: { provide: { [injectionKey]: injectedValue } } }
+
+ shallowMount({
+ setup: () => {
+ const result = injectOr('fake-key', () => fallbackValue)
+
+ expect(result).toEqual(fallbackValue)
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('does not invoke the fallback factory function when a value is injected', () => {
+ const injectionKey = 'test-key'
+ const injectedValue = 'injected-value'
+ const fallbackFactory = vi.fn()
+ const config = { global: { provide: { [injectionKey]: injectedValue } } }
+
+ shallowMount({
+ setup: () => {
+ injectOr(injectionKey, fallbackFactory)
+
+ expect(fallbackFactory).not.toHaveBeenCalled()
+ },
+ render: () => {},
+ }, config)
+ })
+})
diff --git a/test/unit/composables/injectOrProvide.test.ts b/test/unit/composables/injectOrProvide.test.ts
new file mode 100644
index 00000000..6787699c
--- /dev/null
+++ b/test/unit/composables/injectOrProvide.test.ts
@@ -0,0 +1,91 @@
+import { h, inject } from 'vue'
+import { injectOrProvide } from '#composables/injectOrProvide'
+import { describe, expect, it, shallowMount, vi } from '#test-utils'
+
+describe('injectOrProvide', () => {
+ it('returns the injected value', () => {
+ const injectionKey = 'test-key'
+ const injectedValue = 'injected-value'
+ const fallbackValue = 'fallback-value'
+ const config = { global: { provide: { [injectionKey]: injectedValue } } }
+
+ shallowMount({
+ setup: () => {
+ const result = injectOrProvide(injectionKey, () => fallbackValue)
+
+ expect(result).toEqual(injectedValue)
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('returns the fallback value if the injected value is undefined', () => {
+ const injectionKey = 'test-key'
+ const fallbackValue = 'fallback-value'
+ const config = { global: { provide: { [injectionKey]: undefined } } }
+
+ shallowMount({
+ setup: () => {
+ const result = injectOrProvide(injectionKey, () => fallbackValue)
+
+ expect(result).toEqual(fallbackValue)
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('returns the fallback value if the injection key is not present', () => {
+ const injectionKey = 'test-key'
+ const injectedValue = 'injected-value'
+ const fallbackValue = 'fallback-value'
+ const config = { global: { provide: { [injectionKey]: injectedValue } } }
+
+ shallowMount({
+ setup: () => {
+ const result = injectOrProvide('fake-key', () => fallbackValue)
+
+ expect(result).toEqual(fallbackValue)
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('does not invoke the fallback factory function when a value is injected', () => {
+ const injectionKey = 'test-key'
+ const injectedValue = 'injected-value'
+ const fallbackFactory = vi.fn()
+ const config = { global: { provide: { [injectionKey]: injectedValue } } }
+
+ shallowMount({
+ setup: () => {
+ injectOrProvide(injectionKey, fallbackFactory)
+
+ expect(fallbackFactory).not.toHaveBeenCalled()
+ },
+ render: () => {},
+ }, config)
+ })
+
+ it('provides the fallback value to descendants if nothing is injected', () => {
+ const injectionKey = 'test-key'
+ const fallbackValue = 'fallback-value'
+
+ shallowMount({
+ setup: () => {
+ injectOrProvide(injectionKey, () => fallbackValue)
+
+ return () => {
+ return h({
+ setup() {
+ const result = inject(injectionKey)
+
+ expect(result).toEqual(fallbackValue)
+ },
+ render: () => {},
+ })
+ }
+ },
+ render: () => {},
+ })
+ })
+})
diff --git a/test/utils/index.ts b/test/utils/index.ts
new file mode 100644
index 00000000..1384aa53
--- /dev/null
+++ b/test/utils/index.ts
@@ -0,0 +1,2 @@
+export * from '@vue/test-utils'
+export * from 'vitest'
diff --git a/tsconfig.json b/tsconfig.json
index 4992d566..17f14bc8 100644
--- a/tsconfig.json
+++ b/tsconfig.json
@@ -1,4 +1,5 @@
{
+ "extends": "./.nuxt/tsconfig.json",
"compilerOptions": {
"allowJs": true,
"esModuleInterop": true,
@@ -11,8 +12,14 @@
"skipLibCheck": true,
"strict": true,
"target": "esnext",
- "types": ["vite/client"],
"useDefineForClassFields": true
},
- "extends": "./.nuxt/tsconfig.json"
+ "exclude": [
+ "./.output",
+ "./cypress.config.ts",
+ "./dev-dist",
+ "./dist",
+ "./node_modules/cypress/**/*",
+ "./test/cypress/**/*"
+ ]
}
diff --git a/vite.config.ts b/vite.config.ts
index dc3e6583..d28ce992 100644
--- a/vite.config.ts
+++ b/vite.config.ts
@@ -15,4 +15,7 @@ export default defineConfig({
}),
svgPlugin(),
],
+ test: {
+ environment: 'happy-dom',
+ },
})