diff --git a/.codesandbox/ci.json b/.codesandbox/ci.json index 24377cb8..e4f9e2db 100644 --- a/.codesandbox/ci.json +++ b/.codesandbox/ci.json @@ -1,6 +1,6 @@ { "buildCommand": "build:all", "sandboxes": ["vanilla", "/examples"], - "packages": ["packages/fast-check"], + "packages": ["packages/ava", "packages/fast-check", "packages/packaged"], "node": "14" } diff --git a/.github/workflows/build-status.yml b/.github/workflows/build-status.yml index bfc83f3c..3423a40f 100644 --- a/.github/workflows/build-status.yml +++ b/.github/workflows/build-status.yml @@ -169,7 +169,7 @@ jobs: runs-on: ${{matrix.os}} strategy: matrix: - package-name: ['fast-check', '@fast-check/packaged'] + package-name: ['fast-check', '@fast-check/ava', '@fast-check/packaged'] script-name: ['test'] node-version: [14.x, 16.x] os: ['ubuntu-latest'] @@ -196,6 +196,14 @@ jobs: script-name: 'test' node-version: 16.x os: 'ubuntu-latest' + - package-name: '@fast-check/test-ava-bundle-cjs' + script-name: 'test' + node-version: 16.x + os: 'ubuntu-latest' + - package-name: '@fast-check/test-ava-bundle-esm' + script-name: 'test' + node-version: 16.x + os: 'ubuntu-latest' steps: - uses: actions/checkout@v3 - name: Cache for Jest @@ -221,6 +229,8 @@ jobs: run: yarn workspaces foreach -pRvi --from '${{matrix.package-name}}' --no-private --exclude '${{matrix.package-name}}' exec yarn node $(yarn bin packaged) --keep-node-modules - name: Unit tests shell: bash -l {0} + # The DEFAULT_SEED might be used by some of the packages and might be ignored by others + # It's aim is to help to diagnose infinite loop that may occur during tests and cannot be stopped by fast-check itself run: | export EXPECT_DEFAULT_SEED="true" export DEFAULT_SEED=$(node -p "Date.now() ^ (Math.random() * 0x100000000)") diff --git a/.yarn/versions/afceb868.yml b/.yarn/versions/afceb868.yml new file mode 100644 index 00000000..ea537d6c --- /dev/null +++ b/.yarn/versions/afceb868.yml @@ -0,0 +1,7 @@ +releases: + "@fast-check/ava": patch + +declined: + - "@fast-check/monorepo" + - "@fast-check/test-ava-bundle-cjs" + - "@fast-check/test-ava-bundle-esm" diff --git a/packages/ava/.gitignore b/packages/ava/.gitignore new file mode 100644 index 00000000..fe59dfeb --- /dev/null +++ b/packages/ava/.gitignore @@ -0,0 +1 @@ +test/out.log diff --git a/packages/ava/LICENSE b/packages/ava/LICENSE new file mode 100644 index 00000000..7f3e3558 --- /dev/null +++ b/packages/ava/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2018 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/ava/package.esm-template.json b/packages/ava/package.esm-template.json new file mode 100644 index 00000000..3dbc1ca5 --- /dev/null +++ b/packages/ava/package.esm-template.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/ava/package.json b/packages/ava/package.json new file mode 100644 index 00000000..fd023bbe --- /dev/null +++ b/packages/ava/package.json @@ -0,0 +1,70 @@ +{ + "name": "@fast-check/ava", + "description": " Property based testing for AVA based on fast-check", + "version": "0.0.0", + "type": "commonjs", + "main": "lib/ava-fast-check.js", + "exports": { + ".": { + "require": "./lib/ava-fast-check.js", + "import": "./lib/esm/ava-fast-check.js", + "default": "./lib/esm/ava-fast-check.js" + } + }, + "module": "lib/esm/ava-fast-check.js", + "types": "lib/ava-fast-check.d.ts", + "files": [ + "lib" + ], + "scripts": { + "build": "tsc && tsc --module es2015 --moduleResolution node --outDir lib/esm && cp package.esm-template.json lib/esm/package.json", + "build-ci": "yarn build", + "ava-test": "ava -s -t", + "test": "sh test.sh" + }, + "repository": { + "type": "git", + "url": "git+https://github.com/dubzzz/fast-check.git", + "directory": "packages/ava" + }, + "author": "Nicolas DUBIEN ", + "license": "MIT", + "bugs": { + "url": "https://github.com/dubzzz/fast-check/issues" + }, + "homepage": "https://github.com/dubzzz/fast-check#readme", + "dependencies": { + "fast-check": "^3.0.0" + }, + "peerDependencies": { + "ava": ">=4.0.0" + }, + "devDependencies": { + "@types/node": "^17.0.44", + "ava": "^4.0.1", + "esm": "^3.2.25", + "fast-check": "workspace:*", + "ts-node": "^9.0.0", + "typescript": "^4.0.3" + }, + "keywords": [ + "ava", + "generative", + "property-based testing", + "testing", + "quickcheck", + "fast-check" + ], + "ava": { + "files": [ + "test/**/*" + ], + "require": [ + "esm" + ] + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/fast-check" + } +} diff --git a/packages/ava/src/ava-fast-check.ts b/packages/ava/src/ava-fast-check.ts new file mode 100644 index 00000000..9a06dff8 --- /dev/null +++ b/packages/ava/src/ava-fast-check.ts @@ -0,0 +1,99 @@ +import test, { AfterFn, BeforeFn, Implementation, ImplementationFn, TestFn, TryResult } from 'ava'; +import * as fc from 'fast-check'; + +export { fc, test }; + +type NonEmptyArray = A[] & { 0: A }; + +type ArbitraryTuple> = { + [P in keyof Ts]: fc.Arbitrary; +}; + +type Prop> = ImplementationFn; + +type PropertyTest = >( + label: string, + arbitraries: ArbitraryTuple, + prop: Prop, + params?: fc.Parameters +) => void; + +type AvaModifierWhitelist = 'only' | 'failing' | 'skip' | 'serial'; + +export type PropertyTestFn = PropertyTest & { + [Modifier in AvaModifierWhitelist]: PropertyTest; +} & { + before: BeforeFn; + after: AfterFn; +}; + +function wrapProp>( + arbitraries: ArbitraryTuple, + prop: Prop, + params?: fc.Parameters +): Implementation { + return async (t, ..._args) => { + let failingTry: undefined | TryResult; + + try { + await fc.assert( + (fc.asyncProperty as any)(...(arbitraries as any), async (...args: Ts) => { + const tryResult = await t.try((tt) => prop(tt, ...args)); + + if (tryResult.passed) { + tryResult.commit(); + return true; + } + + failingTry = tryResult; + return false; + }), + params + ); + } catch (error) { + t.log((error as Error).message); + (failingTry?.commit ?? t.fail)(); + } + + t.pass(); + }; +} + +function internalTestProp>( + testFn: (label: string, exec: Implementation) => void, + label: string, + arbitraries: ArbitraryTuple, + prop: Prop, + params?: fc.Parameters +): void { + const customParams: fc.Parameters = params || {}; + if (customParams.seed === undefined) customParams.seed = Date.now(); + + testFn(`${label} (with seed=${customParams.seed})`, wrapProp(arbitraries, prop, params)); +} + +function exposeModifier>( + modifier: T +): PropertyTest { + return (label, arbitraries, prop, params) => + internalTestProp((test as TestFn)[modifier], label, arbitraries, prop, params); +} + +export const testProp: PropertyTestFn = Object.assign( + function testProp>( + label: string, + arbitraries: ArbitraryTuple, + prop: Prop, + params?: fc.Parameters + ): void { + internalTestProp(test as TestFn, label, arbitraries, prop, params); + }, + { + only: exposeModifier('only'), + failing: exposeModifier('failing'), + skip: exposeModifier('skip'), + serial: exposeModifier('serial'), + before: test.before, + after: test.after, + } +); diff --git a/packages/ava/test.sh b/packages/ava/test.sh new file mode 100644 index 00000000..f5ef4283 --- /dev/null +++ b/packages/ava/test.sh @@ -0,0 +1,31 @@ +#!/bin/sh + +npm run ava-test >test/out.log 2>&1 + +for expectedContent in \ + "ok 1 - should never be executed (with seed=48) # SKIP" \ + "ok 2 - should run first" \ + "ok 3 - should run after" \ + "ok 4 - should run serially" \ + "ok 5 - should pass on truthy synchronous property" \ + "ok 6 - should pass on truthy asynchronous property" \ + "not ok 7 - should fail on falsy synchronous property" \ + "not ok 8 - should fail on falsy asynchronous property" \ + "not ok 9 - should fail with seed=4242 and path=\"25\" (with seed=4242)" "seed=4242 and path=\"25\"" \ + "ok 10 - should pass on followed plan" \ + "not ok 11 - should fail on not followed plan" \ + "ok 12 - should pass kitchen sink" \ + "not ok 13 - should fail kitchen sink" \ + "ok 14 - should pass as the property fails" \ + "not ok 15 - should fail as the property passes" +do + cat test/out.log | grep "${expectedContent}" >/dev/null 2>&1 + if [ $? -ne 0 ]; then + cat test/out.log + echo "=== TEST FAILED ===" + echo "Unable to find: ${expectedContent}" + exit 1 + fi +done + +echo "TEST PASSED" diff --git a/packages/ava/test/testProp.js b/packages/ava/test/testProp.js new file mode 100644 index 00000000..0a4dc328 --- /dev/null +++ b/packages/ava/test/testProp.js @@ -0,0 +1,100 @@ +// eslint-disable-next-line no-undef, @typescript-eslint/no-var-requires +const { testProp, fc } = require('../lib/ava-fast-check'); + +const delay = (duration) => + new Promise((resolve) => { + // eslint-disable-next-line no-undef + setTimeout(() => resolve(), duration); + }); + +// testProp + +testProp('should pass on truthy synchronous property', [fc.string(), fc.string(), fc.string()], (t, a, b, c) => { + t.true(`${a}${b}${c}`.includes(b)); +}); +testProp('should pass on truthy asynchronous property', [fc.nat(), fc.string()], async (t, a, b) => { + await delay(0); + t.true(typeof a === 'number' && typeof b === 'string'); +}); +testProp('should fail on falsy synchronous property', [fc.boolean()], (t, a) => t.true(a)); +testProp('should fail on falsy asynchronous property', [fc.nat()], async (t, a) => { + await delay(0); + t.true(typeof a === 'string'); +}); +testProp('should fail with seed=4242 and path="25"', [fc.constant(null)], (t) => t.fail(), { seed: 4242, path: '25' }); +testProp('should pass on followed plan', [fc.array(fc.nat())], (t, array) => { + t.plan(array.length); + + for (let i = 0; i < array.length; i++) { + t.true(array[i] >= 0); + } +}); +testProp('should fail on not followed plan', [fc.array(fc.nat())], (t, array) => { + t.plan(array.length + 1); + + for (let i = 0; i < array.length; i++) { + t.true(array[i] >= 0); + } +}); +testProp('should pass kitchen sink', [fc.array(fc.nat())], (t, array) => { + t.log('testing'); + t.false(array.some((value) => value < 0)); + + const reduceSum = array.reduce((a, b) => a + b, 0); + let forSum = 0; + for (const value of array) { + forSum += value; + } + t.is(forSum, reduceSum); + + t.deepEqual(array, Array.from(array)); + t.notDeepEqual(array, array.concat(1)); + t.falsy(array.reduce((a, b) => a + (b < 0), 0)); + t.throws(() => array()); +}); +testProp('should fail kitchen sink', [fc.array(fc.nat())], (t, array) => { + t.log('testing'); + t.false(array.some((value) => value < 0)); + + const reduceSum = array.reduce((a, b) => a + b, 0); + let forSum = 0; + for (const value of array) { + forSum += value; + } + t.is(forSum, reduceSum); + + t.deepEqual(array, Array.from(array)); + t.notDeepEqual(array, array.concat(1)); + t.falsy(array.reduce((a, b) => a + (b < 0), 0)); + t.notThrows(() => array()); +}); + +// testProp.failing + +testProp.failing('should pass as the property fails', [fc.boolean()], (t, a) => t.true(a)); +testProp.failing('should fail as the property passes', [fc.boolean()], (t, a) => t.true(a || !a)); + +// testProp.skip + +testProp.skip('should never be executed', [fc.boolean()], (t, a) => t.true(a), { seed: 48 }); + +// testProp.serial + +// Test that one serial run is after the other +let serialRun = false; +testProp.serial('should run first', [fc.boolean()], async (t, a) => { + serialRun = true; + await delay(0); + t.true(a == a); +}); +testProp.serial('should run after', [fc.boolean()], async (t, a) => { + t.true(a == a && serialRun); +}); + +// Test that each execution of a test is run serially (and in order) +let runs = 0; +testProp.serial('should run serially', [fc.boolean()], async (t, a) => { + let run = runs++; + delay(a ? 1 : 0); + t.true(a == a && runs == run + 1); +}); diff --git a/packages/ava/tsconfig.json b/packages/ava/tsconfig.json new file mode 100644 index 00000000..a8d2f51c --- /dev/null +++ b/packages/ava/tsconfig.json @@ -0,0 +1,17 @@ +{ + "compilerOptions": { + "declaration": true, + "sourceMap": false, + "strict": true, + "alwaysStrict": true, + "removeComments": true, + "preserveConstEnums": true, + "skipLibCheck": true, + "downlevelIteration": true, + "module": "commonjs", + "target": "es2017", + "outDir": "lib/" + }, + "include": ["src/**/*"], + "exclude": ["node_modules", "**/*.spec.ts"] +} diff --git a/packages/test-ava-bundle-cjs/index.test.js b/packages/test-ava-bundle-cjs/index.test.js new file mode 100644 index 00000000..dea9dd55 --- /dev/null +++ b/packages/test-ava-bundle-cjs/index.test.js @@ -0,0 +1,8 @@ +// eslint-disable-next-line no-undef, @typescript-eslint/no-var-requires +const { testProp, fc } = require('@fast-check/ava'); + +// for all a, b, c strings +// b is a substring of a + b + c +testProp('should detect the substring', [fc.string(), fc.string(), fc.string()], (t, a, b, c) => { + t.true((a + b + c).includes(b)); +}); diff --git a/packages/test-ava-bundle-cjs/package.json b/packages/test-ava-bundle-cjs/package.json new file mode 100644 index 00000000..c27d6850 --- /dev/null +++ b/packages/test-ava-bundle-cjs/package.json @@ -0,0 +1,16 @@ +{ + "private": true, + "name": "@fast-check/test-ava-bundle-cjs", + "descrition": "Test bundling of @fast-check/ava against CJS runners", + "version": "0.0.0", + "type": "commonjs", + "scripts": { + "test": "ava" + }, + "devDependencies": { + "@fast-check/ava": "workspace:*", + "ava": "^4.0.0", + "fast-check": "workspace:*" + }, + "license": "MIT" +} diff --git a/packages/test-ava-bundle-esm/index.test.js b/packages/test-ava-bundle-esm/index.test.js new file mode 100644 index 00000000..559fd171 --- /dev/null +++ b/packages/test-ava-bundle-esm/index.test.js @@ -0,0 +1,7 @@ +import { testProp, fc } from '@fast-check/ava'; + +// for all a, b, c strings +// b is a substring of a + b + c +testProp('should detect the substring', [fc.string(), fc.string(), fc.string()], (t, a, b, c) => { + t.true((a + b + c).includes(b)); +}); diff --git a/packages/test-ava-bundle-esm/package.json b/packages/test-ava-bundle-esm/package.json new file mode 100644 index 00000000..882ab5a1 --- /dev/null +++ b/packages/test-ava-bundle-esm/package.json @@ -0,0 +1,16 @@ +{ + "private": true, + "name": "@fast-check/test-ava-bundle-esm", + "descrition": "Test bundling of @fast-check/ava against ESM runners", + "version": "0.0.0", + "type": "module", + "scripts": { + "test": "ava" + }, + "devDependencies": { + "@fast-check/ava": "workspace:*", + "ava": "^4.0.0", + "fast-check": "workspace:*" + }, + "license": "MIT" +} diff --git a/yarn.lock b/yarn.lock index 584ea091..6b5d14fb 100644 --- a/yarn.lock +++ b/yarn.lock @@ -749,6 +749,21 @@ __metadata: languageName: node linkType: hard +"@fast-check/ava@workspace:*, @fast-check/ava@workspace:packages/ava": + version: 0.0.0-use.local + resolution: "@fast-check/ava@workspace:packages/ava" + dependencies: + "@types/node": ^17.0.44 + ava: ^4.0.1 + esm: ^3.2.25 + fast-check: "workspace:*" + ts-node: ^9.0.0 + typescript: ^4.0.3 + peerDependencies: + ava: ">=4.0.0" + languageName: unknown + linkType: soft + "@fast-check/deploy-netlify@workspace:.github/actions/deploy-netlify": version: 0.0.0-use.local resolution: "@fast-check/deploy-netlify@workspace:.github/actions/deploy-netlify" @@ -817,6 +832,26 @@ __metadata: languageName: unknown linkType: soft +"@fast-check/test-ava-bundle-cjs@workspace:packages/test-ava-bundle-cjs": + version: 0.0.0-use.local + resolution: "@fast-check/test-ava-bundle-cjs@workspace:packages/test-ava-bundle-cjs" + dependencies: + "@fast-check/ava": "workspace:*" + ava: ^4.0.0 + fast-check: "workspace:*" + languageName: unknown + linkType: soft + +"@fast-check/test-ava-bundle-esm@workspace:packages/test-ava-bundle-esm": + version: 0.0.0-use.local + resolution: "@fast-check/test-ava-bundle-esm@workspace:packages/test-ava-bundle-esm" + dependencies: + "@fast-check/ava": "workspace:*" + ava: ^4.0.0 + fast-check: "workspace:*" + languageName: unknown + linkType: soft + "@fast-check/test-bundle-esbuild-with-import@workspace:packages/test-bundle-esbuild-with-import": version: 0.0.0-use.local resolution: "@fast-check/test-bundle-esbuild-with-import@workspace:packages/test-bundle-esbuild-with-import" @@ -2930,10 +2965,10 @@ __metadata: languageName: node linkType: hard -"@types/node@npm:*, @types/node@npm:^17.0.0": - version: 17.0.40 - resolution: "@types/node@npm:17.0.40" - checksum: e3b2fe876672fbe4be84ce17773944eb2f5eaba50e2c6c0536bdf6d4972ed6488581580581f154183fdc8f2d56fa42a42e3d6e83b9b71ee25adea16a84765e92 +"@types/node@npm:*, @types/node@npm:^17.0.0, @types/node@npm:^17.0.44": + version: 17.0.44 + resolution: "@types/node@npm:17.0.44" + checksum: 8e2786472507575a9c49ec6c4b056cbe1f4fd6766fd03299f8510bbdce558d8522691b2cc24329396742002c2a8c3708cb453053ecbe0ce09c10b9d48887c9d8 languageName: node linkType: hard @@ -3616,7 +3651,7 @@ __metadata: languageName: node linkType: hard -"acorn-walk@npm:^8.1.1": +"acorn-walk@npm:^8.1.1, acorn-walk@npm:^8.2.0": version: 8.2.0 resolution: "acorn-walk@npm:8.2.0" checksum: 1715e76c01dd7b2d4ca472f9c58968516a4899378a63ad5b6c2d668bba8da21a71976c14ec5f5b75f887b6317c4ae0b897ab141c831d741dc76024d8745f1ad1 @@ -4035,6 +4070,13 @@ __metadata: languageName: node linkType: hard +"array-find-index@npm:^1.0.1": + version: 1.0.2 + resolution: "array-find-index@npm:1.0.2" + checksum: aac128bf369e1ac6c06ff0bb330788371c0e256f71279fb92d745e26fb4b9db8920e485b4ec25e841c93146bf71a34dcdbcefa115e7e0f96927a214d237b7081 + languageName: node + linkType: hard + "array-flatten@npm:1.1.1": version: 1.1.1 resolution: "array-flatten@npm:1.1.1" @@ -4072,6 +4114,13 @@ __metadata: languageName: node linkType: hard +"arrgv@npm:^1.0.2": + version: 1.0.2 + resolution: "arrgv@npm:1.0.2" + checksum: 470bbb406ea3b34810dd8b03c0b33282617a42d9fce0ab45d58596efefd042fc548eda49161fa8e3f607cbe9df90e7a67003a09043ab9081eff70f97c63dd0e2 + languageName: node + linkType: hard + "arrify@npm:^2.0.1": version: 2.0.1 resolution: "arrify@npm:2.0.1" @@ -4079,6 +4128,13 @@ __metadata: languageName: node linkType: hard +"arrify@npm:^3.0.0": + version: 3.0.0 + resolution: "arrify@npm:3.0.0" + checksum: d6c6f3dad9571234f320e130d57fddb2cc283c87f2ac7df6c7005dffc5161b7bb9376f4be655ed257050330336e84afc4f3020d77696ad231ff580a94ae5aba6 + languageName: node + linkType: hard + "asap@npm:^2.0.0": version: 2.0.6 resolution: "asap@npm:2.0.6" @@ -4146,6 +4202,66 @@ __metadata: languageName: node linkType: hard +"ava@npm:^4.0.0, ava@npm:^4.0.1": + version: 4.3.0 + resolution: "ava@npm:4.3.0" + dependencies: + acorn: ^8.7.1 + acorn-walk: ^8.2.0 + ansi-styles: ^6.1.0 + arrgv: ^1.0.2 + arrify: ^3.0.0 + callsites: ^4.0.0 + cbor: ^8.1.0 + chalk: ^5.0.1 + chokidar: ^3.5.3 + chunkd: ^2.0.1 + ci-info: ^3.3.1 + ci-parallel-vars: ^1.0.1 + clean-yaml-object: ^0.1.0 + cli-truncate: ^3.1.0 + code-excerpt: ^4.0.0 + common-path-prefix: ^3.0.0 + concordance: ^5.0.4 + currently-unhandled: ^0.4.1 + debug: ^4.3.4 + del: ^6.1.1 + emittery: ^0.11.0 + figures: ^4.0.1 + globby: ^13.1.1 + ignore-by-default: ^2.1.0 + indent-string: ^5.0.0 + is-error: ^2.2.2 + is-plain-object: ^5.0.0 + is-promise: ^4.0.0 + matcher: ^5.0.0 + mem: ^9.0.2 + ms: ^2.1.3 + p-event: ^5.0.1 + p-map: ^5.4.0 + picomatch: ^2.3.1 + pkg-conf: ^4.0.0 + plur: ^5.1.0 + pretty-ms: ^7.0.1 + resolve-cwd: ^3.0.0 + slash: ^3.0.0 + stack-utils: ^2.0.5 + strip-ansi: ^7.0.1 + supertap: ^3.0.1 + temp-dir: ^2.0.0 + write-file-atomic: ^4.0.1 + yargs: ^17.5.1 + peerDependencies: + "@ava/typescript": "*" + peerDependenciesMeta: + "@ava/typescript": + optional: true + bin: + ava: entrypoints/cli.mjs + checksum: fa1ac6d9a8ea01edf4f481a014ca4ae46699c44a1d2b9175644116419a3e7e3c20a94635b15993402fe67f99efc62fdb2bde0dffa42bb354df96b6e9dca73374 + languageName: node + linkType: hard + "babel-core@npm:^7.0.0-bridge.0": version: 7.0.0-bridge.0 resolution: "babel-core@npm:7.0.0-bridge.0" @@ -4717,6 +4833,13 @@ __metadata: languageName: node linkType: hard +"callsites@npm:^4.0.0": + version: 4.0.0 + resolution: "callsites@npm:4.0.0" + checksum: ad3c3a57328a539c0d671cf1ca500abf09461b762807fc545a132026bdf87705fee9c299e1adb38b133c29201a3b04fbf4f2b90d8fa1d9e00ef507e803737cf2 + languageName: node + linkType: hard + "camelcase@npm:^5.0.0, camelcase@npm:^5.3.1": version: 5.3.1 resolution: "camelcase@npm:5.3.1" @@ -4738,6 +4861,15 @@ __metadata: languageName: node linkType: hard +"cbor@npm:^8.1.0": + version: 8.1.0 + resolution: "cbor@npm:8.1.0" + dependencies: + nofilter: ^3.1.0 + checksum: a90338435dc7b45cc01461af979e3bb6ddd4f2a08584c437586039cd5f2235014c06e49d664295debbfb3514d87b2f06728092ab6aa6175e2e85e9cd7dc0c1fd + languageName: node + linkType: hard + "chalk@npm:^0.5.1": version: 0.5.1 resolution: "chalk@npm:0.5.1" @@ -4795,7 +4927,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^5.0.0": +"chalk@npm:^5.0.0, chalk@npm:^5.0.1": version: 5.0.1 resolution: "chalk@npm:5.0.1" checksum: 7b45300372b908f0471fbf7389ce2f5de8d85bb949026fd51a1b95b10d0ed32c7ed5aab36dd5e9d2bf3191867909b4404cef75c5f4d2d1daeeacd301dd280b76 @@ -4816,7 +4948,7 @@ __metadata: languageName: node linkType: hard -"chokidar@npm:^3.0.2": +"chokidar@npm:^3.0.2, chokidar@npm:^3.5.3": version: 3.5.3 resolution: "chokidar@npm:3.5.3" dependencies: @@ -4856,6 +4988,13 @@ __metadata: languageName: node linkType: hard +"chunkd@npm:^2.0.1": + version: 2.0.1 + resolution: "chunkd@npm:2.0.1" + checksum: bab8cc08c752a3648984385dc6f61d751e89dbeef648d22a3b661e1d470eaa0f5182f0b4303710f13ae83d2f85144f8eb2dde7a975861d9021b5c56b881f457b + languageName: node + linkType: hard + "ci-info@npm:^2.0.0": version: 2.0.0 resolution: "ci-info@npm:2.0.0" @@ -4863,10 +5002,17 @@ __metadata: languageName: node linkType: hard -"ci-info@npm:^3.0.0, ci-info@npm:^3.2.0": - version: 3.3.1 - resolution: "ci-info@npm:3.3.1" - checksum: 244546317cca96955860d2cb8d0bf47dd66d9078bbe83a215fa87464ab24b352c6fc6f56027d1c82f002e3f833be253f1320d35ed7199bd81134f7788c657f3a +"ci-info@npm:^3.0.0, ci-info@npm:^3.2.0, ci-info@npm:^3.3.1": + version: 3.3.2 + resolution: "ci-info@npm:3.3.2" + checksum: fd81f1edd2d3b0f6cb077b2e84365136d87b9db8c055928c1ad69da8a76c2c2f19cba8ea51b90238302157ca927f91f92b653e933f2398dde4867500f08d6e62 + languageName: node + linkType: hard + +"ci-parallel-vars@npm:^1.0.1": + version: 1.0.1 + resolution: "ci-parallel-vars@npm:1.0.1" + checksum: ae859831f7e8e3585db731b8306c336616e37bd709dad1d7775ea4c0731aefd94741dabb48201edc6827d000008fd7fb72cb977967614ee2d99d6b499f0c35fe languageName: node linkType: hard @@ -4916,6 +5062,13 @@ __metadata: languageName: node linkType: hard +"clean-yaml-object@npm:^0.1.0": + version: 0.1.0 + resolution: "clean-yaml-object@npm:0.1.0" + checksum: 0374ad2f1fbd4984ecf56ebc62200092f6372b9ccf1b7971bb979c328fb12fe76e759fb1e8adc491c80b7b1861f9f00c7f19813dd2a0f49c88231422c70451f4 + languageName: node + linkType: hard + "cli-boxes@npm:^2.2.1": version: 2.2.1 resolution: "cli-boxes@npm:2.2.1" @@ -4976,6 +5129,16 @@ __metadata: languageName: node linkType: hard +"cli-truncate@npm:^3.1.0": + version: 3.1.0 + resolution: "cli-truncate@npm:3.1.0" + dependencies: + slice-ansi: ^5.0.0 + string-width: ^5.0.0 + checksum: c3243e41974445691c63f8b405df1d5a24049dc33d324fe448dc572e561a7b772ae982692900b1a5960901cc4fc7def25a629b9c69a4208ee89d12ab3332617a + languageName: node + linkType: hard + "cli-width@npm:^2.0.0": version: 2.2.1 resolution: "cli-width@npm:2.2.1" @@ -5046,6 +5209,15 @@ __metadata: languageName: node linkType: hard +"code-excerpt@npm:^4.0.0": + version: 4.0.0 + resolution: "code-excerpt@npm:4.0.0" + dependencies: + convert-to-spaces: ^2.0.1 + checksum: d57137d8f4825879283a828cc02a1115b56858dc54ed06c625c8f67d6685d1becd2fbaa7f0ab19ecca1f5cca03f8c97bbc1f013cab40261e4d3275032e65efe9 + languageName: node + linkType: hard + "code-point-at@npm:^1.0.0": version: 1.1.0 resolution: "code-point-at@npm:1.1.0" @@ -5261,7 +5433,7 @@ __metadata: languageName: node linkType: hard -"concordance@npm:^5.0.0": +"concordance@npm:^5.0.0, concordance@npm:^5.0.4": version: 5.0.4 resolution: "concordance@npm:5.0.4" dependencies: @@ -5323,6 +5495,13 @@ __metadata: languageName: node linkType: hard +"convert-to-spaces@npm:^2.0.1": + version: 2.0.1 + resolution: "convert-to-spaces@npm:2.0.1" + checksum: bbb324e5916fe9866f65c0ff5f9c1ea933764d0bdb09fccaf59542e40545ed483db6b2339c6d9eb56a11965a58f1a6038f3174f0e2fb7601343c7107ca5e2751 + languageName: node + linkType: hard + "cookie-signature@npm:1.0.6": version: 1.0.6 resolution: "cookie-signature@npm:1.0.6" @@ -5536,6 +5715,15 @@ __metadata: languageName: node linkType: hard +"currently-unhandled@npm:^0.4.1": + version: 0.4.1 + resolution: "currently-unhandled@npm:0.4.1" + dependencies: + array-find-index: ^1.0.1 + checksum: 1f59fe10b5339b54b1a1eee110022f663f3495cf7cf2f480686e89edc7fa8bfe42dbab4b54f85034bc8b092a76cc7becbc2dad4f9adad332ab5831bec39ad540 + languageName: node + linkType: hard + "cyclist@npm:^1.0.1": version: 1.0.1 resolution: "cyclist@npm:1.0.1" @@ -5814,7 +6002,7 @@ __metadata: languageName: node linkType: hard -"del@npm:^6.0.0": +"del@npm:^6.0.0, del@npm:^6.1.1": version: 6.1.1 resolution: "del@npm:6.1.1" dependencies: @@ -6181,6 +6369,13 @@ __metadata: languageName: node linkType: hard +"emittery@npm:^0.11.0": + version: 0.11.0 + resolution: "emittery@npm:0.11.0" + checksum: fba43607e6184a9e318541c1613b742e4d4753bab4fd27f17b93127172f62aa34da8096c78c290dd1a65f12a63abe5ae6765a1d555194d60e5f42eed8548c23d + languageName: node + linkType: hard + "emoji-regex@npm:^8.0.0": version: 8.0.0 resolution: "emoji-regex@npm:8.0.0" @@ -6686,6 +6881,13 @@ __metadata: languageName: node linkType: hard +"esm@npm:^3.2.25": + version: 3.2.25 + resolution: "esm@npm:3.2.25" + checksum: 978aabe2de83541c105605a6d60a26ed8e627ef6bb0a7605fe15a95bbdea6b8348bd045255cb22219c054dd09a81a94823df00843d9e97f42419c92015ce3a64 + languageName: node + linkType: hard + "espree@npm:^9.3.2": version: 9.3.2 resolution: "espree@npm:9.3.2" @@ -7154,7 +7356,7 @@ __metadata: languageName: node linkType: hard -"figures@npm:^4.0.0": +"figures@npm:^4.0.0, figures@npm:^4.0.1": version: 4.0.1 resolution: "figures@npm:4.0.1" dependencies: @@ -7877,16 +8079,16 @@ __metadata: languageName: node linkType: hard -"globby@npm:^13.0.0": - version: 13.1.1 - resolution: "globby@npm:13.1.1" +"globby@npm:^13.0.0, globby@npm:^13.1.1": + version: 13.1.2 + resolution: "globby@npm:13.1.2" dependencies: dir-glob: ^3.0.1 fast-glob: ^3.2.11 ignore: ^5.2.0 merge2: ^1.4.1 slash: ^4.0.0 - checksum: e6c43409c6c31b374fbd1c01a8c1811de52336928be9c697e472d2a89a156c9cbf1fb33863755c0447b4db16485858aa57f16628d66a6b7c7131669c9fbe76cd + checksum: c148fcda0c981f00fb434bb94ca258f0a9d23cedbde6fb3f37098e1abde5b065019e2c63fe2aa2fad4daf2b54bf360b4d0423d85fb3a63d09ed75a2837d4de0f languageName: node linkType: hard @@ -8358,6 +8560,13 @@ __metadata: languageName: node linkType: hard +"ignore-by-default@npm:^2.1.0": + version: 2.1.0 + resolution: "ignore-by-default@npm:2.1.0" + checksum: 2b2df4622b6a07a3e91893987be8f060dc553f7736b67e72aa2312041c450a6fa8371733d03c42f45a02e47ec824e961c2fba63a3d94fc59cbd669220a5b0d7a + languageName: node + linkType: hard + "ignore-walk@npm:^3.0.1": version: 3.0.4 resolution: "ignore-walk@npm:3.0.4" @@ -8580,6 +8789,13 @@ __metadata: languageName: node linkType: hard +"irregular-plurals@npm:^3.3.0": + version: 3.3.0 + resolution: "irregular-plurals@npm:3.3.0" + checksum: 1282d8adfb00a9718655ce21e5b096d4b31d2115c817a30e1e3254648ae4ac0f84d706cd0cad2a93c64f4bb5c5572ea8f63fcc9766f005a5362031c56d9e77b5 + languageName: node + linkType: hard + "is-accessor-descriptor@npm:^0.1.6": version: 0.1.6 resolution: "is-accessor-descriptor@npm:0.1.6" @@ -8706,6 +8922,13 @@ __metadata: languageName: node linkType: hard +"is-error@npm:^2.2.2": + version: 2.2.2 + resolution: "is-error@npm:2.2.2" + checksum: a97b39587150f0d38f9f93f64699807fe3020fe5edbd63548f234dc2ba96fd7c776d66c062bf031dfeb93c7f48db563ff6bde588418ca041da37c659a416f055 + languageName: node + linkType: hard + "is-extendable@npm:^0.1.0, is-extendable@npm:^0.1.1": version: 0.1.1 resolution: "is-extendable@npm:0.1.1" @@ -8940,6 +9163,13 @@ __metadata: languageName: node linkType: hard +"is-promise@npm:^4.0.0": + version: 4.0.0 + resolution: "is-promise@npm:4.0.0" + checksum: 0b46517ad47b00b6358fd6553c83ec1f6ba9acd7ffb3d30a0bf519c5c69e7147c132430452351b8a9fc198f8dd6c4f76f8e6f5a7f100f8c77d57d9e0f4261a8a + languageName: node + linkType: hard + "is-reference@npm:^1.2.1": version: 1.2.1 resolution: "is-reference@npm:1.2.1" @@ -9693,7 +9923,7 @@ __metadata: languageName: node linkType: hard -"js-yaml@npm:^3.13.1": +"js-yaml@npm:^3.13.1, js-yaml@npm:^3.14.1": version: 3.14.1 resolution: "js-yaml@npm:3.14.1" dependencies: @@ -10146,6 +10376,13 @@ __metadata: languageName: node linkType: hard +"load-json-file@npm:^7.0.0": + version: 7.0.1 + resolution: "load-json-file@npm:7.0.1" + checksum: a560288da6891778321ef993e4bdbdf05374a4f3a3aeedd5ba6b64672798c830d748cfc59a2ec9891a3db30e78b3d04172e0dcb0d4828168289a393147ca0e74 + languageName: node + linkType: hard + "loader-runner@npm:^4.2.0": version: 4.3.0 resolution: "loader-runner@npm:4.3.0" @@ -10580,6 +10817,15 @@ __metadata: languageName: node linkType: hard +"map-age-cleaner@npm:^0.1.3": + version: 0.1.3 + resolution: "map-age-cleaner@npm:0.1.3" + dependencies: + p-defer: ^1.0.0 + checksum: cb2804a5bcb3cbdfe4b59066ea6d19f5e7c8c196cd55795ea4c28f792b192e4c442426ae52524e5e1acbccf393d3bddacefc3d41f803e66453f6c4eda3650bc1 + languageName: node + linkType: hard + "map-cache@npm:^0.2.2": version: 0.2.2 resolution: "map-cache@npm:0.2.2" @@ -10612,6 +10858,15 @@ __metadata: languageName: node linkType: hard +"matcher@npm:^5.0.0": + version: 5.0.0 + resolution: "matcher@npm:5.0.0" + dependencies: + escape-string-regexp: ^5.0.0 + checksum: 28f191c2d23fee0f6f32fd0181d9fe173b0ab815a919edba55605438a2f9fa40372e002574a1b17add981b0a8669c75bc6194318d065ed2dceffd8b160c38118 + languageName: node + linkType: hard + "maxstache-stream@npm:^1.0.0": version: 1.0.4 resolution: "maxstache-stream@npm:1.0.4" @@ -10647,6 +10902,16 @@ __metadata: languageName: node linkType: hard +"mem@npm:^9.0.2": + version: 9.0.2 + resolution: "mem@npm:9.0.2" + dependencies: + map-age-cleaner: ^0.1.3 + mimic-fn: ^4.0.0 + checksum: 07829bb182af0e3ecf748dc2edb1c3b10a256ef10458f7e24d06561a2adc2b3ef34d14abe81678bbcedb46faa477e7370223f118b1a5e1252da5fe43496f3967 + languageName: node + linkType: hard + "memoize-one@npm:^6.0.0": version: 6.0.0 resolution: "memoize-one@npm:6.0.0" @@ -11035,7 +11300,7 @@ __metadata: languageName: node linkType: hard -"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1": +"ms@npm:2.1.3, ms@npm:^2.0.0, ms@npm:^2.1.1, ms@npm:^2.1.3": version: 2.1.3 resolution: "ms@npm:2.1.3" checksum: aa92de608021b242401676e35cfa5aa42dd70cbdc082b916da7fb925c542173e36bce97ea3e804923fe92c0ad991434e4a38327e15a1b5b5f945d66df615ae6d @@ -11480,6 +11745,13 @@ __metadata: languageName: node linkType: hard +"nofilter@npm:^3.1.0": + version: 3.1.0 + resolution: "nofilter@npm:3.1.0" + checksum: 58aa85a5b4b35cbb6e42de8a8591c5e338061edc9f3e7286f2c335e9e9b9b8fa7c335ae45daa8a1f3433164dc0b9a3d187fa96f9516e04a17a1f9ce722becc4f + languageName: node + linkType: hard + "noop2@npm:^2.0.0": version: 2.0.0 resolution: "noop2@npm:2.0.0" @@ -12014,6 +12286,13 @@ __metadata: languageName: node linkType: hard +"p-defer@npm:^1.0.0": + version: 1.0.0 + resolution: "p-defer@npm:1.0.0" + checksum: 4271b935c27987e7b6f229e5de4cdd335d808465604644cb7b4c4c95bef266735859a93b16415af8a41fd663ee9e3b97a1a2023ca9def613dba1bad2a0da0c7b + languageName: node + linkType: hard + "p-event@npm:^2.1.0": version: 2.3.1 resolution: "p-event@npm:2.3.1" @@ -12032,7 +12311,7 @@ __metadata: languageName: node linkType: hard -"p-event@npm:^5.0.0": +"p-event@npm:^5.0.0, p-event@npm:^5.0.1": version: 5.0.1 resolution: "p-event@npm:5.0.1" dependencies: @@ -12170,12 +12449,12 @@ __metadata: languageName: node linkType: hard -"p-map@npm:^5.1.0": - version: 5.4.0 - resolution: "p-map@npm:5.4.0" +"p-map@npm:^5.1.0, p-map@npm:^5.4.0": + version: 5.5.0 + resolution: "p-map@npm:5.5.0" dependencies: aggregate-error: ^4.0.0 - checksum: dbd6582860be6543dd7f0da5d0e2be2237d7172f3b431001c03c30b0384d6df6d03a06b90b53836ba4861abadb08da2b9ffb47f1707c68c3e2332b65ace8835c + checksum: 065cb6fca6b78afbd070dd9224ff160dc23eea96e57863c09a0c8ea7ce921043f76854be7ee0abc295cff1ac9adcf700e79a1fbe3b80b625081087be58e7effb languageName: node linkType: hard @@ -12522,6 +12801,16 @@ __metadata: languageName: node linkType: hard +"pkg-conf@npm:^4.0.0": + version: 4.0.0 + resolution: "pkg-conf@npm:4.0.0" + dependencies: + find-up: ^6.0.0 + load-json-file: ^7.0.0 + checksum: 6da0c064a74f6c7ae80d7d68c5853e14f7e762a2a80c6ca9e0aa827002b90b69c86fefe3bac830b10a6f1739e7f96a1f728637f2a141e50b0fdafe92a2c3eab6 + languageName: node + linkType: hard + "pkg-dir@npm:^3.0.0": version: 3.0.0 resolution: "pkg-dir@npm:3.0.0" @@ -12558,6 +12847,15 @@ __metadata: languageName: node linkType: hard +"plur@npm:^5.1.0": + version: 5.1.0 + resolution: "plur@npm:5.1.0" + dependencies: + irregular-plurals: ^3.3.0 + checksum: 57e400dc4b926768fb0abab7f8688fe17e85673712134546e7beaaee188bae7e0504976e847d7e41d0d6103ff2fd61204095f03c2a45de19a8bad15aecb45cc1 + languageName: node + linkType: hard + "posix-character-classes@npm:^0.1.0": version: 0.1.1 resolution: "posix-character-classes@npm:0.1.1" @@ -12683,7 +12981,7 @@ __metadata: languageName: node linkType: hard -"pretty-ms@npm:^7.0.0": +"pretty-ms@npm:^7.0.0, pretty-ms@npm:^7.0.1": version: 7.0.1 resolution: "pretty-ms@npm:7.0.1" dependencies: @@ -13645,6 +13943,15 @@ __metadata: languageName: node linkType: hard +"serialize-error@npm:^7.0.1": + version: 7.0.1 + resolution: "serialize-error@npm:7.0.1" + dependencies: + type-fest: ^0.13.1 + checksum: e0aba4dca2fc9fe74ae1baf38dbd99190e1945445a241ba646290f2176cdb2032281a76443b02ccf0caf30da5657d510746506368889a593b9835a497fc0732e + languageName: node + linkType: hard + "serialize-javascript@npm:^6.0.0": version: 6.0.0 resolution: "serialize-javascript@npm:6.0.0" @@ -13942,7 +14249,7 @@ __metadata: languageName: node linkType: hard -"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.19, source-map-support@npm:~0.5.20": +"source-map-support@npm:^0.5.16, source-map-support@npm:^0.5.17, source-map-support@npm:^0.5.19, source-map-support@npm:~0.5.20": version: 0.5.21 resolution: "source-map-support@npm:0.5.21" dependencies: @@ -14073,7 +14380,7 @@ __metadata: languageName: node linkType: hard -"stack-utils@npm:^2.0.3": +"stack-utils@npm:^2.0.3, stack-utils@npm:^2.0.5": version: 2.0.5 resolution: "stack-utils@npm:2.0.5" dependencies: @@ -14371,6 +14678,18 @@ __metadata: languageName: node linkType: hard +"supertap@npm:^3.0.1": + version: 3.0.1 + resolution: "supertap@npm:3.0.1" + dependencies: + indent-string: ^5.0.0 + js-yaml: ^3.14.1 + serialize-error: ^7.0.1 + strip-ansi: ^7.0.1 + checksum: ee3d71c1d25f7f15d4a849e72b0c5f430df7cd8f702cf082fdbec5642a9546be6557766745655fa3a3e9c88f7c7eed849f2d74457b5b72cb9d94a779c0c8a948 + languageName: node + linkType: hard + "supertest@npm:^6.2.2": version: 6.2.3 resolution: "supertest@npm:6.2.3" @@ -14937,6 +15256,27 @@ __metadata: languageName: node linkType: hard +"ts-node@npm:^9.0.0": + version: 9.1.1 + resolution: "ts-node@npm:9.1.1" + dependencies: + arg: ^4.1.0 + create-require: ^1.1.0 + diff: ^4.0.1 + make-error: ^1.1.1 + source-map-support: ^0.5.17 + yn: 3.1.1 + peerDependencies: + typescript: ">=2.7" + bin: + ts-node: dist/bin.js + ts-node-script: dist/bin-script.js + ts-node-transpile-only: dist/bin-transpile.js + ts-script: dist/bin-script-deprecated.js + checksum: 356e2647b8b1e6ab00380c0537fa569b63bd9b6f006cc40fd650f81fae1817bd8fecc075300036950d8f45c1d85b95be33cd1e48a1a424a7d86c3dbb42bf60e5 + languageName: node + linkType: hard + "tslib@npm:^1.8.1, tslib@npm:^1.9.0": version: 1.14.1 resolution: "tslib@npm:1.14.1" @@ -15001,6 +15341,13 @@ __metadata: languageName: node linkType: hard +"type-fest@npm:^0.13.1": + version: 0.13.1 + resolution: "type-fest@npm:0.13.1" + checksum: e6bf2e3c449f27d4ef5d56faf8b86feafbc3aec3025fc9a5fbe2db0a2587c44714521f9c30d8516a833c8c506d6263f5cc11267522b10c6ccdb6cc55b0a9d1c4 + languageName: node + linkType: hard + "type-fest@npm:^0.16.0": version: 0.16.0 resolution: "type-fest@npm:0.16.0" @@ -15086,7 +15433,7 @@ __metadata: languageName: node linkType: hard -"typescript@npm:^4.3.2, typescript@npm:^4.5.4, typescript@npm:^4.5.5, typescript@npm:^4.6.3": +"typescript@npm:^4.0.3, typescript@npm:^4.3.2, typescript@npm:^4.5.4, typescript@npm:^4.5.5, typescript@npm:^4.6.3": version: 4.7.3 resolution: "typescript@npm:4.7.3" bin: @@ -15106,7 +15453,7 @@ __metadata: languageName: node linkType: hard -"typescript@patch:typescript@^4.3.2#~builtin, typescript@patch:typescript@^4.5.4#~builtin, typescript@patch:typescript@^4.5.5#~builtin, typescript@patch:typescript@^4.6.3#~builtin": +"typescript@patch:typescript@^4.0.3#~builtin, typescript@patch:typescript@^4.3.2#~builtin, typescript@patch:typescript@^4.5.4#~builtin, typescript@patch:typescript@^4.5.5#~builtin, typescript@patch:typescript@^4.6.3#~builtin": version: 4.7.3 resolution: "typescript@patch:typescript@npm%3A4.7.3#~builtin::version=4.7.3&hash=7ad353" bin: @@ -15900,7 +16247,7 @@ __metadata: languageName: node linkType: hard -"yargs@npm:^17.0.0, yargs@npm:^17.2.1, yargs@npm:^17.3.1": +"yargs@npm:^17.0.0, yargs@npm:^17.2.1, yargs@npm:^17.3.1, yargs@npm:^17.5.1": version: 17.5.1 resolution: "yargs@npm:17.5.1" dependencies: