diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json index b1d7520be..68667584b 100644 --- a/.codesandbox/ci.json +++ b/.codesandbox/ci.json @@ -7,6 +7,7 @@ "packages/jest", "packages/packaged", "packages/poisoning", + "packages/vitest", "packages/worker" ], "node": "14" diff --git a/.github/workflows/build-status.yml b/.github/workflows/build-status.yml index 566873b1b..eb8434b3c 100644 --- a/.github/workflows/build-status.yml +++ b/.github/workflows/build-status.yml @@ -532,6 +532,11 @@ jobs: run: npm publish --access public packages/poisoning/package.tgz env: NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} + - if: startsWith(github.ref, 'refs/tags/vitest/v') + name: Publish @fast-check/vitest + run: npm publish --access public packages/vitest/package.tgz + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} - if: startsWith(github.ref, 'refs/tags/worker/v') name: Publish @fast-check/worker run: npm publish --access public packages/worker/package.tgz diff --git a/.yarn/versions/9bd8f9e6.yml b/.yarn/versions/9bd8f9e6.yml new file mode 100644 index 000000000..439893a0e --- /dev/null +++ b/.yarn/versions/9bd8f9e6.yml @@ -0,0 +1,2 @@ +releases: + "@fast-check/vitest": patch diff --git a/packages/vitest/LICENSE b/packages/vitest/LICENSE new file mode 100644 index 000000000..e95f33f9d --- /dev/null +++ b/packages/vitest/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2020 Nicolas DUBIEN + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/packages/vitest/README.md b/packages/vitest/README.md new file mode 100644 index 000000000..8fe4ae3a2 --- /dev/null +++ b/packages/vitest/README.md @@ -0,0 +1,71 @@ +# `@fast-check/vitest` + +![fast-check logo](https://raw.githubusercontent.com/dubzzz/fast-check/main/packages/fast-check/documentation/images/logo.png) + +Bring the power of property based testing framework `fast-check` into Vitest. +`@fast-check/vitest` simplifies the integration of `fast-check` into Vitest. + +npm version +monthly downloads +License + +--- + +## Getting Started + +Install `@fast-check/vitest`: + +```bash +npm install --save-dev @fast-check/vitest +``` + +In order to work properly, `@fast-check/vitest` requires `vitest` to be installed. + +## Example + +```javascript +import { test, fc } from '@fast-check/vitest'; + +// for all a, b, c strings +// b is a substring of a + b + c +test.prop([fc.string(), fc.string(), fc.string()])('should detect the substring', (a, b, c) => { + return (a + b + c).includes(b); +}); + +// same property but using named values +test.prop({ a: fc.string(), b: fc.string(), c: fc.string() })('should detect the substring', ({ a, b, c }) => { + return (a + b + c).includes(b); +}); +``` + +Please note that the properties accepted by `@fast-check/vitest` as input can either be synchronous or asynchronous (even just `PromiseLike` instances). + +## Advanced + +If you want to forward custom parameters to fast-check, `test.prop` accepts an optional `fc.Parameters` ([more](https://github.com/dubzzz/fast-check/blob/main/documentation/1-Guides/Runners.md#runners)). + +`@fast-check/vitest` also comes with `.only`, `.skip`, `.todo` and `.concurrent` from vitest. It also accepts more complex ones such as `.concurrent.skip`. + +```javascript +import { it, test, fc } from '@fast-check/vitest'; + +test.prop([fc.nat(), fc.nat()], { seed: 4242 })('should replay the test for the seed 4242', (a, b) => { + return a + b === b + a; +}); + +test.skip.prop([fc.fullUnicodeString()])('should be skipped', (text) => { + return text.length === [...text].length; +}); + +describe('with it', () => { + it.prop([fc.nat(), fc.nat()])('should run too', (a, b) => { + return a + b === b + a; + }); +}); +``` + +## Minimal requirements + +| @fast-check/vitest | vitest | fast-check | +| ------------------ | -------- | ---------- | +| ^0.0.0 | >=0.28.1 | ^3.0.0 | diff --git a/packages/vitest/package.esm-template.json b/packages/vitest/package.esm-template.json new file mode 100644 index 000000000..3dbc1ca59 --- /dev/null +++ b/packages/vitest/package.esm-template.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/vitest/package.json b/packages/vitest/package.json new file mode 100644 index 000000000..a5a9019b9 --- /dev/null +++ b/packages/vitest/package.json @@ -0,0 +1,69 @@ +{ + "name": "@fast-check/vitest", + "description": "Property based testing for Vitest based on fast-check", + "version": "0.0.0", + "type": "commonjs", + "main": "lib/vitest-fast-check.js", + "exports": { + "./package.json": "./package.json", + ".": { + "require": "./lib/vitest-fast-check.js", + "import": "./lib/esm/vitest-fast-check.js", + "default": "./lib/esm/vitest-fast-check.js" + } + }, + "module": "lib/esm/vitest-fast-check.js", + "types": "lib/vitest-fast-check.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "yarn build:publish-cjs && yarn build:publish-esm && yarn build:publish-types", + "build-ci": "yarn build", + "build:publish-types": "tsc -p tsconfig.publish.types.json", + "build:publish-cjs": "tsc -p tsconfig.publish.json", + "build:publish-esm": "tsc -p tsconfig.publish.json --module es2015 --moduleResolution node --outDir lib/esm && cp package.esm-template.json lib/esm/package.json", + "test-bundle": "vitest --config test-bundle/vitest.config.mjs", + "typecheck": "tsc --noEmit" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/dubzzz/fast-check.git", + "directory": "packages/vitest" + }, + "author": "Nicolas DUBIEN ", + "license": "MIT", + "bugs": { + "url": "https://github.com/dubzzz/fast-check/issues" + }, + "homepage": "https://github.com/dubzzz/fast-check/tree/main/packages/vitest#readme", + "dependencies": { + "fast-check": "^3.0.0" + }, + "peerDependencies": { + "vitest": ">=0.28.1" + }, + "devDependencies": { + "fast-check": "workspace:*", + "typescript": "^4.9.4", + "vitest": "^0.28.1" + }, + "keywords": [ + "vitest", + "generative", + "property-based testing", + "testing", + "quickcheck", + "fast-check" + ], + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/dubzzz" + }, + { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } + ] +} diff --git a/packages/vitest/src/internals/TestBuilder.ts b/packages/vitest/src/internals/TestBuilder.ts new file mode 100644 index 000000000..83073464c --- /dev/null +++ b/packages/vitest/src/internals/TestBuilder.ts @@ -0,0 +1,156 @@ +import { record } from 'fast-check'; +import { buildTestWithPropRunner } from './TestWithPropRunnerBuilder.js'; + +import type { Parameters as FcParameters, ExecutionTree, RunDetails, RunDetailsCommon } from 'fast-check'; +import type { ArbitraryTuple, Prop, ArbitraryRecord, PropRecord, It, FcExtra } from './types.js'; + +/** + * Type used for any `{it,test}.*.prop` taking tuples + */ +type TestPropTuple = ( + arbitraries: ArbitraryTuple, + params?: FcParameters +) => (testName: string, prop: Prop, timeout?: number | undefined) => void; + +/** + * Type used for any `{it,test}.*.prop` taking records + */ +type TestPropRecord = ( + arbitraries: ArbitraryRecord, + params?: FcParameters +) => (testName: string, prop: PropRecord, timeout?: number | undefined) => void; + +/** + * prop has just been declared for typing reasons, ideally TestProp should be enough + * and should be used to replace `{ prop: typeof prop }` by `{ prop: TestProp }` + */ +declare const prop: ( + arbitraries: Ts extends [any] | any[] ? ArbitraryTuple : ArbitraryRecord, + params?: FcParameters +) => ( + testName: string, + prop: Ts extends [any] | any[] ? Prop : PropRecord, + timeout?: number | undefined +) => void; + +function adaptParametersForRecord( + parameters: FcParameters<[Ts]>, + originalParamaters: FcParameters +): FcParameters { + return { + ...(parameters as Required>), + examples: parameters.examples !== undefined ? parameters.examples.map((example) => example[0]) : undefined, + reporter: originalParamaters.reporter, + asyncReporter: originalParamaters.asyncReporter, + }; +} + +function adaptExecutionTreeForRecord(executionSummary: ExecutionTree<[Ts]>[]): ExecutionTree[] { + return executionSummary.map((summary) => ({ + ...summary, + value: summary.value[0], + children: adaptExecutionTreeForRecord(summary.children), + })); +} + +function adaptRunDetailsForRecord( + runDetails: RunDetails<[Ts]>, + originalParamaters: FcParameters +): RunDetails { + const adaptedRunDetailsCommon: RunDetailsCommon = { + ...(runDetails as Required>), + counterexample: runDetails.counterexample !== null ? runDetails.counterexample[0] : null, + failures: runDetails.failures.map((failure) => failure[0]), + executionSummary: adaptExecutionTreeForRecord(runDetails.executionSummary), + runConfiguration: adaptParametersForRecord(runDetails.runConfiguration, originalParamaters), + }; + return adaptedRunDetailsCommon as RunDetails; +} + +/** + * Build `{it,test}.*.prop` out of `{it,test}.*` + * @param testFn - The source `{it,test}.*` + */ +function buildTestProp( + testFn: It | It['only' | 'skip' | 'concurrent'] | It['concurrent']['only' | 'skip'], + fc: FcExtra +): TestPropTuple; +function buildTestProp( + testFn: It | It['only' | 'skip' | 'concurrent'] | It['concurrent']['only' | 'skip'], + fc: FcExtra +): TestPropRecord; +function buildTestProp( + testFn: It | It['only' | 'skip' | 'concurrent'] | It['concurrent']['only' | 'skip'], + fc: FcExtra +): TestPropTuple | TestPropRecord { + return (arbitraries, params?: FcParameters) => { + if (Array.isArray(arbitraries)) { + return (testName: string, prop: Prop, timeout?: number | undefined) => + buildTestWithPropRunner(testFn, testName, arbitraries, prop, params, timeout, fc); + } + return (testName: string, prop: Prop, timeout?: number | undefined) => { + const recordArb = record(arbitraries as ArbitraryRecord); + const recordParams: FcParameters<[TsParameters]> | undefined = + params !== undefined + ? { + // Spreading a "Required" makes us sure that we don't miss any parameters + ...(params as Required>), + // Following options needs to be converted to fit with the requirements + examples: + params.examples !== undefined ? params.examples.map((example): [TsParameters] => [example]) : undefined, + reporter: + params.reporter !== undefined + ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + (runDetails) => params.reporter!(adaptRunDetailsForRecord(runDetails, params)) + : undefined, + asyncReporter: + params.asyncReporter !== undefined + ? // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + (runDetails) => params.asyncReporter!(adaptRunDetailsForRecord(runDetails, params)) + : undefined, + } + : undefined; + buildTestWithPropRunner( + testFn, + testName, + [recordArb], + (value) => (prop as PropRecord)(value), + recordParams, + timeout, + fc + ); + }; + }; +} + +/** + * Revamped {it,test} with added `.prop` + */ +export type FastCheckItBuilder = T & + ('each' extends keyof T ? T & { prop: typeof prop } : T) & { + [K in keyof Omit]: FastCheckItBuilder; + }; + +/** + * Build the enriched version of {it,test}, the one with added `.prop` + */ +function enrichWithTestProp any>(testFn: T, fc: FcExtra): FastCheckItBuilder { + let atLeastOneExtra = false; + const extraKeys: Partial> = {}; + for (const key in testFn) { + if (typeof testFn[key] === 'function') { + atLeastOneExtra = true; + extraKeys[key] = key !== 'each' ? enrichWithTestProp(testFn[key] as any, fc) : testFn[key]; + } + } + if (!atLeastOneExtra) { + return testFn as FastCheckItBuilder; + } + const enrichedTestFn = (...args: Parameters): ReturnType => testFn(...args); + if ('each' in testFn) { + extraKeys['prop' as keyof typeof extraKeys] = buildTestProp(testFn as any, fc) as any; + } + return Object.assign(enrichedTestFn, extraKeys) as FastCheckItBuilder; +} + +export const buildTest = enrichWithTestProp; diff --git a/packages/vitest/src/internals/TestWithPropRunnerBuilder.ts b/packages/vitest/src/internals/TestWithPropRunnerBuilder.ts new file mode 100644 index 000000000..17cf986cd --- /dev/null +++ b/packages/vitest/src/internals/TestWithPropRunnerBuilder.ts @@ -0,0 +1,46 @@ +import { readConfigureGlobal } from 'fast-check'; + +import type { Parameters as FcParameters } from 'fast-check'; +import type { Prop, PromiseProp, It, ArbitraryTuple, FcExtra } from './types.js'; + +function wrapProp(prop: Prop): PromiseProp { + return (...args: Ts) => Promise.resolve(prop(...args)); +} + +export function buildTestWithPropRunner( + testFn: It | It['only' | 'skip' | 'concurrent'] | It['concurrent']['only' | 'skip'], + label: string, + arbitraries: ArbitraryTuple, + prop: Prop, + params: FcParameters | undefined, + timeout: number | undefined, + fc: FcExtra +): void { + const customParams: FcParameters = { ...params }; + // Handle seed + if (customParams.seed === undefined) { + const seedFromGlobals = readConfigureGlobal().seed; + if (seedFromGlobals !== undefined) { + customParams.seed = seedFromGlobals; + } else { + customParams.seed = Date.now() ^ (Math.random() * 0x100000000); + } + } + // Handle timeout + if (customParams.interruptAfterTimeLimit === undefined) { + // Copy global configuration of interruptAfterTimeLimit as local one + customParams.interruptAfterTimeLimit = fc.readConfigureGlobal().interruptAfterTimeLimit; + } + + const promiseProp = wrapProp(prop); + + // Instantiate property outside of testFn for the needs of worker-based version + const propertyInstance = (fc.asyncProperty as any)(...(arbitraries as any), promiseProp); + testFn( + `${label} (with seed=${customParams.seed})`, + async () => { + await fc.assert(propertyInstance, customParams); + }, + timeout + ); +} diff --git a/packages/vitest/src/internals/types.ts b/packages/vitest/src/internals/types.ts new file mode 100644 index 000000000..47663e10f --- /dev/null +++ b/packages/vitest/src/internals/types.ts @@ -0,0 +1,24 @@ +import type { it as itVitest } from 'vitest'; +import type { Arbitrary, asyncProperty, assert, readConfigureGlobal } from 'fast-check'; + +export type FcExtra = { + asyncProperty: typeof asyncProperty; + assert: typeof assert; + readConfigureGlobal: typeof readConfigureGlobal; +}; + +export type It = typeof itVitest; + +// Pre-requisite: https://github.com/Microsoft/TypeScript/pull/26063 +// Require TypeScript 3.1 +export type ArbitraryTuple = { + [P in keyof Ts]: Arbitrary; +}; +export type ArbitraryRecord = { + [P in keyof Ts]: Arbitrary; +}; + +export type Prop = (...args: Ts) => boolean | void | PromiseLike; +export type PropRecord = (arg: Ts) => boolean | void | PromiseLike; + +export type PromiseProp = (...args: Ts) => Promise; diff --git a/packages/vitest/src/vitest-fast-check.ts b/packages/vitest/src/vitest-fast-check.ts new file mode 100644 index 000000000..c317c95b1 --- /dev/null +++ b/packages/vitest/src/vitest-fast-check.ts @@ -0,0 +1,10 @@ +import { it as itVitest, test as testVitest } from 'vitest'; +import * as fc from 'fast-check'; +import { buildTest } from './internals/TestBuilder'; + +import type { FastCheckItBuilder } from './internals/TestBuilder'; +import type { It } from './internals/types'; + +export const test: FastCheckItBuilder = buildTest(testVitest, fc); +export const it: FastCheckItBuilder = buildTest(itVitest, fc); +export { fc }; diff --git a/packages/vitest/test-bundle/main.spec.mjs b/packages/vitest/test-bundle/main.spec.mjs new file mode 100644 index 000000000..17e0c672f --- /dev/null +++ b/packages/vitest/test-bundle/main.spec.mjs @@ -0,0 +1,6 @@ +import { expect } from 'vitest'; +import { test, fc } from '@fast-check/vitest'; + +test.prop([fc.constant(null)])('should pass', (value) => { + expect(value).toBe(null); +}); diff --git a/packages/vitest/test-bundle/vitest.config.mjs b/packages/vitest/test-bundle/vitest.config.mjs new file mode 100644 index 000000000..42c5927bd --- /dev/null +++ b/packages/vitest/test-bundle/vitest.config.mjs @@ -0,0 +1,7 @@ +import { defineConfig } from 'vite'; + +export default defineConfig({ + test: { + include: ['test-bundle/main.spec.mjs'], + }, +}); diff --git a/packages/vitest/tsconfig.json b/packages/vitest/tsconfig.json new file mode 100644 index 000000000..51bf44c34 --- /dev/null +++ b/packages/vitest/tsconfig.json @@ -0,0 +1,3 @@ +{ + "extends": "../../tsconfig.common.json" +} diff --git a/packages/vitest/tsconfig.publish.json b/packages/vitest/tsconfig.publish.json new file mode 100644 index 000000000..ed67654fe --- /dev/null +++ b/packages/vitest/tsconfig.publish.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.publish.json", + "compilerOptions": { + "outDir": "lib/" + }, + "include": ["src/"] +} diff --git a/packages/vitest/tsconfig.publish.types.json b/packages/vitest/tsconfig.publish.types.json new file mode 100644 index 000000000..e54be824c --- /dev/null +++ b/packages/vitest/tsconfig.publish.types.json @@ -0,0 +1,7 @@ +{ + "extends": "../../tsconfig.publish.types.json", + "compilerOptions": { + "outDir": "lib/" + }, + "include": ["src/"] +} diff --git a/yarn.lock b/yarn.lock index ae9b8b6de..45625b42f 100644 --- a/yarn.lock +++ b/yarn.lock @@ -416,6 +416,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/android-arm64@npm:0.16.17" + conditions: os=android & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/android-arm64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/android-arm64@npm:0.17.4" @@ -423,6 +430,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-arm@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/android-arm@npm:0.16.17" + conditions: os=android & cpu=arm + languageName: node + linkType: hard + "@esbuild/android-arm@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/android-arm@npm:0.17.4" @@ -430,6 +444,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/android-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/android-x64@npm:0.16.17" + conditions: os=android & cpu=x64 + languageName: node + linkType: hard + "@esbuild/android-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/android-x64@npm:0.17.4" @@ -437,6 +458,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-arm64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/darwin-arm64@npm:0.16.17" + conditions: os=darwin & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/darwin-arm64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/darwin-arm64@npm:0.17.4" @@ -444,6 +472,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/darwin-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/darwin-x64@npm:0.16.17" + conditions: os=darwin & cpu=x64 + languageName: node + linkType: hard + "@esbuild/darwin-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/darwin-x64@npm:0.17.4" @@ -451,6 +486,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-arm64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/freebsd-arm64@npm:0.16.17" + conditions: os=freebsd & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/freebsd-arm64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/freebsd-arm64@npm:0.17.4" @@ -458,6 +500,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/freebsd-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/freebsd-x64@npm:0.16.17" + conditions: os=freebsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/freebsd-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/freebsd-x64@npm:0.17.4" @@ -465,6 +514,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-arm64@npm:0.16.17" + conditions: os=linux & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/linux-arm64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-arm64@npm:0.17.4" @@ -472,6 +528,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-arm@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-arm@npm:0.16.17" + conditions: os=linux & cpu=arm + languageName: node + linkType: hard + "@esbuild/linux-arm@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-arm@npm:0.17.4" @@ -479,6 +542,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ia32@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-ia32@npm:0.16.17" + conditions: os=linux & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/linux-ia32@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-ia32@npm:0.17.4" @@ -486,6 +556,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-loong64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-loong64@npm:0.16.17" + conditions: os=linux & cpu=loong64 + languageName: node + linkType: hard + "@esbuild/linux-loong64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-loong64@npm:0.17.4" @@ -493,6 +570,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-mips64el@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-mips64el@npm:0.16.17" + conditions: os=linux & cpu=mips64el + languageName: node + linkType: hard + "@esbuild/linux-mips64el@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-mips64el@npm:0.17.4" @@ -500,6 +584,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-ppc64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-ppc64@npm:0.16.17" + conditions: os=linux & cpu=ppc64 + languageName: node + linkType: hard + "@esbuild/linux-ppc64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-ppc64@npm:0.17.4" @@ -507,6 +598,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-riscv64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-riscv64@npm:0.16.17" + conditions: os=linux & cpu=riscv64 + languageName: node + linkType: hard + "@esbuild/linux-riscv64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-riscv64@npm:0.17.4" @@ -514,6 +612,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-s390x@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-s390x@npm:0.16.17" + conditions: os=linux & cpu=s390x + languageName: node + linkType: hard + "@esbuild/linux-s390x@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-s390x@npm:0.17.4" @@ -521,6 +626,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/linux-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/linux-x64@npm:0.16.17" + conditions: os=linux & cpu=x64 + languageName: node + linkType: hard + "@esbuild/linux-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/linux-x64@npm:0.17.4" @@ -528,6 +640,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/netbsd-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/netbsd-x64@npm:0.16.17" + conditions: os=netbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/netbsd-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/netbsd-x64@npm:0.17.4" @@ -535,6 +654,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/openbsd-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/openbsd-x64@npm:0.16.17" + conditions: os=openbsd & cpu=x64 + languageName: node + linkType: hard + "@esbuild/openbsd-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/openbsd-x64@npm:0.17.4" @@ -542,6 +668,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/sunos-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/sunos-x64@npm:0.16.17" + conditions: os=sunos & cpu=x64 + languageName: node + linkType: hard + "@esbuild/sunos-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/sunos-x64@npm:0.17.4" @@ -549,6 +682,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-arm64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/win32-arm64@npm:0.16.17" + conditions: os=win32 & cpu=arm64 + languageName: node + linkType: hard + "@esbuild/win32-arm64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/win32-arm64@npm:0.17.4" @@ -556,6 +696,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-ia32@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/win32-ia32@npm:0.16.17" + conditions: os=win32 & cpu=ia32 + languageName: node + linkType: hard + "@esbuild/win32-ia32@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/win32-ia32@npm:0.17.4" @@ -563,6 +710,13 @@ __metadata: languageName: node linkType: hard +"@esbuild/win32-x64@npm:0.16.17": + version: 0.16.17 + resolution: "@esbuild/win32-x64@npm:0.16.17" + conditions: os=win32 & cpu=x64 + languageName: node + linkType: hard + "@esbuild/win32-x64@npm:0.17.4": version: 0.17.4 resolution: "@esbuild/win32-x64@npm:0.17.4" @@ -816,6 +970,18 @@ __metadata: languageName: unknown linkType: soft +"@fast-check/vitest@workspace:packages/vitest": + version: 0.0.0-use.local + resolution: "@fast-check/vitest@workspace:packages/vitest" + dependencies: + fast-check: "workspace:*" + typescript: ^4.9.4 + vitest: ^0.28.1 + peerDependencies: + vitest: ">=0.28.1" + languageName: unknown + linkType: soft + "@fast-check/worker@workspace:*, @fast-check/worker@workspace:packages/worker": version: 0.0.0-use.local resolution: "@fast-check/worker@workspace:packages/worker" @@ -1968,6 +2134,22 @@ __metadata: languageName: node linkType: hard +"@types/chai-subset@npm:^1.3.3": + version: 1.3.3 + resolution: "@types/chai-subset@npm:1.3.3" + dependencies: + "@types/chai": "*" + checksum: 4481da7345022995f5a105e6683744f7203d2c3d19cfe88d8e17274d045722948abf55e0adfd97709e0f043dade37a4d4e98cd4c660e2e8a14f23e6ecf79418f + languageName: node + linkType: hard + +"@types/chai@npm:*, @types/chai@npm:^4.3.4": + version: 4.3.4 + resolution: "@types/chai@npm:4.3.4" + checksum: 571184967beb03bf64c4392a13a7d44e72da9af5a1e83077ff81c39cf59c0fda2a5c78d2005084601cf8f3d11726608574d8b5b4a0e3e9736792807afd926cd0 + languageName: node + linkType: hard + "@types/connect@npm:*": version: 3.4.35 resolution: "@types/connect@npm:3.4.35" @@ -2492,6 +2674,50 @@ __metadata: languageName: node linkType: hard +"@vitest/expect@npm:0.28.1": + version: 0.28.1 + resolution: "@vitest/expect@npm:0.28.1" + dependencies: + "@vitest/spy": 0.28.1 + "@vitest/utils": 0.28.1 + chai: ^4.3.7 + checksum: d6b0e575f1b86796134354e99af35282c37dd038fc221fe3e22b4caddd4c9558fd163b0b64d8cf2102c442ed409f27e48c19b1deebd94911d7459d49060769cd + languageName: node + linkType: hard + +"@vitest/runner@npm:0.28.1": + version: 0.28.1 + resolution: "@vitest/runner@npm:0.28.1" + dependencies: + "@vitest/utils": 0.28.1 + p-limit: ^4.0.0 + pathe: ^1.1.0 + checksum: ce44c68ceaf025eba893f41f91514453ca19bb9511bc950f0598913960e1473e43138c4e01448c5856b40ffa85a0921b4863e2ed38b3753e34d1664b366de1eb + languageName: node + linkType: hard + +"@vitest/spy@npm:0.28.1": + version: 0.28.1 + resolution: "@vitest/spy@npm:0.28.1" + dependencies: + tinyspy: ^1.0.2 + checksum: b28dee4b4f2533fbe85acb0a40bf64667d1438b2bf8bff5773dc7814690ebff6ae8284724deab00769fdc199629332284e432d60dcdb7a4d9d64421c363dc11b + languageName: node + linkType: hard + +"@vitest/utils@npm:0.28.1": + version: 0.28.1 + resolution: "@vitest/utils@npm:0.28.1" + dependencies: + cli-truncate: ^3.1.0 + diff: ^5.1.0 + loupe: ^2.3.6 + picocolors: ^1.0.0 + pretty-format: ^27.5.1 + checksum: 8a583f009de8ffb9b6b83fd1f53f0794ba03b980e8d18e51713ed8b5ecfc2c2d3be27163565801e0c88c9bcf981be1063dc5cbebd3c36528aa12687c3bbd0b0f + languageName: node + linkType: hard + "@webassemblyjs/ast@npm:1.11.1": version: 1.11.1 resolution: "@webassemblyjs/ast@npm:1.11.1" @@ -3028,6 +3254,13 @@ __metadata: languageName: node linkType: hard +"assertion-error@npm:^1.1.0": + version: 1.1.0 + resolution: "assertion-error@npm:1.1.0" + checksum: fd9429d3a3d4fd61782eb3962ae76b6d08aa7383123fca0596020013b3ebd6647891a85b05ce821c47d1471ed1271f00b0545cf6a4326cf2fc91efcc3b0fbecf + languageName: node + linkType: hard + "async@npm:^3.1.0": version: 3.2.4 resolution: "async@npm:3.2.4" @@ -3396,6 +3629,13 @@ __metadata: languageName: node linkType: hard +"cac@npm:^6.7.14": + version: 6.7.14 + resolution: "cac@npm:6.7.14" + checksum: 45a2496a9443abbe7f52a49b22fbe51b1905eff46e03fd5e6c98e3f85077be3f8949685a1849b1a9cd2bc3e5567dfebcf64f01ce01847baf918f1b37c839791a + languageName: node + linkType: hard + "cacache@npm:^16.1.0": version: 16.1.3 resolution: "cacache@npm:16.1.3" @@ -3497,6 +3737,21 @@ __metadata: languageName: node linkType: hard +"chai@npm:^4.3.7": + version: 4.3.7 + resolution: "chai@npm:4.3.7" + dependencies: + assertion-error: ^1.1.0 + check-error: ^1.0.2 + deep-eql: ^4.1.2 + get-func-name: ^2.0.0 + loupe: ^2.3.1 + pathval: ^1.1.1 + type-detect: ^4.0.5 + checksum: 0bba7d267848015246a66995f044ce3f0ebc35e530da3cbdf171db744e14cbe301ab913a8d07caf7952b430257ccbb1a4a983c570a7c5748dc537897e5131f7c + languageName: node + linkType: hard + "chalk@npm:^2.0.0": version: 2.4.2 resolution: "chalk@npm:2.4.2" @@ -3549,6 +3804,13 @@ __metadata: languageName: node linkType: hard +"check-error@npm:^1.0.2": + version: 1.0.2 + resolution: "check-error@npm:1.0.2" + checksum: d9d106504404b8addd1ee3f63f8c0eaa7cd962a1a28eb9c519b1c4a1dc7098be38007fc0060f045ee00f075fbb7a2a4f42abcf61d68323677e11ab98dc16042e + languageName: node + linkType: hard + "chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" @@ -4083,6 +4345,15 @@ __metadata: languageName: node linkType: hard +"deep-eql@npm:^4.1.2": + version: 4.1.3 + resolution: "deep-eql@npm:4.1.3" + dependencies: + type-detect: ^4.0.0 + checksum: 7f6d30cb41c713973dc07eaadded848b2ab0b835e518a88b91bea72f34e08c4c71d167a722a6f302d3a6108f05afd8e6d7650689a84d5d29ec7fe6220420397f + languageName: node + linkType: hard + "deep-is@npm:^0.1.3, deep-is@npm:~0.1.3": version: 0.1.4 resolution: "deep-is@npm:0.1.4" @@ -4193,6 +4464,13 @@ __metadata: languageName: node linkType: hard +"diff@npm:^5.1.0": + version: 5.1.0 + resolution: "diff@npm:5.1.0" + checksum: c7bf0df7c9bfbe1cf8a678fd1b2137c4fb11be117a67bc18a0e03ae75105e8533dbfb1cda6b46beb3586ef5aed22143ef9d70713977d5fb1f9114e21455fba90 + languageName: node + linkType: hard + "dir-glob@npm:^3.0.1": version: 3.0.1 resolution: "dir-glob@npm:3.0.1" @@ -4348,6 +4626,83 @@ __metadata: languageName: node linkType: hard +"esbuild@npm:^0.16.3": + version: 0.16.17 + resolution: "esbuild@npm:0.16.17" + dependencies: + "@esbuild/android-arm": 0.16.17 + "@esbuild/android-arm64": 0.16.17 + "@esbuild/android-x64": 0.16.17 + "@esbuild/darwin-arm64": 0.16.17 + "@esbuild/darwin-x64": 0.16.17 + "@esbuild/freebsd-arm64": 0.16.17 + "@esbuild/freebsd-x64": 0.16.17 + "@esbuild/linux-arm": 0.16.17 + "@esbuild/linux-arm64": 0.16.17 + "@esbuild/linux-ia32": 0.16.17 + "@esbuild/linux-loong64": 0.16.17 + "@esbuild/linux-mips64el": 0.16.17 + "@esbuild/linux-ppc64": 0.16.17 + "@esbuild/linux-riscv64": 0.16.17 + "@esbuild/linux-s390x": 0.16.17 + "@esbuild/linux-x64": 0.16.17 + "@esbuild/netbsd-x64": 0.16.17 + "@esbuild/openbsd-x64": 0.16.17 + "@esbuild/sunos-x64": 0.16.17 + "@esbuild/win32-arm64": 0.16.17 + "@esbuild/win32-ia32": 0.16.17 + "@esbuild/win32-x64": 0.16.17 + dependenciesMeta: + "@esbuild/android-arm": + optional: true + "@esbuild/android-arm64": + optional: true + "@esbuild/android-x64": + optional: true + "@esbuild/darwin-arm64": + optional: true + "@esbuild/darwin-x64": + optional: true + "@esbuild/freebsd-arm64": + optional: true + "@esbuild/freebsd-x64": + optional: true + "@esbuild/linux-arm": + optional: true + "@esbuild/linux-arm64": + optional: true + "@esbuild/linux-ia32": + optional: true + "@esbuild/linux-loong64": + optional: true + "@esbuild/linux-mips64el": + optional: true + "@esbuild/linux-ppc64": + optional: true + "@esbuild/linux-riscv64": + optional: true + "@esbuild/linux-s390x": + optional: true + "@esbuild/linux-x64": + optional: true + "@esbuild/netbsd-x64": + optional: true + "@esbuild/openbsd-x64": + optional: true + "@esbuild/sunos-x64": + optional: true + "@esbuild/win32-arm64": + optional: true + "@esbuild/win32-ia32": + optional: true + "@esbuild/win32-x64": + optional: true + bin: + esbuild: bin/esbuild + checksum: 4c2cc609ecfb426554bc3f75beb92d89eb2d0c515cfceebaa36c7599d7dcaab7056b70f6d6b51e72b45951ddf9021ee28e356cf205f8e42cc055d522312ea30c + languageName: node + linkType: hard + "esbuild@npm:^0.17.4": version: 0.17.4 resolution: "esbuild@npm:0.17.4" @@ -5141,6 +5496,13 @@ __metadata: languageName: node linkType: hard +"get-func-name@npm:^2.0.0": + version: 2.0.0 + resolution: "get-func-name@npm:2.0.0" + checksum: 8d82e69f3e7fab9e27c547945dfe5cc0c57fc0adf08ce135dddb01081d75684a03e7a0487466f478872b341d52ac763ae49e660d01ab83741f74932085f693c3 + languageName: node + linkType: hard + "get-intrinsic@npm:^1.0.2": version: 1.1.1 resolution: "get-intrinsic@npm:1.1.1" @@ -7107,6 +7469,13 @@ __metadata: languageName: node linkType: hard +"local-pkg@npm:^0.4.2": + version: 0.4.2 + resolution: "local-pkg@npm:0.4.2" + checksum: 22be451353c25c4411b552bf01880ebc9e995b93574b2facc7757968d888356df59199cacada14162ab53bbc9da055bb692c907b4171f008dbce45a2afc777c1 + languageName: node + linkType: hard + "locate-path@npm:^5.0.0": version: 5.0.0 resolution: "locate-path@npm:5.0.0" @@ -7180,6 +7549,15 @@ __metadata: languageName: node linkType: hard +"loupe@npm:^2.3.1, loupe@npm:^2.3.6": + version: 2.3.6 + resolution: "loupe@npm:2.3.6" + dependencies: + get-func-name: ^2.0.0 + checksum: cc83f1b124a1df7384601d72d8d1f5fe95fd7a8185469fec48bb2e4027e45243949e7a013e8d91051a138451ff0552310c32aa9786e60b6a30d1e801bdc2163f + languageName: node + linkType: hard + "lru-cache@npm:^6.0.0": version: 6.0.0 resolution: "lru-cache@npm:6.0.0" @@ -7571,6 +7949,18 @@ __metadata: languageName: node linkType: hard +"mlly@npm:^1.0.0, mlly@npm:^1.1.0": + version: 1.1.0 + resolution: "mlly@npm:1.1.0" + dependencies: + acorn: ^8.8.1 + pathe: ^1.0.0 + pkg-types: ^1.0.1 + ufo: ^1.0.1 + checksum: d53147a2f5f83499589c47a00e00df30cbae2e630dfcfdfdeee2b70b49aff6612f2fa13195a1c6268b8f8ecd6064cb9a35febbdf895b2cbfeacdf9a9b3e31493 + languageName: node + linkType: hard + "ms@npm:2.0.0": version: 2.0.0 resolution: "ms@npm:2.0.0" @@ -7599,6 +7989,15 @@ __metadata: languageName: node linkType: hard +"nanoid@npm:^3.3.4": + version: 3.3.4 + resolution: "nanoid@npm:3.3.4" + bin: + nanoid: bin/nanoid.cjs + checksum: 2fddd6dee994b7676f008d3ffa4ab16035a754f4bb586c61df5a22cf8c8c94017aadd360368f47d653829e0569a92b129979152ff97af23a558331e47e37cd9c + languageName: node + linkType: hard + "natural-compare-lite@npm:^1.4.0": version: 1.4.0 resolution: "natural-compare-lite@npm:1.4.0" @@ -8174,6 +8573,20 @@ __metadata: languageName: node linkType: hard +"pathe@npm:^1.0.0, pathe@npm:^1.1.0": + version: 1.1.0 + resolution: "pathe@npm:1.1.0" + checksum: 6b9be9968ea08a90c0824934799707a1c6a1ad22ac1f22080f377e3f75856d5e53a331b01d327329bfce538a14590587cfb250e8e7947f64408797c84c252056 + languageName: node + linkType: hard + +"pathval@npm:^1.1.1": + version: 1.1.1 + resolution: "pathval@npm:1.1.1" + checksum: 090e3147716647fb7fb5b4b8c8e5b55e5d0a6086d085b6cd23f3d3c01fcf0ff56fd3cc22f2f4a033bd2e46ed55d61ed8379e123b42afe7d531a2a5fc8bb556d6 + languageName: node + linkType: hard + "pegjs@npm:^0.10.0": version: 0.10.0 resolution: "pegjs@npm:0.10.0" @@ -8230,6 +8643,17 @@ __metadata: languageName: node linkType: hard +"pkg-types@npm:^1.0.1": + version: 1.0.1 + resolution: "pkg-types@npm:1.0.1" + dependencies: + jsonc-parser: ^3.2.0 + mlly: ^1.0.0 + pathe: ^1.0.0 + checksum: fe73cc22fb72ddb09227e2837a7b2ed1e0706a18e69a58a6ce13cde2b7eab122cb98de44d5c54fca5715d203ef3d2eb004b3ec84a3c05decb11e7c49a80fe2f9 + languageName: node + linkType: hard + "plur@npm:^5.1.0": version: 5.1.0 resolution: "plur@npm:5.1.0" @@ -8249,6 +8673,17 @@ __metadata: languageName: node linkType: hard +"postcss@npm:^8.4.20": + version: 8.4.21 + resolution: "postcss@npm:8.4.21" + dependencies: + nanoid: ^3.3.4 + picocolors: ^1.0.0 + source-map-js: ^1.0.2 + checksum: e39ac60ccd1542d4f9d93d894048aac0d686b3bb38e927d8386005718e6793dbbb46930f0a523fe382f1bbd843c6d980aaea791252bf5e176180e5a4336d9679 + languageName: node + linkType: hard + "prelude-ls@npm:^1.2.1": version: 1.2.1 resolution: "prelude-ls@npm:1.2.1" @@ -8758,7 +9193,7 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^3.10.1": +"rollup@npm:^3.10.1, rollup@npm:^3.7.0": version: 3.10.1 resolution: "rollup@npm:3.10.1" dependencies: @@ -8979,6 +9414,13 @@ __metadata: languageName: node linkType: hard +"siginfo@npm:^2.0.0": + version: 2.0.0 + resolution: "siginfo@npm:2.0.0" + checksum: 8aa5a98640ca09fe00d74416eca97551b3e42991614a3d1b824b115fc1401543650914f651ab1311518177e4d297e80b953f4cd4cd7ea1eabe824e8f2091de01 + languageName: node + linkType: hard + "signal-exit@npm:^3.0.2, signal-exit@npm:^3.0.3, signal-exit@npm:^3.0.7": version: 3.0.7 resolution: "signal-exit@npm:3.0.7" @@ -9045,6 +9487,13 @@ __metadata: languageName: node linkType: hard +"source-map-js@npm:^1.0.2": + version: 1.0.2 + resolution: "source-map-js@npm:1.0.2" + checksum: c049a7fc4deb9a7e9b481ae3d424cc793cb4845daa690bc5a05d428bf41bf231ced49b4cf0c9e77f9d42fdb3d20d6187619fc586605f5eabe995a316da8d377c + languageName: node + linkType: hard + "source-map-resolve@npm:^0.6.0": version: 0.6.0 resolution: "source-map-resolve@npm:0.6.0" @@ -9065,7 +9514,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.21, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -9150,6 +9599,13 @@ __metadata: languageName: node linkType: hard +"stackback@npm:0.0.2": + version: 0.0.2 + resolution: "stackback@npm:0.0.2" + checksum: 2d4dc4e64e2db796de4a3c856d5943daccdfa3dd092e452a1ce059c81e9a9c29e0b9badba91b43ef0d5ff5c04ee62feb3bcc559a804e16faf447bac2d883aa99 + languageName: node + linkType: hard + "statuses@npm:2.0.1": version: 2.0.1 resolution: "statuses@npm:2.0.1" @@ -9157,6 +9613,13 @@ __metadata: languageName: node linkType: hard +"std-env@npm:^3.3.1": + version: 3.3.1 + resolution: "std-env@npm:3.3.1" + checksum: c4f59ecd2cb52041ce1785776d28a1aa56d346b6c4efcb8473e7e801eed1ac7612332dcee242d0b35948f35f745cceb6e226b5e825b59e588b262dca6be2b8aa + languageName: node + linkType: hard + "string-argv@npm:~0.3.1": version: 0.3.1 resolution: "string-argv@npm:0.3.1" @@ -9253,6 +9716,15 @@ __metadata: languageName: node linkType: hard +"strip-literal@npm:^1.0.0": + version: 1.0.0 + resolution: "strip-literal@npm:1.0.0" + dependencies: + acorn: ^8.8.1 + checksum: ada9b60f322ce3e3fd167b65a186ab77a8c76b8f9074dcdbad4c1a810b46f21c9dca30d4d807e98af580cbe99bfbccd6d8176f69183a454ae2868d8ddd6d4f88 + languageName: node + linkType: hard + "superagent@npm:^7.1.3": version: 7.1.6 resolution: "superagent@npm:7.1.6" @@ -9458,6 +9930,27 @@ __metadata: languageName: node linkType: hard +"tinybench@npm:^2.3.1": + version: 2.3.1 + resolution: "tinybench@npm:2.3.1" + checksum: 74d45fa546d964a8123f98847fc59550945ed7f0d3e5a4ce0f9596d836b51c1d340c2ae0277a8023c15dc9ea3d7cb948a79173bfc46338c9b367c6323ea1eaf3 + languageName: node + linkType: hard + +"tinypool@npm:^0.3.0": + version: 0.3.0 + resolution: "tinypool@npm:0.3.0" + checksum: 92291c309ed8d004c1ee1ef7f610cd90352383f12c52b0ec16abd9ebc665c03626e7afbc9993df97f63e67fea002b5cc18ba5e8f90260643867cbcac278a183c + languageName: node + linkType: hard + +"tinyspy@npm:^1.0.2": + version: 1.0.2 + resolution: "tinyspy@npm:1.0.2" + checksum: 32096121aa8d52bb625ad62c9314b3e4daba4ab9ac428217b12b1e1dfe9860e3c94d54a7affa279cc70dc6f10d88c6ba46b51de68896b318a06d02f05e87dcc3 + languageName: node + linkType: hard + "tmp@npm:^0.0.33": version: 0.0.33 resolution: "tmp@npm:0.0.33" @@ -9642,7 +10135,7 @@ __metadata: languageName: node linkType: hard -"type-detect@npm:4.0.8": +"type-detect@npm:4.0.8, type-detect@npm:^4.0.0, type-detect@npm:^4.0.5": version: 4.0.8 resolution: "type-detect@npm:4.0.8" checksum: 62b5628bff67c0eb0b66afa371bd73e230399a8d2ad30d852716efcc4656a7516904570cd8631a49a3ce57c10225adf5d0cbdcb47f6b0255fe6557c453925a15 @@ -9736,6 +10229,13 @@ __metadata: languageName: node linkType: hard +"ufo@npm:^1.0.1": + version: 1.0.1 + resolution: "ufo@npm:1.0.1" + checksum: 63024876f21b7cc44267255a8043062046d3215e09212bd682787a13ccf1e0c5d23f7686a7f1bc7ac9f34c7e8a88100af234f42b509db50f17ce638af6ac87cc + languageName: node + linkType: hard + "unique-filename@npm:^2.0.0": version: 2.0.1 resolution: "unique-filename@npm:2.0.1" @@ -9853,6 +10353,113 @@ __metadata: languageName: node linkType: hard +"vite-node@npm:0.28.1": + version: 0.28.1 + resolution: "vite-node@npm:0.28.1" + dependencies: + cac: ^6.7.14 + debug: ^4.3.4 + mlly: ^1.1.0 + pathe: ^1.1.0 + picocolors: ^1.0.0 + source-map: ^0.6.1 + source-map-support: ^0.5.21 + vite: ^3.0.0 || ^4.0.0 + bin: + vite-node: vite-node.mjs + checksum: a3a3ec1492efc53258956c818625868755de04a2f0c15ab916513bfbf284c319966553079b3c9e05fb8af79858edceecbcae4887b305ea3f120c376382799513 + languageName: node + linkType: hard + +"vite@npm:^3.0.0 || ^4.0.0": + version: 4.0.4 + resolution: "vite@npm:4.0.4" + dependencies: + esbuild: ^0.16.3 + fsevents: ~2.3.2 + postcss: ^8.4.20 + resolve: ^1.22.1 + rollup: ^3.7.0 + peerDependencies: + "@types/node": ">= 14" + less: "*" + sass: "*" + stylus: "*" + sugarss: "*" + terser: ^5.4.0 + dependenciesMeta: + fsevents: + optional: true + peerDependenciesMeta: + "@types/node": + optional: true + less: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + bin: + vite: bin/vite.js + checksum: eb86c8cdfe8dcb6644005486b31cb60bc596f2aa683cb194abb5c0afca7c2a5dfdb02bbc7f83f419ad170227ac9c3b898f4406a6d1433105fb61d79d78e47d52 + languageName: node + linkType: hard + +"vitest@npm:^0.28.1": + version: 0.28.1 + resolution: "vitest@npm:0.28.1" + dependencies: + "@types/chai": ^4.3.4 + "@types/chai-subset": ^1.3.3 + "@types/node": "*" + "@vitest/expect": 0.28.1 + "@vitest/runner": 0.28.1 + "@vitest/spy": 0.28.1 + "@vitest/utils": 0.28.1 + acorn: ^8.8.1 + acorn-walk: ^8.2.0 + cac: ^6.7.14 + chai: ^4.3.7 + debug: ^4.3.4 + local-pkg: ^0.4.2 + pathe: ^1.1.0 + picocolors: ^1.0.0 + source-map: ^0.6.1 + std-env: ^3.3.1 + strip-literal: ^1.0.0 + tinybench: ^2.3.1 + tinypool: ^0.3.0 + tinyspy: ^1.0.2 + vite: ^3.0.0 || ^4.0.0 + vite-node: 0.28.1 + why-is-node-running: ^2.2.2 + peerDependencies: + "@edge-runtime/vm": "*" + "@vitest/browser": "*" + "@vitest/ui": "*" + happy-dom: "*" + jsdom: "*" + peerDependenciesMeta: + "@edge-runtime/vm": + optional: true + "@vitest/browser": + optional: true + "@vitest/ui": + optional: true + happy-dom: + optional: true + jsdom: + optional: true + bin: + vitest: vitest.mjs + checksum: 3ebbf4c897c54f253cafe8e62d911df63d5dda72e54946cab21bc8afdf57fd192cb5cebb29a94e33e23dd0364759a6449957e05b58fda10419eab275a5b52443 + languageName: node + linkType: hard + "vscode-oniguruma@npm:^1.7.0": version: 1.7.0 resolution: "vscode-oniguruma@npm:1.7.0" @@ -10100,6 +10707,18 @@ __metadata: languageName: node linkType: hard +"why-is-node-running@npm:^2.2.2": + version: 2.2.2 + resolution: "why-is-node-running@npm:2.2.2" + dependencies: + siginfo: ^2.0.0 + stackback: 0.0.2 + bin: + why-is-node-running: cli.js + checksum: 50820428f6a82dfc3cbce661570bcae9b658723217359b6037b67e495255409b4c8bc7931745f5c175df71210450464517cab32b2f7458ac9c40b4925065200a + languageName: node + linkType: hard + "wide-align@npm:^1.1.5": version: 1.1.5 resolution: "wide-align@npm:1.1.5"