From 13d437a41b0b571805635e28f79c7afef7101ca7 Mon Sep 17 00:00:00 2001 From: Eric Crosson Date: Fri, 26 May 2023 20:44:56 -0500 Subject: [PATCH 1/4] build(nix): upgrade nixpkgs flake input This bumps the Node.js version from 18.12 to 18.16, which includes a fix for a segfault when using c8 for code-coverage collection. --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index 9d354738..2c60db0e 100644 --- a/flake.lock +++ b/flake.lock @@ -17,11 +17,11 @@ }, "nixpkgs": { "locked": { - "lastModified": 1667921410, - "narHash": "sha256-mg7QLVdBN+K3pql5tZDXNady/VlFHWbei03HoDp3bKk=", + "lastModified": 1685145744, + "narHash": "sha256-nUN/HwTF03VtfibtGq9uvY0P5x0LLFDcN6Di5/zTvws=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2c5abd89c7e917acde9077fc4d12596e35b73e17", + "rev": "dc7b61633814c589530b0b8812ca73f9be6ffe29", "type": "github" }, "original": { From aefa9270ca2ee40e1c0ef2148c5ef297b9a77fc6 Mon Sep 17 00:00:00 2001 From: Eric Crosson Date: Sat, 27 May 2023 17:10:00 -0500 Subject: [PATCH 2/4] test(openapi-generator): replace ava with node:test This commit replaces ava with the Node.js native test runner[^1]. The naive implementation ran each test in the test corpus serially, due to this nature of the native test runner's execution model[^2]: > Each test file is executed as if it was a regular script. That is, > if the test file itself uses node:test to define tests, all of those > tests will be executed within a single application thread, regardless > of the value of the concurrency option of test(). Since the function under test is synchronous and compute-bound, and Node.js is single-threaded, all the tests were executing serially and took over 30s to complete on my macbook. Consequently, this commit uses Node.js worker threads[^3] to spawn one worker per test-corpus file, limited to one worker per CPU core. In this configuration, all tests complete in 17s on my macbook. [^1]: https://nodejs.org/api/test.html [^2]: https://nodejs.org/api/test.html#test-runner-execution-model [^3]: https://nodejs.org/api/worker_threads.html --- .github/workflows/ci.yml | 15 +- package-lock.json | 770 +++++++++++++++++- packages/openapi-generator/package.json | 18 +- .../check-one-to-one-file-match.ts | 26 - .../test/corpusFiles/test-array-property.ts | 4 - .../test/corpusFiles/test-boolean-literal.ts | 4 - .../corpusFiles/test-discriminated-union.ts | 4 - .../test-intersection-flattening.ts | 4 - .../test/corpusFiles/test-multi-route.ts | 4 - .../test/corpusFiles/test-multi-union.ts | 4 - .../test/corpusFiles/test-null-param.ts | 4 - .../corpusFiles/test-optional-property.ts | 4 - .../test/corpusFiles/test-record-type.ts | 4 - .../test-single-route-multi-method.ts | 4 - .../test/corpusFiles/test-single-route.ts | 4 - .../test/corpusFiles/test-string-union.ts | 4 - .../test/corpusFiles/test-unknown-property.ts | 4 - .../test/corpusFiles/test-version-tag.ts | 4 - .../openapi-generator/test/test-corpus.ts | 43 +- .../openapi-generator/test/test-entrypoint.ts | 97 +++ 20 files changed, 861 insertions(+), 164 deletions(-) delete mode 100644 packages/openapi-generator/test/corpusFiles/check-one-to-one-file-match.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-array-property.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-boolean-literal.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-discriminated-union.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-intersection-flattening.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-multi-route.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-multi-union.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-null-param.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-optional-property.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-record-type.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-single-route-multi-method.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-single-route.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-string-union.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-unknown-property.ts delete mode 100644 packages/openapi-generator/test/corpusFiles/test-version-tag.ts create mode 100644 packages/openapi-generator/test/test-entrypoint.ts diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 231046f3..c3b19110 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -14,7 +14,15 @@ jobs: strategy: matrix: - node-version: [lts/-2, lts/-1, lts/*] + node-version: + # Skip lts/-2 while it refers to Node.js 14, since this version + # does not come with Node.js's built-in test runner. + # - lts/-2 + # Skip lts/-1 while it refers to Node.js 16, since this version + # ships with a segfault when collecting code coverage with + # Node.js's built-in test runner. + # - lts/-1 + - lts/* name: Node.js ${{ matrix.node-version }} steps: @@ -27,11 +35,6 @@ jobs: cache: npm node-version: ${{ matrix.node-version }} - # Install npm greater-than-or-equal-to 7 so we can use npm workspaces. - # We can remove this when Node.js 16 is the oldest LTS - - name: Update npm - run: npm install --global 'npm@>7' - - name: Install dependencies run: npm ci diff --git a/package-lock.json b/package-lock.json index f170e4ba..7bf05e02 100644 --- a/package-lock.json +++ b/package-lock.json @@ -191,6 +191,388 @@ "node": ">=12" } }, + "node_modules/@esbuild-kit/cjs-loader": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz", + "integrity": "sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==", + "dev": true, + "dependencies": { + "@esbuild-kit/core-utils": "^3.0.0", + "get-tsconfig": "^4.4.0" + } + }, + "node_modules/@esbuild-kit/core-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz", + "integrity": "sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==", + "dev": true, + "dependencies": { + "esbuild": "~0.17.6", + "source-map-support": "^0.5.21" + } + }, + "node_modules/@esbuild-kit/esm-loader": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz", + "integrity": "sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==", + "dev": true, + "dependencies": { + "@esbuild-kit/core-utils": "^3.0.0", + "get-tsconfig": "^4.4.0" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=12" + } + }, "node_modules/@istanbuljs/schema": { "version": "0.1.3", "dev": true, @@ -1739,18 +2121,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chokidar/node_modules/fsevents": { - "version": "2.3.2", - "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" - } - }, "node_modules/chunkd": { "version": "2.0.1", "dev": true, @@ -2642,6 +3012,43 @@ "is-arrayish": "^0.2.1" } }, + "node_modules/esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, "node_modules/escalade": { "version": "3.1.1", "dev": true, @@ -2998,6 +3405,20 @@ "dev": true, "license": "ISC" }, + "node_modules/fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, "node_modules/function-bind": { "version": "1.1.1", "license": "MIT" @@ -3042,6 +3463,15 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/get-tsconfig": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", + "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", + "dev": true, + "funding": { + "url": "https://github.com/privatenumber/get-tsconfig?sponsor=1" + } + }, "node_modules/git-log-parser": { "version": "1.2.0", "dev": true, @@ -3128,14 +3558,6 @@ "uglify-js": "^3.1.4" } }, - "node_modules/handlebars/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/hard-rejection": { "version": "2.1.0", "dev": true, @@ -9211,6 +9633,25 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, + "node_modules/source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "dependencies": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", "dev": true, @@ -9709,6 +10150,23 @@ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, + "node_modules/tsx": { + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.7.tgz", + "integrity": "sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==", + "dev": true, + "dependencies": { + "@esbuild-kit/cjs-loader": "^2.4.2", + "@esbuild-kit/core-utils": "^3.0.0", + "@esbuild-kit/esm-loader": "^2.5.5" + }, + "bin": { + "tsx": "dist/cli.js" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, "node_modules/turbo": { "version": "1.9.6", "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.6.tgz", @@ -10432,7 +10890,7 @@ "ava": "5.2.0", "c8": "7.13.0", "parser-ts": "0.7.0", - "ts-node": "10.9.1" + "tsx": "3.12.7" } }, "packages/openapi-generator/node_modules/typescript": { @@ -10645,7 +11103,7 @@ "openapi-types": "12.1.3", "parser-ts": "0.7.0", "ts-morph": "14.0.0", - "ts-node": "10.9.1", + "tsx": "3.12.7", "typescript": "4.7.4" }, "dependencies": { @@ -10846,6 +11304,190 @@ "@jridgewell/trace-mapping": "0.3.9" } }, + "@esbuild-kit/cjs-loader": { + "version": "2.4.2", + "resolved": "https://registry.npmjs.org/@esbuild-kit/cjs-loader/-/cjs-loader-2.4.2.tgz", + "integrity": "sha512-BDXFbYOJzT/NBEtp71cvsrGPwGAMGRB/349rwKuoxNSiKjPraNNnlK6MIIabViCjqZugu6j+xeMDlEkWdHHJSg==", + "dev": true, + "requires": { + "@esbuild-kit/core-utils": "^3.0.0", + "get-tsconfig": "^4.4.0" + } + }, + "@esbuild-kit/core-utils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@esbuild-kit/core-utils/-/core-utils-3.1.0.tgz", + "integrity": "sha512-Uuk8RpCg/7fdHSceR1M6XbSZFSuMrxcePFuGgyvsBn+u339dk5OeL4jv2EojwTN2st/unJGsVm4qHWjWNmJ/tw==", + "dev": true, + "requires": { + "esbuild": "~0.17.6", + "source-map-support": "^0.5.21" + } + }, + "@esbuild-kit/esm-loader": { + "version": "2.5.5", + "resolved": "https://registry.npmjs.org/@esbuild-kit/esm-loader/-/esm-loader-2.5.5.tgz", + "integrity": "sha512-Qwfvj/qoPbClxCRNuac1Du01r9gvNOT+pMYtJDapfB1eoGN1YlJ1BixLyL9WVENRx5RXgNLdfYdx/CuswlGhMw==", + "dev": true, + "requires": { + "@esbuild-kit/core-utils": "^3.0.0", + "get-tsconfig": "^4.4.0" + } + }, + "@esbuild/android-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.17.19.tgz", + "integrity": "sha512-rIKddzqhmav7MSmoFCmDIb6e2W57geRsM94gV2l38fzhXMwq7hZoClug9USI2pFRGL06f4IOPHHpFNOkWieR8A==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.17.19.tgz", + "integrity": "sha512-KBMWvEZooR7+kzY0BtbTQn0OAYY7CsiydT63pVEaPtVYF0hXbUaOyZog37DKxK7NF3XacBJOpYT4adIJh+avxA==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.17.19.tgz", + "integrity": "sha512-uUTTc4xGNDT7YSArp/zbtmbhO0uEEK9/ETW29Wk1thYUJBz3IVnvgEiEwEa9IeLyvnpKrWK64Utw2bgUmDveww==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.17.19.tgz", + "integrity": "sha512-80wEoCfF/hFKM6WE1FyBHc9SfUblloAWx6FJkFWTWiCoht9Mc0ARGEM47e67W9rI09YoUxJL68WHfDRYEAvOhg==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.17.19.tgz", + "integrity": "sha512-IJM4JJsLhRYr9xdtLytPLSH9k/oxR3boaUIYiHkAawtwNOXKE8KoU8tMvryogdcT8AU+Bflmh81Xn6Q0vTZbQw==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.17.19.tgz", + "integrity": "sha512-pBwbc7DufluUeGdjSU5Si+P3SoMF5DQ/F/UmTSb8HXO80ZEAJmrykPyzo1IfNbAoaqw48YRpv8shwd1NoI0jcQ==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.17.19.tgz", + "integrity": "sha512-4lu+n8Wk0XlajEhbEffdy2xy53dpR06SlzvhGByyg36qJw6Kpfk7cp45DR/62aPH9mtJRmIyrXAS5UWBrJT6TQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.17.19.tgz", + "integrity": "sha512-cdmT3KxjlOQ/gZ2cjfrQOtmhG4HJs6hhvm3mWSRDPtZ/lP5oe8FWceS10JaSJC13GBd4eH/haHnqf7hhGNLerA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.17.19.tgz", + "integrity": "sha512-ct1Tg3WGwd3P+oZYqic+YZF4snNl2bsnMKRkb3ozHmnM0dGWuxcPTTntAF6bOP0Sp4x0PjSF+4uHQ1xvxfRKqg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.17.19.tgz", + "integrity": "sha512-w4IRhSy1VbsNxHRQpeGCHEmibqdTUx61Vc38APcsRbuVgK0OPEnQ0YD39Brymn96mOx48Y2laBQGqgZ0j9w6SQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.17.19.tgz", + "integrity": "sha512-2iAngUbBPMq439a+z//gE+9WBldoMp1s5GWsUSgqHLzLJ9WoZLZhpwWuym0u0u/4XmZ3gpHmzV84PonE+9IIdQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.17.19.tgz", + "integrity": "sha512-LKJltc4LVdMKHsrFe4MGNPp0hqDFA1Wpt3jE1gEyM3nKUvOiO//9PheZZHfYRfYl6AwdTH4aTcXSqBerX0ml4A==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.17.19.tgz", + "integrity": "sha512-/c/DGybs95WXNS8y3Ti/ytqETiW7EU44MEKuCAcpPto3YjQbyK3IQVKfF6nbghD7EcLUGl0NbiL5Rt5DMhn5tg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.17.19.tgz", + "integrity": "sha512-FC3nUAWhvFoutlhAkgHf8f5HwFWUL6bYdvLc/TTuxKlvLi3+pPzdZiFKSWz/PF30TB1K19SuCxDTI5KcqASJqA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.17.19.tgz", + "integrity": "sha512-IbFsFbxMWLuKEbH+7sTkKzL6NJmG2vRyy6K7JJo55w+8xDk7RElYn6xvXtDW8HCfoKBFK69f3pgBJSUSQPr+4Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.17.19.tgz", + "integrity": "sha512-68ngA9lg2H6zkZcyp22tsVt38mlhWde8l3eJLWkyLrp4HwMUr3c1s/M2t7+kHIhvMjglIBrFpncX1SzMckomGw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.17.19.tgz", + "integrity": "sha512-CwFq42rXCR8TYIjIfpXCbRX0rp1jo6cPIUPSaWwzbVI4aOfX96OXY8M6KNmtPcg7QjYeDmN+DD0Wp3LaBOLf4Q==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.17.19.tgz", + "integrity": "sha512-cnq5brJYrSZ2CF6c35eCmviIN3k3RczmHz8eYaVlNasVqsNY+JKohZU5MKmaOI+KkllCdzOKKdPs762VCPC20g==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.17.19.tgz", + "integrity": "sha512-vCRT7yP3zX+bKWFeP/zdS6SqdWB8OIpaRq/mbXQxTGHnIxspRtigpkUcDMlSCOejlHowLqII7K2JKevwyRP2rg==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.17.19.tgz", + "integrity": "sha512-yYx+8jwowUstVdorcMdNlzklLYhPxjniHWFKgRqH7IFlUEa0Umu3KuYplf1HUZZ422e3NU9F4LGb+4O0Kdcaag==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.17.19.tgz", + "integrity": "sha512-eggDKanJszUtCdlVs0RB+h35wNlb5v4TWEkq4vZcmVt5u/HiDZrTXe2bWFQUez3RgNHwx/x4sk5++4NSSicKkw==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.17.19.tgz", + "integrity": "sha512-lAhycmKnVOuRYNtRtatQR1LPQf2oYCkRGkSFnseDAKPl8lu5SOsK/e1sXe5a0Pc5kHIHe6P2I/ilntNv2xf3cA==", + "dev": true, + "optional": true + }, "@istanbuljs/schema": { "version": "0.1.3", "dev": true @@ -11983,13 +12625,6 @@ "is-glob": "~4.0.1", "normalize-path": "~3.0.0", "readdirp": "~3.6.0" - }, - "dependencies": { - "fsevents": { - "version": "2.3.2", - "dev": true, - "optional": true - } } }, "chunkd": { @@ -12602,6 +13237,36 @@ "is-arrayish": "^0.2.1" } }, + "esbuild": { + "version": "0.17.19", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.17.19.tgz", + "integrity": "sha512-XQ0jAPFkK/u3LcVRcvVHQcTIqD6E2H1fvZMA5dQPSOWb3suUbWbfbRf94pjc0bNzRYLfIrDRQXr7X+LHIm5oHw==", + "dev": true, + "requires": { + "@esbuild/android-arm": "0.17.19", + "@esbuild/android-arm64": "0.17.19", + "@esbuild/android-x64": "0.17.19", + "@esbuild/darwin-arm64": "0.17.19", + "@esbuild/darwin-x64": "0.17.19", + "@esbuild/freebsd-arm64": "0.17.19", + "@esbuild/freebsd-x64": "0.17.19", + "@esbuild/linux-arm": "0.17.19", + "@esbuild/linux-arm64": "0.17.19", + "@esbuild/linux-ia32": "0.17.19", + "@esbuild/linux-loong64": "0.17.19", + "@esbuild/linux-mips64el": "0.17.19", + "@esbuild/linux-ppc64": "0.17.19", + "@esbuild/linux-riscv64": "0.17.19", + "@esbuild/linux-s390x": "0.17.19", + "@esbuild/linux-x64": "0.17.19", + "@esbuild/netbsd-x64": "0.17.19", + "@esbuild/openbsd-x64": "0.17.19", + "@esbuild/sunos-x64": "0.17.19", + "@esbuild/win32-arm64": "0.17.19", + "@esbuild/win32-ia32": "0.17.19", + "@esbuild/win32-x64": "0.17.19" + } + }, "escalade": { "version": "3.1.1", "dev": true @@ -12853,6 +13518,13 @@ "version": "1.0.0", "dev": true }, + "fsevents": { + "version": "2.3.2", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.2.tgz", + "integrity": "sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==", + "dev": true, + "optional": true + }, "function-bind": { "version": "1.1.1" }, @@ -12878,6 +13550,12 @@ "version": "6.0.1", "dev": true }, + "get-tsconfig": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.5.0.tgz", + "integrity": "sha512-MjhiaIWCJ1sAU4pIQ5i5OfOuHHxVo1oYeNsWTON7jxYkod8pHocXeh+SSbmu5OZZZK73B6cbJ2XADzXehLyovQ==", + "dev": true + }, "git-log-parser": { "version": "1.2.0", "dev": true, @@ -12933,12 +13611,6 @@ "source-map": "^0.6.1", "uglify-js": "^3.1.4", "wordwrap": "^1.0.0" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } } }, "hard-rejection": { @@ -16942,6 +17614,22 @@ "is-fullwidth-code-point": "^4.0.0" } }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + }, + "source-map-support": { + "version": "0.5.21", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.21.tgz", + "integrity": "sha512-uBHU3L3czsIyYXKX88fdrGovxdSCoTGDRZ6SYXtSRxLZUzHg5P/66Ht6uoUlHu9EZod+inXhKo3qQgwXUT/y1w==", + "dev": true, + "requires": { + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" + } + }, "spawn-error-forwarder": { "version": "1.0.0", "dev": true @@ -17280,6 +17968,18 @@ "integrity": "sha512-336iVw3rtn2BUK7ORdIAHTyxHGRIHVReokCR3XjbckJMK7ms8FysBfhLR8IXnAgy7T0PTPNBWKiH514FOW/WSg==", "dev": true }, + "tsx": { + "version": "3.12.7", + "resolved": "https://registry.npmjs.org/tsx/-/tsx-3.12.7.tgz", + "integrity": "sha512-C2Ip+jPmqKd1GWVQDvz/Eyc6QJbGfE7NrR3fx5BpEHMZsEHoIxHL1j+lKdGobr8ovEyqeNkPLSKp6SCSOt7gmw==", + "dev": true, + "requires": { + "@esbuild-kit/cjs-loader": "^2.4.2", + "@esbuild-kit/core-utils": "^3.0.0", + "@esbuild-kit/esm-loader": "^2.5.5", + "fsevents": "~2.3.2" + } + }, "turbo": { "version": "1.9.6", "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.9.6.tgz", diff --git a/packages/openapi-generator/package.json b/packages/openapi-generator/package.json index 12401332..120410a5 100644 --- a/packages/openapi-generator/package.json +++ b/packages/openapi-generator/package.json @@ -17,7 +17,7 @@ "clean": "rm -rf -- dist", "format": "prettier --check .", "format:fix": "prettier --write .", - "test": "c8 --all --src src ava test/corpusFiles/*.ts" + "test": "c8 --all --src src node --loader tsx --test test/test-entrypoint.ts" }, "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", @@ -31,23 +31,9 @@ "typescript": "4.7.4" }, "devDependencies": { - "@ava/typescript": "3.0.1", - "ava": "5.2.0", "c8": "7.13.0", "parser-ts": "0.7.0", - "ts-node": "10.9.1" - }, - "ava": { - "typescript": { - "compile": false, - "extensions": [ - "ts" - ], - "rewritePaths": { - "test/": "dist/test/" - } - }, - "timeout": "2m" + "tsx": "3.12.7" }, "publishConfig": { "access": "public" diff --git a/packages/openapi-generator/test/corpusFiles/check-one-to-one-file-match.ts b/packages/openapi-generator/test/corpusFiles/check-one-to-one-file-match.ts deleted file mode 100644 index 0d7348b7..00000000 --- a/packages/openapi-generator/test/corpusFiles/check-one-to-one-file-match.ts +++ /dev/null @@ -1,26 +0,0 @@ -import * as fs from 'fs'; -import * as path from 'path'; - -import test from 'ava'; - -const basenameNoExtension = (file: string) => path.basename(file).split('.')[0]; - -test('every file in the corpus has a corresponding test file', async (t) => { - const testDefinitionFiles = await fs.readdirSync( - path.resolve(__dirname, '..', '..', '..', 'corpus'), - ); - const definitionSet = new Set(testDefinitionFiles.map(basenameNoExtension)); - - const testRunnerFiles = await fs.readdirSync(path.resolve(__dirname)); - const runnerSet = new Set( - testRunnerFiles - .map(basenameNoExtension) - .filter((file) => file !== basenameNoExtension(__filename)), - ); - - t.deepEqual( - runnerSet, - definitionSet, - 'Corpus definition files should match test runner files 1:1', - ); -}); diff --git a/packages/openapi-generator/test/corpusFiles/test-array-property.ts b/packages/openapi-generator/test/corpusFiles/test-array-property.ts deleted file mode 100644 index c0d2f878..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-array-property.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-array-property'); diff --git a/packages/openapi-generator/test/corpusFiles/test-boolean-literal.ts b/packages/openapi-generator/test/corpusFiles/test-boolean-literal.ts deleted file mode 100644 index d6fd49d3..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-boolean-literal.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-boolean-literal'); diff --git a/packages/openapi-generator/test/corpusFiles/test-discriminated-union.ts b/packages/openapi-generator/test/corpusFiles/test-discriminated-union.ts deleted file mode 100644 index b7e8a8dd..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-discriminated-union.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-discriminated-union'); diff --git a/packages/openapi-generator/test/corpusFiles/test-intersection-flattening.ts b/packages/openapi-generator/test/corpusFiles/test-intersection-flattening.ts deleted file mode 100644 index 7a440e7d..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-intersection-flattening.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-intersection-flattening'); diff --git a/packages/openapi-generator/test/corpusFiles/test-multi-route.ts b/packages/openapi-generator/test/corpusFiles/test-multi-route.ts deleted file mode 100644 index 0b977fc0..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-multi-route.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-multi-route'); diff --git a/packages/openapi-generator/test/corpusFiles/test-multi-union.ts b/packages/openapi-generator/test/corpusFiles/test-multi-union.ts deleted file mode 100644 index 7e8f5462..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-multi-union.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-multi-union'); diff --git a/packages/openapi-generator/test/corpusFiles/test-null-param.ts b/packages/openapi-generator/test/corpusFiles/test-null-param.ts deleted file mode 100644 index 993d7cb9..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-null-param.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-null-param'); diff --git a/packages/openapi-generator/test/corpusFiles/test-optional-property.ts b/packages/openapi-generator/test/corpusFiles/test-optional-property.ts deleted file mode 100644 index 50ef9ee5..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-optional-property.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-optional-property'); diff --git a/packages/openapi-generator/test/corpusFiles/test-record-type.ts b/packages/openapi-generator/test/corpusFiles/test-record-type.ts deleted file mode 100644 index 5cc6bbf3..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-record-type.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-record-type'); diff --git a/packages/openapi-generator/test/corpusFiles/test-single-route-multi-method.ts b/packages/openapi-generator/test/corpusFiles/test-single-route-multi-method.ts deleted file mode 100644 index 67f66128..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-single-route-multi-method.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-single-route-multi-method'); diff --git a/packages/openapi-generator/test/corpusFiles/test-single-route.ts b/packages/openapi-generator/test/corpusFiles/test-single-route.ts deleted file mode 100644 index 97e12171..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-single-route.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-single-route'); diff --git a/packages/openapi-generator/test/corpusFiles/test-string-union.ts b/packages/openapi-generator/test/corpusFiles/test-string-union.ts deleted file mode 100644 index 6786bc68..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-string-union.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-string-union'); diff --git a/packages/openapi-generator/test/corpusFiles/test-unknown-property.ts b/packages/openapi-generator/test/corpusFiles/test-unknown-property.ts deleted file mode 100644 index 54c56d66..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-unknown-property.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-unknown-property'); diff --git a/packages/openapi-generator/test/corpusFiles/test-version-tag.ts b/packages/openapi-generator/test/corpusFiles/test-version-tag.ts deleted file mode 100644 index c6c99d02..00000000 --- a/packages/openapi-generator/test/corpusFiles/test-version-tag.ts +++ /dev/null @@ -1,4 +0,0 @@ -// TODO: Find way to not need these files for parallelization -import { testCorpusFile } from '../test-corpus'; - -testCorpusFile('test-version-tag'); diff --git a/packages/openapi-generator/test/test-corpus.ts b/packages/openapi-generator/test/test-corpus.ts index ece0cef2..c2ba8bbc 100644 --- a/packages/openapi-generator/test/test-corpus.ts +++ b/packages/openapi-generator/test/test-corpus.ts @@ -1,9 +1,10 @@ -import { pipe } from 'fp-ts/function'; -import * as E from 'fp-ts/Either'; import * as fs from 'fs'; import * as path from 'path'; +import test from 'node:test'; +import { strict as assert } from 'node:assert'; -import test from 'ava'; +import { pipe } from 'fp-ts/function'; +import * as E from 'fp-ts/Either'; import { NonEmptyString } from 'io-ts-types'; import { TestCase, TestCasesFromString } from './test-case'; @@ -11,17 +12,14 @@ import { TestCase, TestCasesFromString } from './test-case'; // System under test import { componentsForProject } from '../src/project'; -const TEST_CORPUS_DIR = path.resolve(__dirname, '..', '..', 'corpus'); -const ROOT_DIR = path.resolve(__dirname, '..', '..', 'dummyProject'); +const TEST_CORPUS_DIR = path.resolve(__dirname, '..', 'corpus'); +const ROOT_DIR = path.resolve(__dirname, '..', 'dummyProject'); const TEST_CONFIG = path.join(ROOT_DIR, 'tsconfig.json'); const ENTRYPOINT = 'index.ts' as NonEmptyString; -const evaluateTestCase = test.macro({ - async exec(t, testCase: TestCase) { - // Wait for the event loop to tick once - await new Promise((resolve) => setImmediate(resolve)); - +function evaluateTestCase(testCase: TestCase): () => void { + return () => { const fileContentsByFilename = testCase.inputs.reduce< Record >( @@ -39,19 +37,16 @@ const evaluateTestCase = test.macro({ includeInternal: true, }), E.matchW( - (err) => t.fail(err), + (err) => assert.fail(err), (output) => { - t.deepEqual(output as unknown, testCase.expectedOutput); + assert.deepEqual(output as unknown, testCase.expectedOutput); }, ), ); - }, - title(_providedTitle = '', testCase) { - return testCase.title; - }, -}); + }; +} -const evaluateTestCases = (filename: string) => { +function evaluateTestCases(filename: string): void { const fileContents = fs.readFileSync(filename, { encoding: 'utf-8' }); const decodedTestCases = TestCasesFromString.decode(fileContents); if (E.isLeft(decodedTestCases)) { @@ -61,12 +56,10 @@ const evaluateTestCases = (filename: string) => { } const testCases = decodedTestCases.right; - for (const testCase of testCases) { - test(evaluateTestCase, testCase); - } -}; + testCases.map((testCase) => test(testCase.title, evaluateTestCase(testCase))); +} -export const testCorpusFile = (name: string) => { - const filename = path.join(TEST_CORPUS_DIR, `${name}.ts`); +export function runTest(corpusFilename: string): void { + const filename = path.join(TEST_CORPUS_DIR, corpusFilename); evaluateTestCases(filename); -}; +} diff --git a/packages/openapi-generator/test/test-entrypoint.ts b/packages/openapi-generator/test/test-entrypoint.ts new file mode 100644 index 00000000..1d1ac045 --- /dev/null +++ b/packages/openapi-generator/test/test-entrypoint.ts @@ -0,0 +1,97 @@ +import * as fs from 'fs'; +import * as os from 'os'; +import * as path from 'path'; +import { isMainThread, Worker, workerData } from 'node:worker_threads'; + +import { runTest } from './test-corpus'; + +const CORPUS_DIRECTORY = path.resolve(__dirname, '..', 'corpus'); + +async function sleep_ms(ms: number): Promise { + return new Promise((resolve) => setTimeout(resolve, ms)); +} + +async function main(): Promise { + /** + * Implement a basic, implicit thread pool for running tests. + * + * First, some quick terminology: + * - corpus: the set of declarative test cases + * - test: a test case derived from the input and output declared in + * one file in the corpus + * + * Each file in the corpus defines an api-ts `apiSpec` and the expected + * OpenAPI specification it should produce. This is a synchronous proces, but + * the implementation of the test harness that verifies each corpus file makes + * this a compute-bound process. Consequently, we want some parallelization, + * which in this implementation is provided by a basic thread pool. + * + * This thread pool has at most one worker per CPU core. Because the work is + * CPU bound, scheduling more software workers than physical workers will just + * add overhead in scheduling thrashing. + * + * This implementation is called an implicit thread pool because there is no + * formal implementation of the limit of concurrent workers; instead, each + * worker tries to create a replacement worker when it completes its singular + * assigned task. This is less optimal than having a long-lived worker per CPU + * core, but with the small number of test cases in our corpus it shouldn't + * matter much. + * + * While the workers are handling each test, the main thread spin-loops until + * all children to report success or failure. + */ + const testQueue = fs.readdirSync(CORPUS_DIRECTORY); + const numTests = testQueue.length; + let completedTests = 0; + + function handleTestCompletion(): void { + completedTests += 1; + startTest(testQueue.pop()); + } + + function startTest(testFilename: string | undefined): void { + if (testFilename === undefined) { + // base case: do nothing + return; + } + + new Promise((resolve, reject) => { + const worker = new Worker(__filename, { + workerData: testFilename, + }); + worker.on('error', () => { + handleTestCompletion(); + reject(); + }); + worker.on('exit', (code) => { + handleTestCompletion(); + if (code !== 0) { + reject(new Error(`Worker stopped with exit code ${code}`)); + } else { + resolve(); + } + }); + }); + } + + const numCores = os.cpus(); + for (const _ of numCores) { + startTest(testQueue.pop()); + } + + // A synchronization barrier that waits for all tests to complete + while (completedTests < numTests) { + await sleep_ms(10); + } +} + +function workerMain() { + const testFilename = workerData; + runTest(testFilename); +} + +if (isMainThread) { + main(); +} else { + workerMain(); +} From 899408235a1d75fc0e2d5399ccf0063faa6ffd81 Mon Sep 17 00:00:00 2001 From: Eric Crosson Date: Sat, 27 May 2023 18:37:11 -0500 Subject: [PATCH 3/4] test(express-wrapper): replace ava with node:test --- packages/express-wrapper/package.json | 19 ++--------- .../express-wrapper/test/middleware.test.ts | 32 +++++++++-------- packages/express-wrapper/test/server.test.ts | 34 +++++++++++-------- 3 files changed, 39 insertions(+), 46 deletions(-) diff --git a/packages/express-wrapper/package.json b/packages/express-wrapper/package.json index b32ac9ff..6ae6a9b6 100644 --- a/packages/express-wrapper/package.json +++ b/packages/express-wrapper/package.json @@ -14,7 +14,7 @@ "clean": "rm -rf -- dist", "format": "prettier --check .", "format:fix": "prettier --write .", - "test": "c8 --all ava" + "test": "c8 --all node --loader tsx --test test/*.ts" }, "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", @@ -25,23 +25,10 @@ "devDependencies": { "@api-ts/superagent-wrapper": "0.0.0-semantically-released", "@api-ts/typed-express-router": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", "@types/express": "4.17.17", - "ava": "5.2.0", "c8": "7.13.0", - "ts-node": "10.9.1", - "typescript": "4.7.4" - }, - "ava": { - "typescript": { - "compile": false, - "extensions": [ - "ts" - ], - "rewritePaths": { - "test/": "dist/test/" - } - } + "typescript": "4.7.4", + "tsx": "3.12.7" }, "publishConfig": { "access": "public" diff --git a/packages/express-wrapper/test/middleware.test.ts b/packages/express-wrapper/test/middleware.test.ts index 4d8f48d0..397f4e03 100644 --- a/packages/express-wrapper/test/middleware.test.ts +++ b/packages/express-wrapper/test/middleware.test.ts @@ -1,4 +1,6 @@ -import test from 'ava'; +import test from 'node:test'; +import { strict as assert } from 'node:assert'; + import express from 'express'; import { middlewareFn, runMiddlewareChain } from '../src/middleware'; @@ -27,35 +29,35 @@ const addAltParamMiddleware = middlewareFn(async () => ({ addedValue: 'hello', })); -test('should work with normal express middleware', async (t) => { +test('should work with normal express middleware', async () => { const result = await runMiddlewareChain({ foo: 'test' }, [noopMiddleware], REQ, RES); - t.deepEqual(result, { foo: 'test' }); + assert.deepEqual(result, { foo: 'test' }); }); -test('should handle errors passed to next()', async (t) => { - await t.throwsAsync( +test('should handle errors passed to next()', async () => { + await assert.rejects( runMiddlewareChain({ foo: 'test' }, [errorMiddleware], null as any, null as any), ); }); -test('should work with middleware that return values', async (t) => { +test('should work with middleware that return values', async () => { const result = await runMiddlewareChain( { foo: 'test' }, [addParamMiddleware], REQ, RES, ); - t.deepEqual(result, { foo: 'test', addedValue: 1337 }); + assert.deepEqual(result, { foo: 'test', addedValue: 1337 }); }); -test('express and value-producing middleware should work together in any order', async (t) => { +test('express and value-producing middleware should work together in any order', async () => { const result = await runMiddlewareChain( { foo: 'test' }, [noopMiddleware, addParamMiddleware], REQ, RES, ); - t.deepEqual(result, { foo: 'test', addedValue: 1337 }); + assert.deepEqual(result, { foo: 'test', addedValue: 1337 }); const resultB = await runMiddlewareChain( { foo: 'test' }, @@ -63,17 +65,17 @@ test('express and value-producing middleware should work together in any order', REQ, RES, ); - t.deepEqual(resultB, { foo: 'test', addedValue: 1337 }); + assert.deepEqual(resultB, { foo: 'test', addedValue: 1337 }); }); -test('middlewares that set the same value should use the last one in the chain', async (t) => { +test('middlewares that set the same value should use the last one in the chain', async () => { const result = await runMiddlewareChain( { foo: 'test' }, [addParamMiddleware, addAltParamMiddleware], REQ, RES, ); - t.deepEqual(result, { foo: 'test', addedValue: 'hello' }); + assert.deepEqual(result, { foo: 'test', addedValue: 'hello' }); const resultB = await runMiddlewareChain( { foo: 'test' }, @@ -81,11 +83,11 @@ test('middlewares that set the same value should use the last one in the chain', REQ, RES, ); - t.deepEqual(resultB, { foo: 'test', addedValue: 1337 }); + assert.deepEqual(resultB, { foo: 'test', addedValue: 1337 }); }); -test('error-producing middleware should not run subsequent middleware', async (t) => { - await t.throwsAsync( +test('error-producing middleware should not run subsequent middleware', async () => { + await assert.rejects( runMiddlewareChain( { foo: 'test' }, [errorMiddleware, altErrorMiddleware], diff --git a/packages/express-wrapper/test/server.test.ts b/packages/express-wrapper/test/server.test.ts index 5e775549..0bbd5417 100644 --- a/packages/express-wrapper/test/server.test.ts +++ b/packages/express-wrapper/test/server.test.ts @@ -1,4 +1,5 @@ -import test from 'ava'; +import test from 'node:test'; +import { strict as assert } from 'node:assert'; import * as t from 'io-ts'; import express from 'express'; @@ -101,7 +102,7 @@ const GetHelloWorld = async (params: { id: string }) => payload: params, } as const); -test('should offer a delightful developer experience', async (t) => { +test('should offer a delightful developer experience', async () => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); @@ -128,10 +129,10 @@ test('should offer a delightful developer experience', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?" }); + assert.equal(response.message, "Who's there?"); }); -test('should handle io-ts-http formatted path parameters', async (t) => { +test('should handle io-ts-http formatted path parameters', async () => { const app = createServer(ApiSpec, (app: express.Application) => { app.use(express.json()); app.use(appMiddleware); @@ -151,10 +152,10 @@ test('should handle io-ts-http formatted path parameters', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { id: '1337' }); + assert.equal(response.id, '1337'); }); -test('should invoke app-level middleware', async (t) => { +test('should invoke app-level middleware', async () => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); @@ -175,10 +176,11 @@ test('should invoke app-level middleware', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?", appMiddlewareRan: true }); + assert.equal(response.message, "Who's there?"); + assert.equal(response.appMiddlewareRan, true); }); -test('should invoke route-level middleware', async (t) => { +test('should invoke route-level middleware', async () => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); @@ -198,10 +200,11 @@ test('should invoke route-level middleware', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?", routeMiddlewareRan: true }); + assert.equal(response.message, "Who's there?"); + assert.equal(response.routeMiddlewareRan, true); }); -test('should not add parameters from middleware unless routeHandler() is used', async (t) => { +test('should not add parameters from middleware unless routeHandler() is used', async () => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); @@ -221,10 +224,11 @@ test('should not add parameters from middleware unless routeHandler() is used', .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?", routeMiddlewareRan: false }); + assert.equal(response.message, "Who's there?"); + assert.equal(response.routeMiddlewareRan, false); }); -test('should infer status code from response type', async (t) => { +test('should infer status code from response type', async () => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); @@ -244,10 +248,10 @@ test('should infer status code from response type', async (t) => { .decodeExpecting(400) .then((res) => res.body); - t.like(response, { errors: 'Please do not tell me zero! I will now explode' }); + assert.equal(response.errors, 'Please do not tell me zero! I will now explode'); }); -test('should return a 400 when request fails to decode', async (t) => { +test('should return a 400 when request fails to decode', async () => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); @@ -264,5 +268,5 @@ test('should return a 400 when request fails to decode', async (t) => { .set('Content-Type', 'application/json') .expect(400); - t.true(response.body.error.startsWith('Invalid value undefined supplied to')); + assert(response.body.error.startsWith('Invalid value undefined supplied to')); }); From 40d31238b377f3b4b513d23c32d3d5473bdd74c0 Mon Sep 17 00:00:00 2001 From: Eric Crosson Date: Sat, 27 May 2023 18:59:41 -0500 Subject: [PATCH 4/4] refactor(typed-express-router): replace ava with node:test --- package-lock.json | 1616 +---------------- packages/typed-express-router/package.json | 19 +- .../typed-express-router/test/path.test.ts | 15 +- .../typed-express-router/test/server.test.ts | 94 +- 4 files changed, 79 insertions(+), 1665 deletions(-) diff --git a/package-lock.json b/package-lock.json index 7bf05e02..cf543717 100644 --- a/package-lock.json +++ b/package-lock.json @@ -50,18 +50,6 @@ "resolved": "packages/typed-express-router", "link": true }, - "node_modules/@ava/typescript": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "execa": "^5.1.1" - }, - "engines": { - "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=17" - } - }, "node_modules/@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -1436,14 +1424,6 @@ "dev": true, "license": "MIT" }, - "node_modules/array-find-index": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/array-flatten": { "version": "1.1.1", "license": "MIT" @@ -1461,25 +1441,6 @@ "node": ">=8" } }, - "node_modules/arrgv": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/arrify": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -1509,234 +1470,6 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "node_modules/ava": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-5.2.0.tgz", - "integrity": "sha512-W8yxFXJr/P68JP55eMpQIa6AiXhCX3VeuajM8nolyWNExcMDD6rnIWKTjw0B/+GkFHBIaN6Jd0LtcMThcoqVfg==", - "dev": true, - "dependencies": { - "acorn": "^8.8.1", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.2.1", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.2.0", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.7.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": "^7.0.0", - "emittery": "^1.0.1", - "figures": "^5.0.0", - "globby": "^13.1.3", - "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.5.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^8.0.0", - "resolve-cwd": "^3.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^3.0.0", - "write-file-atomic": "^5.0.0", - "yargs": "^17.6.2" - }, - "bin": { - "ava": "entrypoints/cli.mjs" - }, - "engines": { - "node": ">=14.19 <15 || >=16.15 <17 || >=18" - }, - "peerDependencies": { - "@ava/typescript": "*" - }, - "peerDependenciesMeta": { - "@ava/typescript": { - "optional": true - } - } - }, - "node_modules/ava/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/del": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-7.0.0.tgz", - "integrity": "sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q==", - "dev": true, - "dependencies": { - "globby": "^13.1.2", - "graceful-fs": "^4.2.10", - "is-glob": "^4.0.3", - "is-path-cwd": "^3.0.0", - "is-path-inside": "^4.0.0", - "p-map": "^5.5.0", - "rimraf": "^3.0.2", - "slash": "^4.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/del/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dev": true, - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/globby/node_modules/slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/is-path-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", - "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", - "dev": true, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/ms": { - "version": "2.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/ava/node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/ava/node_modules/temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true, - "engines": { - "node": ">=14.16" - } - }, "node_modules/balanced-match": { "version": "1.0.2", "license": "MIT" @@ -1763,11 +1496,6 @@ "node": ">=10.0.0" } }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "dev": true, - "license": "MIT" - }, "node_modules/body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -1999,17 +1727,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/callsites": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/camelcase": { "version": "5.3.1", "dev": true, @@ -2046,17 +1763,6 @@ "cdl": "bin/cdl.js" } }, - "node_modules/cbor": { - "version": "8.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "nofilter": "^3.1.0" - }, - "engines": { - "node": ">=12.19" - } - }, "node_modules/chai": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", @@ -2121,31 +1827,6 @@ "fsevents": "~2.3.2" } }, - "node_modules/chunkd": { - "version": "2.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], - "engines": { - "node": ">=8" - } - }, - "node_modules/ci-parallel-vars": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/clean-stack": { "version": "2.2.0", "dev": true, @@ -2154,14 +1835,6 @@ "node": ">=6" } }, - "node_modules/clean-yaml-object": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -2387,17 +2060,6 @@ "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz", "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==" }, - "node_modules/code-excerpt": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "convert-to-spaces": "^2.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/color-convert": { "version": "1.9.3", "dev": true, @@ -2445,11 +2107,6 @@ "node": ">= 12.0.0" } }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/compare-func": { "version": "2.0.0", "dev": true, @@ -2483,24 +2140,6 @@ "typedarray": "^0.0.6" } }, - "node_modules/concordance": { - "version": "5.0.4", - "dev": true, - "license": "ISC", - "dependencies": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - }, - "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" - } - }, "node_modules/config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -2657,14 +2296,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "node_modules/convert-to-spaces": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, "node_modules/cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -2730,28 +2361,6 @@ "node": ">=8" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.1" - }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/date-time": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "time-zone": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/dateformat": { "version": "3.0.3", "dev": true, @@ -2959,18 +2568,6 @@ "version": "1.1.1", "license": "MIT" }, - "node_modules/emittery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz", - "integrity": "sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==", - "dev": true, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" - } - }, "node_modules/emoji-regex": { "version": "9.2.2", "dev": true, @@ -3061,17 +2658,6 @@ "version": "1.0.3", "license": "MIT" }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/esprima": { "version": "4.0.1", "dev": true, @@ -3084,14 +2670,6 @@ "node": ">=4" } }, - "node_modules/esutils": { - "version": "2.0.3", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/etag": { "version": "1.8.1", "license": "MIT", @@ -3175,11 +2753,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" }, - "node_modules/fast-diff": { - "version": "1.2.0", - "dev": true, - "license": "Apache-2.0" - }, "node_modules/fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -3208,22 +2781,6 @@ "reusify": "^1.0.4" } }, - "node_modules/figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, - "engines": { - "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/fill-range": { "version": "7.0.1", "license": "MIT", @@ -3707,15 +3264,6 @@ "node": ">= 4" } }, - "node_modules/ignore-by-default": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", - "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", - "dev": true, - "engines": { - "node": ">=10 <11 || >=12 <13 || >=14" - } - }, "node_modules/import-fresh": { "version": "3.3.0", "dev": true, @@ -3742,15 +3290,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true, - "engines": { - "node": ">=0.8.19" - } - }, "node_modules/indent-string": { "version": "4.0.0", "dev": true, @@ -3818,14 +3357,6 @@ "node": ">= 0.10" } }, - "node_modules/irregular-plurals": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/is-arrayish": { "version": "0.2.1", "dev": true, @@ -3854,11 +3385,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-error": { - "version": "2.2.2", - "dev": true, - "license": "MIT" - }, "node_modules/is-extglob": { "version": "2.1.1", "license": "MIT", @@ -3934,11 +3460,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/is-stream": { "version": "2.0.1", "dev": true, @@ -3961,18 +3482,6 @@ "node": ">=0.10.0" } }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/isarray": { "version": "1.0.0", "dev": true, @@ -4051,14 +3560,6 @@ "node": ">= 0.6.0" } }, - "node_modules/js-string-escape": { - "version": "1.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, "node_modules/js-tokens": { "version": "4.0.0", "dev": true, @@ -4423,17 +3924,6 @@ "node": ">=8" } }, - "node_modules/load-json-file": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/locate-path": { "version": "5.0.0", "dev": true, @@ -4741,17 +4231,6 @@ "dev": true, "license": "ISC" }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/map-obj": { "version": "4.3.0", "dev": true, @@ -4813,37 +4292,12 @@ "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/matcher": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/md5-hex": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "blueimp-md5": "^2.10.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/media-typer": { "version": "0.3.0", "license": "MIT", @@ -4851,21 +4305,6 @@ "node": ">= 0.6" } }, - "node_modules/mem": { - "version": "9.0.2", - "dev": true, - "license": "MIT", - "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" - } - }, "node_modules/meow": { "version": "8.1.2", "dev": true, @@ -5433,14 +4872,6 @@ } } }, - "node_modules/nofilter": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.19" - } - }, "node_modules/normalize-package-data": { "version": "3.0.3", "dev": true, @@ -8112,14 +7543,6 @@ "node": ">= 0.4.0" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/p-each-series": { "version": "2.2.0", "dev": true, @@ -8131,20 +7554,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-event": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "p-timeout": "^5.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-filter": { "version": "2.1.0", "dev": true, @@ -8232,18 +7641,6 @@ "node": ">=8" } }, - "node_modules/p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/p-try": { "version": "2.2.0", "dev": true, @@ -8288,18 +7685,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/parser-ts": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/parser-ts/-/parser-ts-0.7.0.tgz", @@ -8402,111 +7787,6 @@ "node": ">=6" } }, - "node_modules/pkg-conf": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/find-up": { - "version": "6.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/locate-path": { - "version": "7.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^6.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-limit": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/p-locate": { - "version": "6.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-conf/node_modules/path-exists": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/pkg-conf/node_modules/yocto-queue": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/plur": { - "version": "5.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "irregular-plurals": "^3.3.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/pre-commit": { "version": "1.2.2", "dev": true, @@ -8587,21 +7867,6 @@ "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", - "dev": true, - "dependencies": { - "parse-ms": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/process-nextick-args": { "version": "2.0.1", "dev": true, @@ -8965,25 +8230,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/resolve-cwd": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/resolve-cwd/node_modules/resolve-from": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/resolve-from": { "version": "4.0.0", "dev": true, @@ -9333,31 +8579,6 @@ "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" }, - "node_modules/serialize-error": { - "version": "7.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/serialize-javascript": { "version": "6.0.0", "dev": true, @@ -9719,27 +8940,6 @@ "dev": true, "license": "BSD-3-Clause" }, - "node_modules/stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "dependencies": { - "escape-string-regexp": "^2.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -9860,68 +9060,23 @@ "formidable": "^2.1.2", "methods": "^1.1.2", "mime": "2.6.0", - "qs": "^6.11.0", - "semver": "^7.3.8" - }, - "engines": { - "node": ">=6.4.0 <13 || >=14" - } - }, - "node_modules/superagent/node_modules/mime": { - "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", - "dev": true, - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertap": { - "version": "3.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - } - }, - "node_modules/supertap/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/supertap/node_modules/indent-string": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" + "qs": "^6.11.0", + "semver": "^7.3.8" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.4.0 <13 || >=14" } }, - "node_modules/supertap/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/superagent/node_modules/mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, "bin": { - "js-yaml": "bin/js-yaml.js" + "mime": "cli.js" + }, + "engines": { + "node": ">=4.0.0" } }, "node_modules/supertest": { @@ -10044,14 +9199,6 @@ "xtend": "~4.0.1" } }, - "node_modules/time-zone": { - "version": "1.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "license": "MIT", @@ -10447,14 +9594,6 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "node_modules/well-known-symbols": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=6" - } - }, "node_modules/whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -10585,19 +9724,6 @@ "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", - "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", - "dev": true, - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - }, - "engines": { - "node": "^14.17.0 || ^16.13.0 || >=18.0.0" - } - }, "node_modules/xtend": { "version": "4.0.2", "dev": true, @@ -10627,24 +9753,6 @@ "node": ">= 6" } }, - "node_modules/yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "engines": { - "node": ">=12" - } - }, "node_modules/yargs-parser": { "version": "20.2.9", "dev": true, @@ -10697,79 +9805,6 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true, - "engines": { - "node": ">=12" - } - }, "node_modules/yn": { "version": "3.1.1", "dev": true, @@ -10802,11 +9837,9 @@ "devDependencies": { "@api-ts/superagent-wrapper": "0.0.0-semantically-released", "@api-ts/typed-express-router": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", "@types/express": "4.17.17", - "ava": "5.2.0", "c8": "7.13.0", - "ts-node": "10.9.1", + "tsx": "3.12.7", "typescript": "4.7.4" } }, @@ -10886,8 +9919,6 @@ "openapi-generator": "dist/src/cli.js" }, "devDependencies": { - "@ava/typescript": "3.0.1", - "ava": "5.2.0", "c8": "7.13.0", "parser-ts": "0.7.0", "tsx": "3.12.7" @@ -11011,10 +10042,8 @@ }, "devDependencies": { "@api-ts/superagent-wrapper": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", - "ava": "5.2.0", "c8": "7.13.0", - "ts-node": "10.9.1", + "tsx": "3.12.7", "typescript": "4.7.4" } }, @@ -11039,14 +10068,12 @@ "@api-ts/io-ts-http": "0.0.0-semantically-released", "@api-ts/superagent-wrapper": "0.0.0-semantically-released", "@api-ts/typed-express-router": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", "@types/express": "4.17.17", - "ava": "5.2.0", "c8": "7.13.0", "express": "4.18.2", "fp-ts": "^2.0.0", "io-ts": "2.1.3", - "ts-node": "10.9.1", + "tsx": "3.12.7", "typescript": "4.7.4" }, "dependencies": { @@ -11092,8 +10119,6 @@ "version": "file:packages/openapi-generator", "requires": { "@api-ts/io-ts-http": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", - "ava": "5.2.0", "c8": "7.13.0", "cmd-ts": "0.12.1", "comment-parser": "1.3.1", @@ -11187,14 +10212,12 @@ "requires": { "@api-ts/io-ts-http": "0.0.0-semantically-released", "@api-ts/superagent-wrapper": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", "@types/express": "4.17.17", - "ava": "5.2.0", "c8": "7.13.0", "express": "4.18.2", "fp-ts": "^2.0.0", "io-ts": "2.1.3", - "ts-node": "10.9.1", + "tsx": "3.12.7", "typescript": "4.7.4" }, "dependencies": { @@ -11206,14 +10229,6 @@ } } }, - "@ava/typescript": { - "version": "3.0.1", - "dev": true, - "requires": { - "escape-string-regexp": "^5.0.0", - "execa": "^5.1.1" - } - }, "@babel/code-frame": { "version": "7.18.6", "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.18.6.tgz", @@ -12176,10 +11191,6 @@ "version": "1.0.0", "dev": true }, - "array-find-index": { - "version": "1.0.2", - "dev": true - }, "array-flatten": { "version": "1.1.1" }, @@ -12191,14 +11202,6 @@ "version": "2.1.0", "dev": true }, - "arrgv": { - "version": "1.0.2", - "dev": true - }, - "arrify": { - "version": "3.0.0", - "dev": true - }, "asap": { "version": "2.0.6", "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", @@ -12221,162 +11224,6 @@ "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", "dev": true }, - "ava": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-5.2.0.tgz", - "integrity": "sha512-W8yxFXJr/P68JP55eMpQIa6AiXhCX3VeuajM8nolyWNExcMDD6rnIWKTjw0B/+GkFHBIaN6Jd0LtcMThcoqVfg==", - "dev": true, - "requires": { - "acorn": "^8.8.1", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.2.1", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.2.0", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.7.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": "^7.0.0", - "emittery": "^1.0.1", - "figures": "^5.0.0", - "globby": "^13.1.3", - "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.5.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^8.0.0", - "resolve-cwd": "^3.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.6", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^3.0.0", - "write-file-atomic": "^5.0.0", - "yargs": "^17.6.2" - }, - "dependencies": { - "aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", - "dev": true, - "requires": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - } - }, - "clean-stack": { - "version": "4.2.0", - "resolved": "https://registry.npmjs.org/clean-stack/-/clean-stack-4.2.0.tgz", - "integrity": "sha512-LYv6XPxoyODi36Dp976riBtSY27VmFo+MKqEU9QCCWyTrdEPDog+RWA7xQWHi6Vbp61j5c4cdzzX1NidnwtUWg==", - "dev": true, - "requires": { - "escape-string-regexp": "5.0.0" - } - }, - "del": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/del/-/del-7.0.0.tgz", - "integrity": "sha512-tQbV/4u5WVB8HMJr08pgw0b6nG4RGt/tj+7Numvq+zqcvUFeMaIWWOUFltiU+6go8BSO2/ogsB4EasDaj0y68Q==", - "dev": true, - "requires": { - "globby": "^13.1.2", - "graceful-fs": "^4.2.10", - "is-glob": "^4.0.3", - "is-path-cwd": "^3.0.0", - "is-path-inside": "^4.0.0", - "p-map": "^5.5.0", - "rimraf": "^3.0.2", - "slash": "^4.0.0" - }, - "dependencies": { - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } - } - }, - "globby": { - "version": "13.1.3", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.3.tgz", - "integrity": "sha512-8krCNHXvlCgHDpegPzleMq07yMYTO2sXKASmZmquEYWEmCx6J5UTRbp5RwMJkTJGtcQ44YpiUYUiN0b9mzy8Bw==", - "dev": true, - "requires": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "dependencies": { - "slash": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/slash/-/slash-4.0.0.tgz", - "integrity": "sha512-3dOsAHXXUkQTpOYcoAxLIorMTp4gIQr5IW3iVb7A7lFIp0VHhnynm9izx6TssdrIcVIESAlVjtnO2K8bg+Coew==", - "dev": true - } - } - }, - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - }, - "is-path-cwd": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-path-cwd/-/is-path-cwd-3.0.0.tgz", - "integrity": "sha512-kyiNFFLU0Ampr6SDZitD/DwUo4Zs1nSdnygUBqsu3LooL00Qvb5j+UnvApUn/TTj1J3OuE6BTdQ5rudKmU2ZaA==", - "dev": true - }, - "is-path-inside": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-4.0.0.tgz", - "integrity": "sha512-lJJV/5dYS+RcL8uQdBDW9c9uWFLLBNRyFhnAKXw5tVqLlKZ4RMGZKv+YQ/IA3OhD+RpbJa1LLFM1FQPGyIXvOA==", - "dev": true - }, - "ms": { - "version": "2.1.3", - "dev": true - }, - "p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", - "dev": true, - "requires": { - "aggregate-error": "^4.0.0" - } - }, - "temp-dir": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/temp-dir/-/temp-dir-3.0.0.tgz", - "integrity": "sha512-nHc6S/bwIilKHNRgK/3jlhDoIHcp45YgyiwcAk46Tr0LfEqGBVpmiAyuiuxeVE44m3mXnEeVhaipLOEWmH+Njw==", - "dev": true - } - } - }, "balanced-match": { "version": "1.0.2" }, @@ -12394,10 +11241,6 @@ "version": "9.3.0", "dev": true }, - "blueimp-md5": { - "version": "2.19.0", - "dev": true - }, "body-parser": { "version": "1.20.1", "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.1.tgz", @@ -12556,10 +11399,6 @@ "get-intrinsic": "^1.0.2" } }, - "callsites": { - "version": "4.0.0", - "dev": true - }, "camelcase": { "version": "5.3.1", "dev": true @@ -12581,13 +11420,6 @@ "redeyed": "~2.1.0" } }, - "cbor": { - "version": "8.1.0", - "dev": true, - "requires": { - "nofilter": "^3.1.0" - } - }, "chai": { "version": "4.3.7", "resolved": "https://registry.npmjs.org/chai/-/chai-4.3.7.tgz", @@ -12627,28 +11459,10 @@ "readdirp": "~3.6.0" } }, - "chunkd": { - "version": "2.0.1", - "dev": true - }, - "ci-info": { - "version": "3.7.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.7.1.tgz", - "integrity": "sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==", - "dev": true - }, - "ci-parallel-vars": { - "version": "1.0.1", - "dev": true - }, "clean-stack": { "version": "2.2.0", "dev": true }, - "clean-yaml-object": { - "version": "0.1.0", - "dev": true - }, "cli-cursor": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-3.1.0.tgz", @@ -12798,13 +11612,6 @@ "resolved": "https://registry.npmjs.org/code-block-writer/-/code-block-writer-11.0.3.tgz", "integrity": "sha512-NiujjUFB4SwScJq2bwbYUtXbZhBSlY6vYzm++3Q6oC+U+injTqfPYFK8wS9COOmb2lueqp0ZRB4nK1VYeHgNyw==" }, - "code-excerpt": { - "version": "4.0.0", - "dev": true, - "requires": { - "convert-to-spaces": "^2.0.1" - } - }, "color-convert": { "version": "1.9.3", "dev": true, @@ -12840,10 +11647,6 @@ "comment-parser": { "version": "1.3.1" }, - "common-path-prefix": { - "version": "3.0.0", - "dev": true - }, "compare-func": { "version": "2.0.0", "dev": true, @@ -12870,20 +11673,6 @@ "typedarray": "^0.0.6" } }, - "concordance": { - "version": "5.0.4", - "dev": true, - "requires": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" - } - }, "config-chain": { "version": "1.1.13", "resolved": "https://registry.npmjs.org/config-chain/-/config-chain-1.1.13.tgz", @@ -12999,10 +11788,6 @@ "integrity": "sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==", "dev": true }, - "convert-to-spaces": { - "version": "2.0.1", - "dev": true - }, "cookie": { "version": "0.5.0", "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.5.0.tgz", @@ -13051,20 +11836,6 @@ "version": "2.0.0", "dev": true }, - "currently-unhandled": { - "version": "0.4.1", - "dev": true, - "requires": { - "array-find-index": "^1.0.1" - } - }, - "date-time": { - "version": "3.1.0", - "dev": true, - "requires": { - "time-zone": "^1.0.0" - } - }, "dateformat": { "version": "3.0.3", "dev": true @@ -13198,14 +11969,8 @@ "version": "0.2.0", "dev": true }, - "ee-first": { - "version": "1.1.1" - }, - "emittery": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/emittery/-/emittery-1.0.1.tgz", - "integrity": "sha512-2ID6FdrMD9KDLldGesP6317G78K7km/kMcwItRtVFva7I/cSEOIaLpewaUb+YLXVwdAp3Ctfxh/V5zIl1sj7dQ==", - "dev": true + "ee-first": { + "version": "1.1.1" }, "emoji-regex": { "version": "9.2.2", @@ -13274,18 +12039,10 @@ "escape-html": { "version": "1.0.3" }, - "escape-string-regexp": { - "version": "5.0.0", - "dev": true - }, "esprima": { "version": "4.0.1", "dev": true }, - "esutils": { - "version": "2.0.3", - "dev": true - }, "etag": { "version": "1.8.1" }, @@ -13357,10 +12114,6 @@ } } }, - "fast-diff": { - "version": "1.2.0", - "dev": true - }, "fast-glob": { "version": "3.2.12", "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.2.12.tgz", @@ -13385,16 +12138,6 @@ "reusify": "^1.0.4" } }, - "figures": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-5.0.0.tgz", - "integrity": "sha512-ej8ksPF4x6e5wvK9yevct0UCXh8TTFlWGVLlgjZuoBH1HwjIfKE/IdL5mq89sFA7zELi1VhKpmtDnrs7zWyeyg==", - "dev": true, - "requires": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - } - }, "fill-range": { "version": "7.0.1", "requires": { @@ -13702,12 +12445,6 @@ "integrity": "sha512-d2qQLzTJ9WxQftPAuEQpSPmKqzxePjzVbpAVv62AQ64NTL+wR4JkrVqR/LqFsFEUsHDAiId52mJteHDFuDkElA==", "dev": true }, - "ignore-by-default": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/ignore-by-default/-/ignore-by-default-2.1.0.tgz", - "integrity": "sha512-yiWd4GVmJp0Q6ghmM2B/V3oZGRmjrKLXvHR3TE1nfoXsmoggllfZUQe74EN0fJdPFZu2NIvNdrMMLm3OsV7Ohw==", - "dev": true - }, "import-fresh": { "version": "3.3.0", "dev": true, @@ -13720,12 +12457,6 @@ "version": "4.0.0", "dev": true }, - "imurmurhash": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", - "integrity": "sha512-JmXMZ6wuvDmLiHEml9ykzqO6lwFbof0GG4IkcGaENdCRDDmMVnny7s5HsIgHCbaq0w2MyPhDqkhTUgS2LU2PHA==", - "dev": true - }, "indent-string": { "version": "4.0.0", "dev": true @@ -13768,10 +12499,6 @@ "ipaddr.js": { "version": "1.9.1" }, - "irregular-plurals": { - "version": "3.3.0", - "dev": true - }, "is-arrayish": { "version": "0.2.1", "dev": true @@ -13792,10 +12519,6 @@ "has": "^1.0.3" } }, - "is-error": { - "version": "2.2.2", - "dev": true - }, "is-extglob": { "version": "2.1.1" }, @@ -13832,10 +12555,6 @@ "version": "5.0.0", "dev": true }, - "is-promise": { - "version": "4.0.0", - "dev": true - }, "is-stream": { "version": "2.0.1", "dev": true @@ -13847,12 +12566,6 @@ "text-extensions": "^1.0.0" } }, - "is-unicode-supported": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.3.0.tgz", - "integrity": "sha512-43r2mRvz+8JRIKnWJ+3j8JtjRKZ6GmjzfaE/qiBJnikNnYv/6bagRJ1kUhNk8R5EX/GkobD+r+sfxCPJsiKBLQ==", - "dev": true - }, "isarray": { "version": "1.0.0", "dev": true @@ -13908,10 +12621,6 @@ "version": "1.0.2", "dev": true }, - "js-string-escape": { - "version": "1.0.1", - "dev": true - }, "js-tokens": { "version": "4.0.0", "dev": true @@ -14158,10 +12867,6 @@ } } }, - "load-json-file": { - "version": "7.0.1", - "dev": true - }, "locate-path": { "version": "5.0.0", "dev": true, @@ -14375,13 +13080,6 @@ "version": "1.3.6", "dev": true }, - "map-age-cleaner": { - "version": "0.1.3", - "dev": true, - "requires": { - "p-defer": "^1.0.0" - } - }, "map-obj": { "version": "4.3.0", "dev": true @@ -14417,31 +13115,9 @@ } } }, - "matcher": { - "version": "5.0.0", - "dev": true, - "requires": { - "escape-string-regexp": "^5.0.0" - } - }, - "md5-hex": { - "version": "3.0.1", - "dev": true, - "requires": { - "blueimp-md5": "^2.10.0" - } - }, "media-typer": { "version": "0.3.0" }, - "mem": { - "version": "9.0.2", - "dev": true, - "requires": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" - } - }, "meow": { "version": "8.1.2", "dev": true, @@ -14793,10 +13469,6 @@ "whatwg-url": "^5.0.0" } }, - "nofilter": { - "version": "3.1.0", - "dev": true - }, "normalize-package-data": { "version": "3.0.3", "dev": true, @@ -16653,21 +15325,10 @@ "version": "0.1.3", "dev": true }, - "p-defer": { - "version": "1.0.0", - "dev": true - }, "p-each-series": { "version": "2.2.0", "dev": true }, - "p-event": { - "version": "5.0.1", - "dev": true, - "requires": { - "p-timeout": "^5.0.2" - } - }, "p-filter": { "version": "2.1.0", "dev": true, @@ -16720,12 +15381,6 @@ "retry": "^0.13.1" } }, - "p-timeout": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-5.1.0.tgz", - "integrity": "sha512-auFDyzzzGZZZdHz3BtET9VEz0SE/uMEAx7uWfGPucfzEwwe/xH0iVeZibQmANYE/hp9T2+UUZT5m+BKyrDp3Ew==", - "dev": true - }, "p-try": { "version": "2.2.0", "dev": true @@ -16753,12 +15408,6 @@ "lines-and-columns": "^1.1.6" } }, - "parse-ms": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/parse-ms/-/parse-ms-3.0.0.tgz", - "integrity": "sha512-Tpb8Z7r7XbbtBTrM9UhpkzzaMrqA2VXMT3YChzYltwV3P3pM6t8wl7TvpMnSTosz1aQAdVib7kdoys7vYOPerw==", - "dev": true - }, "parser-ts": { "version": "0.7.0", "resolved": "https://registry.npmjs.org/parser-ts/-/parser-ts-0.7.0.tgz", @@ -16814,60 +15463,6 @@ "version": "4.0.1", "dev": true }, - "pkg-conf": { - "version": "4.0.0", - "dev": true, - "requires": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" - }, - "dependencies": { - "find-up": { - "version": "6.3.0", - "dev": true, - "requires": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" - } - }, - "locate-path": { - "version": "7.1.0", - "dev": true, - "requires": { - "p-locate": "^6.0.0" - } - }, - "p-limit": { - "version": "4.0.0", - "dev": true, - "requires": { - "yocto-queue": "^1.0.0" - } - }, - "p-locate": { - "version": "6.0.0", - "dev": true, - "requires": { - "p-limit": "^4.0.0" - } - }, - "path-exists": { - "version": "5.0.0", - "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "dev": true - } - } - }, - "plur": { - "version": "5.1.0", - "dev": true, - "requires": { - "irregular-plurals": "^3.3.0" - } - }, "pre-commit": { "version": "1.2.2", "dev": true, @@ -16924,15 +15519,6 @@ "integrity": "sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==", "dev": true }, - "pretty-ms": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/pretty-ms/-/pretty-ms-8.0.0.tgz", - "integrity": "sha512-ASJqOugUF1bbzI35STMBUpZqdfYKlJugy6JBziGi2EE+AL5JPJGSzvpeVXojxrr0ViUYoToUjb5kjSEGf7Y83Q==", - "dev": true, - "requires": { - "parse-ms": "^3.0.0" - } - }, "process-nextick-args": { "version": "2.0.1", "dev": true @@ -17184,19 +15770,6 @@ "supports-preserve-symlinks-flag": "^1.0.0" } }, - "resolve-cwd": { - "version": "3.0.0", - "dev": true, - "requires": { - "resolve-from": "^5.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "5.0.0", - "dev": true - } - } - }, "resolve-from": { "version": "4.0.0", "dev": true @@ -17425,19 +15998,6 @@ } } }, - "serialize-error": { - "version": "7.0.1", - "dev": true, - "requires": { - "type-fest": "^0.13.1" - }, - "dependencies": { - "type-fest": { - "version": "0.13.1", - "dev": true - } - } - }, "serialize-javascript": { "version": "6.0.0", "dev": true, @@ -17684,23 +16244,6 @@ "version": "1.0.3", "dev": true }, - "stack-utils": { - "version": "2.0.6", - "resolved": "https://registry.npmjs.org/stack-utils/-/stack-utils-2.0.6.tgz", - "integrity": "sha512-XlkWvfIm6RmsWtNJx+uqtKLS8eqFbxUg0ZzLXqY0caEy9l7hruX8IpiDnjsLavoBgqCCR71TqWO8MaXYheJ3RQ==", - "dev": true, - "requires": { - "escape-string-regexp": "^2.0.0" - }, - "dependencies": { - "escape-string-regexp": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz", - "integrity": "sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==", - "dev": true - } - } - }, "statuses": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", @@ -17792,37 +16335,6 @@ } } }, - "supertap": { - "version": "3.0.1", - "dev": true, - "requires": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "indent-string": { - "version": "5.0.0", - "dev": true - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - } - } - }, "supertest": { "version": "6.3.3", "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.3.3.tgz", @@ -17902,10 +16414,6 @@ "xtend": "~4.0.1" } }, - "time-zone": { - "version": "1.0.0", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "requires": { @@ -18161,10 +16669,6 @@ "integrity": "sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ==", "dev": true }, - "well-known-symbols": { - "version": "2.0.0", - "dev": true - }, "whatwg-url": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", @@ -18251,16 +16755,6 @@ "version": "1.0.2", "dev": true }, - "write-file-atomic": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-5.0.0.tgz", - "integrity": "sha512-R7NYMnHSlV42K54lwY9lvW6MnSm1HSJqZL3xiSgi9E7//FYaI74r2G0rd+/X6VAMkHEdzxQaU5HUOXWUz5kA/w==", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" - } - }, "xtend": { "version": "4.0.2", "dev": true @@ -18277,78 +16771,6 @@ "version": "1.10.2", "dev": true }, - "yargs": { - "version": "17.6.2", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.6.2.tgz", - "integrity": "sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==", - "dev": true, - "requires": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", - "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", - "dev": true - }, - "cliui": { - "version": "8.0.1", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", - "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", - "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", - "dev": true - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", - "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", - "dev": true - }, - "string-width": { - "version": "4.2.3", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", - "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", - "dev": true, - "requires": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - } - }, - "strip-ansi": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", - "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "yargs-parser": { - "version": "21.1.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", - "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", - "dev": true - } - } - }, "yargs-parser": { "version": "20.2.9", "dev": true diff --git a/packages/typed-express-router/package.json b/packages/typed-express-router/package.json index eb2890dd..d0af88ce 100644 --- a/packages/typed-express-router/package.json +++ b/packages/typed-express-router/package.json @@ -14,7 +14,7 @@ "clean": "rm -rf -- dist", "format": "prettier --check .", "format:fix": "prettier --write .", - "test": "c8 --all ava" + "test": "c8 --all node --loader tsx --test test/*.ts" }, "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", @@ -25,22 +25,9 @@ }, "devDependencies": { "@api-ts/superagent-wrapper": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", - "ava": "5.2.0", "c8": "7.13.0", - "ts-node": "10.9.1", - "typescript": "4.7.4" - }, - "ava": { - "typescript": { - "compile": false, - "extensions": [ - "ts" - ], - "rewritePaths": { - "test/": "dist/test/" - } - } + "typescript": "4.7.4", + "tsx": "3.12.7" }, "publishConfig": { "access": "public" diff --git a/packages/typed-express-router/test/path.test.ts b/packages/typed-express-router/test/path.test.ts index 4be371f1..8f938605 100644 --- a/packages/typed-express-router/test/path.test.ts +++ b/packages/typed-express-router/test/path.test.ts @@ -1,21 +1,22 @@ -import test from 'ava'; +import test from 'node:test'; +import { strict as assert } from 'node:assert'; import { apiTsPathToExpress } from '../src/path'; -test('should pass through paths with no parameters', (t) => { +test('should pass through paths with no parameters', () => { const input = '/foo/bar'; const output = apiTsPathToExpress(input); - t.deepEqual(output, input); + assert.deepEqual(output, input); }); -test('should translate a path segment that specifies a parameter', (t) => { +test('should translate a path segment that specifies a parameter', () => { const input = '/foo/{bar}'; const output = apiTsPathToExpress(input); - t.deepEqual(output, '/foo/:bar'); + assert.deepEqual(output, '/foo/:bar'); }); -test('should translate multiple path segments', (t) => { +test('should translate multiple path segments', () => { const input = '/foo/{bar}/baz/{id}'; const output = apiTsPathToExpress(input); - t.deepEqual(output, '/foo/:bar/baz/:id'); + assert.deepEqual(output, '/foo/:bar/baz/:id'); }); diff --git a/packages/typed-express-router/test/server.test.ts b/packages/typed-express-router/test/server.test.ts index 0770b106..aed47768 100644 --- a/packages/typed-express-router/test/server.test.ts +++ b/packages/typed-express-router/test/server.test.ts @@ -1,4 +1,5 @@ -import test from 'ava'; +import test from 'node:test'; +import { strict as assert } from 'node:assert'; import * as t from 'io-ts'; import express from 'express'; @@ -108,7 +109,7 @@ const GetHelloWorld: TypedRequestHandler = ( res, ) => res.sendEncoded(200, { id }); -test('should match basic routes', async (t) => { +test('should match basic routes', async () => { const router = createRouter(TestApiSpec); router.put('hello.world', [routeMiddleware, CreateHelloWorld]); @@ -127,10 +128,10 @@ test('should match basic routes', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?" }); + assert.equal(response.message, "Who's there?"); }); -test('should match aliased routes', async (t) => { +test('should match aliased routes', async () => { const router = createRouter(TestApiSpec); router.get('hello.world', [GetHelloWorld], { routeAliases: ['/alternateHello/:id'] }); @@ -147,10 +148,10 @@ test('should match aliased routes', async (t) => { .expect(200) .then((res) => res.body); - t.like(response, { id: '1234' }); + assert.equal(response.id, '1234'); }); -test('should invoke post-response hook', async (t) => { +test('should invoke post-response hook', async () => { const router = createRouter(TestApiSpec); let hookRun = false; @@ -171,10 +172,10 @@ test('should invoke post-response hook', async (t) => { await apiClient['hello.world'].put({ secretCode: 1000 }).expect(200); - t.true(hookRun); + assert.ok(hookRun); }); -test('should match first defined route when there is an overlap', async (t) => { +test('should match first defined route when there is an overlap', async () => { const router = createRouter(TestApiSpec); router.get('hello.world', [GetHelloWorld]); @@ -196,11 +197,11 @@ test('should match first defined route when there is an overlap', async (t) => { const response = await apiClient['hello.world.overlap'].get({}).decode(); // Defined the wider route first, so that should be matched and cause a decode error - t.is(response.status, 'decodeError'); - t.like(response.body, { id: 'world' }); + assert.equal(response.status, 'decodeError'); + assert.equal((response.body as any).id, 'world'); }); -test('should handle io-ts-http formatted path parameters', async (t) => { +test('should handle io-ts-http formatted path parameters', async () => { const router = createRouter(TestApiSpec); router.put('hello.world', [routeMiddleware, CreateHelloWorld]); @@ -219,10 +220,10 @@ test('should handle io-ts-http formatted path parameters', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { id: '1337' }); + assert.equal(response.id, '1337'); }); -test('should invoke app-level middleware', async (t) => { +test('should invoke app-level middleware', async () => { const router = createRouter(TestApiSpec); router.put('hello.world', [CreateHelloWorld]); @@ -241,10 +242,11 @@ test('should invoke app-level middleware', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?", appMiddlewareRan: true }); + assert.equal(response.message, "Who's there?"); + assert.equal(response.appMiddlewareRan, true); }); -test('should invoke router-level middleware', async (t) => { +test('should invoke router-level middleware', async () => { const router = createRouter(TestApiSpec); let routerMiddlewareRan: string = ''; @@ -268,11 +270,12 @@ test('should invoke router-level middleware', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?", appMiddlewareRan: false }); - t.is(routerMiddlewareRan, 'hello.world'); + assert.equal(response.message, "Who's there?"); + assert.equal(response.appMiddlewareRan, false); + assert.equal(routerMiddlewareRan, 'hello.world'); }); -test('router-level middleware should run before request validation on checked routes', async (t) => { +test('router-level middleware should run before request validation on checked routes', async () => { const router = createRouter(TestApiSpec); let routerMiddlewareRan: string = ''; @@ -292,10 +295,10 @@ test('router-level middleware should run before request validation on checked ro await apiClient['hello.world'].put({} as any).expect(400); - t.is(routerMiddlewareRan, 'hello.world'); + assert.equal(routerMiddlewareRan, 'hello.world'); }); -test('should invoke route-level middleware', async (t) => { +test('should invoke route-level middleware', async () => { const router = createRouter(TestApiSpec); router.put('hello.world', [routeMiddleware, CreateHelloWorld]); @@ -313,10 +316,11 @@ test('should invoke route-level middleware', async (t) => { .decodeExpecting(200) .then((res) => res.body); - t.like(response, { message: "Who's there?", routeMiddlewareRan: true }); + assert.equal(response.message, "Who's there?"); + assert.equal(response.routeMiddlewareRan, true); }); -test('should infer status code from response type', async (t) => { +test('should infer status code from response type', async () => { const router = createRouter(TestApiSpec); router.put('hello.world', [routeMiddleware, CreateHelloWorld]); @@ -334,10 +338,10 @@ test('should infer status code from response type', async (t) => { .decodeExpecting(400) .then((res) => res.body); - t.like(response, { errors: 'Please do not tell me zero! I will now explode' }); + assert.equal(response.errors, 'Please do not tell me zero! I will now explode'); }); -test('should return a 400 when request fails to decode', async (t) => { +test('should return a 400 when request fails to decode', async () => { const router = createRouter(TestApiSpec); router.put('hello.world', [routeMiddleware, CreateHelloWorld]); @@ -347,7 +351,7 @@ test('should return a 400 when request fails to decode', async (t) => { app.use(express.json()); app.use(router); - t.notThrows(async () => { + assert.doesNotReject(async () => { await supertest(app) .put('/hello') .set('Content-Type', 'application/json') @@ -355,7 +359,7 @@ test('should return a 400 when request fails to decode', async (t) => { }); }); -test('should invoke custom decode error function', async (t) => { +test('should invoke custom decode error function', async () => { const router = createRouter(TestApiSpec, { onDecodeError: (_errs, _req, res) => { res.status(400).json('Custom decode error').end(); @@ -381,10 +385,10 @@ test('should invoke custom decode error function', async (t) => { const apiClient = supertest(app); const response = await apiClient.get('/helloNoPathParams').expect(400); - t.is(response.body, 'Custom decode error'); + assert.equal(response.body, 'Custom decode error'); }); -test('should invoke per-route custom decode error function', async (t) => { +test('should invoke per-route custom decode error function', async () => { const router = createRouter(TestApiSpec, { onDecodeError: (_errs, _req, res) => { res.status(400).json('Top-level decode error').end(); @@ -413,10 +417,10 @@ test('should invoke per-route custom decode error function', async (t) => { const apiClient = supertest(app); const response = await apiClient.get('/helloNoPathParams').expect(400); - t.is(response.body, 'Route decode error'); + assert.equal(response.body, 'Route decode error'); }); -test('should send a 500 when response type does not match', async (t) => { +test('should send a 500 when response type does not match', async () => { const router = createRouter(TestApiSpec); router.get('hello.world', [ @@ -433,10 +437,10 @@ test('should send a 500 when response type does not match', async (t) => { const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); const response = await apiClient['hello.world'].get({ id: '1234' }).decode(); - t.is(response.original.status, 500); + assert.equal(response.original.status, 500); }); -test('should invoke custom encode error function when response type does not match', async (t) => { +test('should invoke custom encode error function when response type does not match', async () => { const router = createRouter(TestApiSpec, { onEncodeError: (_err, _req, res) => { res.status(500).json('Custom encode error').end(); @@ -457,11 +461,11 @@ test('should invoke custom encode error function when response type does not mat const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); const response = await apiClient['hello.world'].get({ id: '1234' }).decode(); - t.is(response.original.status, 500); - t.is(response.body, 'Custom encode error'); + assert.equal(response.original.status, 500); + assert.equal(response.body, 'Custom encode error'); }); -test('should invoke per-route custom encode error function when response type does not match', async (t) => { +test('should invoke per-route custom encode error function when response type does not match', async () => { const router = createRouter(TestApiSpec, { onEncodeError: (_err, _req, res) => { res.status(500).json('Top-level encode error').end(); @@ -490,11 +494,11 @@ test('should invoke per-route custom encode error function when response type do const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); const response = await apiClient['hello.world'].get({ id: '1234' }).decode(); - t.is(response.original.status, 500); - t.is(response.body, 'Route encode error'); + assert.equal(response.original.status, 500); + assert.equal(response.body, 'Route encode error'); }); -test('should invoke custom encode error function when an unknown HTTP status is passed to `sendEncoded`', async (t) => { +test('should invoke custom encode error function when an unknown HTTP status is passed to `sendEncoded`', async () => { const router = createRouter(TestApiSpec, { onEncodeError: (_err, _req, res) => { res.status(500).json('Custom encode error').end(); @@ -515,11 +519,11 @@ test('should invoke custom encode error function when an unknown HTTP status is const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); const response = await apiClient['hello.world'].get({ id: '1234' }).decode(); - t.is(response.original.status, 500); - t.is(response.body, 'Custom encode error'); + assert.equal(response.original.status, 500); + assert.equal(response.body, 'Custom encode error'); }); -test('should invoke custom encode error function when an unknown keyed status is passed to `sendEncoded`', async (test) => { +test('should invoke custom encode error function when an unknown keyed status is passed to `sendEncoded`', async () => { const WeirdApi = apiSpec({ foo: { get: httpRoute({ @@ -553,8 +557,8 @@ test('should invoke custom encode error function when an unknown keyed status is const apiClient = buildApiClient(supertestRequestFactory(server), WeirdApi); const response = await apiClient['foo'].get({}).decode(); - test.is(response.original.status, 500); - test.is(response.body, 'Custom encode error'); + assert.equal(response.original.status, 500); + assert.equal(response.body, 'Custom encode error'); }); const ExplicitUndefinedApiSpec = apiSpec({ @@ -563,10 +567,10 @@ const ExplicitUndefinedApiSpec = apiSpec({ }, }); -test('should throw on explicitly undefined route definition', async (t) => { +test('should throw on explicitly undefined route definition', async () => { const router = createRouter(ExplicitUndefinedApiSpec); - t.throws(() => { + assert.throws(() => { router.get('empty', [ (_req, res) => { res.send(200);