From 055fc9b24895aba8fa4941491700a401766cb506 Mon Sep 17 00:00:00 2001 From: David Cramer Date: Tue, 21 Nov 2023 13:39:47 -0800 Subject: [PATCH] fix: Handle missing root transactions (#93) There are (currently unknown) situations where a span batch may not be able to identify a root transaction. That is, all spans available in the transaction group are siblings. This may not be the ideal fix, and we'll revisit shortly. This is simply to unblock UI errors. Refs GH-90, GH-61 --- .github/workflows/test.yml | 33 + .gitignore | 4 +- package.json | 2 + packages/core/package.json | 9 +- .../integrations/sentry/utils/traces.test.ts | 130 ++++ .../src/integrations/sentry/utils/traces.ts | 19 +- packages/core/vitest.config.ts | 18 + packages/sidecar/server.js | 0 pnpm-lock.yaml | 567 +++++++++++++++++- 9 files changed, 760 insertions(+), 22 deletions(-) create mode 100644 .github/workflows/test.yml create mode 100644 packages/core/src/integrations/sentry/utils/traces.test.ts create mode 100644 packages/core/vitest.config.ts mode change 100644 => 100755 packages/sidecar/server.js diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml new file mode 100644 index 00000000..d29598f9 --- /dev/null +++ b/.github/workflows/test.yml @@ -0,0 +1,33 @@ +name: Test + +on: + push: + branches: [main] + pull_request: + +jobs: + test: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v4 + with: + fetch-depth: 0 + - name: Install pnpm + uses: pnpm/action-setup@v2 + - name: Setup Node + uses: actions/setup-node@v3 + - name: Install deps + run: pnpm install + - name: Build packages + run: pnpm build + - name: Run tests + run: pnpm test:ci + - name: Publish Test Report + uses: mikepenz/action-junit-report@v4 + if: success() || failure() + with: + report_paths: '**/junit.xml' + - name: Upload coverage reports to Codecov + uses: codecov/codecov-action@v3 + env: + CODECOV_TOKEN: ${{ secrets.CODECOV_TOKEN }} diff --git a/.gitignore b/.gitignore index 5c9c4be3..a8434b92 100644 --- a/.gitignore +++ b/.gitignore @@ -29,4 +29,6 @@ dist-ssr .yalc yalc.lock .vite-inspect -.vercel \ No newline at end of file +.vercel + +junit.xml diff --git a/package.json b/package.json index a72d2f55..2ec9dbf9 100644 --- a/package.json +++ b/package.json @@ -11,6 +11,8 @@ "preinstall": "npx only-allow pnpm", "postinstall": "simple-git-hooks", "format": "prettier --write --cache .", + "test": "pnpm -r --stream --parallel run test", + "test:ci": "CI=true pnpm -r run test:ci", "yalc:publish": "yalc publish --push --sig --private", "changeset:add": "pnpm changeset", "changeset:consume": "pnpm changeset version", diff --git a/packages/core/package.json b/packages/core/package.json index b1d1d899..248119ef 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -9,6 +9,8 @@ "build": "tsc && vite build", "build:watch": "vite build --watch", "preview": "vite preview", + "test": "vitest", + "test:ci": "vitest --coverage --reporter=junit --reporter=default --outputFile=junit.xml", "yalc:publish": "yalc publish --push --sig --private" }, "files": [ @@ -36,21 +38,24 @@ "usehooks-ts": "^2.9.1" }, "devDependencies": { - "@spotlightjs/tsconfig": "workspace:*", + "@paralleldrive/cuid2": "^2.2.2", "@sentry/types": "^7.77.0", + "@spotlightjs/tsconfig": "workspace:*", "@tailwindcss/forms": "^0.5.4", "@types/react": "^18.2.37", "@types/react-dom": "^18.2.15", "@typescript-eslint/eslint-plugin": "^6.0.0", "@typescript-eslint/parser": "^6.0.0", "@vitejs/plugin-react": "^4.0.3", + "@vitest/coverage-v8": "^0.34.6", "eslint": "^8.45.0", "eslint-plugin-react-hooks": "^4.6.0", "eslint-plugin-react-refresh": "^0.4.3", "typescript": "^5.0.2", "vite": "^4.4.5", "vite-plugin-dts": "^3.5.2", - "vite-plugin-svgr": "^3.2.0" + "vite-plugin-svgr": "^3.2.0", + "vitest": "^0.34.6" }, "volta": { "extends": "../../package.json" diff --git a/packages/core/src/integrations/sentry/utils/traces.test.ts b/packages/core/src/integrations/sentry/utils/traces.test.ts new file mode 100644 index 00000000..b46adcf6 --- /dev/null +++ b/packages/core/src/integrations/sentry/utils/traces.test.ts @@ -0,0 +1,130 @@ +import { createId } from '@paralleldrive/cuid2'; +import { describe, expect, test } from 'vitest'; +import { Span } from '../types'; +import { groupSpans } from './traces'; + +function mockSpan({ duration, ...span }: Partial & { duration?: number } = {}): Span { + const defaultTimestamp = new Date().getTime(); + return { + trace_id: createId(), + span_id: createId(), + op: 'unknown', + status: 'unknown', + start_timestamp: defaultTimestamp, + timestamp: duration ? (span.start_timestamp || defaultTimestamp) + duration : defaultTimestamp, + ...span, + }; +} + +describe('groupSpans', () => { + test('empty span list', () => { + expect(groupSpans([])).toEqual([]); + }); + + test('simple parent and child relationship', () => { + const parent1 = mockSpan({}); + const span1 = mockSpan({ + parent_span_id: parent1.span_id, + trace_id: parent1.trace_id, + }); + const span2 = mockSpan({ + parent_span_id: parent1.span_id, + trace_id: parent1.trace_id, + }); + const result = groupSpans([parent1, span1, span2]); + console.debug(result); + expect(result.length).toEqual(1); + expect(result[0].span_id).toEqual(parent1.span_id); + expect(result[0].children?.length).toEqual(2); + expect(result[0].children![0].span_id).toEqual(span1.span_id); + expect(result[0].children![1].span_id).toEqual(span2.span_id); + }); + + test('multiple parent and child relationship both parents as root', () => { + const parent1 = mockSpan({ + start_timestamp: new Date().getTime() - 1, + }); + + const span1 = mockSpan({ + parent_span_id: parent1.span_id, + trace_id: parent1.trace_id, + }); + const span2 = mockSpan({ + parent_span_id: parent1.span_id, + trace_id: parent1.trace_id, + }); + + const parent2 = mockSpan({}); + const span3 = mockSpan({ + parent_span_id: parent2.span_id, + trace_id: parent2.trace_id, + }); + const span4 = mockSpan({ + parent_span_id: parent2.span_id, + trace_id: parent2.trace_id, + }); + const result = groupSpans([parent1, span1, span2, parent2, span3, span4]); + console.debug(result); + expect(result.length).toEqual(2); + expect(result[0].span_id).toEqual(parent1.span_id); + expect(result[0].children?.length).toEqual(2); + expect(result[0].children![0].span_id).toEqual(span1.span_id); + expect(result[0].children![1].span_id).toEqual(span2.span_id); + expect(result[1].span_id).toEqual(parent2.span_id); + expect(result[1].children?.length).toEqual(2); + expect(result[1].children![0].span_id).toEqual(span3.span_id); + expect(result[1].children![1].span_id).toEqual(span4.span_id); + }); + + test('missing root transactions as siblings, creates faux parent', () => { + const parent_span_id = createId(); + const span1 = mockSpan({ + parent_span_id, + }); + const span2 = mockSpan({ + parent_span_id, + trace_id: span1.trace_id, + }); + const result = groupSpans([span1, span2]); + console.debug(result); + expect(result.length).toEqual(1); + expect(result[0].op).toEqual('orphan'); + expect(result[0].description).toEqual('missing or unknown parent span'); + expect(result[0].status).toEqual('unknown'); + expect(result[0].parent_span_id).toBe(null); + console.debug(result[0].children); + expect(result[0].children?.length).toEqual(2); + expect(result[0].children![0].span_id).toEqual(span1.span_id); + expect(result[0].children![1].span_id).toEqual(span2.span_id); + }); + + test('missing root transactions as independent children, creates faux parents', () => { + const span1 = mockSpan({ + parent_span_id: createId(), + }); + const span2 = mockSpan({ + parent_span_id: createId(), + trace_id: span1.trace_id, + }); + const result = groupSpans([span1, span2]); + console.debug(result); + expect(result.length).toEqual(2); + expect(result[0].span_id).toEqual(span1.parent_span_id); + expect(result[0].op).toEqual('orphan'); + expect(result[0].description).toEqual('missing or unknown parent span'); + expect(result[0].status).toEqual('unknown'); + expect(result[0].parent_span_id).toBe(null); + console.debug(result[0].children); + expect(result[0].children?.length).toEqual(1); + expect(result[0].children![0].span_id).toEqual(span1.span_id); + + expect(result[1].span_id).toEqual(span2.parent_span_id); + expect(result[1].op).toEqual('orphan'); + expect(result[1].description).toEqual('missing or unknown parent span'); + expect(result[1].status).toEqual('unknown'); + expect(result[1].parent_span_id).toBe(null); + console.debug(result[1].children); + expect(result[1].children?.length).toEqual(1); + expect(result[1].children![0].span_id).toEqual(span2.span_id); + }); +}); diff --git a/packages/core/src/integrations/sentry/utils/traces.ts b/packages/core/src/integrations/sentry/utils/traces.ts index 0459268a..829ff216 100644 --- a/packages/core/src/integrations/sentry/utils/traces.ts +++ b/packages/core/src/integrations/sentry/utils/traces.ts @@ -19,22 +19,29 @@ export function groupSpans(spans: Span[]) { } else if (span.parent_span_id) { const parentParent = sortedSpans.find(s => !s.parent_span_id); if (!parentParent) { - console.log('Cant create a faux parent'); - return; + console.log(`Root span (${span.parent_span_id}) for span (${span.span_id}). Creating orphan.`); + } else { + console.log(`Creating orphan for parent (${span.parent_span_id}) for span (${span.span_id})`); } parent = { trace_id: span.trace_id, span_id: span.parent_span_id, - parent_span_id: parentParent.span_id, + parent_span_id: parentParent ? parentParent.span_id : null, op: 'orphan', - description: 'missing parent span', + description: 'missing or unknown parent span', children: [span], start_timestamp: span.start_timestamp, timestamp: span.timestamp, status: 'unknown', }; - if (!parentParent.children) parentParent.children = []; - parentParent.children.push(parent); + idLookup.set(parent.span_id, parent); + // sortedSpans.splice(spanIdx, 0, parent); + if (parentParent) { + if (!parentParent.children) parentParent.children = []; + parentParent.children.push(parent); + } else { + tree.push(parent); + } } else { tree.push(span); } diff --git a/packages/core/vitest.config.ts b/packages/core/vitest.config.ts new file mode 100644 index 00000000..abb2ef0d --- /dev/null +++ b/packages/core/vitest.config.ts @@ -0,0 +1,18 @@ +/// + +// import tsconfigPaths from "vite-tsconfig-paths"; +import { defineConfig } from 'vitest/config'; + +export default defineConfig({ + // plugins: [tsconfigPaths()], + test: { + coverage: { + provider: 'v8', + reporter: ['json'], + }, + globals: true, + // setupFiles: ["./src/test/setup-test-env.ts"], + include: ['./src/**/*.{test,spec}.{js,mjs,cjs,ts,mts,cts,jsx,tsx}'], + watchExclude: ['.*\\/node_modules\\/.*', '.*\\/dist\\/.*'], + }, +}); diff --git a/packages/sidecar/server.js b/packages/sidecar/server.js old mode 100644 new mode 100755 diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f9fda71c..82e0368f 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -114,6 +114,9 @@ importers: specifier: ^2.9.1 version: 2.9.1(react-dom@18.2.0)(react@18.2.0) devDependencies: + '@paralleldrive/cuid2': + specifier: ^2.2.2 + version: 2.2.2 '@sentry/types': specifier: ^7.77.0 version: 7.77.0 @@ -138,6 +141,9 @@ importers: '@vitejs/plugin-react': specifier: ^4.0.3 version: 4.1.0(vite@4.4.5) + '@vitest/coverage-v8': + specifier: ^0.34.6 + version: 0.34.6(vitest@0.34.6) eslint: specifier: ^8.45.0 version: 8.45.0 @@ -159,6 +165,9 @@ importers: vite-plugin-svgr: specifier: ^3.2.0 version: 3.2.0(typescript@5.0.4)(vite@4.4.5) + vitest: + specifier: ^0.34.6 + version: 0.34.6 packages/playground: dependencies: @@ -921,6 +930,11 @@ packages: '@babel/helper-validator-identifier': 7.22.20 to-fast-properties: 2.0.0 + /@bcoe/v8-coverage@0.2.3: + resolution: + { integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw== } + dev: true + /@changesets/apply-release-plan@6.1.4: resolution: { integrity: sha512-FMpKF1fRlJyCZVYHr3CbinpZZ+6MwvOtWUuO8uo+svcATEoc1zRDcj23pAurJ2TZ/uVz1wFHH6K3NlACy0PLew== } @@ -1668,6 +1682,20 @@ packages: wrap-ansi-cjs: /wrap-ansi@7.0.0 dev: true + /@istanbuljs/schema@0.1.3: + resolution: + { integrity: sha512-ZXRY4jNvVgSVQ8DL3LTcakaAtXwTVUxE81hslsyD2AtoXW/wVob10HkOJ1X/pAlcI7D+2YoZKg5do8G/w6RYgA== } + engines: { node: '>=8' } + 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== } @@ -1811,6 +1839,12 @@ packages: { integrity: sha512-9b8mPpKrfeGRuhFH5iO1iwCLeIIsV6+H1sRfxbkoGXIyQE2BTsPd9zqSqQJ+pv5sJ/hT5M1zvOFL02MnEezFug== } dev: true + /@noble/hashes@1.3.2: + resolution: + { integrity: sha512-MVC8EAQp7MvEcm30KWENFjgR+Mkmf+D189XJTkFIlwohU5hcBbn1ZkKq7KVTi2Hme3PMGF390DaL52beVrIihQ== } + engines: { node: '>= 16' } + dev: true + /@nodelib/fs.scandir@2.1.5: resolution: { integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== } @@ -1882,6 +1916,13 @@ packages: dev: false optional: true + /@paralleldrive/cuid2@2.2.2: + resolution: + { integrity: sha512-ZOBkgDwEdoYVlSeRbYYXs0S9MejQofiVYoTbKzy/6GQa39/q5tQU2IX46+shYnUkpEl3wc+J6wRlar7r2EK2xA== } + dependencies: + '@noble/hashes': 1.3.2 + dev: true + /@pkgjs/parseargs@0.11.0: resolution: { integrity: sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg== } @@ -2176,6 +2217,11 @@ packages: - supports-color dev: false + /@sinclair/typebox@0.27.8: + resolution: + { integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA== } + dev: true + /@sveltejs/vite-plugin-svelte-inspector@1.0.4(@sveltejs/vite-plugin-svelte@2.5.2)(svelte@5.0.0-next.4)(vite@4.5.0): resolution: { integrity: sha512-zjiuZ3yydBtwpF3bj0kQNV0YXe+iKE545QGZVTaylW3eAzFr+pJ/cwK8lZEaRp4JtaJXhD5DyWAV4AxLh6DgaQ== } @@ -2188,7 +2234,7 @@ packages: '@sveltejs/vite-plugin-svelte': 2.5.2(svelte@5.0.0-next.4)(vite@4.5.0) debug: 4.3.4 svelte: 5.0.0-next.4 - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 transitivePeerDependencies: - supports-color dev: false @@ -2208,7 +2254,7 @@ packages: magic-string: 0.30.5 svelte: 5.0.0-next.4 svelte-hmr: 0.15.3(svelte@5.0.0-next.4) - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 vitefu: 0.2.5(vite@4.5.0) transitivePeerDependencies: - supports-color @@ -2423,6 +2469,18 @@ packages: dependencies: '@babel/types': 7.23.0 + /@types/chai-subset@1.3.5: + resolution: + { integrity: sha512-c2mPnw+xHtXDoHmdtcCXGwyLMiauiAyxWMzhGpqHC4nqI/Y5G2XhTampslK2rb59kpcuHon03UH8W6iYUzw88A== } + dependencies: + '@types/chai': 4.3.11 + dev: true + + /@types/chai@4.3.11: + resolution: + { integrity: sha512-qQR1dr2rGIHYlJulmr8Ioq3De0Le9E4MJ5AiaeAETJJpndT1uUNHsGFK3L/UIu+rbkQSdj8J/w2bCsBZc/Y5fQ== } + dev: true + /@types/debug@4.1.10: resolution: { integrity: sha512-tOSCru6s732pofZ+sMv9o4o3Zc+Sa8l3bxd/tweTQudFn06vAzb13ZX46Zi6m6EJ+RUbRTHvgQJ1gBtSgkaUYA== } @@ -2462,6 +2520,11 @@ packages: ci-info: 3.9.0 dev: true + /@types/istanbul-lib-coverage@2.0.6: + resolution: + { integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w== } + dev: true + /@types/json-schema@7.0.14: resolution: { integrity: sha512-U3PUjAudAdJBeC2pgN8uTIKgxrb4nlDF3SF0++EldXQvQBGkpFZMSnwQiIoDU77tv45VgNkl/L4ouD+rEomujw== } @@ -2516,13 +2579,13 @@ packages: /@types/node@18.0.0: resolution: { integrity: sha512-cHlGmko4gWLVI27cGJntjs/Sj8th9aYwplmZFwmmgYQQvL5NUsgVJG7OddLvNfLqYS31KFN0s3qlaD9qCaxACA== } + dev: true /@types/node@18.18.8: resolution: { integrity: sha512-OLGBaaK5V3VRBS1bAkMVP2/W9B+H8meUfl866OrMNQqt7wDgdpWPp5o6gmIc9pB+lIQHSq4ZL8ypeH1vPxcPaQ== } dependencies: undici-types: 5.26.5 - dev: false /@types/normalize-package-data@2.4.4: resolution: @@ -2921,9 +2984,74 @@ packages: '@babel/plugin-transform-react-jsx-source': 7.22.5(@babel/core@7.23.2) '@types/babel__core': 7.20.3 react-refresh: 0.14.0 - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 + transitivePeerDependencies: + - supports-color + + /@vitest/coverage-v8@0.34.6(vitest@0.34.6): + resolution: + { integrity: sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw== } + peerDependencies: + vitest: '>=0.32.0 <1' + dependencies: + '@ampproject/remapping': 2.2.1 + '@bcoe/v8-coverage': 0.2.3 + istanbul-lib-coverage: 3.2.2 + istanbul-lib-report: 3.0.1 + istanbul-lib-source-maps: 4.0.1 + istanbul-reports: 3.1.6 + magic-string: 0.30.5 + picocolors: 1.0.0 + std-env: 3.5.0 + test-exclude: 6.0.0 + v8-to-istanbul: 9.1.3 + vitest: 0.34.6 transitivePeerDependencies: - supports-color + 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.5 + 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.7 + pretty-format: 29.7.0 + dev: true /@volar/kit@1.10.10(typescript@5.2.2): resolution: @@ -3056,6 +3184,12 @@ packages: dependencies: acorn: 8.11.2 + /acorn-walk@8.3.0: + resolution: + { integrity: sha512-FS7hV565M5l1R08MXqo8odwMTB02C2UqzB17RVgu9EyuYFBqJZ3/ZY97sQD5FewVu1UyDFc1yztUDrAwT0EypA== } + engines: { node: '>=0.4.0' } + dev: true + /acorn@8.11.2: resolution: { integrity: sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== } @@ -3127,6 +3261,12 @@ packages: dependencies: color-convert: 2.0.1 + /ansi-styles@5.2.0: + resolution: + { integrity: sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA== } + engines: { node: '>=10' } + dev: true + /ansi-styles@6.2.1: resolution: { integrity: sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug== } @@ -3229,6 +3369,11 @@ packages: engines: { node: '>=0.10.0' } dev: true + /assertion-error@1.1.0: + resolution: + { integrity: sha512-jgsaNduz+ndvGyFt3uSuWqvy4lCnIJiovtouQN5JZHOKCS2QuhEdbcQHFhVksz2N2U9hXJo8odG7ETyWlEeuDw== } + dev: true + /astring@1.8.6: resolution: { integrity: sha512-ISvCdHdlTDlH5IpxQJIex7BWBywFWgjJSVdwst+/iQCoEYnyOaQ95+X1JGshuBjGp6nxKUy1jMgE3zPqN7fQdg== } @@ -3293,7 +3438,7 @@ packages: tsconfck: 3.0.0(typescript@5.0.4) unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 vitefu: 0.2.5(vite@4.5.0) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -3371,7 +3516,7 @@ packages: tsconfck: 3.0.0(typescript@5.2.2) unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 vitefu: 0.2.5(vite@4.5.0) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -3449,7 +3594,7 @@ packages: tsconfck: 3.0.0(typescript@5.2.2) unist-util-visit: 4.1.2 vfile: 5.3.7 - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 vitefu: 0.2.5(vite@4.5.0) which-pm: 2.1.1 yargs-parser: 21.1.1 @@ -3687,6 +3832,12 @@ packages: run-applescript: 5.0.0 dev: true + /cac@6.7.14: + resolution: + { integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ== } + engines: { node: '>=8' } + dev: true + /call-bind@1.0.5: resolution: { integrity: sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== } @@ -3744,6 +3895,20 @@ packages: { integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg== } dev: false + /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.7 + pathval: 1.1.1 + type-detect: 4.0.8 + dev: true + /chalk@2.4.2: resolution: { integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== } @@ -3792,6 +3957,13 @@ packages: { 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 + /chokidar@3.5.3: resolution: { integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw== } @@ -4156,6 +4328,14 @@ packages: { integrity: sha512-OUepMozQULMLUmhxS95Vudo0jb0UchLimi3+pQ2plj61Fcy8axbP9hbiD4Sz6DPqn6XG3kfmziVfQ1rSys5AJQ== } dev: false + /deep-eql@4.1.3: + resolution: + { integrity: sha512-WaEtAOpRA1MQ0eohqZjpGD8zdI0Ovsm8mmFhaDN8dvDZzyoUMcYDnf5Y6iu7HTXxf8JDS23qWa4a+hKCDyOPzw== } + engines: { node: '>=6' } + dependencies: + type-detect: 4.0.8 + dev: true + /deep-extend@0.6.0: resolution: { integrity: sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== } @@ -4282,6 +4462,12 @@ packages: 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@5.1.0: resolution: { integrity: sha512-D+mk+qE8VC/PAUrlAU34N+VfXev0ghe5ywmpqrawphmVZc1bEfn56uo9qpyGp1p4xpzOHkSW4ztBd6L7Xx4ACw== } @@ -5152,6 +5338,11 @@ packages: { 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.2: resolution: { integrity: sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== } @@ -5623,6 +5814,11 @@ packages: { integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw== } dev: true + /html-escaper@2.0.2: + resolution: + { integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg== } + dev: true + /html-escaper@3.0.3: resolution: { integrity: sha512-RuMffC89BOWQoY0WKGpIhn5gX3iI54O6nRA0yC124NYVtzjmFWBIiFd8M0x+ZdX0P9R4lADg1mgP8C7PxGOWuQ== } @@ -6071,6 +6267,43 @@ packages: resolution: { integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== } + /istanbul-lib-coverage@3.2.2: + resolution: + { integrity: sha512-O8dpsF+r0WV/8MNRKfnmrtCWhuKjxrq2w+jpzBL5UZKTi2LeVWnWOmWRxFlesJONmc+wLAGvKQZEOanko0LFTg== } + engines: { node: '>=8' } + dev: true + + /istanbul-lib-report@3.0.1: + resolution: + { integrity: sha512-GCfE1mtsHGOELCU8e/Z7YWzpmybrx/+dSTfLrvY8qRmaY6zXTKWn6WQIjaAFw069icm6GVMNkgu0NzI4iPZUNw== } + engines: { node: '>=10' } + dependencies: + istanbul-lib-coverage: 3.2.2 + make-dir: 4.0.0 + supports-color: 7.2.0 + dev: true + + /istanbul-lib-source-maps@4.0.1: + resolution: + { integrity: sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw== } + engines: { node: '>=10' } + dependencies: + debug: 4.3.4 + istanbul-lib-coverage: 3.2.2 + source-map: 0.6.1 + transitivePeerDependencies: + - supports-color + dev: true + + /istanbul-reports@3.1.6: + resolution: + { integrity: sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg== } + engines: { node: '>=8' } + dependencies: + html-escaper: 2.0.2 + istanbul-lib-report: 3.0.1 + dev: true + /jackspeak@2.3.6: resolution: { integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ== } @@ -6147,6 +6380,11 @@ packages: { integrity: sha512-H8jvkz1O50L3dMZCsLqiuB2tA7muqbSg1AtGEkN0leAqGjsUzDJir3Zwr02BhqdcITPg3ei3mZ+HjMocAknhhg== } dev: false + /jsonc-parser@3.2.0: + resolution: + { integrity: sha512-gfFQZrcTc8CnKXp6Y4/CBT3fTc0OVuDofpre4aEeEpSBPV5X5v4+Vmx+8snU7RLPrNHPKSgLxGo9YuQzz20o+w== } + dev: true + /jsonfile@4.0.0: resolution: { integrity: sha512-m6F1R3z8jjlf2imQHS2Qez5sjKWQzbuuhuJ/FKYFRZvPE3PuHcSMVZzfsLhGVOkfd20obL5SWEBew5ShlquNxg== } @@ -6252,6 +6490,12 @@ packages: pify: 4.0.1 strip-bom: 3.0.0 + /local-pkg@0.4.3: + resolution: + { integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g== } + engines: { node: '>=14' } + dev: true + /locate-character@3.0.0: resolution: { integrity: sha512-SW13ws7BjaeJ6p7Q6CO2nchbYEc3X3J6WrmTTDto7yMPqVSZTUyY5Tjbid+Ab8gLnATtygYtiDIJGQRRn2ZOiA== } @@ -6339,6 +6583,13 @@ packages: js-tokens: 4.0.0 dev: false + /loupe@2.3.7: + resolution: + { integrity: sha512-zSMINGVYkdpYSOBmLi0D1Uo7JU9nVdQKrHxC8eYlV+9YKK9WePqAlL7lSlorG/U2Fw1w0hTBmaa/jrQ3UbPHtA== } + dependencies: + get-func-name: 2.0.2 + dev: true + /lower-case@2.0.2: resolution: { integrity: sha512-7fm3l3NAF9WfN6W3JOmf5drwpVqX78JtoGJ3A6W0a6ZnldM41w2fV5D490psKFTpMds8TJse/eHLFFsNHHjHgg== } @@ -6386,7 +6637,6 @@ packages: engines: { node: '>=12' } dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - dev: false /make-dir@3.1.0: resolution: @@ -6396,6 +6646,14 @@ packages: semver: 6.3.1 dev: false + /make-dir@4.0.0: + resolution: + { integrity: sha512-hXdUTZYIVOt1Ex//jAQi+wTZZpUpwBj/0QsOzqegb3rGMMeJiSEu5xLHnYfBrRV4RH2+OCSOO95Is/7x1WJ4bw== } + engines: { node: '>=10' } + dependencies: + semver: 7.5.4 + dev: true + /map-obj@1.0.1: resolution: { integrity: sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg== } @@ -7240,6 +7498,16 @@ packages: hasBin: true dev: false + /mlly@1.4.2: + resolution: + { integrity: sha512-i/Ykufi2t1EZ6NaPLdfnZk2AX8cs0d+mTzVKuPfqPKPatxLApaBoxJQ9x1/uckXtrS/U5oisPMDkNs0yQTaBRg== } + dependencies: + acorn: 8.11.2 + pathe: 1.1.1 + pkg-types: 1.0.3 + ufo: 1.3.2 + dev: true + /moo@0.5.2: resolution: { integrity: sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q== } @@ -7584,7 +7852,6 @@ packages: engines: { node: ^12.20.0 || ^14.13.1 || >=16.0.0 } dependencies: yocto-queue: 1.0.0 - dev: false /p-locate@4.1.0: resolution: @@ -7747,6 +8014,16 @@ packages: engines: { node: '>=8' } dev: true + /pathe@1.1.1: + resolution: + { integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q== } + dev: true + + /pathval@1.1.1: + resolution: + { integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ== } + dev: true + /periscopic@3.1.0: resolution: { integrity: sha512-vKiQ8RRtkl9P+r/+oefh25C3fhybptkHKCZSPlcXiJux2tJF55GnEj3BVn4A5gKfq9NWWXXrxkHBwVPUfH0opw== } @@ -7794,6 +8071,15 @@ packages: dependencies: find-up: 4.1.0 + /pkg-types@1.0.3: + resolution: + { integrity: sha512-nN7pYi0AQqJnoLPC9eHFQ8AcyaixBUOwvqc5TDnIKCMEE6I0y8P7OKA7fPexsXGCGxQDl/cmrLAp26LhcwxZ4A== } + dependencies: + jsonc-parser: 3.2.0 + mlly: 1.4.2 + pathe: 1.1.1 + dev: true + /platformicons@5.6.2(react@18.2.0): resolution: { integrity: sha512-2X/cWYohEqVAMQiz/MCVjgJaFEX/jiSXncqcgnMztPcsCSL5JpLn4d8CBeSBjpMIDTlCvGF90p0vM0oc7yGTpA== } @@ -8008,6 +8294,16 @@ packages: engines: { node: '>=14' } hasBin: 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 + /prismjs@1.29.0: resolution: { integrity: sha512-Kx/1w86q/epKcmte75LNrEoT+lX8pBpavuAbvJWRXar7Hz8jrtF+e3vY751p0R8H9HdArwaCTNDDzHg/ScJK1Q== } @@ -8126,6 +8422,11 @@ packages: scheduler: 0.23.0 dev: false + /react-is@18.2.0: + resolution: + { integrity: sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w== } + dev: true + /react-refresh@0.14.0: resolution: { integrity: sha512-wViHqhAd8OHeLS/IRMJjTSDHF3U9eWi62F/MledQGPdJGDhodXJ9PBLNGr6WWL7qlH12Mt3TyTpbS+hGXMjCzQ== } @@ -8692,6 +8993,11 @@ packages: object-inspect: 1.13.1 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== } @@ -8855,12 +9161,22 @@ packages: nearley: 2.20.1 dev: false + /stackback@0.0.2: + resolution: + { integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw== } + dev: true + /statuses@2.0.1: resolution: { integrity: sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ== } engines: { node: '>= 0.8' } dev: false + /std-env@3.5.0: + resolution: + { integrity: sha512-JGUEaALvL0Mf6JCfYnJOTcobY+Nc7sG/TemDRBqCA0wEr4DER7zDchaaixTlmOxAjG1uRJmX82EQcxwTQTkqVA== } + dev: true + /stdin-discarder@0.1.0: resolution: { integrity: sha512-xhV7w8S+bUwlPTb4bAOUQhv8/cSS5offJuX8GQGq32ONF0ZtDWKfkdomM3HMRA+LhX6um/FZ0COqlwsjD53LeQ== } @@ -9026,6 +9342,13 @@ packages: engines: { node: '>=8' } dev: true + /strip-literal@1.3.0: + resolution: + { integrity: sha512-PugKzOsyXpArk0yWmUwqOZecSO0GH0bPoctLcqNDH9J04pVW3lflYE0ujElBGTloevcxF5MofAOZ7C5l2b+wLg== } + dependencies: + acorn: 8.11.2 + dev: true + /style-to-object@0.4.4: resolution: { integrity: sha512-HYNoHZa2GorYNyqiCaBgsxvcJIn7OHq6inEga+E6Ke3m5JkoqpQbnFssk4jwe+K7AhGa2fcha4wSOf1Kn01dMg== } @@ -9203,6 +9526,16 @@ packages: engines: { node: '>=8' } dev: true + /test-exclude@6.0.0: + resolution: + { integrity: sha512-cAGWPIyOHU6zlmg88jwm7VRyXnMN7iV68OGAbYDk/Mh/xC/pzVPlQtY6ngoIH/5/tciuhGfvESU8GrHrcxD56w== } + engines: { node: '>=8' } + dependencies: + '@istanbuljs/schema': 0.1.3 + glob: 7.2.3 + minimatch: 3.1.2 + dev: true + /text-table@0.2.0: resolution: { integrity: sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== } @@ -9221,6 +9554,23 @@ packages: dependencies: any-promise: 1.3.0 + /tinybench@2.5.1: + resolution: + { integrity: sha512-65NKvSuAVDP/n4CqH+a9w2kTlLReS9vhsAP06MWx+/89nMinJyB2icyl58RIcqCmIggpojIGeuJGhjU1aGMBSg== } + dev: true + + /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 + /titleize@3.0.0: resolution: { integrity: sha512-KxVu8EYHDPBdUYdKZdKtU2aj2XfEx9AfjXxE/Aj0vT06w2icA09Vus1rh6eSu1y01akYg6BjIK/hxyLJINoMLQ== } @@ -9366,6 +9716,12 @@ packages: prelude-ls: 1.2.1 dev: true + /type-detect@4.0.8: + resolution: + { integrity: sha512-0fr/mIH1dlO+x7TlcMy+bIDqKPsw/70tVyeHW787goQjhmqaZe10uwLujubK9q9Lg6Fiho1KUKDYz0Z7k7g5/g== } + engines: { node: '>=4' } + dev: true + /type-fest@0.13.1: resolution: { integrity: sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== } @@ -9468,6 +9824,11 @@ packages: engines: { node: '>=14.17' } hasBin: true + /ufo@1.3.2: + resolution: + { integrity: sha512-o+ORpgGwaYQXgqGDwd+hkS4PuZ3QnmqMMxRuajK/a38L6fTpcE5GPIfrf+L/KemFzfUpeUQc1rRS1iDBozvnFA== } + dev: true + /ultrahtml@1.5.2: resolution: { integrity: sha512-qh4mBffhlkiXwDAOxvSGxhL0QEQsTbnP9BozOK3OYPEGvPvdWzvAUaXNtUSMdNsKDtuyjEbyVUPFZ52SSLhLqw== } @@ -9486,7 +9847,6 @@ packages: /undici-types@5.26.5: resolution: { integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA== } - dev: false /unherit@3.0.1: resolution: @@ -9700,6 +10060,16 @@ packages: sade: 1.8.1 dev: false + /v8-to-istanbul@9.1.3: + resolution: + { integrity: sha512-9lDD+EVI2fjFsMWXc6dy5JJzBsVTcQ2fVkfBvncZ6xJWG9wtBhOldG+mHkSL0+V1K/xgZz0JDO5UT5hFwHUghg== } + engines: { node: '>=10.12.0' } + dependencies: + '@jridgewell/trace-mapping': 0.3.20 + '@types/istanbul-lib-coverage': 2.0.6 + convert-source-map: 2.0.0 + dev: true + /validate-npm-package-license@3.0.4: resolution: { integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== } @@ -9765,6 +10135,29 @@ packages: vfile-message: 4.0.2 dev: false + /vite-node@0.34.6(@types/node@18.18.8): + resolution: + { integrity: sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA== } + engines: { node: '>=v14.18.0' } + hasBin: true + dependencies: + cac: 6.7.14 + debug: 4.3.4 + mlly: 1.4.2 + pathe: 1.1.1 + picocolors: 1.0.0 + vite: 4.5.0(@types/node@18.18.8) + transitivePeerDependencies: + - '@types/node' + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /vite-plugin-dts@3.5.2(typescript@5.0.4)(vite@4.4.5): resolution: { integrity: sha512-iKc851+jdHEoN1ifbOEsoMs+/Zg26PE1EyO2Jc+4apOWRoaeK2zRJnaStgUuJaVaEcAjTqWzpNgCAMq7iO6DWA== } @@ -9809,7 +10202,7 @@ packages: open: 9.1.0 picocolors: 1.0.0 sirv: 2.0.3 - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 transitivePeerDependencies: - rollup - supports-color @@ -9867,6 +10260,41 @@ packages: fsevents: 2.3.3 dev: true + /vite@4.5.0: + resolution: + { integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== } + engines: { node: ^14.18.0 || >=16.0.0 } + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + /vite@4.5.0(@types/node@18.0.0): resolution: { integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== } @@ -9902,6 +10330,44 @@ packages: rollup: 3.29.4 optionalDependencies: fsevents: 2.3.3 + dev: true + + /vite@4.5.0(@types/node@18.18.8): + resolution: + { integrity: sha512-ulr8rNLA6rkyFAlVWw2q5YJ91v098AFQ2R0PRFwPzREXOUJQPtFUG0t+/ZikhaOCDqFoDhN6/v8Sq0o4araFAw== } + engines: { node: ^14.18.0 || >=16.0.0 } + hasBin: true + peerDependencies: + '@types/node': '>= 14' + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + '@types/node': 18.18.8 + esbuild: 0.18.20 + postcss: 8.4.31 + rollup: 3.29.4 + optionalDependencies: + fsevents: 2.3.3 + dev: true /vitefu@0.2.5(vite@4.5.0): resolution: @@ -9912,9 +10378,75 @@ packages: vite: optional: true dependencies: - vite: 4.5.0(@types/node@18.0.0) + vite: 4.5.0 dev: false + /vitest@0.34.6: + 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.11 + '@types/chai-subset': 1.3.5 + '@types/node': 18.18.8 + '@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.11.2 + acorn-walk: 8.3.0 + cac: 6.7.14 + chai: 4.3.10 + debug: 4.3.4 + local-pkg: 0.4.3 + magic-string: 0.30.5 + pathe: 1.1.1 + picocolors: 1.0.0 + std-env: 3.5.0 + strip-literal: 1.3.0 + tinybench: 2.5.1 + tinypool: 0.7.0 + vite: 4.5.0(@types/node@18.18.8) + vite-node: 0.34.6(@types/node@18.18.8) + why-is-node-running: 2.2.2 + transitivePeerDependencies: + - less + - lightningcss + - sass + - stylus + - sugarss + - supports-color + - terser + dev: true + /volar-service-css@0.0.16(@volar/language-service@1.10.10): resolution: { integrity: sha512-gK/XD35t/P3SQrUuS8LMlCnE2ItIk+kXI6gPvBYl1NZ7O+tLH8rUWXA32YgpwNoITxYrm/G1seaq08zs4aiPvg== } @@ -10199,6 +10731,16 @@ 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== } @@ -10328,7 +10870,6 @@ packages: resolution: { integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g== } engines: { node: '>=12.20' } - dev: false /z-schema@5.0.5: resolution: