diff --git a/.envrc b/.envrc new file mode 100644 index 00000000..3550a30f --- /dev/null +++ b/.envrc @@ -0,0 +1 @@ +use flake diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 5fa976a4..7d6418f9 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1 +1 @@ -* @BitGo/internal-tools +* @BitGo/velocity diff --git a/.github/dependabot.yml b/.github/dependabot.yml index ecef7ebe..16e1ebae 100644 --- a/.github/dependabot.yml +++ b/.github/dependabot.yml @@ -10,7 +10,7 @@ updates: labels: - dependencies - github-actions - target-branch: beta + target-branch: master # Enable npm updates - package-ecosystem: npm @@ -24,4 +24,7 @@ updates: labels: - dependencies - npm - target-branch: beta + target-branch: master + ignore: + - dependency-name: io-ts + versions: ['2.x'] diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 52290257..44de183b 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -10,7 +10,7 @@ jobs: strategy: matrix: - node-version: ['12', '14', 'lts/*'] + node-version: [lts/-2, lts/-1, lts/*] name: Node.js ${{ matrix.node-version }} steps: diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml new file mode 100644 index 00000000..2c24b10c --- /dev/null +++ b/.github/workflows/format.yml @@ -0,0 +1,25 @@ +--- +name: Format + +on: + pull_request: + +jobs: + check: + runs-on: ubuntu-latest + + steps: + - name: Checkout + uses: actions/checkout@v3 + + - name: Configure Node.js + uses: actions/setup-node@v3 + with: + cache: npm + node-version: lts/* + + - name: Install dependencies + run: npm ci + + - name: Check code formatting + run: npm run format diff --git a/.github/workflows/release.yml b/.github/workflows/release.yml index 67f13c71..f3f2d658 100644 --- a/.github/workflows/release.yml +++ b/.github/workflows/release.yml @@ -8,6 +8,7 @@ on: jobs: release: name: Release + if: github.repository_owner == 'BitGo' runs-on: ubuntu-latest steps: @@ -20,7 +21,7 @@ jobs: uses: actions/setup-node@v3 with: cache: npm - node-version: 'lts/*' + node-version: lts/* - name: Install dependencies run: npm ci @@ -33,6 +34,11 @@ jobs: - name: Test run: npm test + # DISCUSS: Use `jq` or just a small node script to create/modify `.npmrc` in case + # one gets added in the future + - name: Prepare Release + run: mv .npmrc-release .npmrc + - name: Release run: npx multi-semantic-release env: diff --git a/.gitignore b/.gitignore index 73aeb307..ede19208 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,6 @@ +.direnv/ .drone.yml -.nyc_output/ +.turbo/ +coverage/ dist/ node_modules/ -coverage/ -.turbo/ diff --git a/.npmrc-release b/.npmrc-release new file mode 100644 index 00000000..3ad17454 --- /dev/null +++ b/.npmrc-release @@ -0,0 +1 @@ +workspaces-update = false diff --git a/.nvmrc b/.nvmrc deleted file mode 100644 index 53a42214..00000000 --- a/.nvmrc +++ /dev/null @@ -1 +0,0 @@ -v16.13.2 diff --git a/.prettierignore b/.prettierignore index 7e5ddd30..7f7e84d1 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,3 +1,3 @@ -.nyc_output/ coverage/ +dist/ package-lock.json diff --git a/.releaserc.json b/.releaserc.json index eeb1b099..01e95f92 100644 --- a/.releaserc.json +++ b/.releaserc.json @@ -1,6 +1,12 @@ { "plugins": [ - "@semantic-release/commit-analyzer", + [ + "@semantic-release/commit-analyzer", + { + "preset": "angular", + "releaseRules": [{ "type": "docs", "release": "patch" }] + } + ], "@semantic-release/release-notes-generator", "@semrel-extra/npm", [ diff --git a/README.md b/README.md index f3ddd6fc..3d6c1905 100644 --- a/README.md +++ b/README.md @@ -1,21 +1,27 @@ # API-TS -**Disclaimer: This project is currently in an alpha state. Documentation is actively -being worked on.** +![Build Status](https://github.com/BitGo/api-ts/actions/workflows/ci.yml/badge.svg?branch=master) + +**Disclaimer: This project is currently in beta state. Documentation is actively being +worked on.** A collection of packages for defining and using type-checked apis with TypeScript. -TypeScript is a very powerful type system layered on top of JavaScript, but lacks type -information available at runtime. This is not likely to change because it is -[an explicit non-goal](https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals#non-goals) -of TypeScript. [io-ts](https://github.com/gcanti/io-ts) fills in this functionality gap. -[io-ts-http](packages/io-ts-http/README.md) builds on top of `io-ts` to make it possible -to define codecs that translate between HTTP requests and plain JS objects. -Additionally, it provides a way to group these codecs into route definitions, and then -collect the route definitions into an api. The resulting api definitions may then be -used on the [client](packages/superagent-wrapper/README.md) and -[server](packages/express-wrapper/README.md) to have type-checked and runtime-validated -HTTP calls in a standardized manner. +TypeScript is a powerful type system layered on top of JavaScript, but lacks type +information about values received at runtime. This is [an explicit non-goal] of the +TypeScript language, so we use [io-ts] to statically type this runtime data. +[io-ts-http] builds on top of io-ts to define codecs that translate between HTTP +requests and plain old JavaScript objects. Additionally, it provides a way to group +these codecs into route definitions, and then collect the route definitions into an api. +The resulting api definitions may then be used on the [client] and [server] to have +type-checked and runtime-validated HTTP calls in a standardized manner. + +[an explicit non-goal]: + https://github.com/Microsoft/TypeScript/wiki/TypeScript-Design-Goals#non-goals +[io-ts]: https://github.com/gcanti/io-ts +[io-ts-http]: packages/io-ts-http/README.md +[client]: packages/superagent-wrapper/README.md +[server]: packages/express-wrapper/README.md ## Getting started diff --git a/flake.lock b/flake.lock new file mode 100644 index 00000000..96a20eb7 --- /dev/null +++ b/flake.lock @@ -0,0 +1,59 @@ +{ + "nodes": { + "flake-compat": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-utils": { + "locked": { + "lastModified": 1649676176, + "narHash": "sha256-OWKJratjt2RW151VUlJPRALb7OU2S5s+f0vLj4o1bHM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "a4b154ebbdc88c8498a5c7b01589addc9e9cb678", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "nixpkgs": { + "locked": { + "lastModified": 1652290453, + "narHash": "sha256-0iXRvx7DP/HIKd5h7b7Y1+JffoDDRCwz4WTVYfsltrs=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "e680b5cf74e550508f1e2be2fcfdee688bbd3b74", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "type": "github" + } + }, + "root": { + "inputs": { + "flake-compat": "flake-compat", + "flake-utils": "flake-utils", + "nixpkgs": "nixpkgs" + } + } + }, + "root": "root", + "version": 7 +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 00000000..363a535a --- /dev/null +++ b/flake.nix @@ -0,0 +1,39 @@ +{ + description = "api-ts"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs"; + flake-utils.url = "github:numtide/flake-utils"; + flake-compat = { + url = "github:edolstra/flake-compat"; + flake = false; + }; + }; + + outputs = { + self, + nixpkgs, + flake-utils, + flake-compat, + }: ( + flake-utils.lib.eachDefaultSystem ( + system: ( + let + pkgs = nixpkgs.legacyPackages.${system}; + in { + devShell = pkgs.mkShell { + name = "api-ts-shell"; + + packages = with pkgs; [ + nodejs-16_x + ]; + + shellHook = '' + export PATH="$(pwd)/node_modules/.bin:$PATH" + ''; + }; + } + ) + ) + ); +} diff --git a/package-lock.json b/package-lock.json index 364b9888..e9ec3d7a 100644 --- a/package-lock.json +++ b/package-lock.json @@ -12,28 +12,17 @@ "packages/**" ], "devDependencies": { - "@semantic-release/github": "8.0.4", + "@semantic-release/github": "8.0.6", "@semantic-release/npm": "9.0.1", "@semrel-extra/npm": "1.2.0", "lint-staged": "13.0.3", "multi-semantic-release": "2.13.0", "pre-commit": "1.2.2", "prettier": "2.5.1", - "turbo": "1.3.1", + "turbo": "1.4.3", "typescript": "4.6.4" } }, - "node_modules/@ampproject/remapping": { - "version": "2.1.2", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "@jridgewell/trace-mapping": "^0.3.0" - }, - "engines": { - "node": ">=6.0.0" - } - }, "node_modules/@api-ts/express-wrapper": { "resolved": "packages/express-wrapper", "link": true @@ -54,6 +43,10 @@ "resolved": "packages/superagent-wrapper", "link": true }, + "node_modules/@api-ts/typed-express-router": { + "resolved": "packages/typed-express-router", + "link": true + }, "node_modules/@ava/typescript": { "version": "3.0.1", "dev": true, @@ -77,729 +70,288 @@ "node": ">=6.9.0" } }, - "node_modules/@babel/compat-data": { - "version": "7.17.7", + "node_modules/@babel/helper-validator-identifier": { + "version": "7.16.7", "dev": true, "license": "MIT", "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/core": { - "version": "7.17.8", + "node_modules/@babel/highlight": { + "version": "7.17.9", "dev": true, "license": "MIT", "dependencies": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" + "@babel/helper-validator-identifier": "^7.16.7", + "chalk": "^2.0.0", + "js-tokens": "^4.0.0" }, "engines": { "node": ">=6.9.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/babel" - } - }, - "node_modules/@babel/core/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" } }, - "node_modules/@babel/generator": { - "version": "7.17.7", + "node_modules/@babel/highlight/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/helper-compilation-targets": { - "version": "7.17.7", + "node_modules/@babel/highlight/node_modules/chalk": { + "version": "2.4.2", "dev": true, "license": "MIT", "dependencies": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=6.9.0" - }, - "peerDependencies": { - "@babel/core": "^7.0.0" + "node": ">=4" } }, - "node_modules/@babel/helper-compilation-targets/node_modules/semver": { - "version": "6.3.0", + "node_modules/@babel/highlight/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT", + "engines": { + "node": ">=0.8.0" } }, - "node_modules/@babel/helper-environment-visitor": { - "version": "7.16.7", + "node_modules/@babel/highlight/node_modules/has-flag": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/helper-function-name": { - "version": "7.16.7", + "node_modules/@babel/highlight/node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=6.9.0" + "node": ">=4" } }, - "node_modules/@babel/helper-get-function-arity": { - "version": "7.16.7", + "node_modules/@babel/runtime": { + "version": "7.17.9", "dev": true, "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "regenerator-runtime": "^0.13.4" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/helper-hoist-variables": { - "version": "7.16.7", + "node_modules/@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true, + "license": "MIT" + }, + "node_modules/@changesets/types": { + "version": "4.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@colors/colors": { + "version": "1.5.0", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.16.7" - }, + "optional": true, "engines": { - "node": ">=6.9.0" + "node": ">=0.1.90" } }, - "node_modules/@babel/helper-module-imports": { - "version": "7.16.7", + "node_modules/@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" + "@jridgewell/trace-mapping": "0.3.9" }, "engines": { - "node": ">=6.9.0" + "node": ">=12" } }, - "node_modules/@babel/helper-module-transforms": { - "version": "7.17.7", + "node_modules/@istanbuljs/schema": { + "version": "0.1.3", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=8" } }, - "node_modules/@babel/helper-simple-access": { - "version": "7.17.7", + "node_modules/@jridgewell/resolve-uri": { + "version": "3.0.5", "dev": true, "license": "MIT", - "dependencies": { - "@babel/types": "^7.17.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">=6.0.0" } }, - "node_modules/@babel/helper-split-export-declaration": { - "version": "7.16.7", + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.9", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", + "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", "dev": true, - "license": "MIT", "dependencies": { - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@jridgewell/resolve-uri": "^3.0.3", + "@jridgewell/sourcemap-codec": "^1.4.10" } }, - "node_modules/@babel/helper-validator-identifier": { - "version": "7.16.7", + "node_modules/@manypkg/find-root": { + "version": "1.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=6.9.0" + "dependencies": { + "@babel/runtime": "^7.5.5", + "@types/node": "^12.7.1", + "find-up": "^4.1.0", + "fs-extra": "^8.1.0" } }, - "node_modules/@babel/helper-validator-option": { - "version": "7.16.7", + "node_modules/@manypkg/find-root/node_modules/fs-extra": { + "version": "8.1.0", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" + }, "engines": { - "node": ">=6.9.0" + "node": ">=6 <7 || >=8" } }, - "node_modules/@babel/helpers": { - "version": "7.17.8", + "node_modules/@manypkg/find-root/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - }, - "engines": { - "node": ">=6.9.0" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/highlight": { - "version": "7.16.10", + "node_modules/@manypkg/find-root/node_modules/universalify": { + "version": "0.1.2", "dev": true, "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "chalk": "^2.0.0", - "js-tokens": "^4.0.0" - }, "engines": { - "node": ">=6.9.0" + "node": ">= 4.0.0" } }, - "node_modules/@babel/highlight/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/@manypkg/get-packages": { + "version": "1.1.3", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" + "@babel/runtime": "^7.5.5", + "@changesets/types": "^4.0.1", + "@manypkg/find-root": "^1.1.0", + "fs-extra": "^8.1.0", + "globby": "^11.0.0", + "read-yaml-file": "^1.1.0" } }, - "node_modules/@babel/highlight/node_modules/chalk": { - "version": "2.4.2", + "node_modules/@manypkg/get-packages/node_modules/fs-extra": { + "version": "8.1.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "graceful-fs": "^4.2.0", + "jsonfile": "^4.0.0", + "universalify": "^0.1.0" }, "engines": { - "node": ">=4" + "node": ">=6 <7 || >=8" } }, - "node_modules/@babel/highlight/node_modules/color-convert": { - "version": "1.9.3", + "node_modules/@manypkg/get-packages/node_modules/jsonfile": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "color-name": "1.1.3" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/@babel/highlight/node_modules/color-name": { - "version": "1.1.3", - "dev": true, - "license": "MIT" - }, - "node_modules/@babel/highlight/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/@manypkg/get-packages/node_modules/universalify": { + "version": "0.1.2", "dev": true, "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 4.0.0" } }, - "node_modules/@babel/highlight/node_modules/supports-color": { - "version": "5.5.0", - "dev": true, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/@babel/parser": { - "version": "7.17.8", - "dev": true, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", "license": "MIT", - "bin": { - "parser": "bin/babel-parser.js" - }, "engines": { - "node": ">=6.0.0" + "node": ">= 8" } }, - "node_modules/@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "dev": true, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "license": "MIT", "dependencies": { - "regenerator-runtime": "^0.13.4" + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" }, "engines": { - "node": ">=6.9.0" + "node": ">= 8" } }, - "node_modules/@babel/template": { - "version": "7.16.7", + "node_modules/@octokit/auth-token": { + "version": "2.5.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - }, - "engines": { - "node": ">=6.9.0" + "@octokit/types": "^6.0.3" } }, - "node_modules/@babel/traverse": { - "version": "7.17.3", + "node_modules/@octokit/core": { + "version": "3.6.0", "dev": true, "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@babel/types": { - "version": "7.17.0", - "dev": true, - "license": "MIT", - "dependencies": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - }, - "engines": { - "node": ">=6.9.0" - } - }, - "node_modules/@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true - }, - "node_modules/@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, - "node_modules/@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "dependencies": { - "@jridgewell/trace-mapping": "0.3.9" - }, - "engines": { - "node": ">=12" - } - }, - "node_modules/@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/argparse": { - "version": "1.0.10", - "dev": true, - "license": "MIT", - "dependencies": { - "sprintf-js": "~1.0.2" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/js-yaml": { - "version": "3.14.1", - "dev": true, - "license": "MIT", - "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@istanbuljs/load-nyc-config/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@istanbuljs/schema": { - "version": "0.1.3", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/@jridgewell/resolve-uri": { - "version": "3.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.0.0" - } - }, - "node_modules/@jridgewell/sourcemap-codec": { - "version": "1.4.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.9", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz", - "integrity": "sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==", - "dev": true, - "dependencies": { - "@jridgewell/resolve-uri": "^3.0.3", - "@jridgewell/sourcemap-codec": "^1.4.10" - } - }, - "node_modules/@manypkg/find-root": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "@types/node": "^12.7.1", - "find-up": "^4.1.0", - "fs-extra": "^8.1.0" - } - }, - "node_modules/@manypkg/find-root/node_modules/@types/node": { - "version": "12.20.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.52.tgz", - "integrity": "sha512-cfkwWw72849SNYp3Zx0IcIs25vABmFh73xicxhCkTcvtZQeIez15PpwQN8fY3RD7gv1Wrxlc9MEtfMORZDEsGw==", - "dev": true - }, - "node_modules/@manypkg/find-root/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@manypkg/find-root/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@manypkg/find-root/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/find-root/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@manypkg/get-packages": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", - "dev": true, - "dependencies": { - "@babel/runtime": "^7.5.5", - "@changesets/types": "^4.0.1", - "@manypkg/find-root": "^1.1.0", - "fs-extra": "^8.1.0", - "globby": "^11.0.0", - "read-yaml-file": "^1.1.0" - } - }, - "node_modules/@manypkg/get-packages/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, - "node_modules/@manypkg/get-packages/node_modules/fs-extra": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", - "dev": true, - "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^4.0.0", - "universalify": "^0.1.0" - }, - "engines": { - "node": ">=6 <7 || >=8" - } - }, - "node_modules/@manypkg/get-packages/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/@manypkg/get-packages/node_modules/jsonfile": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", - "dev": true, - "optionalDependencies": { - "graceful-fs": "^4.1.6" - } - }, - "node_modules/@manypkg/get-packages/node_modules/universalify": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", - "dev": true, - "engines": { - "node": ">= 4.0.0" - } - }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", - "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" - }, - "engines": { - "node": ">= 8" - } - }, - "node_modules/@octokit/auth-token": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", - "dev": true, - "dependencies": { - "@octokit/types": "^6.0.3" - } - }, - "node_modules/@octokit/core": { - "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", - "dev": true, - "dependencies": { - "@octokit/auth-token": "^2.4.4", - "@octokit/graphql": "^4.5.8", - "@octokit/request": "^5.6.3", - "@octokit/request-error": "^2.0.5", - "@octokit/types": "^6.0.3", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" + "@octokit/auth-token": "^2.4.4", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^5.6.3", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" } }, "node_modules/@octokit/endpoint": { "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^6.0.3", "is-plain-object": "^5.0.0", @@ -808,9 +360,8 @@ }, "node_modules/@octokit/graphql": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/request": "^5.6.0", "@octokit/types": "^6.0.3", @@ -819,15 +370,13 @@ }, "node_modules/@octokit/openapi-types": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", - "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@octokit/plugin-paginate-rest": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^6.34.0" }, @@ -837,18 +386,16 @@ }, "node_modules/@octokit/plugin-request-log": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, + "license": "MIT", "peerDependencies": { "@octokit/core": ">=3" } }, "node_modules/@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^6.34.0", "deprecation": "^2.3.1" @@ -859,9 +406,8 @@ }, "node_modules/@octokit/request": { "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/endpoint": "^6.0.1", "@octokit/request-error": "^2.1.0", @@ -873,9 +419,8 @@ }, "node_modules/@octokit/request-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/types": "^6.0.3", "deprecation": "^2.0.0", @@ -884,9 +429,8 @@ }, "node_modules/@octokit/rest": { "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/core": "^3.5.1", "@octokit/plugin-paginate-rest": "^2.16.8", @@ -896,18 +440,16 @@ }, "node_modules/@octokit/types": { "version": "6.34.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", - "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/openapi-types": "^11.2.0" } }, "node_modules/@semantic-release/commit-analyzer": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "conventional-changelog-angular": "^5.0.0", @@ -927,18 +469,17 @@ }, "node_modules/@semantic-release/error": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", - "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@semantic-release/github": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.4.tgz", - "integrity": "sha512-But4e8oqqP3anZI5tjzZssZc2J6eoUdeeE0s7LVKKwyiAXJiQDWNNvtPOpgG2DsIz4+Exuse7cEQgjGMxwtLmg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.6.tgz", + "integrity": "sha512-ZxgaxYCeqt9ylm2x3OPqUoUqBw1p60LhxzdX6BqJlIBThupGma98lttsAbK64T6L6AlNa2G5T66BbiG8y0PIHQ==", "dev": true, "dependencies": { - "@octokit/rest": "^18.0.0", - "@semantic-release/error": "^2.2.0", + "@octokit/rest": "^19.0.0", + "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "bottleneck": "^2.18.1", "debug": "^4.0.0", @@ -961,52 +502,95 @@ "semantic-release": ">=18.0.0-beta.1" } }, - "node_modules/@semantic-release/github/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", + "node_modules/@semantic-release/github/node_modules/@octokit/auth-token": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", + "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/@octokit/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.2.tgz", + "integrity": "sha512-vgVtE02EF9kXFsjmFoKFCwH1wDspPfDgopRbAlavkGuBJPWF+u5n0xgwP4obmdKNvLM+bB7MI7W31c2E13zgDQ==", + "dev": true, + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/@octokit/endpoint": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", + "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", + "dev": true, + "dependencies": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/@semantic-release/github/node_modules/@octokit/request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.0.1.tgz", + "integrity": "sha512-9DSQ7fKBeSMU5aD6JfWA/1XFwP44X32d9fSYdQzxSsROjOginPYtW4Xwwt3Qs7wZtBmFOWV/td3gxOHmz9hfig==", "dev": true, + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/@semantic-release/github/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/@semantic-release/github/node_modules/@octokit/rest": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.1.tgz", + "integrity": "sha512-gZUhimQN9aKF0eBLlWFmZlKO8ksFgm6+9dy1Nu/2soS9dljlH/CmjPIGH1/hZiFoKckGAoLmMIHVjDWIhC2myw==", "dev": true, "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/@semantic-release/github/node_modules/mime": { + "node_modules/@semantic-release/github/node_modules/@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, - "bin": { - "mime": "cli.js" - }, "engines": { - "node": ">=10.0.0" + "node": ">=14.17" } }, "node_modules/@semantic-release/npm": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.1.tgz", - "integrity": "sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", @@ -1031,18 +615,16 @@ }, "node_modules/@semantic-release/npm/node_modules/@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=14.17" } }, "node_modules/@semantic-release/release-notes-generator": { "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", - "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "conventional-changelog-angular": "^5.0.0", @@ -1065,23 +647,20 @@ }, "node_modules/@semrel-extra/npm": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@semrel-extra/npm/-/npm-1.2.0.tgz", - "integrity": "sha512-l5hBMofOUuAfytK3ILEldRO5bdX4dJOfO8aaYyUqON+EcFlKMke7bPWGJjB/bqi1FGTEfESfAsn8zXsVp+G7Zg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10" } }, "node_modules/@ts-morph/common": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.15.0.tgz", - "integrity": "sha512-QefRbadcwfBnd3HWrltpjRJprHgeKfQsnbyGbRF8pEjMqISAljJwq4wfRETxxojsmN4GWuJv3PWG+W7kBIHMMw==", + "version": "0.13.0", + "license": "MIT", "dependencies": { "fast-glob": "^3.2.11", "minimatch": "^5.0.1", @@ -1091,16 +670,14 @@ }, "node_modules/@ts-morph/common/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } }, "node_modules/@ts-morph/common/node_modules/minimatch": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -1138,9 +715,9 @@ } }, "node_modules/@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, "node_modules/@types/connect": { @@ -1177,6 +754,11 @@ "@types/range-parser": "*" } }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true, + "license": "MIT" + }, "node_modules/@types/mime": { "version": "1.3.2", "dev": true, @@ -1184,32 +766,28 @@ }, "node_modules/@types/minimist": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/mocha": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/node": { - "version": "16.11.7", + "version": "12.20.48", "dev": true, "license": "MIT" }, "node_modules/@types/normalize-package-data": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/@types/qs": { "version": "6.9.7", @@ -1222,10 +800,9 @@ "license": "MIT" }, "node_modules/@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", - "dev": true + "version": "0.12.1", + "dev": true, + "license": "MIT" }, "node_modules/@types/serve-static": { "version": "1.13.10", @@ -1246,9 +823,10 @@ } }, "node_modules/@types/supertest": { - "version": "2.0.11", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", "dev": true, - "license": "MIT", "dependencies": { "@types/superagent": "*" } @@ -1291,9 +869,8 @@ }, "node_modules/agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, + "license": "MIT", "dependencies": { "debug": "4" }, @@ -1359,9 +936,8 @@ }, "node_modules/ansicolors": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/anymatch": { "version": "3.1.2", @@ -1375,22 +951,6 @@ "node": ">= 8" } }, - "node_modules/append-transform": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "default-require-extensions": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/archy": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/arg": { "version": "4.1.3", "dev": true, @@ -1403,9 +963,8 @@ }, "node_modules/argv-formatter": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/array-find-index": { "version": "1.0.2", @@ -1421,9 +980,16 @@ }, "node_modules/array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/array-union": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, "node_modules/arrgv": { "version": "1.0.2", @@ -1444,6 +1010,12 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, "node_modules/assertion-error": { "version": "1.1.0", "dev": true, @@ -1462,12 +1034,14 @@ }, "node_modules/asynckit": { "version": "0.4.0", - "license": "MIT" + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "node_modules/ava": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.0.tgz", - "integrity": "sha512-Ap0u8rp8wOBN6CxshgxrPSe191e8g52RWGoXeDB57ubo4fyZyStfI6OxQi/bl0yxIDEOYHhCiGwihbzlMNJw3Q==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.3.tgz", + "integrity": "sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==", "dev": true, "dependencies": { "acorn": "^8.7.1", @@ -1562,6 +1136,35 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/ava/node_modules/globby": { + "version": "13.1.1", + "dev": true, + "license": "MIT", + "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", + "dev": true, + "license": "MIT", + "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", @@ -1580,9 +1183,9 @@ "license": "MIT" }, "node_modules/ava/node_modules/p-map": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.4.0.tgz", - "integrity": "sha512-obHraaWkwl4y1NHR4vW5D5k+33+S5QrkFqsNrrvK0R7lilXdzo/DZgnloDvYUaRT+Sk6vVK47JUQMQY6cjPMXg==", + "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" @@ -1596,9 +1199,8 @@ }, "node_modules/ava/node_modules/write-file-atomic": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, + "license": "ISC", "dependencies": { "imurmurhash": "^0.1.4", "signal-exit": "^3.0.7" @@ -1613,9 +1215,8 @@ }, "node_modules/before-after-hook": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/binary-extensions": { "version": "2.2.0", @@ -1627,9 +1228,8 @@ }, "node_modules/blork": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/blork/-/blork-9.3.0.tgz", - "integrity": "sha512-9naBrHS2bwCQeGqGR9ptcoll6utsox9jtk1E0SwOAFa4RCV/IQHoBJARdi8AhHQTPPoWkjixMrzHvQKAV5Fx2A==", "dev": true, + "license": "0BSD", "engines": { "node": ">=10.0.0" } @@ -1641,9 +1241,8 @@ }, "node_modules/body-parser": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "content-type": "~1.0.4", @@ -1673,18 +1272,16 @@ }, "node_modules/body-parser/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/body-parser/node_modules/destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8", "npm": "1.2.8000 || >= 1.4.16" @@ -1697,9 +1294,8 @@ }, "node_modules/body-parser/node_modules/on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, + "license": "MIT", "dependencies": { "ee-first": "1.1.1" }, @@ -1709,9 +1305,8 @@ }, "node_modules/bottleneck": { "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/brace-expansion": { "version": "1.1.11", @@ -1737,64 +1332,167 @@ "dev": true, "license": "ISC" }, - "node_modules/browserslist": { - "version": "4.20.2", + "node_modules/buffer-from": { + "version": "1.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/bytes": { + "version": "3.1.2", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - } - ], "license": "MIT", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", + "dev": true, "dependencies": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" }, "bin": { - "browserslist": "cli.js" + "c8": "bin/c8.js" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=10.12.0" } }, - "node_modules/buffer-from": { - "version": "1.1.2", + "node_modules/c8/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/c8/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, "license": "MIT" }, - "node_modules/bytes": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">= 0.8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caching-transform": { - "version": "4.0.0", + "node_modules/c8/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/c8/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/c8/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/c8/node_modules/yargs": { + "version": "16.2.0", "dev": true, "license": "MIT", "dependencies": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, "engines": { - "node": ">=8" + "node": ">=10" } }, "node_modules/call-bind": { "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1", @@ -1825,9 +1523,8 @@ }, "node_modules/camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, + "license": "MIT", "dependencies": { "camelcase": "^5.3.1", "map-obj": "^4.0.0", @@ -1840,26 +1537,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001319", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - } - ], - "license": "CC-BY-4.0" - }, "node_modules/cardinal": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", "dev": true, + "license": "MIT", "dependencies": { "ansicolors": "~0.3.2", "redeyed": "~2.1.0" @@ -1942,15 +1623,27 @@ "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, "license": "MIT" }, "node_modules/ci-info": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", - "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, "node_modules/ci-parallel-vars": { @@ -1987,9 +1680,8 @@ }, "node_modules/cli-table3": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "dev": true, + "license": "MIT", "dependencies": { "string-width": "^4.2.0" }, @@ -2002,33 +1694,29 @@ }, "node_modules/cli-table3/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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cli-table3/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 + "dev": true, + "license": "MIT" }, "node_modules/cli-table3/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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/cli-table3/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, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -2040,9 +1728,8 @@ }, "node_modules/cli-table3/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, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -2165,13 +1852,20 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/cmd-ts/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/cmd-ts/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, + "node_modules/cmd-ts/node_modules/color-name": { + "version": "1.1.4", + "license": "MIT" + }, "node_modules/cmd-ts/node_modules/strip-ansi": { "version": "6.0.1", "license": "MIT", @@ -2201,9 +1895,8 @@ }, "node_modules/code-excerpt": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, + "license": "MIT", "dependencies": { "convert-to-spaces": "^2.0.1" }, @@ -2212,17 +1905,16 @@ } }, "node_modules/color-convert": { - "version": "2.0.1", + "version": "1.9.3", + "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "color-name": "1.1.3" } }, "node_modules/color-name": { - "version": "1.1.4", + "version": "1.1.3", + "dev": true, "license": "MIT" }, "node_modules/colorette": { @@ -2233,7 +1925,9 @@ }, "node_modules/combined-stream": { "version": "1.0.8", - "license": "MIT", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "dependencies": { "delayed-stream": "~1.0.0" }, @@ -2262,16 +1956,10 @@ "dev": true, "license": "ISC" }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, "node_modules/compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, + "license": "MIT", "dependencies": { "array-ify": "^1.0.0", "dot-prop": "^5.1.0" @@ -2279,6 +1967,7 @@ }, "node_modules/component-emitter": { "version": "1.3.0", + "dev": true, "license": "MIT" }, "node_modules/concat-map": { @@ -2328,24 +2017,6 @@ "node": ">= 0.6" } }, - "node_modules/content-disposition/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/content-type": { "version": "1.0.4", "license": "MIT", @@ -2355,9 +2026,8 @@ }, "node_modules/conventional-changelog-angular": { "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, + "license": "ISC", "dependencies": { "compare-func": "^2.0.0", "q": "^1.5.1" @@ -2368,9 +2038,8 @@ }, "node_modules/conventional-changelog-writer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "conventional-commits-filter": "^2.0.7", @@ -2392,9 +2061,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "inherits": "^2.0.3", @@ -2407,9 +2075,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "peer": true, "bin": { "semver": "bin/semver.js" @@ -2417,9 +2084,8 @@ }, "node_modules/conventional-changelog-writer/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "readable-stream": "3" @@ -2427,9 +2093,8 @@ }, "node_modules/conventional-commits-filter": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.ismatch": "^4.4.0", "modify-values": "^1.0.0" @@ -2440,9 +2105,8 @@ }, "node_modules/conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-text-path": "^1.0.1", "JSONStream": "^1.0.4", @@ -2460,9 +2124,8 @@ }, "node_modules/conventional-commits-parser/node_modules/readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -2474,18 +2137,16 @@ }, "node_modules/conventional-commits-parser/node_modules/split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, + "license": "ISC", "dependencies": { "readable-stream": "^3.0.0" } }, "node_modules/conventional-commits-parser/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } @@ -2498,11 +2159,15 @@ "safe-buffer": "~5.1.1" } }, + "node_modules/convert-source-map/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, "node_modules/convert-to-spaces": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true, + "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } @@ -2520,17 +2185,18 @@ }, "node_modules/cookiejar": { "version": "2.1.3", + "dev": true, "license": "MIT" }, "node_modules/core-util-is": { "version": "1.0.3", + "dev": true, "license": "MIT" }, "node_modules/cosmiconfig": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, + "license": "MIT", "dependencies": { "@types/parse-json": "^4.0.0", "import-fresh": "^3.2.1", @@ -2562,9 +2228,8 @@ }, "node_modules/crypto-random-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -2593,9 +2258,8 @@ }, "node_modules/dateformat": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true, + "license": "MIT", "engines": { "node": "*" } @@ -2625,9 +2289,8 @@ }, "node_modules/decamelize-keys": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, + "license": "MIT", "dependencies": { "decamelize": "^1.1.0", "map-obj": "^1.0.0" @@ -2638,9 +2301,8 @@ }, "node_modules/decamelize-keys/node_modules/map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -2658,22 +2320,10 @@ }, "node_modules/deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", - "dev": true, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/default-require-extensions": { - "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "strip-bom": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=4.0.0" } }, "node_modules/del": { @@ -2698,36 +2348,11 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del/node_modules/array-union": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/del/node_modules/globby": { - "version": "11.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/delayed-stream": { "version": "1.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true, "engines": { "node": ">=0.4.0" } @@ -2741,9 +2366,8 @@ }, "node_modules/deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/destroy": { "version": "1.0.4", @@ -2751,22 +2375,30 @@ }, "node_modules/detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, + "node_modules/dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "dev": true, + "dependencies": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "node_modules/didyoumean": { "version": "1.2.2", "license": "Apache-2.0" @@ -2792,9 +2424,8 @@ }, "node_modules/dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, + "license": "MIT", "dependencies": { "is-obj": "^2.0.0" }, @@ -2804,9 +2435,8 @@ }, "node_modules/duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, + "license": "BSD-3-Clause", "dependencies": { "readable-stream": "^2.0.2" } @@ -2820,11 +2450,6 @@ "version": "1.1.1", "license": "MIT" }, - "node_modules/electron-to-chromium": { - "version": "1.4.91", - "dev": true, - "license": "ISC" - }, "node_modules/emittery": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.11.0.tgz", @@ -2849,20 +2474,41 @@ "node": ">= 0.8" } }, + "node_modules/encoding": { + "version": "0.1.13", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "iconv-lite": "^0.6.2" + } + }, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", + "dev": true, + "license": "MIT", + "optional": true, + "peer": true, + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + }, + "engines": { + "node": ">=0.10.0" + } + }, "node_modules/end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, + "license": "MIT", "dependencies": { "once": "^1.4.0" } }, "node_modules/env-ci": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", - "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", "dev": true, + "license": "MIT", "dependencies": { "execa": "^5.0.0", "fromentries": "^1.3.2", @@ -2874,18 +2520,12 @@ }, "node_modules/error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, + "license": "MIT", "dependencies": { "is-arrayish": "^0.2.1" } }, - "node_modules/es6-error": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, "node_modules/escalade": { "version": "3.1.1", "dev": true, @@ -3071,24 +2711,6 @@ "node": ">= 0.8" } }, - "node_modules/express/node_modules/safe-buffer": { - "version": "5.2.1", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], - "license": "MIT" - }, "node_modules/express/node_modules/toidentifier": { "version": "1.0.1", "license": "MIT", @@ -3096,10 +2718,6 @@ "node": ">=0.6" } }, - "node_modules/extend": { - "version": "3.0.2", - "license": "MIT" - }, "node_modules/fast-diff": { "version": "1.2.0", "dev": true, @@ -3121,6 +2739,7 @@ }, "node_modules/fast-safe-stringify": { "version": "2.1.1", + "dev": true, "license": "MIT" }, "node_modules/fastq": { @@ -3132,9 +2751,8 @@ }, "node_modules/figures": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz", - "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^5.0.0", "is-unicode-supported": "^1.2.0" @@ -3183,42 +2801,22 @@ "version": "2.0.0", "license": "MIT" }, - "node_modules/find-cache-dir": { - "version": "3.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" - } - }, "node_modules/find-up": { - "version": "5.0.0", + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/find-versions": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", "dev": true, + "license": "MIT", "dependencies": { "semver-regex": "^3.1.2" }, @@ -3250,24 +2848,46 @@ } }, "node_modules/form-data": { - "version": "2.5.1", - "license": "MIT", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, "dependencies": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" }, "engines": { - "node": ">= 0.12" + "node": ">= 6" } }, "node_modules/formidable": { - "version": "1.2.6", - "license": "MIT", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dev": true, + "dependencies": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, "funding": { "url": "https://ko-fi.com/tunnckoCore/commissions" } }, + "node_modules/formidable/node_modules/qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, "node_modules/forwarded": { "version": "0.2.0", "license": "MIT", @@ -3276,9 +2896,9 @@ } }, "node_modules/fp-ts": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.12.1.tgz", - "integrity": "sha512-oxvgqUYR6O9VkKXrxkJ0NOyU0FrE705MeqgBUMEPWyTu6Pwn768cJbHChw2XOBlgFLKfIHxjr2OOBFpv2mUGZw==" + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.12.3.tgz", + "integrity": "sha512-8m0XvW8kZbfnJOA4NvSVXu95mLbPf4LQGwQyqVukIYS4KzSNJiyKSmuZUmbVHteUi6MGkAJGPb0goPZqI+Tsqg==" }, "node_modules/fresh": { "version": "0.5.2", @@ -3289,9 +2909,8 @@ }, "node_modules/from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.1", "readable-stream": "^2.0.0" @@ -3318,9 +2937,8 @@ }, "node_modules/fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.2.0", "jsonfile": "^6.0.1", @@ -3337,15 +2955,8 @@ }, "node_modules/function-bind": { "version": "1.1.1", - "license": "MIT" - }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6.9.0" - } + "license": "MIT" }, "node_modules/get-caller-file": { "version": "2.0.5", @@ -3365,6 +2976,7 @@ }, "node_modules/get-intrinsic": { "version": "1.1.1", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1", @@ -3375,14 +2987,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/get-package-type": { - "version": "0.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8.0.0" - } - }, "node_modules/get-stream": { "version": "6.0.1", "dev": true, @@ -3396,9 +3000,8 @@ }, "node_modules/git-log-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", "dev": true, + "license": "MIT", "dependencies": { "argv-formatter": "~1.0.0", "spawn-error-forwarder": "~1.0.0", @@ -3410,9 +3013,8 @@ }, "node_modules/glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, + "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -3438,55 +3040,34 @@ "node": ">= 6" } }, - "node_modules/globals": { - "version": "11.12.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", + "version": "11.1.0", "dev": true, + "license": "MIT", "dependencies": { + "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.9", "ignore": "^5.2.0", "merge2": "^1.4.1", - "slash": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "slash": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "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" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/graceful-fs": { - "version": "4.2.9", + "version": "4.2.10", "dev": true, "license": "ISC" }, "node_modules/handlebars": { "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, + "license": "MIT", "dependencies": { "minimist": "^1.2.5", "neo-async": "^2.6.0", @@ -3505,24 +3086,23 @@ }, "node_modules/handlebars/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, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, "node_modules/hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/has": { "version": "1.0.3", + "dev": true, "license": "MIT", "dependencies": { "function-bind": "^1.1.1" @@ -3532,15 +3112,15 @@ } }, "node_modules/has-flag": { - "version": "3.0.0", - "dev": true, + "version": "4.0.0", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=8" } }, "node_modules/has-symbols": { "version": "1.0.3", + "dev": true, "license": "MIT", "engines": { "node": ">= 0.4" @@ -3549,51 +3129,35 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/hasha": { - "version": "5.2.2", + "node_modules/he": { + "version": "1.2.0", "dev": true, "license": "MIT", - "dependencies": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "he": "bin/he" } }, - "node_modules/hasha/node_modules/type-fest": { - "version": "0.8.1", + "node_modules/hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", "dev": true, - "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/he": { - "version": "1.2.0", - "dev": true, - "license": "MIT", - "bin": { - "he": "bin/he" - } - }, "node_modules/hook-std": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", - "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -3601,24 +3165,6 @@ "node": ">=10" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/hosted-git-info/node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/html-escaper": { "version": "2.0.2", "dev": true, @@ -3626,9 +3172,8 @@ }, "node_modules/http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, + "license": "MIT", "dependencies": { "depd": "2.0.0", "inherits": "2.0.4", @@ -3642,36 +3187,32 @@ }, "node_modules/http-errors/node_modules/depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/http-errors/node_modules/statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, "node_modules/http-errors/node_modules/toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6" } }, "node_modules/http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "2", "agent-base": "6", @@ -3683,9 +3224,8 @@ }, "node_modules/https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, + "license": "MIT", "dependencies": { "agent-base": "6", "debug": "4" @@ -3704,8 +3244,7 @@ }, "node_modules/iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "license": "MIT", "dependencies": { "safer-buffer": ">= 2.1.2 < 3" }, @@ -3732,9 +3271,8 @@ }, "node_modules/import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, + "license": "MIT", "dependencies": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" @@ -3746,20 +3284,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true, - "engines": { - "node": ">=4" - } - }, "node_modules/import-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=12.2" @@ -3799,15 +3327,13 @@ }, "node_modules/ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/into-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", "dev": true, + "license": "MIT", "dependencies": { "from2": "^2.3.0", "p-is-promise": "^3.0.0" @@ -3820,10 +3346,10 @@ } }, "node_modules/io-ts": { - "version": "2.2.16", + "version": "2.1.3", "license": "MIT", "peerDependencies": { - "fp-ts": "^2.5.0" + "fp-ts": "^2.0.0" } }, "node_modules/io-ts-types": { @@ -3853,9 +3379,8 @@ }, "node_modules/is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/is-binary-path": { "version": "2.1.0", @@ -3870,9 +3395,8 @@ }, "node_modules/is-core-module": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, + "license": "MIT", "dependencies": { "has": "^1.0.3" }, @@ -3922,9 +3446,8 @@ }, "node_modules/is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -3946,11 +3469,11 @@ } }, "node_modules/is-plain-obj": { - "version": "2.1.0", + "version": "1.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, "node_modules/is-plain-object": { @@ -3979,9 +3502,8 @@ }, "node_modules/is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, + "license": "MIT", "dependencies": { "text-extensions": "^1.0.0" }, @@ -3989,16 +3511,10 @@ "node": ">=0.10.0" } }, - "node_modules/is-typedarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, "node_modules/is-unicode-supported": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=12" }, @@ -4006,16 +3522,9 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-windows": { - "version": "1.0.2", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/isarray": { "version": "1.0.0", + "dev": true, "license": "MIT" }, "node_modules/isexe": { @@ -4025,9 +3534,8 @@ }, "node_modules/issue-parser": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", "dev": true, + "license": "MIT", "dependencies": { "lodash.capitalize": "^4.2.1", "lodash.escaperegexp": "^4.1.2", @@ -4047,67 +3555,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-hook": { - "version": "3.0.0", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "append-transform": "^2.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-instrument/node_modules/semver": { - "version": "6.3.0", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/istanbul-lib-processinfo": { - "version": "2.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/istanbul-lib-processinfo/node_modules/p-map": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-report": { "version": "3.0.0", "dev": true, @@ -4121,14 +3568,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-report/node_modules/has-flag": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/istanbul-lib-report/node_modules/supports-color": { "version": "7.2.0", "dev": true, @@ -4140,27 +3579,6 @@ "node": ">=8" } }, - "node_modules/istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/istanbul-lib-source-maps/node_modules/source-map": { - "version": "0.6.1", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/istanbul-reports": { "version": "3.1.4", "dev": true, @@ -4175,9 +3593,8 @@ }, "node_modules/java-properties": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6.0" } @@ -4206,51 +3623,25 @@ "js-yaml": "bin/js-yaml.js" } }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "bin": { - "jsesc": "bin/jsesc" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "node_modules/json5": { - "version": "2.2.1", "dev": true, - "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, - "engines": { - "node": ">=6" - } + "license": "ISC" }, "node_modules/jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, + "license": "MIT", "dependencies": { "universalify": "^2.0.0" }, @@ -4260,18 +3651,16 @@ }, "node_modules/jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true, "engines": [ "node >= 0.2.0" - ] + ], + "license": "MIT" }, "node_modules/JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, + "license": "(MIT OR Apache-2.0)", "dependencies": { "jsonparse": "^1.2.0", "through": ">=2.2.7 <3" @@ -4285,9 +3674,8 @@ }, "node_modules/kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -4303,9 +3691,8 @@ }, "node_modules/lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lint-staged": { "version": "13.0.3", @@ -4381,18 +3768,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/lint-staged/node_modules/npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -4519,6 +3894,22 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/listr2/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/listr2/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/listr2/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -4581,17 +3972,14 @@ } }, "node_modules/locate-path": { - "version": "6.0.0", + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/lodash": { @@ -4601,44 +3989,33 @@ }, "node_modules/lodash.capitalize": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.escaperegexp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", "dev": true, "license": "MIT" }, "node_modules/lodash.ismatch": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/lodash.uniqby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/log-symbols": { "version": "4.1.0", @@ -4684,14 +4061,22 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/log-symbols/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, + "node_modules/log-symbols/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/log-symbols/node_modules/is-unicode-supported": { "version": "0.1.0", "dev": true, @@ -4753,6 +4138,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/log-update/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/log-update/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/log-update/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -4829,12 +4230,14 @@ } }, "node_modules/lru-cache": { - "version": "4.1.5", + "version": "6.0.0", "dev": true, "license": "ISC", "dependencies": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, "node_modules/make-dir": { @@ -4877,9 +4280,8 @@ }, "node_modules/map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -4888,10 +4290,9 @@ } }, "node_modules/marked": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.15.tgz", - "integrity": "sha512-esX5lPdTfG4p8LDkv+obbRCyOKzB+820ZZyMOXJZygZBHrH9b3xXR64X4kT3sPe9Nx8qQXbmcz6kFSMt4Nfk6Q==", + "version": "4.0.14", "dev": true, + "license": "MIT", "peer": true, "bin": { "marked": "bin/marked.js" @@ -4902,9 +4303,8 @@ }, "node_modules/marked-terminal": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.1.1.tgz", - "integrity": "sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "ansi-escapes": "^5.0.0", @@ -4923,9 +4323,8 @@ }, "node_modules/marked-terminal/node_modules/ansi-escapes": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "type-fest": "^1.0.2" @@ -4939,9 +4338,8 @@ }, "node_modules/marked-terminal/node_modules/type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "peer": true, "engines": { "node": ">=10" @@ -4997,22 +4395,10 @@ "url": "https://github.com/sindresorhus/mem?sponsor=1" } }, - "node_modules/mem/node_modules/mimic-fn": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, + "license": "MIT", "dependencies": { "@types/minimist": "^1.2.0", "camelcase-keys": "^6.2.2", @@ -5035,9 +4421,8 @@ }, "node_modules/meow/node_modules/type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -5070,8 +4455,7 @@ }, "node_modules/micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "license": "MIT", "dependencies": { "braces": "^3.0.2", "picomatch": "^2.3.1" @@ -5081,13 +4465,14 @@ } }, "node_modules/mime": { - "version": "1.6.0", + "version": "3.0.0", + "dev": true, "license": "MIT", "bin": { "mime": "cli.js" }, "engines": { - "node": ">=4" + "node": ">=10.0.0" } }, "node_modules/mime-db": { @@ -5108,18 +4493,20 @@ } }, "node_modules/mimic-fn": { - "version": "2.1.0", + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } @@ -5137,15 +4524,13 @@ }, "node_modules/minimist": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, + "license": "MIT", "dependencies": { "arrify": "^1.0.1", "is-plain-obj": "^1.1.0", @@ -5157,26 +4542,15 @@ }, "node_modules/minimist-options/node_modules/arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/mkdirp": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==", + "license": "MIT", "bin": { "mkdirp": "bin/cmd.js" }, @@ -5186,9 +4560,8 @@ }, "node_modules/mocha": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, + "license": "MIT", "dependencies": { "@ungap/promise-all-settled": "1.1.2", "ansi-colors": "4.1.1", @@ -5235,9 +4608,8 @@ }, "node_modules/mocha/node_modules/brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, + "license": "MIT", "dependencies": { "balanced-match": "^1.0.0" } @@ -5258,12 +4630,19 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/mocha/node_modules/has-flag": { - "version": "4.0.0", + "node_modules/mocha/node_modules/find-up": { + "version": "5.0.0", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/mocha/node_modules/is-fullwidth-code-point": { @@ -5274,11 +4653,24 @@ "node": ">=8" } }, + "node_modules/mocha/node_modules/locate-path": { + "version": "6.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, + "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" }, @@ -5291,6 +4683,34 @@ "dev": true, "license": "MIT" }, + "node_modules/mocha/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/mocha/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, "node_modules/mocha/node_modules/string-width": { "version": "4.2.3", "dev": true, @@ -5346,11 +4766,18 @@ "node": ">=10" } }, + "node_modules/mocha/node_modules/yargs-parser": { + "version": "20.2.4", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, "node_modules/modify-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } @@ -5358,6 +4785,7 @@ "node_modules/monocle-ts": { "version": "2.3.10", "license": "MIT", + "peer": true, "peerDependencies": { "fp-ts": "^2.5.0" } @@ -5368,9 +4796,8 @@ }, "node_modules/multi-semantic-release": { "version": "2.13.0", - "resolved": "https://registry.npmjs.org/multi-semantic-release/-/multi-semantic-release-2.13.0.tgz", - "integrity": "sha512-fqFtkurkamoYpSQuQQUJnXjFwnd6lkzCn7FVCVHYbZjGXNibVjtKEGkjK1kNPtdnYP8UaSYD+trL1OW14/Kv1w==", "dev": true, + "license": "0BSD", "dependencies": { "@manypkg/get-packages": "^1.1.3", "blork": "^9.3.0", @@ -5401,9 +4828,8 @@ }, "node_modules/multi-semantic-release/node_modules/@semantic-release/commit-analyzer": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz", - "integrity": "sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.0", "conventional-commits-filter": "^2.0.0", @@ -5422,9 +4848,8 @@ }, "node_modules/multi-semantic-release/node_modules/@semantic-release/github": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-7.2.3.tgz", - "integrity": "sha512-lWjIVDLal+EQBzy697ayUNN8MoBpp+jYIyW2luOdqn5XBH4d9bQGfTnjuLyzARZBHejqh932HVjiH/j4+R7VHw==", "dev": true, + "license": "MIT", "dependencies": { "@octokit/rest": "^18.0.0", "@semantic-release/error": "^2.2.0", @@ -5452,9 +4877,8 @@ }, "node_modules/multi-semantic-release/node_modules/@semantic-release/npm": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.1.3.tgz", - "integrity": "sha512-x52kQ/jR09WjuWdaTEHgQCvZYMOTx68WnS+TZ4fya5ZAJw4oRtJETtrvUw10FdfM28d/keInQdc66R1Gw5+OEQ==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/error": "^2.2.0", "aggregate-error": "^3.0.0", @@ -5479,9 +4903,8 @@ }, "node_modules/multi-semantic-release/node_modules/@semantic-release/npm/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -5502,18 +4925,16 @@ }, "node_modules/multi-semantic-release/node_modules/@semantic-release/npm/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/multi-semantic-release/node_modules/@semantic-release/release-notes-generator": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.3.tgz", - "integrity": "sha512-hMZyddr0u99OvM2SxVOIelHzly+PP3sYtJ8XOLHdMp8mrluN5/lpeTnIO27oeCYdupY/ndoGfvrqDjHqkSyhVg==", "dev": true, + "license": "MIT", "dependencies": { "conventional-changelog-angular": "^5.0.0", "conventional-changelog-writer": "^4.0.0", @@ -5535,27 +4956,24 @@ }, "node_modules/multi-semantic-release/node_modules/@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true, + "license": "MIT", "engines": { "node": ">= 6" } }, "node_modules/multi-semantic-release/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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/multi-semantic-release/node_modules/ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^2.0.1" }, @@ -5566,20 +4984,10 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/multi-semantic-release/node_modules/array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/multi-semantic-release/node_modules/chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" @@ -5591,11 +4999,26 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, + "node_modules/multi-semantic-release/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/multi-semantic-release/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/multi-semantic-release/node_modules/conventional-changelog-writer": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", "dev": true, + "license": "MIT", "dependencies": { "compare-func": "^2.0.0", "conventional-commits-filter": "^2.0.7", @@ -5617,33 +5040,29 @@ }, "node_modules/multi-semantic-release/node_modules/conventional-changelog-writer/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/multi-semantic-release/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 + "dev": true, + "license": "MIT" }, "node_modules/multi-semantic-release/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/multi-semantic-release/node_modules/execa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.0", "get-stream": "^5.0.0", @@ -5664,9 +5083,8 @@ }, "node_modules/multi-semantic-release/node_modules/execa/node_modules/get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, + "license": "MIT", "dependencies": { "pump": "^3.0.0" }, @@ -5679,9 +5097,8 @@ }, "node_modules/multi-semantic-release/node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -5694,9 +5111,8 @@ }, "node_modules/multi-semantic-release/node_modules/globby": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, + "license": "MIT", "dependencies": { "array-union": "^2.1.0", "dir-glob": "^3.0.1", @@ -5712,20 +5128,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multi-semantic-release/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/multi-semantic-release/node_modules/http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, + "license": "MIT", "dependencies": { "@tootallnate/once": "1", "agent-base": "6", @@ -5737,18 +5143,16 @@ }, "node_modules/multi-semantic-release/node_modules/human-signals": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=8.12.0" } }, "node_modules/multi-semantic-release/node_modules/import-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, + "license": "MIT", "dependencies": { "resolve-from": "^5.0.0" }, @@ -5758,18 +5162,16 @@ }, "node_modules/multi-semantic-release/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, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/multi-semantic-release/node_modules/marked": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", - "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", "dev": true, + "license": "MIT", "bin": { "marked": "bin/marked" }, @@ -5779,9 +5181,8 @@ }, "node_modules/multi-semantic-release/node_modules/marked-terminal": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-4.2.0.tgz", - "integrity": "sha512-DQfNRV9svZf0Dm9Cf5x5xaVJ1+XjxQW6XjFJ5HFkVyK52SDpj5PCBzS5X5r2w9nHr3mlB0T5201UMLue9fmhUw==", "dev": true, + "license": "MIT", "dependencies": { "ansi-escapes": "^4.3.1", "cardinal": "^2.1.1", @@ -5796,9 +5197,8 @@ }, "node_modules/multi-semantic-release/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", "bin": { "mime": "cli.js" }, @@ -5808,8 +5208,6 @@ }, "node_modules/multi-semantic-release/node_modules/npm": { "version": "7.24.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz", - "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -5883,77 +5281,82 @@ "write-file-atomic" ], "dev": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "packages/*" + ], "dependencies": { - "@isaacs/string-locale-compare": "*", - "@npmcli/arborist": "*", - "@npmcli/ci-detect": "*", - "@npmcli/config": "*", - "@npmcli/map-workspaces": "*", - "@npmcli/package-json": "*", - "@npmcli/run-script": "*", - "abbrev": "*", - "ansicolors": "*", - "ansistyles": "*", - "archy": "*", - "cacache": "*", - "chalk": "*", - "chownr": "*", - "cli-columns": "*", - "cli-table3": "*", - "columnify": "*", - "fastest-levenshtein": "*", - "glob": "*", - "graceful-fs": "*", - "hosted-git-info": "*", - "ini": "*", - "init-package-json": "*", - "is-cidr": "*", - "json-parse-even-better-errors": "*", - "libnpmaccess": "*", - "libnpmdiff": "*", - "libnpmexec": "*", - "libnpmfund": "*", - "libnpmhook": "*", - "libnpmorg": "*", - "libnpmpack": "*", - "libnpmpublish": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpmversion": "*", - "make-fetch-happen": "*", - "minipass": "*", - "minipass-pipeline": "*", - "mkdirp": "*", - "mkdirp-infer-owner": "*", - "ms": "*", - "node-gyp": "*", - "nopt": "*", - "npm-audit-report": "*", - "npm-install-checks": "*", - "npm-package-arg": "*", - "npm-pick-manifest": "*", - "npm-profile": "*", - "npm-registry-fetch": "*", - "npm-user-validate": "*", - "npmlog": "*", - "opener": "*", - "pacote": "*", - "parse-conflict-json": "*", - "qrcode-terminal": "*", - "read": "*", - "read-package-json": "*", - "read-package-json-fast": "*", - "readdir-scoped-modules": "*", - "rimraf": "*", - "semver": "*", - "ssri": "*", - "tar": "*", - "text-table": "*", - "tiny-relative-date": "*", - "treeverse": "*", - "validate-npm-package-name": "*", - "which": "*", - "write-file-atomic": "*" + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^2.9.0", + "@npmcli/ci-detect": "^1.2.0", + "@npmcli/config": "^2.3.0", + "@npmcli/map-workspaces": "^1.0.4", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.6", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "archy": "~1.0.0", + "cacache": "^15.3.0", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.6.0", + "columnify": "~1.5.4", + "fastest-levenshtein": "^1.0.12", + "glob": "^7.2.0", + "graceful-fs": "^4.2.8", + "hosted-git-info": "^4.0.2", + "ini": "^2.0.0", + "init-package-json": "^2.0.5", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^4.0.2", + "libnpmdiff": "^2.0.4", + "libnpmexec": "^2.0.1", + "libnpmfund": "^1.1.0", + "libnpmhook": "^6.0.2", + "libnpmorg": "^2.0.2", + "libnpmpack": "^2.0.1", + "libnpmpublish": "^4.0.1", + "libnpmsearch": "^3.1.1", + "libnpmteam": "^2.0.3", + "libnpmversion": "^1.2.1", + "make-fetch-happen": "^9.1.0", + "minipass": "^3.1.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^7.1.2", + "nopt": "^5.0.0", + "npm-audit-report": "^2.1.5", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.1", + "npm-profile": "^5.0.3", + "npm-registry-fetch": "^11.0.0", + "npm-user-validate": "^1.0.1", + "npmlog": "^5.0.1", + "opener": "^1.5.2", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^4.1.1", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^1.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^2.0.2", + "write-file-atomic": "^3.0.3" }, "bin": { "npm": "bin/npm-cli.js", @@ -8716,9 +8119,8 @@ }, "node_modules/multi-semantic-release/node_modules/readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, + "license": "MIT", "dependencies": { "inherits": "^2.0.3", "string_decoder": "^1.1.1", @@ -8728,11 +8130,18 @@ "node": ">= 6" } }, + "node_modules/multi-semantic-release/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, "node_modules/multi-semantic-release/node_modules/semantic-release": { "version": "17.4.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-17.4.7.tgz", - "integrity": "sha512-3Ghu8mKCJgCG3QzE5xphkYWM19lGE3XjFdOXQIKBM2PBpBvgFQ/lXv31oX0+fuN/UjNFO/dqhNs8ATLBhg6zBg==", "dev": true, + "license": "MIT", "dependencies": { "@semantic-release/commit-analyzer": "^8.0.0", "@semantic-release/error": "^2.2.0", @@ -8772,9 +8181,8 @@ }, "node_modules/multi-semantic-release/node_modules/semantic-release/node_modules/execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, + "license": "MIT", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.0", @@ -8795,18 +8203,16 @@ }, "node_modules/multi-semantic-release/node_modules/semantic-release/node_modules/human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=10.17.0" } }, "node_modules/multi-semantic-release/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, + "license": "MIT", "dependencies": { "emoji-regex": "^8.0.0", "is-fullwidth-code-point": "^3.0.0", @@ -8818,9 +8224,8 @@ }, "node_modules/multi-semantic-release/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, + "license": "MIT", "dependencies": { "ansi-regex": "^5.0.1" }, @@ -8830,9 +8235,8 @@ }, "node_modules/multi-semantic-release/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -8842,18 +8246,16 @@ }, "node_modules/multi-semantic-release/node_modules/through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "3" } }, "node_modules/multi-semantic-release/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "dependencies": { "cliui": "^7.0.2", "escalade": "^3.1.1", @@ -8869,9 +8271,8 @@ }, "node_modules/nanoid": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true, + "license": "MIT", "bin": { "nanoid": "bin/nanoid.cjs" }, @@ -8888,20 +8289,18 @@ }, "node_modules/neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/nerf-dart": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/newtype-ts": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/newtype-ts/-/newtype-ts-0.3.5.tgz", - "integrity": "sha512-v83UEQMlVR75yf1OUdoSFssjitxzjZlqBAjiGQ4WJaML8Jdc68LJ+BaSAXUmKY4bNzp7hygkKLYTsDi14PxI2g==", + "version": "0.3.4", + "license": "MIT", + "peer": true, "peerDependencies": { "fp-ts": "^2.0.0", "monocle-ts": "^2.0.0" @@ -8909,18 +8308,16 @@ }, "node_modules/node-emoji": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, + "license": "MIT", "dependencies": { "lodash": "^4.17.21" } }, "node_modules/node-fetch": { "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, + "license": "MIT", "dependencies": { "whatwg-url": "^5.0.0" }, @@ -8936,22 +8333,6 @@ } } }, - "node_modules/node-preload": { - "version": "0.2.1", - "dev": true, - "license": "MIT", - "dependencies": { - "process-on-spawn": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/node-releases": { - "version": "2.0.2", - "dev": true, - "license": "MIT" - }, "node_modules/nofilter": { "version": "3.1.0", "dev": true, @@ -8962,9 +8343,8 @@ }, "node_modules/normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^4.0.1", "is-core-module": "^2.5.0", @@ -8985,9 +8365,8 @@ }, "node_modules/normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true, + "license": "MIT", "engines": { "node": ">=10" }, @@ -8996,9 +8375,7 @@ } }, "node_modules/npm": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.10.0.tgz", - "integrity": "sha512-6oo65q9Quv9mRPGZJufmSH+C/UFdgelwzRXiglT/2mDB50zdy/lZK5dFY0TJ9fJ/8gHqnxcX1NM206KLjTBMlQ==", + "version": "8.7.0", "bundleDependencies": [ "@isaacs/string-locale-compare", "@npmcli/arborist", @@ -9072,25 +8449,31 @@ "write-file-atomic" ], "dev": true, + "license": "Artistic-2.0", + "workspaces": [ + "docs", + "smoke-tests", + "workspaces/*" + ], "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/arborist": "^5.0.4", "@npmcli/ci-detect": "^2.0.0", "@npmcli/config": "^4.1.0", "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/map-workspaces": "^2.0.2", "@npmcli/package-json": "^2.0.0", "@npmcli/run-script": "^3.0.1", "abbrev": "~1.1.1", "archy": "~1.0.0", - "cacache": "^16.0.7", + "cacache": "^16.0.4", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", + "cli-table3": "^0.6.1", "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", + "glob": "^7.2.0", "graceful-fs": "^4.2.10", "hosted-git-info": "^5.0.0", "ini": "^3.0.0", @@ -9108,7 +8491,7 @@ "libnpmsearch": "^5.0.2", "libnpmteam": "^4.0.2", "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.3", + "make-fetch-happen": "^10.1.2", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", @@ -9120,21 +8503,21 @@ "npm-install-checks": "^5.0.0", "npm-package-arg": "^9.0.2", "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", + "npm-profile": "^6.0.2", + "npm-registry-fetch": "^13.1.0", "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", + "npmlog": "^6.0.1", "opener": "^1.5.2", - "pacote": "^13.3.0", + "pacote": "^13.1.1", "parse-conflict-json": "^2.0.2", "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", "read": "~1.0.7", - "read-package-json": "^5.0.1", + "read-package-json": "^5.0.0", "read-package-json-fast": "^2.0.3", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.6", "ssri": "^9.0.0", "tar": "^6.1.11", "text-table": "~0.2.0", @@ -9163,16 +8546,6 @@ "node": ">=8" } }, - "node_modules/npm/node_modules/@colors/colors": { - "version": "1.5.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "optional": true, - "engines": { - "node": ">=0.1.90" - } - }, "node_modules/npm/node_modules/@gar/promisify": { "version": "1.1.3", "dev": true, @@ -9186,14 +8559,14 @@ "license": "ISC" }, "node_modules/npm/node_modules/@npmcli/arborist": { - "version": "5.2.0", + "version": "5.0.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/map-workspaces": "^2.0.0", "@npmcli/metavuln-calculator": "^3.0.1", "@npmcli/move-file": "^2.0.0", "@npmcli/name-from-folder": "^1.0.1", @@ -9201,7 +8574,7 @@ "@npmcli/package-json": "^2.0.0", "@npmcli/run-script": "^3.0.0", "bin-links": "^3.0.0", - "cacache": "^16.0.6", + "cacache": "^16.0.0", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", @@ -9212,7 +8585,7 @@ "npm-package-arg": "^9.0.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", + "npmlog": "^6.0.1", "pacote": "^13.0.5", "parse-conflict-json": "^2.0.1", "proc-log": "^2.0.0", @@ -9221,7 +8594,7 @@ "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.5", "ssri": "^9.0.0", "treeverse": "^2.0.0", "walk-up-path": "^1.0.0" @@ -9323,18 +8696,18 @@ } }, "node_modules/npm/node_modules/@npmcli/map-workspaces": { - "version": "2.0.3", + "version": "2.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", + "glob": "^7.2.0", "minimatch": "^5.0.1", "read-package-json-fast": "^2.0.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/@npmcli/metavuln-calculator": { @@ -9570,7 +8943,7 @@ } }, "node_modules/npm/node_modules/builtins": { - "version": "5.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", @@ -9579,7 +8952,7 @@ } }, "node_modules/npm/node_modules/cacache": { - "version": "16.0.7", + "version": "16.0.4", "dev": true, "inBundle": true, "license": "ISC", @@ -9588,7 +8961,7 @@ "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", - "glob": "^8.0.1", + "glob": "^7.2.0", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", @@ -9667,7 +9040,7 @@ } }, "node_modules/npm/node_modules/cli-table3": { - "version": "0.6.2", + "version": "0.6.1", "dev": true, "inBundle": true, "license": "MIT", @@ -9678,7 +9051,7 @@ "node": "10.* || >= 12.*" }, "optionalDependencies": { - "@colors/colors": "1.5.0" + "colors": "1.4.0" } }, "node_modules/npm/node_modules/clone": { @@ -9729,6 +9102,16 @@ "color-support": "bin.js" } }, + "node_modules/npm/node_modules/colors": { + "version": "1.4.0", + "dev": true, + "inBundle": true, + "license": "MIT", + "optional": true, + "engines": { + "node": ">=0.1.90" + } + }, "node_modules/npm/node_modules/columnify": { "version": "1.6.0", "dev": true, @@ -9916,7 +9299,7 @@ } }, "node_modules/npm/node_modules/glob": { - "version": "8.0.1", + "version": "7.2.0", "dev": true, "inBundle": true, "license": "ISC", @@ -9924,17 +9307,39 @@ "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=12" + "node": "*" }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, + "node_modules/npm/node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "inBundle": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/npm/node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "inBundle": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, "node_modules/npm/node_modules/graceful-fs": { "version": "4.2.10", "dev": true, @@ -10001,7 +9406,7 @@ } }, "node_modules/npm/node_modules/https-proxy-agent": { - "version": "5.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "MIT", @@ -10115,7 +9520,7 @@ } }, "node_modules/npm/node_modules/ip": { - "version": "1.1.8", + "version": "1.1.5", "dev": true, "inBundle": true, "license": "MIT" @@ -10142,7 +9547,7 @@ } }, "node_modules/npm/node_modules/is-core-module": { - "version": "2.9.0", + "version": "2.8.1", "dev": true, "inBundle": true, "license": "MIT", @@ -10199,7 +9604,7 @@ "license": "MIT" }, "node_modules/npm/node_modules/just-diff": { - "version": "5.0.2", + "version": "5.0.1", "dev": true, "inBundle": true, "license": "MIT" @@ -10245,7 +9650,7 @@ } }, "node_modules/npm/node_modules/libnpmexec": { - "version": "4.0.5", + "version": "4.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10256,7 +9661,7 @@ "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", + "npmlog": "^6.0.1", "pacote": "^13.0.5", "proc-log": "^2.0.0", "read": "^1.0.7", @@ -10320,7 +9725,7 @@ } }, "node_modules/npm/node_modules/libnpmpublish": { - "version": "6.0.4", + "version": "6.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10328,7 +9733,7 @@ "normalize-package-data": "^4.0.0", "npm-package-arg": "^9.0.1", "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", + "semver": "^7.1.3", "ssri": "^9.0.0" }, "engines": { @@ -10361,7 +9766,7 @@ } }, "node_modules/npm/node_modules/libnpmversion": { - "version": "3.0.4", + "version": "3.0.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10370,14 +9775,14 @@ "@npmcli/run-script": "^3.0.0", "json-parse-even-better-errors": "^2.3.1", "proc-log": "^2.0.0", - "semver": "^7.3.7" + "semver": "^7.3.5" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, "node_modules/npm/node_modules/lru-cache": { - "version": "7.9.0", + "version": "7.7.3", "dev": true, "inBundle": true, "license": "ISC", @@ -10386,7 +9791,7 @@ } }, "node_modules/npm/node_modules/make-fetch-happen": { - "version": "10.1.3", + "version": "10.1.2", "dev": true, "inBundle": true, "license": "ISC", @@ -10595,48 +10000,6 @@ "node": "^12.22 || ^14.13 || >=16" } }, - "node_modules/npm/node_modules/node-gyp/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/glob": { - "version": "7.2.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, - "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/node-gyp/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" - } - }, "node_modules/npm/node_modules/nopt": { "version": "5.0.0", "dev": true, @@ -10721,12 +10084,12 @@ } }, "node_modules/npm/node_modules/npm-packlist": { - "version": "5.0.3", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^8.0.1", + "glob": "^7.2.0", "ignore-walk": "^5.0.1", "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" @@ -10754,20 +10117,20 @@ } }, "node_modules/npm/node_modules/npm-profile": { - "version": "6.0.3", + "version": "6.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "npm-registry-fetch": "^13.0.1", + "npm-registry-fetch": "^13.0.0", "proc-log": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/npm-registry-fetch": { - "version": "13.1.1", + "version": "13.1.0", "dev": true, "inBundle": true, "license": "ISC", @@ -10791,18 +10154,18 @@ "license": "BSD-2-Clause" }, "node_modules/npm/node_modules/npmlog": { - "version": "6.0.2", + "version": "6.0.1", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", + "gauge": "^4.0.0", "set-blocking": "^2.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/once": { @@ -10839,7 +10202,7 @@ } }, "node_modules/npm/node_modules/pacote": { - "version": "13.3.0", + "version": "13.1.1", "dev": true, "inBundle": true, "license": "ISC", @@ -10981,18 +10344,18 @@ } }, "node_modules/npm/node_modules/read-package-json": { - "version": "5.0.1", + "version": "5.0.0", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "glob": "^8.0.1", + "glob": "^7.2.0", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", "npm-normalize-package-bin": "^1.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16" } }, "node_modules/npm/node_modules/read-package-json-fast": { @@ -11035,69 +10398,27 @@ } }, "node_modules/npm/node_modules/retry": { - "version": "0.12.0", - "dev": true, - "inBundle": true, - "license": "MIT", - "engines": { - "node": ">= 4" - } - }, - "node_modules/npm/node_modules/rimraf": { - "version": "3.0.2", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "inBundle": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/npm/node_modules/rimraf/node_modules/glob": { - "version": "7.2.0", + "version": "0.12.0", "dev": true, "inBundle": true, - "license": "ISC", - "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": "*" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 4" } }, - "node_modules/npm/node_modules/rimraf/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/npm/node_modules/rimraf": { + "version": "3.0.2", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "glob": "^7.1.3" }, - "engines": { - "node": "*" + "bin": { + "rimraf": "bin.js" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/npm/node_modules/safe-buffer": { @@ -11128,30 +10449,18 @@ "optional": true }, "node_modules/npm/node_modules/semver": { - "version": "7.3.7", + "version": "7.3.6", "dev": true, "inBundle": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" + "lru-cache": "^7.4.0" }, "bin": { "semver": "bin/semver.js" }, "engines": { - "node": ">=10" - } - }, - "node_modules/npm/node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "dev": true, - "inBundle": true, - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": "^10.0.0 || ^12.0.0 || ^14.0.0 || >=16.0.0" } }, "node_modules/npm/node_modules/set-blocking": { @@ -11191,14 +10500,14 @@ } }, "node_modules/npm/node_modules/socks-proxy-agent": { - "version": "6.2.0", + "version": "6.1.1", "dev": true, "inBundle": true, "license": "MIT", "dependencies": { "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "debug": "^4.3.1", + "socks": "^2.6.1" }, "engines": { "node": ">= 10" @@ -11443,229 +10752,11 @@ "inBundle": true, "license": "ISC" }, - "node_modules/nyc": { - "version": "15.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "bin": { - "nyc": "bin/nyc.js" - }, - "engines": { - "node": ">=8.9" - } - }, - "node_modules/nyc/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/nyc/node_modules/cliui": { - "version": "6.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "node_modules/nyc/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/nyc/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/nyc/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/p-map": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/y18n": { - "version": "4.0.3", - "dev": true, - "license": "ISC" - }, - "node_modules/nyc/node_modules/yargs": { - "version": "15.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/nyc/node_modules/yargs-parser": { - "version": "18.1.3", - "dev": true, - "license": "ISC", - "dependencies": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - }, - "engines": { - "node": ">=6" - } - }, "node_modules/object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true, "funding": { "url": "https://github.com/sponsors/ljharb" } @@ -11702,10 +10793,18 @@ "url": "https://github.com/sponsors/sindresorhus" } }, + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, "node_modules/openapi-types": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-11.0.1.tgz", - "integrity": "sha512-P2pGRlHFXgP8z6vrp5P/MtftOXYtlIY1A+V0VmioOoo85NN6RSPgGbEprRAUNMIsbfRjnCPdx/r8mi8QRR7grQ==" + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.0.2.tgz", + "integrity": "sha512-GuTo7FyZjOIWVhIhQSWJVaws6A82sWIGyQogxxYBYKZ0NBdyP2CYSIgOwFfSB+UVoPExk/YzFpyYitHS8KVZtA==" }, "node_modules/os-shim": { "version": "0.1.3", @@ -11724,9 +10823,8 @@ }, "node_modules/p-each-series": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" }, @@ -11750,9 +10848,8 @@ }, "node_modules/p-filter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, + "license": "MIT", "dependencies": { "p-map": "^2.0.0" }, @@ -11762,48 +10859,43 @@ }, "node_modules/p-filter/node_modules/p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/p-is-promise": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/p-limit": { - "version": "3.1.0", + "version": "2.3.0", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/p-locate": { - "version": "5.0.0", + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, "node_modules/p-map": { @@ -11822,20 +10914,18 @@ }, "node_modules/p-reduce": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "4.6.1", "dev": true, + "license": "MIT", "dependencies": { - "@types/retry": "0.12.0", + "@types/retry": "^0.12.0", "retry": "^0.13.1" }, "engines": { @@ -11856,30 +10946,15 @@ "node_modules/p-try": { "version": "2.2.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/package-hash": { - "version": "4.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - }, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, "node_modules/parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, + "license": "MIT", "dependencies": { "callsites": "^3.0.0" }, @@ -11889,18 +10964,16 @@ }, "node_modules/parent-module/node_modules/callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } }, "node_modules/parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, + "license": "MIT", "dependencies": { "@babel/code-frame": "^7.0.0", "error-ex": "^1.3.1", @@ -11942,8 +11015,7 @@ }, "node_modules/path-browserify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + "license": "MIT" }, "node_modules/path-exists": { "version": "4.0.0", @@ -11971,9 +11043,8 @@ }, "node_modules/path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/path-to-regexp": { "version": "0.1.7", @@ -11995,11 +11066,6 @@ "node": "*" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/picomatch": { "version": "2.3.1", "license": "MIT", @@ -12024,9 +11090,8 @@ }, "node_modules/pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true, + "license": "MIT", "engines": { "node": ">=6" } @@ -12122,65 +11187,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/find-up": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/locate-path": { - "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/pkg-dir/node_modules/p-limit": { - "version": "2.3.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/pkg-dir/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/plur": { "version": "5.1.0", "dev": true, @@ -12216,6 +11222,15 @@ "which": "^1.2.9" } }, + "node_modules/pre-commit/node_modules/lru-cache": { + "version": "4.1.5", + "dev": true, + "license": "ISC", + "dependencies": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "node_modules/pre-commit/node_modules/shebang-command": { "version": "1.2.0", "dev": true, @@ -12246,6 +11261,11 @@ "which": "bin/which" } }, + "node_modules/pre-commit/node_modules/yallist": { + "version": "2.1.2", + "dev": true, + "license": "ISC" + }, "node_modules/prettier": { "version": "2.5.1", "dev": true, @@ -12273,24 +11293,13 @@ }, "node_modules/process-nextick-args": { "version": "2.0.1", - "license": "MIT" - }, - "node_modules/process-on-spawn": { - "version": "1.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "fromentries": "^1.2.0" - }, - "engines": { - "node": ">=8" - } + "license": "MIT" }, "node_modules/promise-events": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/promise-events/-/promise-events-0.2.4.tgz", - "integrity": "sha512-GCM6DmJcSCC8XboZIzYJAlADwkIS1P54XFUJQYhB7dpE7rtXPzPrT13dsV4Qm0FMCKptwMTyF8ZCir803RfKzA==", "dev": true, + "license": "MIT", "engines": { "node": ">=8.0.0" } @@ -12313,9 +11322,8 @@ }, "node_modules/pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, + "license": "MIT", "dependencies": { "end-of-stream": "^1.1.0", "once": "^1.3.1" @@ -12323,9 +11331,8 @@ }, "node_modules/q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.6.0", "teleport": ">=0.2.0" @@ -12333,8 +11340,8 @@ }, "node_modules/qs": { "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { "side-channel": "^1.0.4" }, @@ -12365,9 +11372,8 @@ }, "node_modules/quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } @@ -12389,9 +11395,8 @@ }, "node_modules/raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.2", "http-errors": "2.0.0", @@ -12404,9 +11409,8 @@ }, "node_modules/rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, + "license": "(BSD-2-Clause OR MIT OR Apache-2.0)", "dependencies": { "deep-extend": "^0.6.0", "ini": "~1.3.0", @@ -12419,18 +11423,16 @@ }, "node_modules/rc/node_modules/strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10.0" } }, "node_modules/read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, + "license": "MIT", "dependencies": { "@types/normalize-package-data": "^2.4.0", "normalize-package-data": "^2.5.0", @@ -12443,9 +11445,8 @@ }, "node_modules/read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^4.1.0", "read-pkg": "^5.2.0", @@ -12458,78 +11459,23 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-pkg-up/node_modules/find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/read-pkg-up/node_modules/p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "dependencies": { - "p-try": "^2.0.0" - }, - "engines": { - "node": ">=6" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/read-pkg-up/node_modules/p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "dependencies": { - "p-limit": "^2.2.0" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/read-pkg-up/node_modules/type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-pkg/node_modules/hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/read-pkg/node_modules/normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, + "license": "BSD-2-Clause", "dependencies": { "hosted-git-info": "^2.1.4", "resolve": "^1.10.0", @@ -12539,27 +11485,24 @@ }, "node_modules/read-pkg/node_modules/semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver" } }, "node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, "node_modules/read-yaml-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.5", "js-yaml": "^3.6.1", @@ -12572,18 +11515,16 @@ }, "node_modules/read-yaml-file/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/read-yaml-file/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -12594,15 +11535,15 @@ }, "node_modules/read-yaml-file/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/readable-stream": { "version": "2.3.7", + "dev": true, "license": "MIT", "dependencies": { "core-util-is": "~1.0.0", @@ -12614,6 +11555,11 @@ "util-deprecate": "~1.0.1" } }, + "node_modules/readable-stream/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, "node_modules/readdirp": { "version": "3.6.0", "dev": true, @@ -12627,9 +11573,8 @@ }, "node_modules/redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^4.0.0", "strip-indent": "^3.0.0" @@ -12640,24 +11585,21 @@ }, "node_modules/redeyed": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", "dev": true, + "license": "MIT", "dependencies": { "esprima": "~4.0.0" } }, "node_modules/regenerator-runtime": { "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/registry-auth-token": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dev": true, + "license": "MIT", "dependencies": { "rc": "^1.2.8" }, @@ -12665,22 +11607,10 @@ "node": ">=6.0.0" } }, - "node_modules/release-zalgo": { - "version": "1.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "es6-error": "^4.0.1" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/require-directory": { "version": "2.1.1", @@ -12690,16 +11620,10 @@ "node": ">=0.10.0" } }, - "node_modules/require-main-filename": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/resolve": { "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, + "license": "MIT", "dependencies": { "is-core-module": "^2.8.1", "path-parse": "^1.0.7", @@ -12723,7 +11647,7 @@ "node": ">=8" } }, - "node_modules/resolve-from": { + "node_modules/resolve-cwd/node_modules/resolve-from": { "version": "5.0.0", "dev": true, "license": "MIT", @@ -12731,6 +11655,14 @@ "node": ">=8" } }, + "node_modules/resolve-from": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/restore-cursor": { "version": "3.1.0", "dev": true, @@ -12745,9 +11677,8 @@ }, "node_modules/retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 4" } @@ -12809,7 +11740,21 @@ } }, "node_modules/safe-buffer": { - "version": "5.1.2", + "version": "5.2.1", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], "license": "MIT" }, "node_modules/safer-buffer": { @@ -12818,9 +11763,8 @@ }, "node_modules/semantic-release": { "version": "19.0.2", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.2.tgz", - "integrity": "sha512-7tPonjZxukKECmClhsfyMKDt0GR38feIC2HxgyYaBi+9tDySBLjK/zYDLhh+m6yjnHIJa9eBTKYE7k63ZQcYbw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "@semantic-release/commit-analyzer": "^9.0.2", @@ -12861,9 +11805,8 @@ }, "node_modules/semantic-release/node_modules/@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=14.17" @@ -12871,9 +11814,8 @@ }, "node_modules/semantic-release/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, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -12881,16 +11823,14 @@ }, "node_modules/semantic-release/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, + "license": "MIT", "peer": true }, "node_modules/semantic-release/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=0.8.0" @@ -12898,9 +11838,8 @@ }, "node_modules/semantic-release/node_modules/figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "escape-string-regexp": "^1.0.5" @@ -12914,9 +11853,17 @@ }, "node_modules/semantic-release/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, + "license": "MIT", + "peer": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/semantic-release/node_modules/resolve-from": { + "version": "5.0.0", + "dev": true, + "license": "MIT", "peer": true, "engines": { "node": ">=8" @@ -12924,9 +11871,8 @@ }, "node_modules/semantic-release/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, + "license": "MIT", "peer": true, "dependencies": { "emoji-regex": "^8.0.0", @@ -12939,9 +11885,8 @@ }, "node_modules/semantic-release/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, + "license": "MIT", "peer": true, "dependencies": { "ansi-regex": "^5.0.1" @@ -12952,9 +11897,8 @@ }, "node_modules/semantic-release/node_modules/yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, + "license": "MIT", "peer": true, "dependencies": { "cliui": "^7.0.2", @@ -12971,8 +11915,8 @@ }, "node_modules/semver": { "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, + "license": "ISC", "dependencies": { "lru-cache": "^6.0.0" }, @@ -12985,9 +11929,8 @@ }, "node_modules/semver-diff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, + "license": "MIT", "dependencies": { "semver": "^6.3.0" }, @@ -12997,39 +11940,23 @@ }, "node_modules/semver-diff/node_modules/semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, + "license": "ISC", "bin": { "semver": "bin/semver.js" } }, "node_modules/semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", + "version": "3.1.3", "dev": true, + "license": "MIT", "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/semver/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/semver/node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, "node_modules/send": { "version": "0.17.2", "license": "MIT", @@ -13077,6 +12004,16 @@ "node": ">= 0.6" } }, + "node_modules/send/node_modules/mime": { + "version": "1.6.0", + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, "node_modules/send/node_modules/ms": { "version": "2.1.3", "license": "MIT" @@ -13090,9 +12027,8 @@ }, "node_modules/serialize-error": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, + "license": "MIT", "dependencies": { "type-fest": "^0.13.1" }, @@ -13105,9 +12041,8 @@ }, "node_modules/serialize-error/node_modules/type-fest": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13136,11 +12071,6 @@ "node": ">= 0.8.0" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/setprototypeof": { "version": "1.2.0", "license": "ISC" @@ -13166,6 +12096,7 @@ }, "node_modules/side-channel": { "version": "1.0.4", + "dev": true, "license": "MIT", "dependencies": { "call-bind": "^1.0.0", @@ -13183,9 +12114,8 @@ }, "node_modules/signale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, + "license": "MIT", "dependencies": { "chalk": "^2.3.2", "figures": "^2.0.0", @@ -13197,9 +12127,8 @@ }, "node_modules/signale/node_modules/ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, + "license": "MIT", "dependencies": { "color-convert": "^1.9.0" }, @@ -13209,9 +12138,8 @@ }, "node_modules/signale/node_modules/chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, + "license": "MIT", "dependencies": { "ansi-styles": "^3.2.1", "escape-string-regexp": "^1.0.5", @@ -13221,35 +12149,18 @@ "node": ">=4" } }, - "node_modules/signale/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/signale/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "node_modules/signale/node_modules/escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, + "license": "MIT", "engines": { "node": ">=0.8.0" } }, "node_modules/signale/node_modules/figures": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, + "license": "MIT", "dependencies": { "escape-string-regexp": "^1.0.5" }, @@ -13259,9 +12170,8 @@ }, "node_modules/signale/node_modules/find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, + "license": "MIT", "dependencies": { "locate-path": "^2.0.0" }, @@ -13269,11 +12179,18 @@ "node": ">=4" } }, + "node_modules/signale/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, "node_modules/signale/node_modules/load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, + "license": "MIT", "dependencies": { "graceful-fs": "^4.1.2", "parse-json": "^4.0.0", @@ -13286,9 +12203,8 @@ }, "node_modules/signale/node_modules/locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, + "license": "MIT", "dependencies": { "p-locate": "^2.0.0", "path-exists": "^3.0.0" @@ -13299,9 +12215,8 @@ }, "node_modules/signale/node_modules/p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, + "license": "MIT", "dependencies": { "p-try": "^1.0.0" }, @@ -13311,9 +12226,8 @@ }, "node_modules/signale/node_modules/p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, + "license": "MIT", "dependencies": { "p-limit": "^1.1.0" }, @@ -13323,18 +12237,16 @@ }, "node_modules/signale/node_modules/p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/signale/node_modules/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, + "license": "MIT", "dependencies": { "error-ex": "^1.3.1", "json-parse-better-errors": "^1.0.1" @@ -13345,27 +12257,24 @@ }, "node_modules/signale/node_modules/path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/signale/node_modules/pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/signale/node_modules/pkg-conf": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", "dev": true, + "license": "MIT", "dependencies": { "find-up": "^2.0.0", "load-json-file": "^4.0.0" @@ -13376,18 +12285,16 @@ }, "node_modules/signale/node_modules/strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, "node_modules/signale/node_modules/supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^3.0.0" }, @@ -13418,19 +12325,10 @@ "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/source-map": { - "version": "0.5.7", - "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/spawn-error-forwarder": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/spawn-sync": { "version": "1.0.15", @@ -13442,27 +12340,10 @@ "os-shim": "^0.1.2" } }, - "node_modules/spawn-wrap": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - }, - "engines": { - "node": ">=8" - } - }, "node_modules/spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" @@ -13470,15 +12351,13 @@ }, "node_modules/spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", - "dev": true + "dev": true, + "license": "CC-BY-3.0" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, + "license": "MIT", "dependencies": { "spdx-exceptions": "^2.1.0", "spdx-license-ids": "^3.0.0" @@ -13486,15 +12365,13 @@ }, "node_modules/spdx-license-ids": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", - "dev": true + "dev": true, + "license": "CC0-1.0" }, "node_modules/split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, + "license": "MIT", "dependencies": { "through": "2" }, @@ -13504,9 +12381,8 @@ }, "node_modules/split2": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", "dev": true, + "license": "ISC", "dependencies": { "through2": "~2.0.0" } @@ -13544,18 +12420,16 @@ }, "node_modules/stream-buffers": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", "dev": true, + "license": "Unlicense", "engines": { "node": ">= 0.10.0" } }, "node_modules/stream-combiner2": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, + "license": "MIT", "dependencies": { "duplexer2": "~0.1.0", "readable-stream": "^2.0.2" @@ -13563,11 +12437,17 @@ }, "node_modules/string_decoder": { "version": "1.1.1", + "dev": true, "license": "MIT", "dependencies": { "safe-buffer": "~5.1.0" } }, + "node_modules/string_decoder/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, "node_modules/string-argv": { "version": "0.3.1", "dev": true, @@ -13606,14 +12486,6 @@ "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "node_modules/strip-bom": { - "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } - }, "node_modules/strip-final-newline": { "version": "2.0.0", "dev": true, @@ -13624,9 +12496,8 @@ }, "node_modules/strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, + "license": "MIT", "dependencies": { "min-indent": "^1.0.0" }, @@ -13646,36 +12517,57 @@ } }, "node_modules/superagent": { - "version": "3.8.3", - "license": "MIT", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", + "dev": true, "dependencies": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" }, "engines": { - "node": ">= 4.0" + "node": ">=6.4.0 <13 || >=14" } }, - "node_modules/superagent/node_modules/debug": { - "version": "3.2.7", - "license": "MIT", + "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/superagent/node_modules/readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "dependencies": { - "ms": "^2.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, "node_modules/supertap": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", "dev": true, + "license": "MIT", "dependencies": { "indent-string": "^5.0.0", "js-yaml": "^3.14.1", @@ -13688,18 +12580,16 @@ }, "node_modules/supertap/node_modules/argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, + "license": "MIT", "dependencies": { "sprintf-js": "~1.0.2" } }, "node_modules/supertap/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, + "license": "MIT", "engines": { "node": ">=12" }, @@ -13709,9 +12599,8 @@ }, "node_modules/supertap/node_modules/js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, + "license": "MIT", "dependencies": { "argparse": "^1.0.7", "esprima": "^4.0.0" @@ -13721,75 +12610,22 @@ } }, "node_modules/supertest": { - "version": "6.1.6", - "license": "MIT", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz", + "integrity": "sha512-3GSdMYTMItzsSYjnIcljxMVZKPW1J9kYHZY+7yLfD0wpPwww97GeImZC1oOk0S5+wYl2niJwuFusBJqwLqYM3g==", + "dev": true, "dependencies": { "methods": "^1.1.2", - "superagent": "^6.1.0" + "superagent": "^7.1.3" }, "engines": { "node": ">=6.0.0" } }, - "node_modules/supertest/node_modules/form-data": { - "version": "3.0.1", - "license": "MIT", - "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/supertest/node_modules/mime": { - "version": "2.6.0", - "license": "MIT", - "bin": { - "mime": "cli.js" - }, - "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/supertest/node_modules/readable-stream": { - "version": "3.6.0", - "license": "MIT", - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/supertest/node_modules/superagent": { - "version": "6.1.0", - "license": "MIT", - "dependencies": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - }, - "engines": { - "node": ">= 7.0.0" - } - }, "node_modules/supports-hyperlinks": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" @@ -13798,20 +12634,10 @@ "node": ">=8" } }, - "node_modules/supports-hyperlinks/node_modules/has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/supports-hyperlinks/node_modules/supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, + "license": "MIT", "dependencies": { "has-flag": "^4.0.0" }, @@ -13821,9 +12647,8 @@ }, "node_modules/supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.4" }, @@ -13841,9 +12666,8 @@ }, "node_modules/tempy": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "dev": true, + "license": "MIT", "dependencies": { "del": "^6.0.0", "is-stream": "^2.0.0", @@ -13860,9 +12684,8 @@ }, "node_modules/tempy/node_modules/type-fest": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=10" }, @@ -13885,9 +12708,8 @@ }, "node_modules/text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.10" } @@ -13899,9 +12721,8 @@ }, "node_modules/through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, + "license": "MIT", "dependencies": { "readable-stream": "~2.3.6", "xtend": "~4.0.1" @@ -13915,14 +12736,6 @@ "node": ">=4" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=4" - } - }, "node_modules/to-regex-range": { "version": "5.0.1", "license": "MIT", @@ -13943,38 +12756,34 @@ }, "node_modules/tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/traverse": { "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true, + "license": "MIT", "engines": { "node": ">=8" } }, "node_modules/ts-morph": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-15.0.0.tgz", - "integrity": "sha512-OZkg0TI1h6FVe8DZXyBo6p7NfCN9EZZkkA736f243KzQ3cypYWtaLc9eyNn/JH/fWYfQ4d6wIA4oM0vElRTGcQ==", + "version": "14.0.0", + "license": "MIT", "dependencies": { - "@ts-morph/common": "~0.15.0", + "@ts-morph/common": "~0.13.0", "code-block-writer": "^11.0.0" } }, "node_modules/ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "dependencies": { "@cspotcode/source-map-support": "^0.8.0", @@ -14027,35 +12836,35 @@ "license": "0BSD" }, "node_modules/turbo": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.3.1.tgz", - "integrity": "sha512-DXckoGKlZgvTn/PrHpBI/57aeXR7tfyPf2dK+4LmBczt24ELA3o6eYHeA7KzfpSYhB2LE9qveYFQ6mJ1OzGjjg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.4.3.tgz", + "integrity": "sha512-g08eD2HdO/XW5xGHnXr0cXGiWnrgFBI6pN/3u0EOTeerKAsWIZU0ZrpSnl3whRtImeBB/gQu7Eu1waM2VOxzgw==", "dev": true, "hasInstallScript": true, "bin": { "turbo": "bin/turbo" }, "optionalDependencies": { - "turbo-android-arm64": "1.3.1", - "turbo-darwin-64": "1.3.1", - "turbo-darwin-arm64": "1.3.1", - "turbo-freebsd-64": "1.3.1", - "turbo-freebsd-arm64": "1.3.1", - "turbo-linux-32": "1.3.1", - "turbo-linux-64": "1.3.1", - "turbo-linux-arm": "1.3.1", - "turbo-linux-arm64": "1.3.1", - "turbo-linux-mips64le": "1.3.1", - "turbo-linux-ppc64le": "1.3.1", - "turbo-windows-32": "1.3.1", - "turbo-windows-64": "1.3.1", - "turbo-windows-arm64": "1.3.1" + "turbo-android-arm64": "1.4.3", + "turbo-darwin-64": "1.4.3", + "turbo-darwin-arm64": "1.4.3", + "turbo-freebsd-64": "1.4.3", + "turbo-freebsd-arm64": "1.4.3", + "turbo-linux-32": "1.4.3", + "turbo-linux-64": "1.4.3", + "turbo-linux-arm": "1.4.3", + "turbo-linux-arm64": "1.4.3", + "turbo-linux-mips64le": "1.4.3", + "turbo-linux-ppc64le": "1.4.3", + "turbo-windows-32": "1.4.3", + "turbo-windows-64": "1.4.3", + "turbo-windows-arm64": "1.4.3" } }, "node_modules/turbo-android-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-android-arm64/-/turbo-android-arm64-1.3.1.tgz", - "integrity": "sha512-JcnZh9tLbZDpKaXaao/s/k4qXt3TbNEc1xEYYXurVWnqiMueGeS7QAtThVB85ZSqzj7djk+ngSrZabPy5RG25Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-android-arm64/-/turbo-android-arm64-1.4.3.tgz", + "integrity": "sha512-ZUvdoEHJkTkOFOO9PKWYrdONDBVqkNsvwEMufTVf07RXgqmbXDPkznzT4hcQm6xXyqWqJdjgSAMdlm+2nNE1Og==", "cpu": [ "arm64" ], @@ -14066,9 +12875,9 @@ ] }, "node_modules/turbo-darwin-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.3.1.tgz", - "integrity": "sha512-TIGDradVFoGck86VIuM38KaDeNxdKaP2ti93UpQeFw26ZhPIeTAa6wUgnz4DQP6bjIvQmXlYJ16ETZb4tFYygg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.4.3.tgz", + "integrity": "sha512-gapoVm5qbu2TJS4lJ6fM3o2eAkLyXSxHihw/4NRAYmwHCH3at1/cIAnRcctB/HLL3ZaB/p3HKb8mnI7k6xNHOw==", "cpu": [ "x64" ], @@ -14079,9 +12888,9 @@ ] }, "node_modules/turbo-darwin-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.3.1.tgz", - "integrity": "sha512-aLBq8KiMMmop7uKBkvDt/y+eER2UzxZyUzh1KWcZ7DZB5tFZnknEUyf2qggY2vd2WcDVfQ1EUjZ0MFxhhVaVzA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.4.3.tgz", + "integrity": "sha512-XUe6FTsHamEH7FfNslYYO04yecAaguhZuwW4kE9B/BAP8MUYsmVqONauLPyE/YqM6pf2K0xwVe+RlEGf53CWbg==", "cpu": [ "arm64" ], @@ -14092,9 +12901,9 @@ ] }, "node_modules/turbo-freebsd-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.3.1.tgz", - "integrity": "sha512-BOr/ifmxjlBeuDkDQLUJtzqzXQ2zPHHcI14U9Ys+z4Mza1uzQn/oSJqQvU5RuyRBVai7noMrpPS7QuKtDz0Cyg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.4.3.tgz", + "integrity": "sha512-1CAjXmDClgMXdWZXreUfAbGBB2WB9TZHfJIdsgnDqt4fIcFGChknzYqc+Fj3tGHAczMpinGjBbWIzFuxOq/ofQ==", "cpu": [ "x64" ], @@ -14105,9 +12914,9 @@ ] }, "node_modules/turbo-freebsd-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.3.1.tgz", - "integrity": "sha512-bHPZjK4xnGLz6/oxl5XmWhdYOdtBMSadrGhptWSZ0wBGNn/gQzDTeZAkQeqhh25AD0eM1hzDe8QUz8GlS43lrA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.4.3.tgz", + "integrity": "sha512-j5C7j/vwabPKpr5d6YlLgHGHBZCOcXj3HdkBshDHTQ0wghH0NuCUUaesYxI3wva/4/Ec0dhIrb20Laa/HMxXLA==", "cpu": [ "arm64" ], @@ -14118,9 +12927,9 @@ ] }, "node_modules/turbo-linux-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.3.1.tgz", - "integrity": "sha512-c5okimusfvivu9wS8MKSr+rXpQAV+M4TyR9JX+spIK8B1I7AjfECAqiK2D5WFWO1bQ33bUAuxXOEpUuLpgEm+g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.4.3.tgz", + "integrity": "sha512-vnc+StXIoQEnxIU43j7rEz/J+v+RV4dbUdUolBq0k9gkUV8KMCcqPkIa753K47E2KLNGKXMaYDI6AHQX1GAQZg==", "cpu": [ "ia32" ], @@ -14131,9 +12940,9 @@ ] }, "node_modules/turbo-linux-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.3.1.tgz", - "integrity": "sha512-O0pNX+N5gbmRcyZT+jsCPUNCN3DpIZHqNN35j7MT5nr0IkZa83CGbZnrEc+7Qws//jFJ26EngqD/JyRB2E8nwQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.4.3.tgz", + "integrity": "sha512-KAUeIa8Ejt6BLrBGbVurlrjDxqh62tu75D4cqKqKfzWspcbEtmdqlV6qthXfm8SlzGSNuQXX0+qXEWds2FIZXg==", "cpu": [ "x64" ], @@ -14144,9 +12953,9 @@ ] }, "node_modules/turbo-linux-arm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.3.1.tgz", - "integrity": "sha512-f+r6JIwv/7ylxxJtgVi8cVw+6oNoD/r1IMTU6ejH8bfyMZZko4kkNwH9VYribQ44KDkJEgzdltnzFG5f6Hz10g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.4.3.tgz", + "integrity": "sha512-zZNoHUK5ioFyxAngh8tHe763Dzb22ne3LJkaZn0ExkFHJtWClWv536lPcDuQPpIH9W9iz5OwPKtN32DNpNwk8A==", "cpu": [ "arm" ], @@ -14157,9 +12966,9 @@ ] }, "node_modules/turbo-linux-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.3.1.tgz", - "integrity": "sha512-D6+1MeS/x+/VCCooHPU4NIpB8qI/eW70eMRA79bqTPaxxluP0g2CaxXgucco05P51YtNsSxeVcH7X76iadON6Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.4.3.tgz", + "integrity": "sha512-rzB7w+RHCQkKr8aDxxozv/IzdN976CYyBiRocSf9QGU73uyAg8pCo3i0MiENSRjDC+tUbdbu2lEUwGXf9ziB9Q==", "cpu": [ "arm64" ], @@ -14170,11 +12979,11 @@ ] }, "node_modules/turbo-linux-mips64le": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.3.1.tgz", - "integrity": "sha512-yL64jgwVCziOpBcdpMxIsczkgwwOvmaqKObFKWyCNlk/LOl5NKODLwXEaryLaALtpwUAoS4ltMSI64gKqmLrOA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.4.3.tgz", + "integrity": "sha512-Ztr1BM5NiUsHWjB7zpkP2RpRDA/fjbLaCbkyfyGlLmVkrSkh05NFBD03IWs2LSLy/wb6vRpL3MQ4FKcb97Tn8w==", "cpu": [ - "mips64el" + "mipsel" ], "dev": true, "optional": true, @@ -14183,9 +12992,9 @@ ] }, "node_modules/turbo-linux-ppc64le": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.3.1.tgz", - "integrity": "sha512-tjnM+8RosykS1lBpOPLDXGOz/Po2h796ty17uBd7IFslWPOI16a/akFOFoLH8PCiGGJMe3CYgRhEKn4sPWNxFA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.4.3.tgz", + "integrity": "sha512-tJaFJWxwfy/iLd69VHZj6JcXy9hO8LQ+ZUOna/p/wiy5WrFVgEYlD+4gfECfRZ+52EIelMgXl97vACaN1WMhLw==", "cpu": [ "ppc64" ], @@ -14196,9 +13005,9 @@ ] }, "node_modules/turbo-windows-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.3.1.tgz", - "integrity": "sha512-Snnv+TVigulqwK6guHKndMlrLw88NXj8BtHRGrEksPR0QkyuHlwLf+tHYB4HmvpUl4W9lnXQf4hsljWP64BEdw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.4.3.tgz", + "integrity": "sha512-w9LyYd+DW3PYFXu9vQiie5lfdqmVIKLV0h181C49hempkIXfgQAosXfaugYWDwBc0GEBoBIQB0vGQKE7gt5nzA==", "cpu": [ "ia32" ], @@ -14209,9 +13018,9 @@ ] }, "node_modules/turbo-windows-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.3.1.tgz", - "integrity": "sha512-gLeohHG07yIhON1Pp0YNE00i/yzip2GFhkA6HdJaK95uE5bKULpqxuO414hOS/WzGwrGVXBKCImfe24XXh5T+Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.4.3.tgz", + "integrity": "sha512-qPCqemxxOrXyqqig3fVQozRkOwo5oJSsQ3FTZE5YlNu2NwwWvY1mC0X4WTZIDsbj4oHqr0riqC7RGKbjQm1IIQ==", "cpu": [ "x64" ], @@ -14222,9 +13031,9 @@ ] }, "node_modules/turbo-windows-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.3.1.tgz", - "integrity": "sha512-0MWcHLvYgs/qdcoTFZ55nu8HhrpeiwXEMw9cbNfgqTlzy3OsrAsovYEJFyQ8KSxeploiD+QJlCdvhxx+5C0tlA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.4.3.tgz", + "integrity": "sha512-djnOOBjw33AnUx2SR6TMOpDr3nKLnVD+HcZvnQz70HyE331AKWjBoEE4rtUOteLAfViWAp3afbiljFSOnbU00Q==", "cpu": [ "arm64" ], @@ -14269,18 +13078,10 @@ "dev": true, "license": "MIT" }, - "node_modules/typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "license": "MIT", - "dependencies": { - "is-typedarray": "^1.0.0" - } - }, "node_modules/typescript": { "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==", + "dev": true, + "license": "Apache-2.0", "bin": { "tsc": "bin/tsc", "tsserver": "bin/tsserver" @@ -14290,10 +13091,9 @@ } }, "node_modules/uglify-js": { - "version": "3.15.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.5.tgz", - "integrity": "sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ==", + "version": "3.15.4", "dev": true, + "license": "BSD-2-Clause", "optional": true, "bin": { "uglifyjs": "bin/uglifyjs" @@ -14304,9 +13104,8 @@ }, "node_modules/unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, + "license": "MIT", "dependencies": { "crypto-random-string": "^2.0.0" }, @@ -14316,24 +13115,21 @@ }, "node_modules/universal-user-agent": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", - "dev": true + "dev": true, + "license": "ISC" }, "node_modules/universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true, + "license": "MIT", "engines": { "node": ">= 10.0.0" } }, "node_modules/unixify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=", "dev": true, + "license": "MIT", "dependencies": { "normalize-path": "^2.1.1" }, @@ -14343,9 +13139,8 @@ }, "node_modules/unixify/node_modules/normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, + "license": "MIT", "dependencies": { "remove-trailing-separator": "^1.0.1" }, @@ -14362,40 +13157,43 @@ }, "node_modules/url-join": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/util-deprecate": { "version": "1.0.2", + "dev": true, "license": "MIT" }, "node_modules/utils-merge": { "version": "1.0.1", "license": "MIT", - "engines": { - "node": ">= 0.4.0" - } - }, - "node_modules/uuid": { - "version": "3.4.0", - "dev": true, - "license": "MIT", - "bin": { - "uuid": "bin/uuid" + "engines": { + "node": ">= 0.4.0" } }, "node_modules/v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", - "dev": true + "dev": true, + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.7", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + }, + "engines": { + "node": ">=10.12.0" + } }, "node_modules/validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, + "license": "Apache-2.0", "dependencies": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" @@ -14410,9 +13208,8 @@ }, "node_modules/webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", - "dev": true + "dev": true, + "license": "BSD-2-Clause" }, "node_modules/well-known-symbols": { "version": "2.0.0", @@ -14424,9 +13221,8 @@ }, "node_modules/whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "dev": true, + "license": "MIT", "dependencies": { "tr46": "~0.0.3", "webidl-conversions": "^3.0.0" @@ -14446,22 +13242,15 @@ "node": ">= 8" } }, - "node_modules/which-module": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, "node_modules/wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", - "dev": true + "dev": true, + "license": "MIT" }, "node_modules/workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", - "dev": true + "dev": true, + "license": "Apache-2.0" }, "node_modules/wrap-ansi": { "version": "7.0.0", @@ -14501,6 +13290,22 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/wrap-ansi/node_modules/color-name": { + "version": "1.1.4", + "dev": true, + "license": "MIT" + }, "node_modules/wrap-ansi/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, @@ -14543,22 +13348,10 @@ "dev": true, "license": "ISC" }, - "node_modules/write-file-atomic": { - "version": "3.0.3", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "node_modules/xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true, + "license": "MIT", "engines": { "node": ">=0.4" } @@ -14572,7 +13365,7 @@ } }, "node_modules/yallist": { - "version": "2.1.2", + "version": "4.0.0", "dev": true, "license": "ISC" }, @@ -14603,31 +13396,278 @@ } }, "node_modules/yargs-parser": { - "version": "20.2.4", + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "camelcase": "^6.0.0", + "decamelize": "^4.0.0", + "flat": "^5.0.2", + "is-plain-obj": "^2.1.0" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs-unparser/node_modules/camelcase": { + "version": "6.3.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/decamelize": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/yargs-unparser/node_modules/is-plain-obj": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "engines": { + "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/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.0.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", + "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/express-wrapper": { + "name": "@api-ts/express-wrapper", + "version": "0.0.0-semantically-released", + "license": "Apache-2.0", + "dependencies": { + "@api-ts/io-ts-http": "0.0.0-semantically-released", + "express": "4.17.2", + "fp-ts": "2.12.3", + "io-ts": "2.1.3" + }, + "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.13", + "ava": "4.3.3", + "c8": "7.12.0", + "ts-node": "10.9.1", + "typescript": "4.7.4" + } + }, + "packages/express-wrapper/node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/io-ts-http": { + "name": "@api-ts/io-ts-http", + "version": "0.0.0-semantically-released", + "license": "Apache-2.0", + "dependencies": { + "@api-ts/response": "0.0.0-semantically-released", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", + "io-ts-types": "0.5.16" + }, + "devDependencies": { + "@types/chai": "4.3.3", + "@types/mocha": "9.1.1", + "c8": "7.11.2", + "chai": "4.3.6", + "mocha": "10.0.0", + "ts-node": "10.9.1", + "typescript": "4.7.4" + } + }, + "packages/io-ts-http/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" + } + }, + "packages/io-ts-http/node_modules/c8": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.2.tgz", + "integrity": "sha512-6ahJSrhS6TqSghHm+HnWt/8Y2+z0hM/FQyB1ybKhAR30+NYL9CTQ1uwHxuWw6U7BHlHv6wvhgOrH81I+lfCkxg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, + "packages/io-ts-http/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 + }, + "packages/io-ts-http/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/io-ts-http/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, - "license": "ISC", "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/yargs-unparser": { - "version": "2.0.0", + "packages/io-ts-http/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, - "license": "MIT", "dependencies": { - "camelcase": "^6.0.0", - "decamelize": "^4.0.0", - "flat": "^5.0.2", - "is-plain-obj": "^2.1.0" + "p-locate": "^5.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs-unparser/node_modules/camelcase": { - "version": "6.3.0", + "packages/io-ts-http/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", "dev": true, - "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { "node": ">=10" }, @@ -14635,10 +13675,14 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/yargs-unparser/node_modules/decamelize": { - "version": "4.0.0", + "packages/io-ts-http/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, - "license": "MIT", + "dependencies": { + "p-limit": "^3.0.2" + }, "engines": { "node": ">=10" }, @@ -14646,31 +13690,7 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "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/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": { + "packages/io-ts-http/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==", @@ -14684,7 +13704,7 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/strip-ansi": { + "packages/io-ts-http/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==", @@ -14696,84 +13716,37 @@ "node": ">=8" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.0.1", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.0.1.tgz", - "integrity": "sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==", - "dev": true, - "engines": { - "node": ">=12" - } - }, - "node_modules/yn": { - "version": "3.1.1", + "packages/io-ts-http/node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true, - "license": "MIT", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, "engines": { - "node": ">=6" + "node": ">=4.2.0" } }, - "node_modules/yocto-queue": { - "version": "0.1.0", + "packages/io-ts-http/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, - "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/express-wrapper": { - "name": "@api-ts/express-wrapper", - "version": "0.0.0-semantically-released", - "license": "Apache-2.0", - "dependencies": { - "@api-ts/io-ts-http": "0.0.0-semantically-released", - "express": "4.17.2", - "fp-ts": "2.12.1", - "io-ts": "2.2.16" - }, - "devDependencies": { - "@api-ts/superagent-wrapper": "0.0.0-semantically-released", - "@ava/typescript": "3.0.1", - "@types/express": "4.17.13", - "ava": "4.3.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" - } - }, - "packages/io-ts-express": { - "extraneous": true - }, - "packages/io-ts-http": { - "name": "@api-ts/io-ts-http", - "version": "0.0.0-semantically-released", - "license": "Apache-2.0", "dependencies": { - "@api-ts/response": "0.0.0-semantically-released", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", - "io-ts-types": "0.5.16", - "monocle-ts": "2.3.10", - "newtype-ts": "0.3.5" + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" }, - "devDependencies": { - "@types/chai": "4.3.1", - "@types/mocha": "9.1.1", - "chai": "4.3.6", - "mocha": "10.0.0", - "nyc": "15.1.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "engines": { + "node": ">=10" } }, - "packages/io-ts-openapi": { - "extraneous": true - }, - "packages/io-ts-response": { - "extraneous": true - }, "packages/openapi-generator": { "name": "@api-ts/openapi-generator", "version": "0.0.0-semantically-released", @@ -14782,21 +13755,34 @@ "@api-ts/io-ts-http": "0.0.0-semantically-released", "cmd-ts": "0.11.0", "comment-parser": "1.3.1", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", "io-ts-types": "0.5.16", - "openapi-types": "11.0.1", - "ts-morph": "15.0.0", - "typescript": "4.6.4" + "openapi-types": "12.0.2", + "ts-morph": "14.0.0", + "typescript": "4.7.4" }, "bin": { "openapi-generator": "dist/src/cli.js" }, "devDependencies": { "@ava/typescript": "3.0.1", - "ava": "4.3.0", + "ava": "4.3.3", + "c8": "7.12.0", "parser-ts": "0.6.16", - "ts-node": "10.8.1" + "ts-node": "10.9.1" + } + }, + "packages/openapi-generator/node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" } }, "packages/response": { @@ -14804,11 +13790,21 @@ "version": "0.0.0-semantically-released", "license": "Apache-2.0", "devDependencies": { - "typescript": "4.6.4" + "typescript": "4.7.4" } }, - "packages/superagent-codec-adapter": { - "extraneous": true + "packages/response/node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } }, "packages/superagent-wrapper": { "name": "@api-ts/superagent-wrapper", @@ -14816,43 +13812,74 @@ "license": "Apache-2.0", "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", - "superagent": "3.8.3", - "supertest": "6.1.6" + "fp-ts": "2.12.3", + "io-ts": "2.1.3" }, "devDependencies": { - "@types/chai": "4.3.1", + "@types/chai": "4.3.3", "@types/express": "4.17.13", "@types/mocha": "9.1.1", "@types/superagent": "4.1.5", - "@types/supertest": "2.0.11", + "@types/supertest": "2.0.12", "body-parser": "1.20.0", + "c8": "7.11.2", "chai": "4.3.6", "express": "4.17.1", "io-ts-types": "0.5.16", "mocha": "10.0.0", - "monocle-ts": "2.3.10", - "newtype-ts": "0.3.5", - "nyc": "15.1.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "superagent": "7.1.6", + "supertest": "6.2.3", + "ts-node": "10.9.1", + "typescript": "4.7.4" + } + }, + "packages/superagent-wrapper/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" } }, "packages/superagent-wrapper/node_modules/bytes": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.8" } }, + "packages/superagent-wrapper/node_modules/c8": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.2.tgz", + "integrity": "sha512-6ahJSrhS6TqSghHm+HnWt/8Y2+z0hM/FQyB1ybKhAR30+NYL9CTQ1uwHxuWw6U7BHlHv6wvhgOrH81I+lfCkxg==", + "dev": true, + "dependencies": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "bin": { + "c8": "bin/c8.js" + }, + "engines": { + "node": ">=10.12.0" + } + }, "packages/superagent-wrapper/node_modules/content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, + "license": "MIT", "dependencies": { "safe-buffer": "5.1.2" }, @@ -14862,27 +13889,30 @@ }, "packages/superagent-wrapper/node_modules/cookie": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true, + "license": "MIT", "engines": { "node": ">= 0.6" } }, "packages/superagent-wrapper/node_modules/debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, + "license": "MIT", "dependencies": { "ms": "2.0.0" } }, + "packages/superagent-wrapper/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 + }, "packages/superagent-wrapper/node_modules/express": { "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, + "license": "MIT", "dependencies": { "accepts": "~1.3.7", "array-flatten": "1.1.1", @@ -14921,9 +13951,8 @@ }, "packages/superagent-wrapper/node_modules/express/node_modules/body-parser": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.0", "content-type": "~1.0.4", @@ -14942,9 +13971,8 @@ }, "packages/superagent-wrapper/node_modules/express/node_modules/http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -14958,46 +13986,122 @@ }, "packages/superagent-wrapper/node_modules/express/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" + }, + "packages/superagent-wrapper/node_modules/find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "dependencies": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/superagent-wrapper/node_modules/http-errors": { + "version": "1.7.3", + "dev": true, + "license": "MIT", + "dependencies": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "packages/superagent-wrapper/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" + } + }, + "packages/superagent-wrapper/node_modules/locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "dependencies": { + "p-locate": "^5.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "packages/superagent-wrapper/node_modules/mime": { + "version": "1.6.0", + "dev": true, + "license": "MIT", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "packages/superagent-wrapper/node_modules/ms": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "packages/superagent-wrapper/node_modules/p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "dependencies": { + "yocto-queue": "^0.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "packages/superagent-wrapper/node_modules/http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "packages/superagent-wrapper/node_modules/p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", "dev": true, "dependencies": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">= 0.6" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/superagent-wrapper/node_modules/ms": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", - "dev": true - }, "packages/superagent-wrapper/node_modules/qs": { "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.6" } }, "packages/superagent-wrapper/node_modules/raw-body": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, + "license": "MIT", "dependencies": { "bytes": "3.1.0", "http-errors": "1.7.2", @@ -15010,9 +14114,8 @@ }, "packages/superagent-wrapper/node_modules/raw-body/node_modules/http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, + "license": "MIT", "dependencies": { "depd": "~1.1.2", "inherits": "2.0.3", @@ -15026,15 +14129,18 @@ }, "packages/superagent-wrapper/node_modules/raw-body/node_modules/inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", - "dev": true + "dev": true, + "license": "ISC" + }, + "packages/superagent-wrapper/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" }, "packages/superagent-wrapper/node_modules/send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, + "license": "MIT", "dependencies": { "debug": "2.6.9", "depd": "~1.1.2", @@ -15056,15 +14162,13 @@ }, "packages/superagent-wrapper/node_modules/send/node_modules/ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", - "dev": true + "dev": true, + "license": "MIT" }, "packages/superagent-wrapper/node_modules/serve-static": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, + "license": "MIT", "dependencies": { "encodeurl": "~1.0.2", "escape-html": "~1.0.3", @@ -15077,50 +14181,258 @@ }, "packages/superagent-wrapper/node_modules/setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", - "dev": true - } - }, - "dependencies": { - "@ampproject/remapping": { - "version": "2.1.2", "dev": true, - "requires": { - "@jridgewell/trace-mapping": "^0.3.0" + "license": "ISC" + }, + "packages/superagent-wrapper/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" + } + }, + "packages/superagent-wrapper/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" } }, + "packages/superagent-wrapper/node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + }, + "packages/superagent-wrapper/node_modules/yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "dependencies": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + }, + "engines": { + "node": ">=10" + } + }, + "packages/typed-express-router": { + "name": "@api-ts/typed-express-router", + "version": "0.0.0-semantically-released", + "license": "Apache-2.0", + "dependencies": { + "@api-ts/io-ts-http": "0.0.0-semantically-released", + "express": "4.17.2", + "fp-ts": "2.12.3", + "io-ts": "2.1.3" + }, + "devDependencies": { + "@api-ts/superagent-wrapper": "0.0.0-semantically-released", + "@ava/typescript": "3.0.1", + "@types/express": "4.17.13", + "ava": "4.3.3", + "c8": "7.12.0", + "ts-node": "10.9.1", + "typescript": "4.7.4" + } + }, + "packages/typed-express-router/node_modules/typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=4.2.0" + } + } + }, + "dependencies": { "@api-ts/express-wrapper": { "version": "file:packages/express-wrapper", "requires": { "@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.13", - "ava": "4.3.0", + "ava": "4.3.3", + "c8": "7.12.0", "express": "4.17.2", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "fp-ts": "2.12.3", + "io-ts": "2.1.3", + "ts-node": "10.9.1", + "typescript": "4.7.4" + }, + "dependencies": { + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + } } }, "@api-ts/io-ts-http": { "version": "file:packages/io-ts-http", "requires": { "@api-ts/response": "0.0.0-semantically-released", - "@types/chai": "4.3.1", + "@types/chai": "4.3.3", "@types/mocha": "9.1.1", + "c8": "7.11.2", "chai": "4.3.6", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", "io-ts-types": "0.5.16", "mocha": "10.0.0", - "monocle-ts": "2.3.10", - "newtype-ts": "0.3.5", - "nyc": "15.1.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "ts-node": "10.9.1", + "typescript": "4.7.4" + }, + "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 + }, + "c8": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.2.tgz", + "integrity": "sha512-6ahJSrhS6TqSghHm+HnWt/8Y2+z0hM/FQyB1ybKhAR30+NYL9CTQ1uwHxuWw6U7BHlHv6wvhgOrH81I+lfCkxg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + } + }, + "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 + }, + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "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 + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "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" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } } }, "@api-ts/openapi-generator": { @@ -15128,60 +14440,96 @@ "requires": { "@api-ts/io-ts-http": "0.0.0-semantically-released", "@ava/typescript": "3.0.1", - "ava": "4.3.0", + "ava": "4.3.3", + "c8": "7.12.0", "cmd-ts": "0.11.0", "comment-parser": "1.3.1", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", "io-ts-types": "0.5.16", - "openapi-types": "11.0.1", + "openapi-types": "12.0.2", "parser-ts": "0.6.16", - "ts-morph": "15.0.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "ts-morph": "14.0.0", + "ts-node": "10.9.1", + "typescript": "4.7.4" + }, + "dependencies": { + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==" + } } }, "@api-ts/response": { "version": "file:packages/response", "requires": { - "typescript": "4.6.4" + "typescript": "4.7.4" + }, + "dependencies": { + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", + "dev": true + } } }, "@api-ts/superagent-wrapper": { "version": "file:packages/superagent-wrapper", "requires": { "@api-ts/io-ts-http": "0.0.0-semantically-released", - "@types/chai": "4.3.1", + "@types/chai": "4.3.3", "@types/express": "4.17.13", "@types/mocha": "9.1.1", "@types/superagent": "4.1.5", - "@types/supertest": "2.0.11", + "@types/supertest": "2.0.12", "body-parser": "1.20.0", + "c8": "7.11.2", "chai": "4.3.6", "express": "4.17.1", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", "io-ts-types": "0.5.16", "mocha": "10.0.0", - "monocle-ts": "2.3.10", - "newtype-ts": "0.3.5", - "nyc": "15.1.0", - "superagent": "3.8.3", - "supertest": "6.1.6", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "superagent": "7.1.6", + "supertest": "6.2.3", + "ts-node": "10.9.1", + "typescript": "4.7.4" }, "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 + }, "bytes": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.0.tgz", - "integrity": "sha512-zauLjrfCG+xvoyaqLoV8bLVXXNGC4JqlxFCutSDWA6fJrTo2ZuvLYTqZ7aHBLZSMOopbzwv8f+wZcVzfVTI2Dg==", "dev": true }, + "c8": { + "version": "7.11.2", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.11.2.tgz", + "integrity": "sha512-6ahJSrhS6TqSghHm+HnWt/8Y2+z0hM/FQyB1ybKhAR30+NYL9CTQ1uwHxuWw6U7BHlHv6wvhgOrH81I+lfCkxg==", + "dev": true, + "requires": { + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + } + }, "content-disposition": { "version": "0.5.3", - "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.3.tgz", - "integrity": "sha512-ExO0774ikEObIAEV9kDo50o+79VCUdEB6n6lzKgGwupcVeRlhrj3qGAfwq8G6uBJjkqLrhT0qEYFcWng8z1z0g==", "dev": true, "requires": { "safe-buffer": "5.1.2" @@ -15189,23 +14537,23 @@ }, "cookie": { "version": "0.4.0", - "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.4.0.tgz", - "integrity": "sha512-+Hp8fLp57wnUSt0tY0tHEXh4voZRDnoIrZPqlo3DPiI4y9lwg/jqx+1Om94/W6ZaPDOUbnjOt/99w66zk+l1Xg==", "dev": true }, "debug": { "version": "2.6.9", - "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", - "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", "dev": true, "requires": { "ms": "2.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 + }, "express": { "version": "4.17.1", - "resolved": "https://registry.npmjs.org/express/-/express-4.17.1.tgz", - "integrity": "sha512-mHJ9O79RqluphRrcw2X/GTh3k9tVv8YcoyY4Kkh4WDMUYKRZUq0h1o0w2rrrxBqM7VoeUVqgb27xlEMXTnYt4g==", "dev": true, "requires": { "accepts": "~1.3.7", @@ -15242,8 +14590,6 @@ "dependencies": { "body-parser": { "version": "1.19.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.19.0.tgz", - "integrity": "sha512-dhEPs72UPbDnAQJ9ZKMNTP6ptJaionhP5cBb541nXPlW60Jepo9RV/a4fX4XWW9CuFNK22krhrj1+rgzifNCsw==", "dev": true, "requires": { "bytes": "3.1.0", @@ -15260,8 +14606,6 @@ }, "http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", @@ -15273,41 +14617,78 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, - "http-errors": { - "version": "1.7.3", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.3.tgz", - "integrity": "sha512-ZTTX0MWrsQ2ZAhA1cejAwDLycFsd7I7nVtnkT3Ol0aqodaKW+0CTZDQ1uBv5whptCnc8e8HeRRJxRs0kmm/Qfw==", + "find-up": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/find-up/-/find-up-5.0.0.tgz", + "integrity": "sha512-78/PXT1wlLLDgTzDs7sjq9hzz0vXD+zn+7wypEe4fXQxCmdmqfGsEPQxmiCSQI3ajFV91bVSsvNtrJRiW6nGng==", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "http-errors": { + "version": "1.7.3", + "dev": true, + "requires": { + "depd": "~1.1.2", + "inherits": "2.0.4", + "setprototypeof": "1.1.1", + "statuses": ">= 1.5.0 < 2", + "toidentifier": "1.0.0" + } + }, + "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 + }, + "locate-path": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-6.0.0.tgz", + "integrity": "sha512-iPZK6eYjbxRu3uB4/WZ3EsEIMJFMqAoopl3R+zuq0UjcAm/MO6KCweDgPfP3elTztoKP3KtnVHxTn2NHBSDVUw==", "dev": true, "requires": { - "depd": "~1.1.2", - "inherits": "2.0.4", - "setprototypeof": "1.1.1", - "statuses": ">= 1.5.0 < 2", - "toidentifier": "1.0.0" + "p-locate": "^5.0.0" } }, + "mime": { + "version": "1.6.0", + "dev": true + }, "ms": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", - "integrity": "sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g=", "dev": true }, + "p-limit": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-3.1.0.tgz", + "integrity": "sha512-TYOanM3wGwNGsZN2cVTYPArw454xnXj5qmWF1bEoAc4+cU/ol7GVh7odevjp1FNHduHc3KZMcFduxU5Xc6uJRQ==", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-5.0.0.tgz", + "integrity": "sha512-LaNjtRWUBY++zB5nE/NwcaoMylSPk+S+ZHNB1TzdbMJMny6dynpAGt7X/tl/QYq3TIeE6nxHppbo2LGymrG5Pw==", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "qs": { "version": "6.7.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.7.0.tgz", - "integrity": "sha512-VCdBRNFTX1fyE7Nb6FYoURo/SPe62QCaAyzJvUjwRaIsc+NePBEniHlvxFmmX56+HZphIGtV0XeCirBtpDrTyQ==", "dev": true }, "raw-body": { "version": "2.4.0", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.4.0.tgz", - "integrity": "sha512-4Oz8DUIwdvoa5qMJelxipzi/iJIi40O5cGV1wNYp5hvZP8ZN0T+jiNkL0QepXs+EsQ9XJ8ipEDoiH70ySUJP3Q==", "dev": true, "requires": { "bytes": "3.1.0", @@ -15318,8 +14699,6 @@ "dependencies": { "http-errors": { "version": "1.7.2", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-1.7.2.tgz", - "integrity": "sha512-uUQBt3H/cSIVfch6i1EuPNy/YsRSOUBXTVfZ+yR7Zjez3qjBz6i9+i4zjNaoqcoFVI4lQJ5plg63TvGfRSDCRg==", "dev": true, "requires": { "depd": "~1.1.2", @@ -15331,16 +14710,16 @@ }, "inherits": { "version": "2.0.3", - "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.3.tgz", - "integrity": "sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4=", "dev": true } } }, + "safe-buffer": { + "version": "5.1.2", + "dev": true + }, "send": { "version": "0.17.1", - "resolved": "https://registry.npmjs.org/send/-/send-0.17.1.tgz", - "integrity": "sha512-BsVKsiGcQMFwT8UxypobUKyv7irCNRHk1T0G680vk88yf6LBByGcZJOTJCrTP2xVN6yI+XjPJcNuE3V4fT9sAg==", "dev": true, "requires": { "debug": "2.6.9", @@ -15360,16 +14739,12 @@ "dependencies": { "ms": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.1.tgz", - "integrity": "sha512-tgp+dl5cGk28utYktBsrFqA7HKgrhgPsg6Z/EfhWI4gl1Hwq8B/GmY/0oXZ6nF8hDVesS/FpnYaD/kOWhYQvyg==", "dev": true } } }, "serve-static": { "version": "1.14.1", - "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.14.1.tgz", - "integrity": "sha512-JMrvUwE54emCYWlTI+hGrGv5I8dEwmco/00EvkzIIsR7MqrHonbD9pO2MOfFnpFntl7ecpZs+3mW+XbQZu9QCg==", "dev": true, "requires": { "encodeurl": "~1.0.2", @@ -15380,167 +14755,96 @@ }, "setprototypeof": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.1.1.tgz", - "integrity": "sha512-JvdAWfbXeIGaZ9cILp38HntZSFSo3mWg6xGcJJsd+d4aRMOqauag1C63dJfDw7OaMYwEbHMOxEZ1lqVRYP2OAw==", "dev": true - } - } - }, - "@ava/typescript": { - "version": "3.0.1", - "dev": true, - "requires": { - "escape-string-regexp": "^5.0.0", - "execa": "^5.1.1" - } - }, - "@babel/code-frame": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/highlight": "^7.16.7" - } - }, - "@babel/compat-data": { - "version": "7.17.7", - "dev": true - }, - "@babel/core": { - "version": "7.17.8", - "dev": true, - "requires": { - "@ampproject/remapping": "^2.1.0", - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.7", - "@babel/helper-compilation-targets": "^7.17.7", - "@babel/helper-module-transforms": "^7.17.7", - "@babel/helpers": "^7.17.8", - "@babel/parser": "^7.17.8", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0", - "convert-source-map": "^1.7.0", - "debug": "^4.1.0", - "gensync": "^1.0.0-beta.2", - "json5": "^2.1.2", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", + }, + "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" + } + }, + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true + }, + "yargs": { + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", + "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } } } }, - "@babel/generator": { - "version": "7.17.7", - "dev": true, - "requires": { - "@babel/types": "^7.17.0", - "jsesc": "^2.5.1", - "source-map": "^0.5.0" - } - }, - "@babel/helper-compilation-targets": { - "version": "7.17.7", - "dev": true, + "@api-ts/typed-express-router": { + "version": "file:packages/typed-express-router", "requires": { - "@babel/compat-data": "^7.17.7", - "@babel/helper-validator-option": "^7.16.7", - "browserslist": "^4.17.5", - "semver": "^6.3.0" + "@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.13", + "ava": "4.3.3", + "c8": "7.12.0", + "express": "4.17.2", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", + "ts-node": "10.9.1", + "typescript": "4.7.4" }, "dependencies": { - "semver": { - "version": "6.3.0", + "typescript": { + "version": "4.7.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.7.4.tgz", + "integrity": "sha512-C0WQT0gezHuw6AdY1M2jxUO83Rjf0HP7Sk1DtXj6j1EwkQNZrHAg2XPWlq62oqEhYvONq5pkC2Y9oPljWToLmQ==", "dev": true } } }, - "@babel/helper-environment-visitor": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-function-name": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/helper-get-function-arity": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-get-function-arity": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-hoist-variables": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-imports": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/types": "^7.16.7" - } - }, - "@babel/helper-module-transforms": { - "version": "7.17.7", - "dev": true, - "requires": { - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-module-imports": "^7.16.7", - "@babel/helper-simple-access": "^7.17.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/helper-validator-identifier": "^7.16.7", - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, - "@babel/helper-simple-access": { - "version": "7.17.7", + "@ava/typescript": { + "version": "3.0.1", "dev": true, "requires": { - "@babel/types": "^7.17.0" + "escape-string-regexp": "^5.0.0", + "execa": "^5.1.1" } }, - "@babel/helper-split-export-declaration": { + "@babel/code-frame": { "version": "7.16.7", "dev": true, "requires": { - "@babel/types": "^7.16.7" + "@babel/highlight": "^7.16.7" } }, "@babel/helper-validator-identifier": { "version": "7.16.7", "dev": true }, - "@babel/helper-validator-option": { - "version": "7.16.7", - "dev": true - }, - "@babel/helpers": { - "version": "7.17.8", - "dev": true, - "requires": { - "@babel/template": "^7.16.7", - "@babel/traverse": "^7.17.3", - "@babel/types": "^7.17.0" - } - }, "@babel/highlight": { - "version": "7.16.10", + "version": "7.17.9", "dev": true, "requires": { "@babel/helper-validator-identifier": "^7.16.7", @@ -15564,155 +14868,52 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } - } - }, - "@babel/parser": { - "version": "7.17.8", - "dev": true - }, - "@babel/runtime": { - "version": "7.17.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.17.9.tgz", - "integrity": "sha512-lSiBBvodq29uShpWGNbgFdKYNiFDo5/HIYsaCEY9ff4sb10x9jizo2+pRrSyF4jKZCXqgzuqBOQKbUm90gQwJg==", - "dev": true, - "requires": { - "regenerator-runtime": "^0.13.4" - } - }, - "@babel/template": { - "version": "7.16.7", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/parser": "^7.16.7", - "@babel/types": "^7.16.7" - } - }, - "@babel/traverse": { - "version": "7.17.3", - "dev": true, - "requires": { - "@babel/code-frame": "^7.16.7", - "@babel/generator": "^7.17.3", - "@babel/helper-environment-visitor": "^7.16.7", - "@babel/helper-function-name": "^7.16.7", - "@babel/helper-hoist-variables": "^7.16.7", - "@babel/helper-split-export-declaration": "^7.16.7", - "@babel/parser": "^7.17.3", - "@babel/types": "^7.17.0", - "debug": "^4.1.0", - "globals": "^11.1.0" - } - }, - "@babel/types": { - "version": "7.17.0", - "dev": true, - "requires": { - "@babel/helper-validator-identifier": "^7.16.7", - "to-fast-properties": "^2.0.0" - } - }, - "@changesets/types": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/@changesets/types/-/types-4.1.0.tgz", - "integrity": "sha512-LDQvVDv5Kb50ny2s25Fhm3d9QSZimsoUGBsUioj6MC3qbMUCuC8GPIvk/M6IvXx3lYhAs0lwWUQLb+VIEUCECw==", - "dev": true - }, - "@colors/colors": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/@colors/colors/-/colors-1.5.0.tgz", - "integrity": "sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ==", - "dev": true, - "optional": true - }, - "@cspotcode/source-map-support": { - "version": "0.8.1", - "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", - "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", - "dev": true, - "requires": { - "@jridgewell/trace-mapping": "0.3.9" - } - }, - "@istanbuljs/load-nyc-config": { - "version": "1.1.0", - "dev": true, - "requires": { - "camelcase": "^5.3.1", - "find-up": "^4.1.0", - "get-package-type": "^0.1.0", - "js-yaml": "^3.13.1", - "resolve-from": "^5.0.0" - }, - "dependencies": { - "argparse": { - "version": "1.0.10", - "dev": true, - "requires": { - "sprintf-js": "~1.0.2" - } - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "js-yaml": { - "version": "3.14.1", - "dev": true, - "requires": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", + "escape-string-regexp": { + "version": "1.0.5", + "dev": true + }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, + "supports-color": { + "version": "5.5.0", "dev": true, "requires": { - "p-limit": "^2.2.0" + "has-flag": "^3.0.0" } } } }, + "@babel/runtime": { + "version": "7.17.9", + "dev": true, + "requires": { + "regenerator-runtime": "^0.13.4" + } + }, + "@bcoe/v8-coverage": { + "version": "0.2.3", + "dev": true + }, + "@changesets/types": { + "version": "4.1.0", + "dev": true + }, + "@colors/colors": { + "version": "1.5.0", + "dev": true, + "optional": true + }, + "@cspotcode/source-map-support": { + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz", + "integrity": "sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw==", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "0.3.9" + } + }, "@istanbuljs/schema": { "version": "0.1.3", "dev": true @@ -15737,8 +14938,6 @@ }, "@manypkg/find-root": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@manypkg/find-root/-/find-root-1.1.0.tgz", - "integrity": "sha512-mki5uBvhHzO8kYYix/WRy2WX8S3B5wdVSc9D6KcU5lQNglP2yt58/VfLuAK49glRXChosY8ap2oJ1qgma3GUVA==", "dev": true, "requires": { "@babel/runtime": "^7.5.5", @@ -15747,26 +14946,8 @@ "fs-extra": "^8.1.0" }, "dependencies": { - "@types/node": { - "version": "12.20.52", - "resolved": "https://registry.npmjs.org/@types/node/-/node-12.20.52.tgz", - "integrity": "sha512-cfkwWw72849SNYp3Zx0IcIs25vABmFh73xicxhCkTcvtZQeIez15PpwQN8fY3RD7gv1Wrxlc9MEtfMORZDEsGw==", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, "fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -15776,52 +14957,19 @@ }, "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "^4.1.6" } }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, "universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } }, "@manypkg/get-packages": { "version": "1.1.3", - "resolved": "https://registry.npmjs.org/@manypkg/get-packages/-/get-packages-1.1.3.tgz", - "integrity": "sha512-fo+QhuU3qE/2TQMQmbVMqaQ6EWbMhi4ABWP+O4AM1NqPBuy0OrApV5LO6BrrgnhtAHS2NH6RrVk9OL181tTi8A==", "dev": true, "requires": { "@babel/runtime": "^7.5.5", @@ -15832,16 +14980,8 @@ "read-yaml-file": "^1.1.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "fs-extra": { "version": "8.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-8.1.0.tgz", - "integrity": "sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -15849,24 +14989,8 @@ "universalify": "^0.1.0" } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - }, "jsonfile": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-4.0.0.tgz", - "integrity": "sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss=", "dev": true, "requires": { "graceful-fs": "^4.1.6" @@ -15874,8 +14998,6 @@ }, "universalify": { "version": "0.1.2", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-0.1.2.tgz", - "integrity": "sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg==", "dev": true } } @@ -15899,8 +15021,6 @@ }, "@octokit/auth-token": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-2.5.0.tgz", - "integrity": "sha512-r5FVUJCOLl19AxiuZD2VRZ/ORjp/4IN98Of6YJoJOkY75CIBuYfmiNHGrDwXr+aLGG55igl9QrxX3hbiXlLb+g==", "dev": true, "requires": { "@octokit/types": "^6.0.3" @@ -15908,8 +15028,6 @@ }, "@octokit/core": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/@octokit/core/-/core-3.6.0.tgz", - "integrity": "sha512-7RKRKuA4xTjMhY+eG3jthb3hlZCsOwg3rztWh75Xc+ShDWOfDDATWbeZpAHBNRpm4Tv9WgBMOy1zEJYXG6NJ7Q==", "dev": true, "requires": { "@octokit/auth-token": "^2.4.4", @@ -15923,8 +15041,6 @@ }, "@octokit/endpoint": { "version": "6.0.12", - "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-6.0.12.tgz", - "integrity": "sha512-lF3puPwkQWGfkMClXb4k/eUT/nZKQfxinRWJrdZaJO85Dqwo/G0yOC434Jr2ojwafWJMYqFGFa5ms4jJUgujdA==", "dev": true, "requires": { "@octokit/types": "^6.0.3", @@ -15934,8 +15050,6 @@ }, "@octokit/graphql": { "version": "4.8.0", - "resolved": "https://registry.npmjs.org/@octokit/graphql/-/graphql-4.8.0.tgz", - "integrity": "sha512-0gv+qLSBLKF0z8TKaSKTsS39scVKF9dbMxJpj3U0vC7wjNWFuIpL/z76Qe2fiuCbDRcJSavkXsVtMS6/dtQQsg==", "dev": true, "requires": { "@octokit/request": "^5.6.0", @@ -15945,14 +15059,10 @@ }, "@octokit/openapi-types": { "version": "11.2.0", - "resolved": "https://registry.npmjs.org/@octokit/openapi-types/-/openapi-types-11.2.0.tgz", - "integrity": "sha512-PBsVO+15KSlGmiI8QAzaqvsNlZlrDlyAJYcrXBCvVUxCp7VnXjkwPoFHgjEJXx3WF9BAwkA6nfCUA7i9sODzKA==", "dev": true }, "@octokit/plugin-paginate-rest": { "version": "2.17.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.17.0.tgz", - "integrity": "sha512-tzMbrbnam2Mt4AhuyCHvpRkS0oZ5MvwwcQPYGtMv4tUa5kkzG58SVB0fcsLulOZQeRnOgdkZWkRUiyBlh0Bkyw==", "dev": true, "requires": { "@octokit/types": "^6.34.0" @@ -15960,15 +15070,11 @@ }, "@octokit/plugin-request-log": { "version": "1.0.4", - "resolved": "https://registry.npmjs.org/@octokit/plugin-request-log/-/plugin-request-log-1.0.4.tgz", - "integrity": "sha512-mLUsMkgP7K/cnFEw07kWqXGF5LKrOkD+lhCrKvPHXWDywAwuDUeDwWBpc69XK3pNX0uKiVt8g5z96PJ6z9xCFA==", "dev": true, "requires": {} }, "@octokit/plugin-rest-endpoint-methods": { "version": "5.13.0", - "resolved": "https://registry.npmjs.org/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-5.13.0.tgz", - "integrity": "sha512-uJjMTkN1KaOIgNtUPMtIXDOjx6dGYysdIFhgA52x4xSadQCz3b/zJexvITDVpANnfKPW/+E0xkOvLntqMYpviA==", "dev": true, "requires": { "@octokit/types": "^6.34.0", @@ -15977,8 +15083,6 @@ }, "@octokit/request": { "version": "5.6.3", - "resolved": "https://registry.npmjs.org/@octokit/request/-/request-5.6.3.tgz", - "integrity": "sha512-bFJl0I1KVc9jYTe9tdGGpAMPy32dLBXXo1dS/YwSCTL/2nd9XeHsY616RE3HPXDVk+a+dBuzyz5YdlXwcDTr2A==", "dev": true, "requires": { "@octokit/endpoint": "^6.0.1", @@ -15991,8 +15095,6 @@ }, "@octokit/request-error": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/@octokit/request-error/-/request-error-2.1.0.tgz", - "integrity": "sha512-1VIvgXxs9WHSjicsRwq8PlR2LR2x6DwsJAaFgzdi0JfJoGSO8mYI/cHJQ+9FbN21aa+DrgNLnwObmyeSC8Rmpg==", "dev": true, "requires": { "@octokit/types": "^6.0.3", @@ -16002,8 +15104,6 @@ }, "@octokit/rest": { "version": "18.12.0", - "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-18.12.0.tgz", - "integrity": "sha512-gDPiOHlyGavxr72y0guQEhLsemgVjwRePayJ+FcKc2SJqKUbxbkvf5kAZEWA/MKvsfYlQAMVzNJE3ezQcxMJ2Q==", "dev": true, "requires": { "@octokit/core": "^3.5.1", @@ -16014,8 +15114,6 @@ }, "@octokit/types": { "version": "6.34.0", - "resolved": "https://registry.npmjs.org/@octokit/types/-/types-6.34.0.tgz", - "integrity": "sha512-s1zLBjWhdEI2zwaoSgyOFoKSl109CUcVBCc7biPJ3aAf6LGLU6szDvi31JPU7bxfla2lqfhjbbg/5DdFNxOwHw==", "dev": true, "requires": { "@octokit/openapi-types": "^11.2.0" @@ -16023,8 +15121,6 @@ }, "@semantic-release/commit-analyzer": { "version": "9.0.2", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-9.0.2.tgz", - "integrity": "sha512-E+dr6L+xIHZkX4zNMe6Rnwg4YQrWNXK+rNsvwOPpdFppvZO1olE2fIgWhv89TkQErygevbjsZFSIxp+u6w2e5g==", "dev": true, "peer": true, "requires": { @@ -16039,18 +15135,16 @@ }, "@semantic-release/error": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-2.2.0.tgz", - "integrity": "sha512-9Tj/qn+y2j+sjCI3Jd+qseGtHjOAeg7dU2/lVcqIQ9TV3QDaDXDYXcoOHU+7o2Hwh8L8ymL4gfuO7KxDs3q2zg==", "dev": true }, "@semantic-release/github": { - "version": "8.0.4", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.4.tgz", - "integrity": "sha512-But4e8oqqP3anZI5tjzZssZc2J6eoUdeeE0s7LVKKwyiAXJiQDWNNvtPOpgG2DsIz4+Exuse7cEQgjGMxwtLmg==", + "version": "8.0.6", + "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-8.0.6.tgz", + "integrity": "sha512-ZxgaxYCeqt9ylm2x3OPqUoUqBw1p60LhxzdX6BqJlIBThupGma98lttsAbK64T6L6AlNa2G5T66BbiG8y0PIHQ==", "dev": true, "requires": { - "@octokit/rest": "^18.0.0", - "@semantic-release/error": "^2.2.0", + "@octokit/rest": "^19.0.0", + "@semantic-release/error": "^3.0.0", "aggregate-error": "^3.0.0", "bottleneck": "^2.18.1", "debug": "^4.0.0", @@ -16067,38 +15161,77 @@ "url-join": "^4.0.0" }, "dependencies": { - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true + "@octokit/auth-token": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/@octokit/auth-token/-/auth-token-3.0.0.tgz", + "integrity": "sha512-MDNFUBcJIptB9At7HiV7VCvU3NcL4GnfCQaP8C5lrxWrRPMJBnemYtehaKSOlaM7AYxeRyj9etenu8LVpSpVaQ==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3" + } }, - "globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "@octokit/core": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/@octokit/core/-/core-4.0.2.tgz", + "integrity": "sha512-vgVtE02EF9kXFsjmFoKFCwH1wDspPfDgopRbAlavkGuBJPWF+u5n0xgwP4obmdKNvLM+bB7MI7W31c2E13zgDQ==", "dev": true, "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^4.5.8", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^2.0.5", + "@octokit/types": "^6.0.3", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" } }, - "mime": { + "@octokit/endpoint": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/@octokit/endpoint/-/endpoint-7.0.0.tgz", + "integrity": "sha512-Kz/mIkOTjs9rV50hf/JK9pIDl4aGwAtT8pry6Rpy+hVXkAPhXanNQRxMoq6AeRgDCZR6t/A1zKniY2V1YhrzlQ==", + "dev": true, + "requires": { + "@octokit/types": "^6.0.3", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/request": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/@octokit/request/-/request-6.0.1.tgz", + "integrity": "sha512-9DSQ7fKBeSMU5aD6JfWA/1XFwP44X32d9fSYdQzxSsROjOginPYtW4Xwwt3Qs7wZtBmFOWV/td3gxOHmz9hfig==", + "dev": true, + "requires": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^2.1.0", + "@octokit/types": "^6.16.1", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + } + }, + "@octokit/rest": { + "version": "19.0.1", + "resolved": "https://registry.npmjs.org/@octokit/rest/-/rest-19.0.1.tgz", + "integrity": "sha512-gZUhimQN9aKF0eBLlWFmZlKO8ksFgm6+9dy1Nu/2soS9dljlH/CmjPIGH1/hZiFoKckGAoLmMIHVjDWIhC2myw==", + "dev": true, + "requires": { + "@octokit/core": "^4.0.0", + "@octokit/plugin-paginate-rest": "^2.16.8", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^5.12.0" + } + }, + "@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-3.0.0.tgz", - "integrity": "sha512-jSCU7/VB1loIWBZe14aEYHU/+1UMEHoaO7qxCOVJOw9GgH72VAWppxNcjU+x9a2k3GSIBXNKxXQFqRvvZ7vr3A==", + "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", + "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true } } }, "@semantic-release/npm": { "version": "9.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-9.0.1.tgz", - "integrity": "sha512-I5nVZklxBzfMFwemhRNbSrkiN/dsH3c7K9+KSk6jUnq0rdLFUuJt7EBsysq4Ir3moajQgFkfEryEHPqiKJj20g==", "dev": true, "requires": { "@semantic-release/error": "^3.0.0", @@ -16118,16 +15251,12 @@ "dependencies": { "@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true } } }, "@semantic-release/release-notes-generator": { "version": "10.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-10.0.3.tgz", - "integrity": "sha512-k4x4VhIKneOWoBGHkx0qZogNjCldLPRiAjnIpMnlUh6PtaWXp/T+C9U7/TaNDDtgDa5HMbHl4WlREdxHio6/3w==", "dev": true, "peer": true, "requires": { @@ -16145,20 +15274,14 @@ }, "@semrel-extra/npm": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/@semrel-extra/npm/-/npm-1.2.0.tgz", - "integrity": "sha512-l5hBMofOUuAfytK3ILEldRO5bdX4dJOfO8aaYyUqON+EcFlKMke7bPWGJjB/bqi1FGTEfESfAsn8zXsVp+G7Zg==", "dev": true }, "@tootallnate/once": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-2.0.0.tgz", - "integrity": "sha512-XCuKFP5PS55gnMVu3dty8KPatLqUoy/ZYzDzAGCQ8JNFCkLXzmI7vNHCR+XpbZaMWQK/vQubr7PkYq8g470J/A==", "dev": true }, "@ts-morph/common": { - "version": "0.15.0", - "resolved": "https://registry.npmjs.org/@ts-morph/common/-/common-0.15.0.tgz", - "integrity": "sha512-QefRbadcwfBnd3HWrltpjRJprHgeKfQsnbyGbRF8pEjMqISAljJwq4wfRETxxojsmN4GWuJv3PWG+W7kBIHMMw==", + "version": "0.13.0", "requires": { "fast-glob": "^3.2.11", "minimatch": "^5.0.1", @@ -16168,16 +15291,12 @@ "dependencies": { "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "requires": { "balanced-match": "^1.0.0" } }, "minimatch": { "version": "5.1.0", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.0.tgz", - "integrity": "sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==", "requires": { "brace-expansion": "^2.0.1" } @@ -16209,9 +15328,9 @@ } }, "@types/chai": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.1.tgz", - "integrity": "sha512-/zPMqDkzSZ8t3VtxOa4KPq7uzzW978M9Tvh+j7GHKuo6k6GTLxPJ4J5gE5cjfJ26pnXst0N5Hax8Sr0T2Mi9zQ==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@types/chai/-/chai-4.3.3.tgz", + "integrity": "sha512-hC7OMnszpxhZPduX+m+nrx+uFoLkWOMiR4oa/AZF3MuSETYTZmFfJAHqZEM8MVlvfG7BEUcgvtwoCTxBp6hm3g==", "dev": true }, "@types/connect": { @@ -16244,36 +15363,32 @@ "@types/range-parser": "*" } }, + "@types/istanbul-lib-coverage": { + "version": "2.0.4", + "dev": true + }, "@types/mime": { "version": "1.3.2", "dev": true }, "@types/minimist": { "version": "1.2.2", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.2.tgz", - "integrity": "sha512-jhuKLIRrhvCPLqwPcx6INqmKeiA5EWrsCOPhrlFSrbrmU4ZMPjj5Ul/oLCMDO98XRUIwVm78xICz4EPCektzeQ==", "dev": true }, "@types/mocha": { "version": "9.1.1", - "resolved": "https://registry.npmjs.org/@types/mocha/-/mocha-9.1.1.tgz", - "integrity": "sha512-Z61JK7DKDtdKTWwLeElSEBcWGRLY8g95ic5FoQqI9CMx0ns/Ghep3B4DfcEimiKMvtamNVULVNKEsiwV3aQmXw==", "dev": true }, "@types/node": { - "version": "16.11.7", + "version": "12.20.48", "dev": true }, "@types/normalize-package-data": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.1.tgz", - "integrity": "sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==", "dev": true }, "@types/parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/@types/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha512-//oorEZjL6sbPcKUaCdIGlIUeH26mgzimjBB77G6XRgnDl/L5wOnpyBGRe/Mmf5CVW3PwEBE1NjiMZ/ssFh4wA==", "dev": true }, "@types/qs": { @@ -16285,9 +15400,7 @@ "dev": true }, "@types/retry": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/@types/retry/-/retry-0.12.0.tgz", - "integrity": "sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA==", + "version": "0.12.1", "dev": true }, "@types/serve-static": { @@ -16307,7 +15420,9 @@ } }, "@types/supertest": { - "version": "2.0.11", + "version": "2.0.12", + "resolved": "https://registry.npmjs.org/@types/supertest/-/supertest-2.0.12.tgz", + "integrity": "sha512-X3HPWTwXRerBZS7Mo1k6vMVR1Z6zmJcDVn5O/31whe0tnjE4te6ZJSJGq1RiqHPjzPdMTfjCFogDJmwng9xHaQ==", "dev": true, "requires": { "@types/superagent": "*" @@ -16336,8 +15451,6 @@ }, "agent-base": { "version": "6.0.2", - "resolved": "https://registry.npmjs.org/agent-base/-/agent-base-6.0.2.tgz", - "integrity": "sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==", "dev": true, "requires": { "debug": "4" @@ -16372,8 +15485,6 @@ }, "ansicolors": { "version": "0.3.2", - "resolved": "https://registry.npmjs.org/ansicolors/-/ansicolors-0.3.2.tgz", - "integrity": "sha1-ZlWX3oap/+Oqm/vmyuXG6kJrSXk=", "dev": true }, "anymatch": { @@ -16384,17 +15495,6 @@ "picomatch": "^2.0.4" } }, - "append-transform": { - "version": "2.0.0", - "dev": true, - "requires": { - "default-require-extensions": "^3.0.0" - } - }, - "archy": { - "version": "1.0.0", - "dev": true - }, "arg": { "version": "4.1.3", "dev": true @@ -16405,8 +15505,6 @@ }, "argv-formatter": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/argv-formatter/-/argv-formatter-1.0.0.tgz", - "integrity": "sha1-oMoMvCmltz6Dbuvhy/bF4OTrgvk=", "dev": true }, "array-find-index": { @@ -16418,8 +15516,10 @@ }, "array-ify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/array-ify/-/array-ify-1.0.0.tgz", - "integrity": "sha1-nlKHYrSpBmrRY6aWKjZEGOlibs4=", + "dev": true + }, + "array-union": { + "version": "2.1.0", "dev": true }, "arrgv": { @@ -16430,6 +15530,12 @@ "version": "3.0.0", "dev": true }, + "asap": { + "version": "2.0.6", + "resolved": "https://registry.npmjs.org/asap/-/asap-2.0.6.tgz", + "integrity": "sha512-BSHWgDSAiKs50o2Re8ppvp3seVHXSRM44cdSsT9FfNEUUZLOGWVCsiWaRPWM1Znn+mqZ1OfVZ3z3DWEzSp7hRA==", + "dev": true + }, "assertion-error": { "version": "1.1.0", "dev": true @@ -16439,12 +15545,15 @@ "dev": true }, "asynckit": { - "version": "0.4.0" + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", + "integrity": "sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==", + "dev": true }, "ava": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.0.tgz", - "integrity": "sha512-Ap0u8rp8wOBN6CxshgxrPSe191e8g52RWGoXeDB57ubo4fyZyStfI6OxQi/bl0yxIDEOYHhCiGwihbzlMNJw3Q==", + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/ava/-/ava-4.3.3.tgz", + "integrity": "sha512-9Egq/d9R74ExrWohHeqUlexjDbgZJX5jA1Wq4KCTqc3wIfpGEK79zVy4rBtofJ9YKIxs4PzhJ8BgbW5PlAYe6w==", "dev": true, "requires": { "acorn": "^8.7.1", @@ -16513,6 +15622,23 @@ "escape-string-regexp": "5.0.0" } }, + "globby": { + "version": "13.1.1", + "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", + "dev": true + } + } + }, "indent-string": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", @@ -16524,9 +15650,9 @@ "dev": true }, "p-map": { - "version": "5.4.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.4.0.tgz", - "integrity": "sha512-obHraaWkwl4y1NHR4vW5D5k+33+S5QrkFqsNrrvK0R7lilXdzo/DZgnloDvYUaRT+Sk6vVK47JUQMQY6cjPMXg==", + "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" @@ -16534,8 +15660,6 @@ }, "write-file-atomic": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/write-file-atomic/-/write-file-atomic-4.0.1.tgz", - "integrity": "sha512-nSKUxgAbyioruk6hU87QzVbY279oYT6uiwgDoujth2ju4mJ+TZau7SQBhtbTmUyuNYTuXnSyRn66FV0+eCgcrQ==", "dev": true, "requires": { "imurmurhash": "^0.1.4", @@ -16549,8 +15673,6 @@ }, "before-after-hook": { "version": "2.2.2", - "resolved": "https://registry.npmjs.org/before-after-hook/-/before-after-hook-2.2.2.tgz", - "integrity": "sha512-3pZEU3NT5BFUo/AD5ERPWOgQOCZITni6iavr5AUw5AUwQjMlI0kzu5btnyD39AF0gUEsDPwJT+oY1ORBJijPjQ==", "dev": true }, "binary-extensions": { @@ -16559,8 +15681,6 @@ }, "blork": { "version": "9.3.0", - "resolved": "https://registry.npmjs.org/blork/-/blork-9.3.0.tgz", - "integrity": "sha512-9naBrHS2bwCQeGqGR9ptcoll6utsox9jtk1E0SwOAFa4RCV/IQHoBJARdi8AhHQTPPoWkjixMrzHvQKAV5Fx2A==", "dev": true }, "blueimp-md5": { @@ -16569,8 +15689,6 @@ }, "body-parser": { "version": "1.20.0", - "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.0.tgz", - "integrity": "sha512-DfJ+q6EPcGKZD1QWUjSpqp+Q7bDQTsQIF4zfUAtZ6qk+H/3/QRhg9CEp39ss+/T2vw0+HaidC0ecJj/DRLIaKg==", "dev": true, "requires": { "bytes": "3.1.2", @@ -16596,14 +15714,10 @@ }, "depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "destroy": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", - "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", "dev": true }, "ms": { @@ -16612,8 +15726,6 @@ }, "on-finished": { "version": "2.4.1", - "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", - "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", "dev": true, "requires": { "ee-first": "1.1.1" @@ -16623,8 +15735,6 @@ }, "bottleneck": { "version": "2.19.5", - "resolved": "https://registry.npmjs.org/bottleneck/-/bottleneck-2.19.5.tgz", - "integrity": "sha512-VHiNCbI1lKdl44tGrhNfU3lup0Tj/ZBMJB5/2ZbNXRCPuRCO7ed2mgcK4r17y+KB2EfuYuRaVlwNbAeaWGSpbw==", "dev": true }, "brace-expansion": { @@ -16645,39 +15755,109 @@ "version": "1.3.1", "dev": true }, - "browserslist": { - "version": "4.20.2", - "dev": true, - "requires": { - "caniuse-lite": "^1.0.30001317", - "electron-to-chromium": "^1.4.84", - "escalade": "^3.1.1", - "node-releases": "^2.0.2", - "picocolors": "^1.0.0" - } - }, "buffer-from": { "version": "1.1.2", "dev": true }, "bytes": { "version": "3.1.2", - "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", - "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", "dev": true }, - "caching-transform": { - "version": "4.0.0", + "c8": { + "version": "7.12.0", + "resolved": "https://registry.npmjs.org/c8/-/c8-7.12.0.tgz", + "integrity": "sha512-CtgQrHOkyxr5koX1wEUmN/5cfDa2ckbHRA4Gy5LAL0zaCFtVWJS5++n+w4/sr2GWGerBxgTjpKeDclk/Qk6W/A==", "dev": true, "requires": { - "hasha": "^5.0.0", - "make-dir": "^3.0.0", - "package-hash": "^4.0.0", - "write-file-atomic": "^3.0.0" + "@bcoe/v8-coverage": "^0.2.3", + "@istanbuljs/schema": "^0.1.3", + "find-up": "^5.0.0", + "foreground-child": "^2.0.0", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.0", + "istanbul-reports": "^3.1.4", + "rimraf": "^3.0.2", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.0.0", + "yargs": "^16.2.0", + "yargs-parser": "^20.2.9" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "dev": true + }, + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true + }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, + "string-width": { + "version": "4.2.3", + "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", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "yargs": { + "version": "16.2.0", + "dev": true, + "requires": { + "cliui": "^7.0.2", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.0", + "y18n": "^5.0.5", + "yargs-parser": "^20.2.2" + } + } } }, "call-bind": { "version": "1.0.2", + "dev": true, "requires": { "function-bind": "^1.1.1", "get-intrinsic": "^1.0.2" @@ -16693,8 +15873,6 @@ }, "camelcase-keys": { "version": "6.2.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-6.2.2.tgz", - "integrity": "sha512-YrwaA0vEKazPBkn0ipTiMpSajYDSe+KjQfrjhcBMxJt/znbvlHd8Pw/Vamaz5EB4Wfhs3SUR3Z9mwRu/P3s3Yg==", "dev": true, "requires": { "camelcase": "^5.3.1", @@ -16702,14 +15880,8 @@ "quick-lru": "^4.0.1" } }, - "caniuse-lite": { - "version": "1.0.30001319", - "dev": true - }, "cardinal": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/cardinal/-/cardinal-2.1.1.tgz", - "integrity": "sha1-fMEFXYItISlU0HsIXeolHMe8VQU=", "dev": true, "requires": { "ansicolors": "~0.3.2", @@ -16758,6 +15930,13 @@ "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": { @@ -16765,9 +15944,9 @@ "dev": true }, "ci-info": { - "version": "3.3.1", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.1.tgz", - "integrity": "sha512-SXgeMX9VwDe7iFFaEWkA5AstuER9YKqy4EhHqr4DVqkwmD9rpVimkMKWHdjn30Ja45txyjhSn63lVX69eVCckg==", + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.3.2.tgz", + "integrity": "sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==", "dev": true }, "ci-parallel-vars": { @@ -16791,8 +15970,6 @@ }, "cli-table3": { "version": "0.6.2", - "resolved": "https://registry.npmjs.org/cli-table3/-/cli-table3-0.6.2.tgz", - "integrity": "sha512-QyavHCaIC80cMivimWu4aWHilIpiDpfm3hGmqAmXVL1UsnbLuBSMd21hTX6VY4ZSDSM73ESLeF8TOYId3rBTbw==", "dev": true, "requires": { "@colors/colors": "1.5.0", @@ -16801,26 +15978,18 @@ "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 }, "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", @@ -16830,8 +15999,6 @@ }, "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" @@ -16913,8 +16080,14 @@ "supports-color": "^7.1.0" } }, - "has-flag": { - "version": "4.0.0" + "color-convert": { + "version": "2.0.1", + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4" }, "strip-ansi": { "version": "6.0.1", @@ -16938,21 +16111,21 @@ }, "code-excerpt": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/code-excerpt/-/code-excerpt-4.0.0.tgz", - "integrity": "sha512-xxodCmBen3iy2i0WtAK8FlFNrRzjUqjRsMfho58xT/wvZU1YTM3fCnRjcy1gJPMepaRlgm/0e6w8SpWHpn3/cA==", "dev": true, "requires": { "convert-to-spaces": "^2.0.1" } }, "color-convert": { - "version": "2.0.1", + "version": "1.9.3", + "dev": true, "requires": { - "color-name": "~1.1.4" + "color-name": "1.1.3" } }, "color-name": { - "version": "1.1.4" + "version": "1.1.3", + "dev": true }, "colorette": { "version": "2.0.19", @@ -16962,6 +16135,9 @@ }, "combined-stream": { "version": "1.0.8", + "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.8.tgz", + "integrity": "sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==", + "dev": true, "requires": { "delayed-stream": "~1.0.0" } @@ -16979,14 +16155,8 @@ "version": "3.0.0", "dev": true }, - "commondir": { - "version": "1.0.1", - "dev": true - }, "compare-func": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/compare-func/-/compare-func-2.0.0.tgz", - "integrity": "sha512-zHig5N+tPWARooBnb0Zx1MFcdfpyJrfTJ3Y5L+IFvUm8rM74hHz66z0gw0x4tijh5CorKkKUCnW82R2vmpeCRA==", "dev": true, "requires": { "array-ify": "^1.0.0", @@ -16994,7 +16164,8 @@ } }, "component-emitter": { - "version": "1.3.0" + "version": "1.3.0", + "dev": true }, "concat-map": { "version": "0.0.1", @@ -17028,11 +16199,6 @@ "version": "0.5.4", "requires": { "safe-buffer": "5.2.1" - }, - "dependencies": { - "safe-buffer": { - "version": "5.2.1" - } } }, "content-type": { @@ -17040,8 +16206,6 @@ }, "conventional-changelog-angular": { "version": "5.0.13", - "resolved": "https://registry.npmjs.org/conventional-changelog-angular/-/conventional-changelog-angular-5.0.13.tgz", - "integrity": "sha512-i/gipMxs7s8L/QeuavPF2hLnJgH6pEZAttySB6aiQLWcX3puWDL3ACVmvBhJGxnAy52Qc15ua26BufY6KpmrVA==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -17050,8 +16214,6 @@ }, "conventional-changelog-writer": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-5.0.1.tgz", - "integrity": "sha512-5WsuKUfxW7suLblAbFnxAcrvf6r+0b7GvNaWUwUIk0bXMnENP/PEieGKVUQrjPqwPT4o3EPAASBXiY6iHooLOQ==", "dev": true, "peer": true, "requires": { @@ -17068,8 +16230,6 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "peer": true, "requires": { @@ -17080,15 +16240,11 @@ }, "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true, "peer": true }, "through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "peer": true, "requires": { @@ -17099,8 +16255,6 @@ }, "conventional-commits-filter": { "version": "2.0.7", - "resolved": "https://registry.npmjs.org/conventional-commits-filter/-/conventional-commits-filter-2.0.7.tgz", - "integrity": "sha512-ASS9SamOP4TbCClsRHxIHXRfcGCnIoQqkvAzCSbZzTFLfcTqJVugB0agRgsEELsqaeWgsXv513eS116wnlSSPA==", "dev": true, "requires": { "lodash.ismatch": "^4.4.0", @@ -17109,8 +16263,6 @@ }, "conventional-commits-parser": { "version": "3.2.4", - "resolved": "https://registry.npmjs.org/conventional-commits-parser/-/conventional-commits-parser-3.2.4.tgz", - "integrity": "sha512-nK7sAtfi+QXbxHCYfhpZsfRtaitZLIA6889kFIouLvz6repszQDgxBu7wf2WbU+Dco7sAnNCJYERCwt54WPC2Q==", "dev": true, "requires": { "is-text-path": "^1.0.1", @@ -17123,8 +16275,6 @@ "dependencies": { "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -17134,8 +16284,6 @@ }, "split2": { "version": "3.2.2", - "resolved": "https://registry.npmjs.org/split2/-/split2-3.2.2.tgz", - "integrity": "sha512-9NThjpgZnifTkJpzTZ7Eue85S49QwpNhZTq6GRJwObb6jnLFNGB7Qm73V5HewTROPyxD0C29xqmaI68bQtV+hg==", "dev": true, "requires": { "readable-stream": "^3.0.0" @@ -17143,8 +16291,6 @@ }, "through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { "readable-stream": "3" @@ -17157,12 +16303,16 @@ "dev": true, "requires": { "safe-buffer": "~5.1.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } } }, "convert-to-spaces": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/convert-to-spaces/-/convert-to-spaces-2.0.1.tgz", - "integrity": "sha512-rcQ1bsQO9799wq24uE5AM2tAILy4gXGIK/njFWcVQkGNZ96edlpY+A7bjwvzjYvLDyzmG1MmMLZhpcsb+klNMQ==", "dev": true }, "cookie": { @@ -17172,15 +16322,15 @@ "version": "1.0.6" }, "cookiejar": { - "version": "2.1.3" + "version": "2.1.3", + "dev": true }, "core-util-is": { - "version": "1.0.3" + "version": "1.0.3", + "dev": true }, "cosmiconfig": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-7.0.1.tgz", - "integrity": "sha512-a1YWNUV2HwGimB7dU2s1wUMurNKjpx60HxBB6xUM8Re+2s1g1IIfJvFR0/iCF+XHdE0GMTKTuLR32UQff4TEyQ==", "dev": true, "requires": { "@types/parse-json": "^4.0.0", @@ -17205,8 +16355,6 @@ }, "crypto-random-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/crypto-random-string/-/crypto-random-string-2.0.0.tgz", - "integrity": "sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==", "dev": true }, "currently-unhandled": { @@ -17225,8 +16373,6 @@ }, "dateformat": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", - "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true }, "debug": { @@ -17241,8 +16387,6 @@ }, "decamelize-keys": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.0.tgz", - "integrity": "sha1-0XGoeTMlKAfrPLYdwcFEXQeN8tk=", "dev": true, "requires": { "decamelize": "^1.1.0", @@ -17251,8 +16395,6 @@ "dependencies": { "map-obj": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0=", "dev": true } } @@ -17266,17 +16408,8 @@ }, "deep-extend": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/deep-extend/-/deep-extend-0.6.0.tgz", - "integrity": "sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA==", "dev": true }, - "default-require-extensions": { - "version": "3.0.0", - "dev": true, - "requires": { - "strip-bom": "^4.0.0" - } - }, "del": { "version": "6.1.1", "resolved": "https://registry.npmjs.org/del/-/del-6.1.1.tgz", @@ -17291,36 +16424,19 @@ "p-map": "^4.0.0", "rimraf": "^3.0.2", "slash": "^3.0.0" - }, - "dependencies": { - "array-union": { - "version": "2.1.0", - "dev": true - }, - "globby": { - "version": "11.1.0", - "dev": true, - "requires": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", - "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" - } - } } }, "delayed-stream": { - "version": "1.0.0" + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", + "integrity": "sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==", + "dev": true }, "depd": { "version": "1.1.2" }, "deprecation": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/deprecation/-/deprecation-2.3.1.tgz", - "integrity": "sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ==", "dev": true }, "destroy": { @@ -17328,16 +16444,22 @@ }, "detect-indent": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/detect-indent/-/detect-indent-6.1.0.tgz", - "integrity": "sha512-reYkTUJAZb9gUuZ2RvVCNhVHdg62RHnJ7WJl8ftMi4diZ6NWlciOzQN88pUhSELEwflJht4oQDv0F0BMlwaYtA==", "dev": true }, "detect-newline": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/detect-newline/-/detect-newline-3.1.0.tgz", - "integrity": "sha512-TLz+x/vEXm/Y7P7wn1EJFNLxYpUD4TgMosxY6fAVJUnJMbupHBOncxyWUG9OpTaH9EBD7uFI5LfEgmMOc54DsA==", "dev": true }, + "dezalgo": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/dezalgo/-/dezalgo-1.0.3.tgz", + "integrity": "sha512-K7i4zNfT2kgQz3GylDw40ot9GAE47sFZ9EXHFSPP6zONLgH6kWXE0KWJchkbQJLBkRazq4APwZ4OwiFFlT95OQ==", + "dev": true, + "requires": { + "asap": "^2.0.0", + "wrappy": "1" + } + }, "didyoumean": { "version": "1.2.2" }, @@ -17354,8 +16476,6 @@ }, "dot-prop": { "version": "5.3.0", - "resolved": "https://registry.npmjs.org/dot-prop/-/dot-prop-5.3.0.tgz", - "integrity": "sha512-QM8q3zDe58hqUqjraQOmzZ1LIH9SWQJTlEKCH4kJ2oQvLZk7RbQXvtDM2XEq3fwkV9CCvvH4LA0AV+ogFsBM2Q==", "dev": true, "requires": { "is-obj": "^2.0.0" @@ -17363,8 +16483,6 @@ }, "duplexer2": { "version": "0.1.4", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.1.4.tgz", - "integrity": "sha1-ixLauHjA1p4+eJEFFmKjL8a93ME=", "dev": true, "requires": { "readable-stream": "^2.0.2" @@ -17377,10 +16495,6 @@ "ee-first": { "version": "1.1.1" }, - "electron-to-chromium": { - "version": "1.4.91", - "dev": true - }, "emittery": { "version": "0.11.0", "resolved": "https://registry.npmjs.org/emittery/-/emittery-0.11.0.tgz", @@ -17394,10 +16508,28 @@ "encodeurl": { "version": "1.0.2" }, + "encoding": { + "version": "0.1.13", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "iconv-lite": "^0.6.2" + }, + "dependencies": { + "iconv-lite": { + "version": "0.6.3", + "dev": true, + "optional": true, + "peer": true, + "requires": { + "safer-buffer": ">= 2.1.2 < 3.0.0" + } + } + } + }, "end-of-stream": { "version": "1.4.4", - "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", - "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", "dev": true, "requires": { "once": "^1.4.0" @@ -17405,8 +16537,6 @@ }, "env-ci": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/env-ci/-/env-ci-5.5.0.tgz", - "integrity": "sha512-o0JdWIbOLP+WJKIUt36hz1ImQQFuN92nhsfTkHHap+J8CiI8WgGpH/a9jEGHh4/TU5BUUGjlnKXNoDb57+ne+A==", "dev": true, "requires": { "execa": "^5.0.0", @@ -17416,17 +16546,11 @@ }, "error-ex": { "version": "1.3.2", - "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", - "integrity": "sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==", "dev": true, "requires": { "is-arrayish": "^0.2.1" } }, - "es6-error": { - "version": "4.1.1", - "dev": true - }, "escalade": { "version": "3.1.1", "dev": true @@ -17548,17 +16672,11 @@ "unpipe": "1.0.0" } }, - "safe-buffer": { - "version": "5.2.1" - }, "toidentifier": { "version": "1.0.1" } } }, - "extend": { - "version": "3.0.2" - }, "fast-diff": { "version": "1.2.0", "dev": true @@ -17574,7 +16692,8 @@ } }, "fast-safe-stringify": { - "version": "2.1.1" + "version": "2.1.1", + "dev": true }, "fastq": { "version": "1.13.0", @@ -17584,8 +16703,6 @@ }, "figures": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/figures/-/figures-4.0.1.tgz", - "integrity": "sha512-rElJwkA/xS04Vfg+CaZodpso7VqBknOYbzi6I76hI4X80RUjkSxO2oAyPmGbuXUppywjqndOrQDl817hDnI++w==", "dev": true, "requires": { "escape-string-regexp": "^5.0.0", @@ -17621,27 +16738,16 @@ } } }, - "find-cache-dir": { - "version": "3.3.2", - "dev": true, - "requires": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" - } - }, "find-up": { - "version": "5.0.0", + "version": "4.1.0", "dev": true, "requires": { - "locate-path": "^6.0.0", + "locate-path": "^5.0.0", "path-exists": "^4.0.0" } }, "find-versions": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/find-versions/-/find-versions-4.0.0.tgz", - "integrity": "sha512-wgpWy002tA+wgmO27buH/9KzyEOQnKsG/R0yrcjPT9BOFm0zRBVQbZ95nRGXWMywS8YR5knRbpohio0bcJABxQ==", "dev": true, "requires": { "semver-regex": "^3.1.2" @@ -17660,31 +16766,49 @@ } }, "form-data": { - "version": "2.5.1", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/form-data/-/form-data-4.0.0.tgz", + "integrity": "sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==", + "dev": true, "requires": { "asynckit": "^0.4.0", - "combined-stream": "^1.0.6", + "combined-stream": "^1.0.8", "mime-types": "^2.1.12" } }, "formidable": { - "version": "1.2.6" + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/formidable/-/formidable-2.0.1.tgz", + "integrity": "sha512-rjTMNbp2BpfQShhFbR3Ruk3qk2y9jKpvMW78nJgx8QKtxjDVrwbZG+wvDOmVbifHyOUOQJXxqEy6r0faRrPzTQ==", + "dev": true, + "requires": { + "dezalgo": "1.0.3", + "hexoid": "1.0.0", + "once": "1.4.0", + "qs": "6.9.3" + }, + "dependencies": { + "qs": { + "version": "6.9.3", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.9.3.tgz", + "integrity": "sha512-EbZYNarm6138UKKq46tdx08Yo/q9ZhFoAXAI1meAFd2GtbRDhbZY2WQSICskT0c5q99aFzLG1D4nvTk9tqfXIw==", + "dev": true + } + } }, "forwarded": { "version": "0.2.0" }, "fp-ts": { - "version": "2.12.1", - "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.12.1.tgz", - "integrity": "sha512-oxvgqUYR6O9VkKXrxkJ0NOyU0FrE705MeqgBUMEPWyTu6Pwn768cJbHChw2XOBlgFLKfIHxjr2OOBFpv2mUGZw==" + "version": "2.12.3", + "resolved": "https://registry.npmjs.org/fp-ts/-/fp-ts-2.12.3.tgz", + "integrity": "sha512-8m0XvW8kZbfnJOA4NvSVXu95mLbPf4LQGwQyqVukIYS4KzSNJiyKSmuZUmbVHteUi6MGkAJGPb0goPZqI+Tsqg==" }, "fresh": { "version": "0.5.2" }, "from2": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/from2/-/from2-2.3.0.tgz", - "integrity": "sha1-i/tVAr3kpNNs/e6gB/zKIdfjgq8=", "dev": true, "requires": { "inherits": "^2.0.1", @@ -17697,8 +16821,6 @@ }, "fs-extra": { "version": "10.1.0", - "resolved": "https://registry.npmjs.org/fs-extra/-/fs-extra-10.1.0.tgz", - "integrity": "sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==", "dev": true, "requires": { "graceful-fs": "^4.2.0", @@ -17711,10 +16833,7 @@ "dev": true }, "function-bind": { - "version": "1.1.1" - }, - "gensync": { - "version": "1.0.0-beta.2", + "version": "1.1.1", "dev": true }, "get-caller-file": { @@ -17727,24 +16846,19 @@ }, "get-intrinsic": { "version": "1.1.1", + "dev": true, "requires": { "function-bind": "^1.1.1", "has": "^1.0.3", "has-symbols": "^1.0.1" } }, - "get-package-type": { - "version": "0.1.0", - "dev": true - }, "get-stream": { "version": "6.0.1", "dev": true }, "git-log-parser": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/git-log-parser/-/git-log-parser-1.2.0.tgz", - "integrity": "sha1-LmpMGxP8AAKCB7p5WnrDFme5/Uo=", "dev": true, "requires": { "argv-formatter": "~1.0.0", @@ -17757,8 +16871,6 @@ }, "glob": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.0.tgz", - "integrity": "sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==", "dev": true, "requires": { "fs.realpath": "^1.0.0", @@ -17775,39 +16887,24 @@ "is-glob": "^4.0.1" } }, - "globals": { - "version": "11.12.0", - "dev": true - }, "globby": { - "version": "13.1.1", - "resolved": "https://registry.npmjs.org/globby/-/globby-13.1.1.tgz", - "integrity": "sha512-XMzoDZbGZ37tufiv7g0N4F/zp3zkwdFtVbV3EHsVl1KQr4RPLfNoT068/97RPshz2J5xYNEjLKKBKaGHifBd3Q==", + "version": "11.1.0", "dev": true, "requires": { + "array-union": "^2.1.0", "dir-glob": "^3.0.1", - "fast-glob": "^3.2.11", + "fast-glob": "^3.2.9", "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 - } + "slash": "^3.0.0" } }, "graceful-fs": { - "version": "4.2.9", + "version": "4.2.10", "dev": true }, "handlebars": { "version": "4.7.7", - "resolved": "https://registry.npmjs.org/handlebars/-/handlebars-4.7.7.tgz", - "integrity": "sha512-aAcXm5OAfE/8IXkcZvCepKU3VzW1/39Fb5ZuqMtgI/hT8X2YgoMvBY5dLhq/cpOvw7Lk1nK/UF71aLG/ZnVYRA==", "dev": true, "requires": { "minimist": "^1.2.5", @@ -17819,79 +16916,47 @@ "dependencies": { "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 } } }, "hard-rejection": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", "dev": true }, "has": { "version": "1.0.3", + "dev": true, "requires": { "function-bind": "^1.1.1" } }, "has-flag": { - "version": "3.0.0", - "dev": true + "version": "4.0.0" }, "has-symbols": { - "version": "1.0.3" - }, - "hasha": { - "version": "5.2.2", - "dev": true, - "requires": { - "is-stream": "^2.0.0", - "type-fest": "^0.8.0" - }, - "dependencies": { - "type-fest": { - "version": "0.8.1", - "dev": true - } - } + "version": "1.0.3", + "dev": true }, "he": { "version": "1.2.0", "dev": true }, + "hexoid": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/hexoid/-/hexoid-1.0.0.tgz", + "integrity": "sha512-QFLV0taWQOZtvIRIAdBChesmogZrtuXvVWsFHZTk2SU+anspqZ2vMnoLg7IE1+Uk16N19APic1BuF8bC8c2m5g==", + "dev": true + }, "hook-std": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/hook-std/-/hook-std-2.0.0.tgz", - "integrity": "sha512-zZ6T5WcuBMIUVh49iPQS9t977t7C0l7OtHrpeMb5uk48JdflRX0NSFvCekfYNmGQETnLq9W/isMyHl69kxGi8g==", "dev": true }, "hosted-git-info": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - } } }, "html-escaper": { @@ -17900,8 +16965,6 @@ }, "http-errors": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", - "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", "dev": true, "requires": { "depd": "2.0.0", @@ -17913,28 +16976,20 @@ "dependencies": { "depd": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", - "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", "dev": true }, "statuses": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", - "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", "dev": true }, "toidentifier": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", - "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", "dev": true } } }, "http-proxy-agent": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-5.0.0.tgz", - "integrity": "sha512-n2hY8YdoRE1i7r6M0w9DIw5GgZN0G25P8zLCRQ8rjXtTU3vsNFBI/vWK/UIeE6g5MUUz6avwAPXmL6Fy9D/90w==", "dev": true, "requires": { "@tootallnate/once": "2", @@ -17944,8 +16999,6 @@ }, "https-proxy-agent": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/https-proxy-agent/-/https-proxy-agent-5.0.1.tgz", - "integrity": "sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==", "dev": true, "requires": { "agent-base": "6", @@ -17958,8 +17011,6 @@ }, "iconv-lite": { "version": "0.4.24", - "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", - "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", "requires": { "safer-buffer": ">= 2.1.2 < 3" } @@ -17976,26 +17027,14 @@ }, "import-fresh": { "version": "3.3.0", - "resolved": "https://registry.npmjs.org/import-fresh/-/import-fresh-3.3.0.tgz", - "integrity": "sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==", "dev": true, "requires": { "parent-module": "^1.0.0", "resolve-from": "^4.0.0" - }, - "dependencies": { - "resolve-from": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-4.0.0.tgz", - "integrity": "sha512-pb/MYmXstAkysRFx8piNI1tGFNQIFA3vkE3Gq4EuA1dF6gHp/+vgZqsCGJapvy8N3Q+4o7FwvquPJcnZ7RYy4g==", - "dev": true - } } }, "import-from": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-4.0.0.tgz", - "integrity": "sha512-P9J71vT5nLlDeV8FHs5nNxaLbrpfAV5cF5srvbZfpwpcJoM/xZR3hiv+q+SAnuSmuGbXMWud063iIMx/V/EWZQ==", "dev": true, "peer": true }, @@ -18020,14 +17059,10 @@ }, "ini": { "version": "1.3.8", - "resolved": "https://registry.npmjs.org/ini/-/ini-1.3.8.tgz", - "integrity": "sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==", "dev": true }, "into-stream": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/into-stream/-/into-stream-6.0.0.tgz", - "integrity": "sha512-XHbaOAvP+uFKUFsOgoNPRjLkwB+I22JFPFe5OjTkQ0nwgj6+pSjb4NmB6VMxaPshLiOf+zcpOCBQuLwC1KHhZA==", "dev": true, "requires": { "from2": "^2.3.0", @@ -18035,7 +17070,7 @@ } }, "io-ts": { - "version": "2.2.16", + "version": "2.1.3", "requires": {} }, "io-ts-types": { @@ -18051,8 +17086,6 @@ }, "is-arrayish": { "version": "0.2.1", - "resolved": "https://registry.npmjs.org/is-arrayish/-/is-arrayish-0.2.1.tgz", - "integrity": "sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0=", "dev": true }, "is-binary-path": { @@ -18064,8 +17097,6 @@ }, "is-core-module": { "version": "2.9.0", - "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.9.0.tgz", - "integrity": "sha512-+5FPy5PnwmO3lvfMb0AsoPaBG+5KHUI0wYFXOtYPnVVVspTFUuMZNfNaNVRt3FZadstu2c8x23vykRW/NBoU6A==", "dev": true, "requires": { "has": "^1.0.3" @@ -18093,8 +17124,6 @@ }, "is-obj": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/is-obj/-/is-obj-2.0.0.tgz", - "integrity": "sha512-drqDG3cbczxxEJRoOXcOjtdp1J/lyp1mNn0xaznRs8+muBhgQcrnbspox5X5fOw0HnMnbfDzvnEMEtqDEJEo8w==", "dev": true }, "is-path-cwd": { @@ -18106,7 +17135,7 @@ "dev": true }, "is-plain-obj": { - "version": "2.1.0", + "version": "1.1.0", "dev": true }, "is-plain-object": { @@ -18123,29 +17152,18 @@ }, "is-text-path": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/is-text-path/-/is-text-path-1.0.1.tgz", - "integrity": "sha1-Thqg+1G/vLPpJogAE5cgLBd1tm4=", "dev": true, "requires": { "text-extensions": "^1.0.0" } }, - "is-typedarray": { - "version": "1.0.0", - "dev": true - }, "is-unicode-supported": { "version": "1.2.0", - "resolved": "https://registry.npmjs.org/is-unicode-supported/-/is-unicode-supported-1.2.0.tgz", - "integrity": "sha512-wH+U77omcRzevfIG8dDhTS0V9zZyweakfD01FULl97+0EHiJTTZtJqxPSkIIo/SDPv/i07k/C9jAPY+jwLLeUQ==", - "dev": true - }, - "is-windows": { - "version": "1.0.2", "dev": true }, "isarray": { - "version": "1.0.0" + "version": "1.0.0", + "dev": true }, "isexe": { "version": "2.0.0", @@ -18153,8 +17171,6 @@ }, "issue-parser": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/issue-parser/-/issue-parser-6.0.0.tgz", - "integrity": "sha512-zKa/Dxq2lGsBIXQ7CUZWTHfvxPC2ej0KfO7fIPqLlHB9J2hJ7rGhZ5rilhuufylr4RXYPzJUeFjKxz305OsNlA==", "dev": true, "requires": { "lodash.capitalize": "^4.2.1", @@ -18168,51 +17184,6 @@ "version": "3.2.0", "dev": true }, - "istanbul-lib-hook": { - "version": "3.0.0", - "dev": true, - "requires": { - "append-transform": "^2.0.0" - } - }, - "istanbul-lib-instrument": { - "version": "4.0.3", - "dev": true, - "requires": { - "@babel/core": "^7.7.5", - "@istanbuljs/schema": "^0.1.2", - "istanbul-lib-coverage": "^3.0.0", - "semver": "^6.3.0" - }, - "dependencies": { - "semver": { - "version": "6.3.0", - "dev": true - } - } - }, - "istanbul-lib-processinfo": { - "version": "2.0.2", - "dev": true, - "requires": { - "archy": "^1.0.0", - "cross-spawn": "^7.0.0", - "istanbul-lib-coverage": "^3.0.0-alpha.1", - "make-dir": "^3.0.0", - "p-map": "^3.0.0", - "rimraf": "^3.0.0", - "uuid": "^3.3.3" - }, - "dependencies": { - "p-map": { - "version": "3.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - } - } - }, "istanbul-lib-report": { "version": "3.0.0", "dev": true, @@ -18222,10 +17193,6 @@ "supports-color": "^7.1.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "dev": true - }, "supports-color": { "version": "7.2.0", "dev": true, @@ -18235,21 +17202,6 @@ } } }, - "istanbul-lib-source-maps": { - "version": "4.0.1", - "dev": true, - "requires": { - "debug": "^4.1.1", - "istanbul-lib-coverage": "^3.0.0", - "source-map": "^0.6.1" - }, - "dependencies": { - "source-map": { - "version": "0.6.1", - "dev": true - } - } - }, "istanbul-reports": { "version": "3.1.4", "dev": true, @@ -18260,8 +17212,6 @@ }, "java-properties": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/java-properties/-/java-properties-1.0.2.tgz", - "integrity": "sha512-qjdpeo2yKlYTH7nFdK0vbZWuTCesk4o63v5iVOlhMQPfuIZQfW/HI35SjfhA+4qpg36rnFSvUK5b1m+ckIblQQ==", "dev": true }, "js-string-escape": { @@ -18279,36 +17229,20 @@ "argparse": "^2.0.1" } }, - "jsesc": { - "version": "2.5.2", - "dev": true - }, "json-parse-better-errors": { "version": "1.0.2", - "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.2.tgz", - "integrity": "sha512-mrqyZKfX5EhL7hvqcV6WG1yYjnjeuYDzDhhcAAUrq8Po85NBQBJP+ZDUT75qZQ98IkUoBqdkExkukOU7Ts2wrw==", "dev": true }, "json-parse-even-better-errors": { "version": "2.3.1", - "resolved": "https://registry.npmjs.org/json-parse-even-better-errors/-/json-parse-even-better-errors-2.3.1.tgz", - "integrity": "sha512-xyFwyhro/JEof6Ghe2iz2NcXoj2sloNsWr/XsERDK/oiPCfaNhl5ONfp+jQdAZRQQ0IJWNzH9zIZF7li91kh2w==", "dev": true }, "json-stringify-safe": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, - "json5": { - "version": "2.2.1", "dev": true }, "jsonfile": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/jsonfile/-/jsonfile-6.1.0.tgz", - "integrity": "sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==", "dev": true, "requires": { "graceful-fs": "^4.1.6", @@ -18317,14 +17251,10 @@ }, "jsonparse": { "version": "1.3.1", - "resolved": "https://registry.npmjs.org/jsonparse/-/jsonparse-1.3.1.tgz", - "integrity": "sha1-P02uSpH6wxX3EGL4UhzCOfE2YoA=", "dev": true }, "JSONStream": { "version": "1.3.5", - "resolved": "https://registry.npmjs.org/JSONStream/-/JSONStream-1.3.5.tgz", - "integrity": "sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==", "dev": true, "requires": { "jsonparse": "^1.2.0", @@ -18333,8 +17263,6 @@ }, "kind-of": { "version": "6.0.3", - "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-6.0.3.tgz", - "integrity": "sha512-dcS1ul+9tmeD95T+x28/ehLgd9mENa3LsvDTtzm3vyBEO7RPptvAD+t44WVXaUjTBRcrpFeFlC8WCruUR456hw==", "dev": true }, "lilconfig": { @@ -18345,8 +17273,6 @@ }, "lines-and-columns": { "version": "1.2.4", - "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", - "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", "dev": true }, "lint-staged": { @@ -18399,12 +17325,6 @@ "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "dev": true }, - "mimic-fn": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-4.0.0.tgz", - "integrity": "sha512-vqiC06CuhBTUdZH+RYl8sFrL096vA45Ok5ISO6sE/Mr1jRbGH4Csnhi8f3wKVl7x8mO4Au7Ir9D3Oyv1VYMFJw==", - "dev": true - }, "npm-run-path": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.1.0.tgz", @@ -18476,6 +17396,17 @@ "string-width": "^4.2.0" } }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "dev": true @@ -18516,10 +17447,10 @@ "dev": true }, "locate-path": { - "version": "6.0.0", + "version": "5.0.0", "dev": true, "requires": { - "p-locate": "^5.0.0" + "p-locate": "^4.1.0" } }, "lodash": { @@ -18528,42 +17459,26 @@ }, "lodash.capitalize": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/lodash.capitalize/-/lodash.capitalize-4.2.1.tgz", - "integrity": "sha1-+CbJtOKoUR2E46yinbBeGk87cqk=", "dev": true }, "lodash.escaperegexp": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/lodash.escaperegexp/-/lodash.escaperegexp-4.1.2.tgz", - "integrity": "sha1-ZHYsSGGAglGKw99Mz11YhtriA0c=", - "dev": true - }, - "lodash.flattendeep": { - "version": "4.4.0", "dev": true }, "lodash.ismatch": { "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.ismatch/-/lodash.ismatch-4.4.0.tgz", - "integrity": "sha1-dWy1FQyjum8RCFp4hJZF8Yj4Xzc=", "dev": true }, "lodash.isplainobject": { "version": "4.0.6", - "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", - "integrity": "sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=", "dev": true }, "lodash.isstring": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.isstring/-/lodash.isstring-4.0.1.tgz", - "integrity": "sha1-1SfftUVuynzJu5XV2ur4i6VKVFE=", "dev": true }, "lodash.uniqby": { "version": "4.7.0", - "resolved": "https://registry.npmjs.org/lodash.uniqby/-/lodash.uniqby-4.7.0.tgz", - "integrity": "sha1-2ZwHpmnp5tJOE2Lf4mbGdhavEwI=", "dev": true }, "log-symbols": { @@ -18589,8 +17504,15 @@ "supports-color": "^7.1.0" } }, - "has-flag": { - "version": "4.0.0", + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", "dev": true }, "is-unicode-supported": { @@ -18627,6 +17549,17 @@ "color-convert": "^2.0.1" } }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "dev": true @@ -18681,11 +17614,10 @@ } }, "lru-cache": { - "version": "4.1.5", + "version": "6.0.0", "dev": true, "requires": { - "pseudomap": "^1.0.2", - "yallist": "^2.1.2" + "yallist": "^4.0.0" } }, "make-dir": { @@ -18714,21 +17646,15 @@ }, "map-obj": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", "dev": true }, "marked": { - "version": "4.0.15", - "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.15.tgz", - "integrity": "sha512-esX5lPdTfG4p8LDkv+obbRCyOKzB+820ZZyMOXJZygZBHrH9b3xXR64X4kT3sPe9Nx8qQXbmcz6kFSMt4Nfk6Q==", + "version": "4.0.14", "dev": true, "peer": true }, "marked-terminal": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-5.1.1.tgz", - "integrity": "sha512-+cKTOx9P4l7HwINYhzbrBSyzgxO2HaHKGZGuB1orZsMIgXYaJyfidT81VXRdpelW/PcHEWxywscePVgI/oUF6g==", "dev": true, "peer": true, "requires": { @@ -18742,8 +17668,6 @@ "dependencies": { "ansi-escapes": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-5.0.0.tgz", - "integrity": "sha512-5GFMVX8HqE/TB+FuBJGuO5XG0WrsA6ptUqoODaT/n9mmUaZFkqnBueB4leqGBCmrUHnCnC4PCZTCd0E7QQ83bA==", "dev": true, "peer": true, "requires": { @@ -18752,8 +17676,6 @@ }, "type-fest": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", "dev": true, "peer": true } @@ -18782,18 +17704,10 @@ "requires": { "map-age-cleaner": "^0.1.3", "mimic-fn": "^4.0.0" - }, - "dependencies": { - "mimic-fn": { - "version": "4.0.0", - "dev": true - } } }, "meow": { "version": "8.1.2", - "resolved": "https://registry.npmjs.org/meow/-/meow-8.1.2.tgz", - "integrity": "sha512-r85E3NdZ+mpYk1C6RjPFEMSE+s1iZMuHtsHAqY0DT3jZczl0diWUZ8g6oU7h0M9cD2EL+PzaYghhCLzR0ZNn5Q==", "dev": true, "requires": { "@types/minimist": "^1.2.0", @@ -18811,8 +17725,6 @@ "dependencies": { "type-fest": { "version": "0.18.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.18.1.tgz", - "integrity": "sha512-OIAYXk8+ISY+qTOwkHtKqzAuxchoMiD9Udx+FSGQDuiRR+PJKJHc2NJAXlbhkGwTt/4/nKZxELY1w3ReWOL8mw==", "dev": true } } @@ -18832,15 +17744,14 @@ }, "micromatch": { "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", "requires": { "braces": "^3.0.2", "picomatch": "^2.3.1" } }, "mime": { - "version": "1.6.0" + "version": "3.0.0", + "dev": true }, "mime-db": { "version": "1.52.0" @@ -18852,13 +17763,11 @@ } }, "mimic-fn": { - "version": "2.1.0", + "version": "4.0.0", "dev": true }, "min-indent": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/min-indent/-/min-indent-1.0.1.tgz", - "integrity": "sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg==", "dev": true }, "minimatch": { @@ -18870,14 +17779,10 @@ }, "minimist": { "version": "1.2.6", - "resolved": "https://registry.npmjs.org/minimist/-/minimist-1.2.6.tgz", - "integrity": "sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==", "dev": true }, "minimist-options": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", "dev": true, "requires": { "arrify": "^1.0.1", @@ -18887,27 +17792,15 @@ "dependencies": { "arrify": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=", - "dev": true - }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha1-caUMhCnfync8kqOQpKA7OfzVHT4=", "dev": true } } }, "mkdirp": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-1.0.4.tgz", - "integrity": "sha512-vVqVZQyf3WLx2Shd0qJ9xuvqgAyKPLAiqITEtqW0oIUjzo3PePDd6fW9iFz30ef7Ysp/oiWqbhszeGWW2T6Gzw==" + "version": "1.0.4" }, "mocha": { "version": "10.0.0", - "resolved": "https://registry.npmjs.org/mocha/-/mocha-10.0.0.tgz", - "integrity": "sha512-0Wl+elVUD43Y0BqPZBzZt8Tnkw9CMUdNYnUsTfOM1vuhJVZL+kiesFYsqwBkEEuEixaiPe5ZQdqDgX2jddhmoA==", "dev": true, "requires": { "@ungap/promise-all-settled": "1.1.2", @@ -18940,8 +17833,6 @@ }, "brace-expansion": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", - "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { "balanced-match": "^1.0.0" @@ -18955,18 +17846,27 @@ "version": "4.0.0", "dev": true }, - "has-flag": { - "version": "4.0.0", - "dev": true + "find-up": { + "version": "5.0.0", + "dev": true, + "requires": { + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + } }, "is-fullwidth-code-point": { "version": "3.0.0", "dev": true }, + "locate-path": { + "version": "6.0.0", + "dev": true, + "requires": { + "p-locate": "^5.0.0" + } + }, "minimatch": { "version": "5.0.1", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.0.1.tgz", - "integrity": "sha512-nLDxIFRyhDblz3qMuq+SoRZED4+miJ/G+tdDrjkkkRnjAsBexeGpgjLEQ0blJy7rHhR2b93rhQY4SvyWu9v03g==", "dev": true, "requires": { "brace-expansion": "^2.0.1" @@ -18976,6 +17876,20 @@ "version": "2.1.3", "dev": true }, + "p-limit": { + "version": "3.1.0", + "dev": true, + "requires": { + "yocto-queue": "^0.1.0" + } + }, + "p-locate": { + "version": "5.0.0", + "dev": true, + "requires": { + "p-limit": "^3.0.2" + } + }, "string-width": { "version": "4.2.3", "dev": true, @@ -19011,17 +17925,20 @@ "y18n": "^5.0.5", "yargs-parser": "^20.2.2" } + }, + "yargs-parser": { + "version": "20.2.4", + "dev": true } } }, "modify-values": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/modify-values/-/modify-values-1.0.1.tgz", - "integrity": "sha512-xV2bxeN6F7oYjZWTe/YPAy6MN2M+sL4u/Rlm2AHCIVGfo2p1yGmBHQ6vHehl4bRTZBdHu3TSkWdYgkwpYzAGSw==", "dev": true }, "monocle-ts": { "version": "2.3.10", + "peer": true, "requires": {} }, "ms": { @@ -19029,8 +17946,6 @@ }, "multi-semantic-release": { "version": "2.13.0", - "resolved": "https://registry.npmjs.org/multi-semantic-release/-/multi-semantic-release-2.13.0.tgz", - "integrity": "sha512-fqFtkurkamoYpSQuQQUJnXjFwnd6lkzCn7FVCVHYbZjGXNibVjtKEGkjK1kNPtdnYP8UaSYD+trL1OW14/Kv1w==", "dev": true, "requires": { "@manypkg/get-packages": "^1.1.3", @@ -19055,8 +17970,6 @@ "dependencies": { "@semantic-release/commit-analyzer": { "version": "8.0.1", - "resolved": "https://registry.npmjs.org/@semantic-release/commit-analyzer/-/commit-analyzer-8.0.1.tgz", - "integrity": "sha512-5bJma/oB7B4MtwUkZC2Bf7O1MHfi4gWe4mA+MIQ3lsEV0b422Bvl1z5HRpplDnMLHH3EXMoRdEng6Ds5wUqA3A==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.0", @@ -19070,8 +17983,6 @@ }, "@semantic-release/github": { "version": "7.2.3", - "resolved": "https://registry.npmjs.org/@semantic-release/github/-/github-7.2.3.tgz", - "integrity": "sha512-lWjIVDLal+EQBzy697ayUNN8MoBpp+jYIyW2luOdqn5XBH4d9bQGfTnjuLyzARZBHejqh932HVjiH/j4+R7VHw==", "dev": true, "requires": { "@octokit/rest": "^18.0.0", @@ -19094,8 +18005,6 @@ }, "@semantic-release/npm": { "version": "7.1.3", - "resolved": "https://registry.npmjs.org/@semantic-release/npm/-/npm-7.1.3.tgz", - "integrity": "sha512-x52kQ/jR09WjuWdaTEHgQCvZYMOTx68WnS+TZ4fya5ZAJw4oRtJETtrvUw10FdfM28d/keInQdc66R1Gw5+OEQ==", "dev": true, "requires": { "@semantic-release/error": "^2.2.0", @@ -19115,8 +18024,6 @@ "dependencies": { "execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -19132,16 +18039,12 @@ }, "human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "dev": true } } }, "@semantic-release/release-notes-generator": { "version": "9.0.3", - "resolved": "https://registry.npmjs.org/@semantic-release/release-notes-generator/-/release-notes-generator-9.0.3.tgz", - "integrity": "sha512-hMZyddr0u99OvM2SxVOIelHzly+PP3sYtJ8XOLHdMp8mrluN5/lpeTnIO27oeCYdupY/ndoGfvrqDjHqkSyhVg==", "dev": true, "requires": { "conventional-changelog-angular": "^5.0.0", @@ -19158,45 +18061,40 @@ }, "@tootallnate/once": { "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@tootallnate/once/-/once-1.1.2.tgz", - "integrity": "sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==", "dev": true }, "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 }, "ansi-styles": { "version": "4.3.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", - "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", "dev": true, "requires": { "color-convert": "^2.0.1" } }, - "array-union": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/array-union/-/array-union-2.1.0.tgz", - "integrity": "sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw==", - "dev": true - }, "chalk": { "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", "dev": true, "requires": { "ansi-styles": "^4.1.0", "supports-color": "^7.1.0" } }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, "conventional-changelog-writer": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/conventional-changelog-writer/-/conventional-changelog-writer-4.1.0.tgz", - "integrity": "sha512-WwKcUp7WyXYGQmkLsX4QmU42AZ1lqlvRW9mqoyiQzdD+rJWbTepdWoKJuwXTS+yq79XKnQNa93/roViPQrAQgw==", "dev": true, "requires": { "compare-func": "^2.0.0", @@ -19213,28 +18111,20 @@ "dependencies": { "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "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 }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "execa": { "version": "4.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-4.1.0.tgz", - "integrity": "sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA==", "dev": true, "requires": { "cross-spawn": "^7.0.0", @@ -19250,8 +18140,6 @@ "dependencies": { "get-stream": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/get-stream/-/get-stream-5.2.0.tgz", - "integrity": "sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA==", "dev": true, "requires": { "pump": "^3.0.0" @@ -19261,8 +18149,6 @@ }, "figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -19270,8 +18156,6 @@ }, "globby": { "version": "11.0.4", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.0.4.tgz", - "integrity": "sha512-9O4MVG9ioZJ08ffbcyVYyLOJLk5JQ688pJ4eMGLpdWLHq/Wr1D9BlriLQyL0E+jbkuePVZXYFj47QM/v093wHg==", "dev": true, "requires": { "array-union": "^2.1.0", @@ -19282,16 +18166,8 @@ "slash": "^3.0.0" } }, - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "http-proxy-agent": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/http-proxy-agent/-/http-proxy-agent-4.0.1.tgz", - "integrity": "sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==", "dev": true, "requires": { "@tootallnate/once": "1", @@ -19301,14 +18177,10 @@ }, "human-signals": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-1.1.1.tgz", - "integrity": "sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw==", "dev": true }, "import-from": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/import-from/-/import-from-3.0.0.tgz", - "integrity": "sha512-CiuXOFFSzkU5x/CR0+z7T91Iht4CXgfCxVOFRhh2Zyhg5wOpWvvDLQUsWl+gcN+QscYBjez8hDCt85O7RLDttQ==", "dev": true, "requires": { "resolve-from": "^5.0.0" @@ -19316,20 +18188,14 @@ }, "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 }, "marked": { "version": "2.1.3", - "resolved": "https://registry.npmjs.org/marked/-/marked-2.1.3.tgz", - "integrity": "sha512-/Q+7MGzaETqifOMWYEA7HVMaZb4XbcRfaOzcSsHZEith83KGlvaSG33u0SKu89Mj5h+T8V2hM+8O45Qc5XTgwA==", "dev": true }, "marked-terminal": { "version": "4.2.0", - "resolved": "https://registry.npmjs.org/marked-terminal/-/marked-terminal-4.2.0.tgz", - "integrity": "sha512-DQfNRV9svZf0Dm9Cf5x5xaVJ1+XjxQW6XjFJ5HFkVyK52SDpj5PCBzS5X5r2w9nHr3mlB0T5201UMLue9fmhUw==", "dev": true, "requires": { "ansi-escapes": "^4.3.1", @@ -19342,86 +18208,82 @@ }, "mime": { "version": "2.6.0", - "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", - "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", "dev": true }, "npm": { "version": "7.24.2", - "resolved": "https://registry.npmjs.org/npm/-/npm-7.24.2.tgz", - "integrity": "sha512-120p116CE8VMMZ+hk8IAb1inCPk4Dj3VZw29/n2g6UI77urJKVYb7FZUDW8hY+EBnfsjI/2yrobBgFyzo7YpVQ==", - "dev": true, - "requires": { - "@isaacs/string-locale-compare": "*", - "@npmcli/arborist": "*", - "@npmcli/ci-detect": "*", - "@npmcli/config": "*", - "@npmcli/map-workspaces": "*", - "@npmcli/package-json": "*", - "@npmcli/run-script": "*", - "abbrev": "*", - "ansicolors": "*", - "ansistyles": "*", - "archy": "*", - "cacache": "*", - "chalk": "*", - "chownr": "*", - "cli-columns": "*", - "cli-table3": "*", - "columnify": "*", - "fastest-levenshtein": "*", - "glob": "*", - "graceful-fs": "*", - "hosted-git-info": "*", - "ini": "*", - "init-package-json": "*", - "is-cidr": "*", - "json-parse-even-better-errors": "*", - "libnpmaccess": "*", - "libnpmdiff": "*", - "libnpmexec": "*", - "libnpmfund": "*", - "libnpmhook": "*", - "libnpmorg": "*", - "libnpmpack": "*", - "libnpmpublish": "*", - "libnpmsearch": "*", - "libnpmteam": "*", - "libnpmversion": "*", - "make-fetch-happen": "*", - "minipass": "*", - "minipass-pipeline": "*", - "mkdirp": "*", - "mkdirp-infer-owner": "*", - "ms": "*", - "node-gyp": "*", - "nopt": "*", - "npm-audit-report": "*", - "npm-install-checks": "*", - "npm-package-arg": "*", - "npm-pick-manifest": "*", - "npm-profile": "*", - "npm-registry-fetch": "*", - "npm-user-validate": "*", - "npmlog": "*", - "opener": "*", - "pacote": "*", - "parse-conflict-json": "*", - "qrcode-terminal": "*", - "read": "*", - "read-package-json": "*", - "read-package-json-fast": "*", - "readdir-scoped-modules": "*", - "rimraf": "*", - "semver": "*", - "ssri": "*", - "tar": "*", - "text-table": "*", - "tiny-relative-date": "*", - "treeverse": "*", - "validate-npm-package-name": "*", - "which": "*", - "write-file-atomic": "*" + "dev": true, + "requires": { + "@isaacs/string-locale-compare": "^1.1.0", + "@npmcli/arborist": "^2.9.0", + "@npmcli/ci-detect": "^1.2.0", + "@npmcli/config": "^2.3.0", + "@npmcli/map-workspaces": "^1.0.4", + "@npmcli/package-json": "^1.0.1", + "@npmcli/run-script": "^1.8.6", + "abbrev": "~1.1.1", + "ansicolors": "~0.3.2", + "ansistyles": "~0.1.3", + "archy": "~1.0.0", + "cacache": "^15.3.0", + "chalk": "^4.1.2", + "chownr": "^2.0.0", + "cli-columns": "^3.1.2", + "cli-table3": "^0.6.0", + "columnify": "~1.5.4", + "fastest-levenshtein": "^1.0.12", + "glob": "^7.2.0", + "graceful-fs": "^4.2.8", + "hosted-git-info": "^4.0.2", + "ini": "^2.0.0", + "init-package-json": "^2.0.5", + "is-cidr": "^4.0.2", + "json-parse-even-better-errors": "^2.3.1", + "libnpmaccess": "^4.0.2", + "libnpmdiff": "^2.0.4", + "libnpmexec": "^2.0.1", + "libnpmfund": "^1.1.0", + "libnpmhook": "^6.0.2", + "libnpmorg": "^2.0.2", + "libnpmpack": "^2.0.1", + "libnpmpublish": "^4.0.1", + "libnpmsearch": "^3.1.1", + "libnpmteam": "^2.0.3", + "libnpmversion": "^1.2.1", + "make-fetch-happen": "^9.1.0", + "minipass": "^3.1.3", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "ms": "^2.1.2", + "node-gyp": "^7.1.2", + "nopt": "^5.0.0", + "npm-audit-report": "^2.1.5", + "npm-install-checks": "^4.0.0", + "npm-package-arg": "^8.1.5", + "npm-pick-manifest": "^6.1.1", + "npm-profile": "^5.0.3", + "npm-registry-fetch": "^11.0.0", + "npm-user-validate": "^1.0.1", + "npmlog": "^5.0.1", + "opener": "^1.5.2", + "pacote": "^11.3.5", + "parse-conflict-json": "^1.1.1", + "qrcode-terminal": "^0.12.0", + "read": "~1.0.7", + "read-package-json": "^4.1.1", + "read-package-json-fast": "^2.0.3", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "ssri": "^8.0.1", + "tar": "^6.1.11", + "text-table": "~0.2.0", + "tiny-relative-date": "^1.3.0", + "treeverse": "^1.0.4", + "validate-npm-package-name": "~3.0.0", + "which": "^2.0.2", + "write-file-atomic": "^3.0.3" }, "dependencies": { "@gar/promisify": { @@ -21436,8 +20298,6 @@ }, "readable-stream": { "version": "3.6.0", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", - "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", "dev": true, "requires": { "inherits": "^2.0.3", @@ -21445,10 +20305,12 @@ "util-deprecate": "^1.0.1" } }, + "resolve-from": { + "version": "5.0.0", + "dev": true + }, "semantic-release": { "version": "17.4.7", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-17.4.7.tgz", - "integrity": "sha512-3Ghu8mKCJgCG3QzE5xphkYWM19lGE3XjFdOXQIKBM2PBpBvgFQ/lXv31oX0+fuN/UjNFO/dqhNs8ATLBhg6zBg==", "dev": true, "requires": { "@semantic-release/commit-analyzer": "^8.0.0", @@ -21483,8 +20345,6 @@ "dependencies": { "execa": { "version": "5.1.1", - "resolved": "https://registry.npmjs.org/execa/-/execa-5.1.1.tgz", - "integrity": "sha512-8uSpZZocAZRBAPIEINJj3Lo9HyGitllczc27Eh5YYojjMFMn8yHMDMaUHE2Jqfq05D/wucwI4JGURyXt1vchyg==", "dev": true, "requires": { "cross-spawn": "^7.0.3", @@ -21500,16 +20360,12 @@ }, "human-signals": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-2.1.0.tgz", - "integrity": "sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw==", "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", @@ -21519,8 +20375,6 @@ }, "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" @@ -21528,8 +20382,6 @@ }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -21537,8 +20389,6 @@ }, "through2": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", "dev": true, "requires": { "readable-stream": "3" @@ -21546,8 +20396,6 @@ }, "yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "requires": { "cliui": "^7.0.2", @@ -21563,8 +20411,6 @@ }, "nanoid": { "version": "3.3.3", - "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.3.tgz", - "integrity": "sha512-p1sjXuopFs0xg+fPASzQ28agW1oHD7xDsd9Xkf3T15H3c/cifrFHVwrh74PdoklAPi+i7MdRsE47vm2r6JoB+w==", "dev": true }, "negotiator": { @@ -21572,26 +20418,19 @@ }, "neo-async": { "version": "2.6.2", - "resolved": "https://registry.npmjs.org/neo-async/-/neo-async-2.6.2.tgz", - "integrity": "sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw==", "dev": true }, "nerf-dart": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/nerf-dart/-/nerf-dart-1.0.0.tgz", - "integrity": "sha1-5tq3/r9a2Bbqgc9cYpxaDr3nLBo=", "dev": true }, "newtype-ts": { - "version": "0.3.5", - "resolved": "https://registry.npmjs.org/newtype-ts/-/newtype-ts-0.3.5.tgz", - "integrity": "sha512-v83UEQMlVR75yf1OUdoSFssjitxzjZlqBAjiGQ4WJaML8Jdc68LJ+BaSAXUmKY4bNzp7hygkKLYTsDi14PxI2g==", + "version": "0.3.4", + "peer": true, "requires": {} }, "node-emoji": { "version": "1.11.0", - "resolved": "https://registry.npmjs.org/node-emoji/-/node-emoji-1.11.0.tgz", - "integrity": "sha512-wo2DpQkQp7Sjm2A0cq+sN7EHKO6Sl0ctXeBdFZrL9T9+UywORbufTcTZxom8YqpLQt/FqNMUkOpkZrJVYSKD3A==", "dev": true, "requires": { "lodash": "^4.17.21" @@ -21599,32 +20438,17 @@ }, "node-fetch": { "version": "2.6.7", - "resolved": "https://registry.npmjs.org/node-fetch/-/node-fetch-2.6.7.tgz", - "integrity": "sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==", "dev": true, "requires": { "whatwg-url": "^5.0.0" } }, - "node-preload": { - "version": "0.2.1", - "dev": true, - "requires": { - "process-on-spawn": "^1.0.0" - } - }, - "node-releases": { - "version": "2.0.2", - "dev": true - }, "nofilter": { "version": "3.1.0", "dev": true }, "normalize-package-data": { "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", "dev": true, "requires": { "hosted-git-info": "^4.0.1", @@ -21639,14 +20463,10 @@ }, "normalize-url": { "version": "6.1.0", - "resolved": "https://registry.npmjs.org/normalize-url/-/normalize-url-6.1.0.tgz", - "integrity": "sha512-DlL+XwOy3NxAQ8xuC0okPgK46iuVNAK01YN7RueYBqqFeGsBjV9XmCAzAdgt+667bCl5kPh9EqKKDwnaPG1I7A==", "dev": true }, "npm": { - "version": "8.10.0", - "resolved": "https://registry.npmjs.org/npm/-/npm-8.10.0.tgz", - "integrity": "sha512-6oo65q9Quv9mRPGZJufmSH+C/UFdgelwzRXiglT/2mDB50zdy/lZK5dFY0TJ9fJ/8gHqnxcX1NM206KLjTBMlQ==", + "version": "8.7.0", "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", @@ -21654,19 +20474,19 @@ "@npmcli/ci-detect": "^2.0.0", "@npmcli/config": "^4.1.0", "@npmcli/fs": "^2.1.0", - "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/map-workspaces": "^2.0.2", "@npmcli/package-json": "^2.0.0", "@npmcli/run-script": "^3.0.1", "abbrev": "~1.1.1", "archy": "~1.0.0", - "cacache": "^16.0.7", + "cacache": "^16.0.4", "chalk": "^4.1.2", "chownr": "^2.0.0", "cli-columns": "^4.0.0", - "cli-table3": "^0.6.2", + "cli-table3": "^0.6.1", "columnify": "^1.6.0", "fastest-levenshtein": "^1.0.12", - "glob": "^8.0.1", + "glob": "^7.2.0", "graceful-fs": "^4.2.10", "hosted-git-info": "^5.0.0", "ini": "^3.0.0", @@ -21684,7 +20504,7 @@ "libnpmsearch": "^5.0.2", "libnpmteam": "^4.0.2", "libnpmversion": "^3.0.1", - "make-fetch-happen": "^10.1.3", + "make-fetch-happen": "^10.1.2", "minipass": "^3.1.6", "minipass-pipeline": "^1.2.4", "mkdirp": "^1.0.4", @@ -21696,21 +20516,21 @@ "npm-install-checks": "^5.0.0", "npm-package-arg": "^9.0.2", "npm-pick-manifest": "^7.0.1", - "npm-profile": "^6.0.3", - "npm-registry-fetch": "^13.1.1", + "npm-profile": "^6.0.2", + "npm-registry-fetch": "^13.1.0", "npm-user-validate": "^1.0.1", - "npmlog": "^6.0.2", + "npmlog": "^6.0.1", "opener": "^1.5.2", - "pacote": "^13.3.0", + "pacote": "^13.1.1", "parse-conflict-json": "^2.0.2", "proc-log": "^2.0.1", "qrcode-terminal": "^0.12.0", "read": "~1.0.7", - "read-package-json": "^5.0.1", + "read-package-json": "^5.0.0", "read-package-json-fast": "^2.0.3", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.6", "ssri": "^9.0.0", "tar": "^6.1.11", "text-table": "~0.2.0", @@ -21721,12 +20541,6 @@ "write-file-atomic": "^4.0.1" }, "dependencies": { - "@colors/colors": { - "version": "1.5.0", - "bundled": true, - "dev": true, - "optional": true - }, "@gar/promisify": { "version": "1.1.3", "bundled": true, @@ -21738,13 +20552,13 @@ "dev": true }, "@npmcli/arborist": { - "version": "5.2.0", + "version": "5.0.6", "bundled": true, "dev": true, "requires": { "@isaacs/string-locale-compare": "^1.1.0", "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", + "@npmcli/map-workspaces": "^2.0.0", "@npmcli/metavuln-calculator": "^3.0.1", "@npmcli/move-file": "^2.0.0", "@npmcli/name-from-folder": "^1.0.1", @@ -21752,7 +20566,7 @@ "@npmcli/package-json": "^2.0.0", "@npmcli/run-script": "^3.0.0", "bin-links": "^3.0.0", - "cacache": "^16.0.6", + "cacache": "^16.0.0", "common-ancestor-path": "^1.0.1", "json-parse-even-better-errors": "^2.3.1", "json-stringify-nice": "^1.1.4", @@ -21763,7 +20577,7 @@ "npm-package-arg": "^9.0.0", "npm-pick-manifest": "^7.0.0", "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", + "npmlog": "^6.0.1", "pacote": "^13.0.5", "parse-conflict-json": "^2.0.1", "proc-log": "^2.0.0", @@ -21772,7 +20586,7 @@ "read-package-json-fast": "^2.0.2", "readdir-scoped-modules": "^1.1.0", "rimraf": "^3.0.2", - "semver": "^7.3.7", + "semver": "^7.3.5", "ssri": "^9.0.0", "treeverse": "^2.0.0", "walk-up-path": "^1.0.0" @@ -21841,12 +20655,12 @@ } }, "@npmcli/map-workspaces": { - "version": "2.0.3", + "version": "2.0.2", "bundled": true, "dev": true, "requires": { "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", + "glob": "^7.2.0", "minimatch": "^5.0.1", "read-package-json-fast": "^2.0.3" } @@ -22014,7 +20828,7 @@ } }, "builtins": { - "version": "5.0.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { @@ -22022,7 +20836,7 @@ } }, "cacache": { - "version": "16.0.7", + "version": "16.0.4", "bundled": true, "dev": true, "requires": { @@ -22030,7 +20844,7 @@ "@npmcli/move-file": "^2.0.0", "chownr": "^2.0.0", "fs-minipass": "^2.1.0", - "glob": "^8.0.1", + "glob": "^7.2.0", "infer-owner": "^1.0.4", "lru-cache": "^7.7.1", "minipass": "^3.1.6", @@ -22083,11 +20897,11 @@ } }, "cli-table3": { - "version": "0.6.2", + "version": "0.6.1", "bundled": true, "dev": true, "requires": { - "@colors/colors": "1.5.0", + "colors": "1.4.0", "string-width": "^4.2.0" } }, @@ -22122,6 +20936,12 @@ "bundled": true, "dev": true }, + "colors": { + "version": "1.4.0", + "bundled": true, + "dev": true, + "optional": true + }, "columnify": { "version": "1.6.0", "bundled": true, @@ -22261,16 +21081,35 @@ } }, "glob": { - "version": "8.0.1", + "version": "7.2.0", "bundled": true, "dev": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", "inherits": "2", - "minimatch": "^5.0.1", + "minimatch": "^3.0.4", "once": "^1.3.0", "path-is-absolute": "^1.0.0" + }, + "dependencies": { + "brace-expansion": { + "version": "1.1.11", + "bundled": true, + "dev": true, + "requires": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "minimatch": { + "version": "3.1.2", + "bundled": true, + "dev": true, + "requires": { + "brace-expansion": "^1.1.7" + } + } } }, "graceful-fs": { @@ -22320,7 +21159,7 @@ } }, "https-proxy-agent": { - "version": "5.0.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { @@ -22402,7 +21241,7 @@ } }, "ip": { - "version": "1.1.8", + "version": "1.1.5", "bundled": true, "dev": true }, @@ -22420,7 +21259,7 @@ } }, "is-core-module": { - "version": "2.9.0", + "version": "2.8.1", "bundled": true, "dev": true, "requires": { @@ -22458,7 +21297,7 @@ "dev": true }, "just-diff": { - "version": "5.0.2", + "version": "5.0.1", "bundled": true, "dev": true }, @@ -22494,7 +21333,7 @@ } }, "libnpmexec": { - "version": "4.0.5", + "version": "4.0.3", "bundled": true, "dev": true, "requires": { @@ -22504,7 +21343,7 @@ "chalk": "^4.1.0", "mkdirp-infer-owner": "^2.0.0", "npm-package-arg": "^9.0.1", - "npmlog": "^6.0.2", + "npmlog": "^6.0.1", "pacote": "^13.0.5", "proc-log": "^2.0.0", "read": "^1.0.7", @@ -22549,14 +21388,14 @@ } }, "libnpmpublish": { - "version": "6.0.4", + "version": "6.0.3", "bundled": true, "dev": true, "requires": { "normalize-package-data": "^4.0.0", "npm-package-arg": "^9.0.1", "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", + "semver": "^7.1.3", "ssri": "^9.0.0" } }, @@ -22578,7 +21417,7 @@ } }, "libnpmversion": { - "version": "3.0.4", + "version": "3.0.3", "bundled": true, "dev": true, "requires": { @@ -22586,16 +21425,16 @@ "@npmcli/run-script": "^3.0.0", "json-parse-even-better-errors": "^2.3.1", "proc-log": "^2.0.0", - "semver": "^7.3.7" + "semver": "^7.3.5" } }, "lru-cache": { - "version": "7.9.0", + "version": "7.7.3", "bundled": true, "dev": true }, "make-fetch-happen": { - "version": "10.1.3", + "version": "10.1.2", "bundled": true, "dev": true, "requires": { @@ -22714,63 +21553,31 @@ "bundled": true, "dev": true }, - "mute-stream": { - "version": "0.0.8", - "bundled": true, - "dev": true - }, - "negotiator": { - "version": "0.6.3", - "bundled": true, - "dev": true - }, - "node-gyp": { - "version": "9.0.0", - "bundled": true, - "dev": true, - "requires": { - "env-paths": "^2.2.0", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^5.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } + "mute-stream": { + "version": "0.0.8", + "bundled": true, + "dev": true + }, + "negotiator": { + "version": "0.6.3", + "bundled": true, + "dev": true + }, + "node-gyp": { + "version": "9.0.0", + "bundled": true, + "dev": true, + "requires": { + "env-paths": "^2.2.0", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^5.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" } }, "nopt": { @@ -22832,11 +21639,11 @@ } }, "npm-packlist": { - "version": "5.0.3", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { - "glob": "^8.0.1", + "glob": "^7.2.0", "ignore-walk": "^5.0.1", "npm-bundled": "^1.1.2", "npm-normalize-package-bin": "^1.0.1" @@ -22854,16 +21661,16 @@ } }, "npm-profile": { - "version": "6.0.3", + "version": "6.0.2", "bundled": true, "dev": true, "requires": { - "npm-registry-fetch": "^13.0.1", + "npm-registry-fetch": "^13.0.0", "proc-log": "^2.0.0" } }, "npm-registry-fetch": { - "version": "13.1.1", + "version": "13.1.0", "bundled": true, "dev": true, "requires": { @@ -22882,13 +21689,13 @@ "dev": true }, "npmlog": { - "version": "6.0.2", + "version": "6.0.1", "bundled": true, "dev": true, "requires": { "are-we-there-yet": "^3.0.0", "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", + "gauge": "^4.0.0", "set-blocking": "^2.0.0" } }, @@ -22914,7 +21721,7 @@ } }, "pacote": { - "version": "13.3.0", + "version": "13.1.1", "bundled": true, "dev": true, "requires": { @@ -23012,11 +21819,11 @@ "dev": true }, "read-package-json": { - "version": "5.0.1", + "version": "5.0.0", "bundled": true, "dev": true, "requires": { - "glob": "^8.0.1", + "glob": "^7.2.0", "json-parse-even-better-errors": "^2.3.1", "normalize-package-data": "^4.0.0", "npm-normalize-package-bin": "^1.0.1" @@ -23063,38 +21870,6 @@ "dev": true, "requires": { "glob": "^7.1.3" - }, - "dependencies": { - "brace-expansion": { - "version": "1.1.11", - "bundled": true, - "dev": true, - "requires": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "glob": { - "version": "7.2.0", - "bundled": true, - "dev": true, - "requires": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.0.4", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" - } - }, - "minimatch": { - "version": "3.1.2", - "bundled": true, - "dev": true, - "requires": { - "brace-expansion": "^1.1.7" - } - } } }, "safe-buffer": { @@ -23109,21 +21884,11 @@ "optional": true }, "semver": { - "version": "7.3.7", + "version": "7.3.6", "bundled": true, "dev": true, "requires": { - "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "bundled": true, - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - } + "lru-cache": "^7.4.0" } }, "set-blocking": { @@ -23151,13 +21916,13 @@ } }, "socks-proxy-agent": { - "version": "6.2.0", + "version": "6.1.1", "bundled": true, "dev": true, "requires": { "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "debug": "^4.3.1", + "socks": "^2.6.1" } }, "spdx-correct": { @@ -23353,163 +22118,11 @@ "path-key": "^3.0.0" } }, - "nyc": { - "version": "15.1.0", - "dev": true, - "requires": { - "@istanbuljs/load-nyc-config": "^1.0.0", - "@istanbuljs/schema": "^0.1.2", - "caching-transform": "^4.0.0", - "convert-source-map": "^1.7.0", - "decamelize": "^1.2.0", - "find-cache-dir": "^3.2.0", - "find-up": "^4.1.0", - "foreground-child": "^2.0.0", - "get-package-type": "^0.1.0", - "glob": "^7.1.6", - "istanbul-lib-coverage": "^3.0.0", - "istanbul-lib-hook": "^3.0.0", - "istanbul-lib-instrument": "^4.0.0", - "istanbul-lib-processinfo": "^2.0.2", - "istanbul-lib-report": "^3.0.0", - "istanbul-lib-source-maps": "^4.0.0", - "istanbul-reports": "^3.0.2", - "make-dir": "^3.0.0", - "node-preload": "^0.2.1", - "p-map": "^3.0.0", - "process-on-spawn": "^1.0.0", - "resolve-from": "^5.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "spawn-wrap": "^2.0.0", - "test-exclude": "^6.0.0", - "yargs": "^15.0.2" - }, - "dependencies": { - "ansi-regex": { - "version": "5.0.1", - "dev": true - }, - "ansi-styles": { - "version": "4.3.0", - "dev": true, - "requires": { - "color-convert": "^2.0.1" - } - }, - "cliui": { - "version": "6.0.0", - "dev": true, - "requires": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^6.2.0" - } - }, - "emoji-regex": { - "version": "8.0.0", - "dev": true - }, - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, - "p-map": { - "version": "3.0.0", - "dev": true, - "requires": { - "aggregate-error": "^3.0.0" - } - }, - "string-width": { - "version": "4.2.3", - "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", - "dev": true, - "requires": { - "ansi-regex": "^5.0.1" - } - }, - "wrap-ansi": { - "version": "6.2.0", - "dev": true, - "requires": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - } - }, - "y18n": { - "version": "4.0.3", - "dev": true - }, - "yargs": { - "version": "15.4.1", - "dev": true, - "requires": { - "cliui": "^6.0.0", - "decamelize": "^1.2.0", - "find-up": "^4.1.0", - "get-caller-file": "^2.0.1", - "require-directory": "^2.1.1", - "require-main-filename": "^2.0.0", - "set-blocking": "^2.0.0", - "string-width": "^4.2.0", - "which-module": "^2.0.0", - "y18n": "^4.0.0", - "yargs-parser": "^18.1.2" - } - }, - "yargs-parser": { - "version": "18.1.3", - "dev": true, - "requires": { - "camelcase": "^5.0.0", - "decamelize": "^1.2.0" - } - } - } - }, "object-inspect": { "version": "1.12.2", "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.12.2.tgz", - "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==" + "integrity": "sha512-z+cPxW0QGUp0mcqcsgQyLVRDoXFQbXOwBaqyF7VIgI4TWNQsDHrBpUQslRmIfAoYWdYzs6UlKJtB2XJpTaNSpQ==", + "dev": true }, "on-finished": { "version": "2.3.0", @@ -23529,12 +22142,18 @@ "dev": true, "requires": { "mimic-fn": "^2.1.0" + }, + "dependencies": { + "mimic-fn": { + "version": "2.1.0", + "dev": true + } } }, "openapi-types": { - "version": "11.0.1", - "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-11.0.1.tgz", - "integrity": "sha512-P2pGRlHFXgP8z6vrp5P/MtftOXYtlIY1A+V0VmioOoo85NN6RSPgGbEprRAUNMIsbfRjnCPdx/r8mi8QRR7grQ==" + "version": "12.0.2", + "resolved": "https://registry.npmjs.org/openapi-types/-/openapi-types-12.0.2.tgz", + "integrity": "sha512-GuTo7FyZjOIWVhIhQSWJVaws6A82sWIGyQogxxYBYKZ0NBdyP2CYSIgOwFfSB+UVoPExk/YzFpyYitHS8KVZtA==" }, "os-shim": { "version": "0.1.3", @@ -23546,8 +22165,6 @@ }, "p-each-series": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/p-each-series/-/p-each-series-2.2.0.tgz", - "integrity": "sha512-ycIL2+1V32th+8scbpTvyHNaHe02z0sjgh91XXjAk+ZeXoPN4Z46DVUnzdso0aX4KckKw0FNNFHdjZ2UsZvxiA==", "dev": true }, "p-event": { @@ -23559,8 +22176,6 @@ }, "p-filter": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-filter/-/p-filter-2.1.0.tgz", - "integrity": "sha512-ZBxxZ5sL2HghephhpGAQdoskxplTwr7ICaehZwLIlfL6acuVgZPm8yBNuRAFBGEqtD/hmUeq9eqLg2ys9Xr/yw==", "dev": true, "requires": { "p-map": "^2.0.0" @@ -23568,30 +22183,26 @@ "dependencies": { "p-map": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-2.1.0.tgz", - "integrity": "sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw==", "dev": true } } }, "p-is-promise": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/p-is-promise/-/p-is-promise-3.0.0.tgz", - "integrity": "sha512-Wo8VsW4IRQSKVXsJCn7TomUaVtyfjVDn3nUP7kE967BQk0CwFpdbZs0X0uk5sW9mkBa9eNM7hCMaG93WUAwxYQ==", "dev": true }, "p-limit": { - "version": "3.1.0", + "version": "2.3.0", "dev": true, "requires": { - "yocto-queue": "^0.1.0" + "p-try": "^2.0.0" } }, "p-locate": { - "version": "5.0.0", + "version": "4.1.0", "dev": true, "requires": { - "p-limit": "^3.0.2" + "p-limit": "^2.2.0" } }, "p-map": { @@ -23603,17 +22214,13 @@ }, "p-reduce": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/p-reduce/-/p-reduce-2.1.0.tgz", - "integrity": "sha512-2USApvnsutq8uoxZBGbbWM0JIYLiEMJ9RlaN7fAzVNb9OZN0SHjjTTfIcb667XynS5Y1VhwDJVDa72TnPzAYWw==", "dev": true }, "p-retry": { - "version": "4.6.2", - "resolved": "https://registry.npmjs.org/p-retry/-/p-retry-4.6.2.tgz", - "integrity": "sha512-312Id396EbJdvRONlngUx0NydfrIQ5lsYu0znKVUzVvArzEIt08V1qhtyESbGVd1FGX7UKtiFp5uwKZdM8wIuQ==", + "version": "4.6.1", "dev": true, "requires": { - "@types/retry": "0.12.0", + "@types/retry": "^0.12.0", "retry": "^0.13.1" } }, @@ -23625,20 +22232,8 @@ "version": "2.2.0", "dev": true }, - "package-hash": { - "version": "4.0.0", - "dev": true, - "requires": { - "graceful-fs": "^4.1.15", - "hasha": "^5.0.0", - "lodash.flattendeep": "^4.4.0", - "release-zalgo": "^1.0.0" - } - }, "parent-module": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/parent-module/-/parent-module-1.0.1.tgz", - "integrity": "sha512-GQ2EWRpQV8/o+Aw8YqtfZZPfNRWZYkbidE9k5rpl/hC3vtHHBfGm2Ifi6qWV+coDGkrUKZAxE3Lot5kcsRlh+g==", "dev": true, "requires": { "callsites": "^3.0.0" @@ -23646,16 +22241,12 @@ "dependencies": { "callsites": { "version": "3.1.0", - "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", - "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true } } }, "parse-json": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-5.2.0.tgz", - "integrity": "sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==", "dev": true, "requires": { "@babel/code-frame": "^7.0.0", @@ -23679,9 +22270,7 @@ "version": "1.3.3" }, "path-browserify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/path-browserify/-/path-browserify-1.0.1.tgz", - "integrity": "sha512-b7uo2UCUOYZcnF/3ID0lulOJi/bafxa1xPe7ZPsammBSpjSWQkjNxlt635YGS2MiR9GjvuXCtz2emr3jbsz98g==" + "version": "1.0.1" }, "path-exists": { "version": "4.0.0", @@ -23697,8 +22286,6 @@ }, "path-parse": { "version": "1.0.7", - "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", - "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", "dev": true }, "path-to-regexp": { @@ -23712,10 +22299,6 @@ "version": "1.1.1", "dev": true }, - "picocolors": { - "version": "1.0.0", - "dev": true - }, "picomatch": { "version": "2.3.1" }, @@ -23727,8 +22310,6 @@ }, "pify": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/pify/-/pify-4.0.1.tgz", - "integrity": "sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==", "dev": true }, "pkg-conf": { @@ -23771,48 +22352,10 @@ "path-exists": { "version": "5.0.0", "dev": true - }, - "yocto-queue": { - "version": "1.0.0", - "dev": true - } - } - }, - "pkg-dir": { - "version": "4.2.0", - "dev": true, - "requires": { - "find-up": "^4.0.0" - }, - "dependencies": { - "find-up": { - "version": "4.1.0", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } + }, + "yocto-queue": { + "version": "1.0.0", + "dev": true } } }, @@ -23841,6 +22384,14 @@ "which": "^1.2.9" } }, + "lru-cache": { + "version": "4.1.5", + "dev": true, + "requires": { + "pseudomap": "^1.0.2", + "yallist": "^2.1.2" + } + }, "shebang-command": { "version": "1.2.0", "dev": true, @@ -23858,6 +22409,10 @@ "requires": { "isexe": "^2.0.0" } + }, + "yallist": { + "version": "2.1.2", + "dev": true } } }, @@ -23873,19 +22428,11 @@ } }, "process-nextick-args": { - "version": "2.0.1" - }, - "process-on-spawn": { - "version": "1.0.0", - "dev": true, - "requires": { - "fromentries": "^1.2.0" - } + "version": "2.0.1", + "dev": true }, "promise-events": { "version": "0.2.4", - "resolved": "https://registry.npmjs.org/promise-events/-/promise-events-0.2.4.tgz", - "integrity": "sha512-GCM6DmJcSCC8XboZIzYJAlADwkIS1P54XFUJQYhB7dpE7rtXPzPrT13dsV4Qm0FMCKptwMTyF8ZCir803RfKzA==", "dev": true }, "proxy-addr": { @@ -23901,8 +22448,6 @@ }, "pump": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pump/-/pump-3.0.0.tgz", - "integrity": "sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww==", "dev": true, "requires": { "end-of-stream": "^1.1.0", @@ -23911,14 +22456,11 @@ }, "q": { "version": "1.5.1", - "resolved": "https://registry.npmjs.org/q/-/q-1.5.1.tgz", - "integrity": "sha1-fjL3W0E4EpHQRhHxvxQQmsAGUdc=", "dev": true }, "qs": { "version": "6.10.3", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.10.3.tgz", - "integrity": "sha512-wr7M2E0OFRfIfJZjKGieI8lBKb7fRCH4Fv5KNPEs7gJ8jadvotdsS08PzOKR7opXhZ/Xkjtt3WF9g38drmyRqQ==", + "dev": true, "requires": { "side-channel": "^1.0.4" } @@ -23928,8 +22470,6 @@ }, "quick-lru": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-4.0.1.tgz", - "integrity": "sha512-ARhCpm70fzdcvNQfPoy49IaanKkTlRWF2JMzqhcJbhSFRZv7nPTvZJdcY7301IPmvW+/p0RgIWnQDLJxifsQ7g==", "dev": true }, "randombytes": { @@ -23944,8 +22484,6 @@ }, "raw-body": { "version": "2.5.1", - "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.1.tgz", - "integrity": "sha512-qqJBtEyVgS0ZmPGdCFPWJ3FreoqvG4MVQln/kCgF7Olq95IbOp0/BWyMwbdtn4VTvkM8Y7khCQ2Xgk/tcrCXig==", "dev": true, "requires": { "bytes": "3.1.2", @@ -23956,8 +22494,6 @@ }, "rc": { "version": "1.2.8", - "resolved": "https://registry.npmjs.org/rc/-/rc-1.2.8.tgz", - "integrity": "sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw==", "dev": true, "requires": { "deep-extend": "^0.6.0", @@ -23968,16 +22504,12 @@ "dependencies": { "strip-json-comments": { "version": "2.0.1", - "resolved": "https://registry.npmjs.org/strip-json-comments/-/strip-json-comments-2.0.1.tgz", - "integrity": "sha1-PFMZQukIwml8DsNEhYwobHygpgo=", "dev": true } } }, "read-pkg": { "version": "5.2.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-5.2.0.tgz", - "integrity": "sha512-Ug69mNOpfvKDAc2Q8DRpMjjzdtrnv9HcSMX+4VsZxD1aZ6ZzrIE7rlzXBtWTyhULSMKg076AW6WR5iZpD0JiOg==", "dev": true, "requires": { "@types/normalize-package-data": "^2.4.0", @@ -23988,14 +22520,10 @@ "dependencies": { "hosted-git-info": { "version": "2.8.9", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.8.9.tgz", - "integrity": "sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==", "dev": true }, "normalize-package-data": { "version": "2.5.0", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-2.5.0.tgz", - "integrity": "sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA==", "dev": true, "requires": { "hosted-git-info": "^2.1.4", @@ -24006,22 +22534,16 @@ }, "semver": { "version": "5.7.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.1.tgz", - "integrity": "sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ==", "dev": true }, "type-fest": { "version": "0.6.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.6.0.tgz", - "integrity": "sha512-q+MB8nYR1KDLrgr4G5yemftpMC7/QLqVndBmEEdqzmNj5dcFOO4Oo8qlwZE3ULT3+Zim1F8Kq4cBnikNhlCMlg==", "dev": true } } }, "read-pkg-up": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-7.0.1.tgz", - "integrity": "sha512-zK0TB7Xd6JpCLmlLmufqykGE+/TlOePD6qKClNW7hHDKFh/J7/7gCWGR7joEQEW1bKq3a3yUZSObOoWLFQ4ohg==", "dev": true, "requires": { "find-up": "^4.1.0", @@ -24029,55 +22551,14 @@ "type-fest": "^0.8.1" }, "dependencies": { - "find-up": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-4.1.0.tgz", - "integrity": "sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==", - "dev": true, - "requires": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - } - }, - "locate-path": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-5.0.0.tgz", - "integrity": "sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==", - "dev": true, - "requires": { - "p-locate": "^4.1.0" - } - }, - "p-limit": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-2.3.0.tgz", - "integrity": "sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==", - "dev": true, - "requires": { - "p-try": "^2.0.0" - } - }, - "p-locate": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-4.1.0.tgz", - "integrity": "sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==", - "dev": true, - "requires": { - "p-limit": "^2.2.0" - } - }, "type-fest": { "version": "0.8.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.8.1.tgz", - "integrity": "sha512-4dbzIzqvjtgiM5rw1k5rEHtBANKmdudhGyBEajN01fEyhaAIhsoKNy6y7+IN93IfpFtwY9iqi7kD+xwKhQsNJA==", "dev": true } } }, "read-yaml-file": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/read-yaml-file/-/read-yaml-file-1.1.0.tgz", - "integrity": "sha512-VIMnQi/Z4HT2Fxuwg5KrY174U1VdUIASQVWXXyqtNRtxSr9IYkn1rsI6Tb6HsrHCmB7gVpNwX6JxPTHcH6IoTA==", "dev": true, "requires": { "graceful-fs": "^4.1.5", @@ -24088,8 +22569,6 @@ "dependencies": { "argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -24097,8 +22576,6 @@ }, "js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -24107,14 +22584,13 @@ }, "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } }, "readable-stream": { "version": "2.3.7", + "dev": true, "requires": { "core-util-is": "~1.0.0", "inherits": "~2.0.3", @@ -24123,6 +22599,12 @@ "safe-buffer": "~5.1.1", "string_decoder": "~1.1.1", "util-deprecate": "~1.0.1" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } } }, "readdirp": { @@ -24134,8 +22616,6 @@ }, "redent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-3.0.0.tgz", - "integrity": "sha512-6tDA8g98We0zd0GvVeMT9arEOnTw9qM03L9cJXaCjrip1OO764RDBLBfrB4cwzNGDj5OA5ioymC9GkizgWJDUg==", "dev": true, "requires": { "indent-string": "^4.0.0", @@ -24144,8 +22624,6 @@ }, "redeyed": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/redeyed/-/redeyed-2.1.1.tgz", - "integrity": "sha1-iYS1gV2ZyyIEacme7v/jiRPmzAs=", "dev": true, "requires": { "esprima": "~4.0.0" @@ -24153,44 +22631,25 @@ }, "regenerator-runtime": { "version": "0.13.9", - "resolved": "https://registry.npmjs.org/regenerator-runtime/-/regenerator-runtime-0.13.9.tgz", - "integrity": "sha512-p3VT+cOEgxFsRRA9X4lkI1E+k2/CtnKtU4gcxyaCUreilL/vqI6CdZ3wxVUx3UOUg+gnUOQQcRI7BmSI656MYA==", "dev": true }, "registry-auth-token": { "version": "4.2.1", - "resolved": "https://registry.npmjs.org/registry-auth-token/-/registry-auth-token-4.2.1.tgz", - "integrity": "sha512-6gkSb4U6aWJB4SF2ZvLb76yCBjcvufXBqvvEx1HbmKPkutswjW1xNVRY0+daljIYRbogN7O0etYSlbiaEQyMyw==", "dev": true, "requires": { "rc": "^1.2.8" } }, - "release-zalgo": { - "version": "1.0.0", - "dev": true, - "requires": { - "es6-error": "^4.0.1" - } - }, "remove-trailing-separator": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/remove-trailing-separator/-/remove-trailing-separator-1.1.0.tgz", - "integrity": "sha1-wkvOKig62tW8P1jg1IJJuSN52O8=", "dev": true }, "require-directory": { "version": "2.1.1", "dev": true }, - "require-main-filename": { - "version": "2.0.0", - "dev": true - }, "resolve": { "version": "1.22.0", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.0.tgz", - "integrity": "sha512-Hhtrw0nLeSrFQ7phPp4OOcVjLPIeMnRlr5mcnVuMe7M/7eBn98A3hmFRLoFo3DLZkivSYwhRUJTyPyWAk56WLw==", "dev": true, "requires": { "is-core-module": "^2.8.1", @@ -24203,10 +22662,16 @@ "dev": true, "requires": { "resolve-from": "^5.0.0" + }, + "dependencies": { + "resolve-from": { + "version": "5.0.0", + "dev": true + } } }, "resolve-from": { - "version": "5.0.0", + "version": "4.0.0", "dev": true }, "restore-cursor": { @@ -24219,8 +22684,6 @@ }, "retry": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/retry/-/retry-0.13.1.tgz", - "integrity": "sha512-XQBQ3I8W1Cge0Seh+6gjj03LbmRFWuoszgK9ooCpwYIrhhoO80pfq4cUkU5DkknwfOfFteRwlZ56PYOGYyFWdg==", "dev": true }, "reusify": { @@ -24251,15 +22714,13 @@ } }, "safe-buffer": { - "version": "5.1.2" + "version": "5.2.1" }, "safer-buffer": { "version": "2.1.2" }, "semantic-release": { "version": "19.0.2", - "resolved": "https://registry.npmjs.org/semantic-release/-/semantic-release-19.0.2.tgz", - "integrity": "sha512-7tPonjZxukKECmClhsfyMKDt0GR38feIC2HxgyYaBi+9tDySBLjK/zYDLhh+m6yjnHIJa9eBTKYE7k63ZQcYbw==", "dev": true, "peer": true, "requires": { @@ -24295,36 +22756,26 @@ "dependencies": { "@semantic-release/error": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/@semantic-release/error/-/error-3.0.0.tgz", - "integrity": "sha512-5hiM4Un+tpl4cKw3lV4UgzJj+SmfNIDCLLw0TepzQxz9ZGV5ixnqkzIVF+3tp0ZHgcMKE+VNGHJjEeyFG2dcSw==", "dev": true, "peer": true }, "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, "peer": true }, "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, "peer": true }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true, "peer": true }, "figures": { "version": "3.2.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-3.2.0.tgz", - "integrity": "sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg==", "dev": true, "peer": true, "requires": { @@ -24333,15 +22784,16 @@ }, "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, + "peer": true + }, + "resolve-from": { + "version": "5.0.0", "dev": true, "peer": 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, "peer": true, "requires": { @@ -24352,8 +22804,6 @@ }, "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, "peer": true, "requires": { @@ -24362,8 +22812,6 @@ }, "yargs": { "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", "dev": true, "peer": true, "requires": { @@ -24380,27 +22828,13 @@ }, "semver": { "version": "7.3.7", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.3.7.tgz", - "integrity": "sha512-QlYTucUYOews+WeEujDoEGziz4K6c47V/Bd+LjSSYcA94p+DmINdf7ncaUinThfvZyu13lN9OY1XDxt8C0Tw0g==", + "dev": true, "requires": { "lru-cache": "^6.0.0" - }, - "dependencies": { - "lru-cache": { - "version": "6.0.0", - "requires": { - "yallist": "^4.0.0" - } - }, - "yallist": { - "version": "4.0.0" - } } }, "semver-diff": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/semver-diff/-/semver-diff-3.1.1.tgz", - "integrity": "sha512-GX0Ix/CJcHyB8c4ykpHGIAvLyOwOobtM/8d+TQkAd81/bEjgPHrfba41Vpesr7jX/t8Uh+R3EX9eAS5be+jQYg==", "dev": true, "requires": { "semver": "^6.3.0" @@ -24408,16 +22842,12 @@ "dependencies": { "semver": { "version": "6.3.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.0.tgz", - "integrity": "sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw==", "dev": true } } }, "semver-regex": { - "version": "3.1.4", - "resolved": "https://registry.npmjs.org/semver-regex/-/semver-regex-3.1.4.tgz", - "integrity": "sha512-6IiqeZNgq01qGf0TId0t3NvKzSvUsjcpdEO3AQNeIjR6A2+ckTnQlDpl4qu1bjRv0RzN3FP9hzFmws3lKqRWkA==", + "version": "3.1.3", "dev": true }, "send": { @@ -24459,6 +22889,9 @@ "toidentifier": "1.0.1" } }, + "mime": { + "version": "1.6.0" + }, "ms": { "version": "2.1.3" }, @@ -24469,8 +22902,6 @@ }, "serialize-error": { "version": "7.0.1", - "resolved": "https://registry.npmjs.org/serialize-error/-/serialize-error-7.0.1.tgz", - "integrity": "sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw==", "dev": true, "requires": { "type-fest": "^0.13.1" @@ -24478,8 +22909,6 @@ "dependencies": { "type-fest": { "version": "0.13.1", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.13.1.tgz", - "integrity": "sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg==", "dev": true } } @@ -24500,10 +22929,6 @@ "send": "0.17.2" } }, - "set-blocking": { - "version": "2.0.0", - "dev": true - }, "setprototypeof": { "version": "1.2.0" }, @@ -24520,6 +22945,7 @@ }, "side-channel": { "version": "1.0.4", + "dev": true, "requires": { "call-bind": "^1.0.0", "get-intrinsic": "^1.0.2", @@ -24532,8 +22958,6 @@ }, "signale": { "version": "1.4.0", - "resolved": "https://registry.npmjs.org/signale/-/signale-1.4.0.tgz", - "integrity": "sha512-iuh+gPf28RkltuJC7W5MRi6XAjTDCAPC/prJUpQoG4vIP3MJZ+GTydVnodXA7pwvTKb2cA0m9OFZW/cdWy/I/w==", "dev": true, "requires": { "chalk": "^2.3.2", @@ -24543,8 +22967,6 @@ "dependencies": { "ansi-styles": { "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", "dev": true, "requires": { "color-convert": "^1.9.0" @@ -24552,8 +22974,6 @@ }, "chalk": { "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", "dev": true, "requires": { "ansi-styles": "^3.2.1", @@ -24561,31 +22981,12 @@ "supports-color": "^5.3.0" } }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=", - "dev": true - }, "escape-string-regexp": { "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ=", "dev": true }, "figures": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-2.0.0.tgz", - "integrity": "sha1-OrGi0qYsi/tDGgyUy3l6L84nyWI=", "dev": true, "requires": { "escape-string-regexp": "^1.0.5" @@ -24593,17 +22994,17 @@ }, "find-up": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/find-up/-/find-up-2.1.0.tgz", - "integrity": "sha1-RdG35QbHF93UgndaK3eSCjwMV6c=", "dev": true, "requires": { "locate-path": "^2.0.0" } }, + "has-flag": { + "version": "3.0.0", + "dev": true + }, "load-json-file": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", - "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "^4.1.2", @@ -24614,8 +23015,6 @@ }, "locate-path": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/locate-path/-/locate-path-2.0.0.tgz", - "integrity": "sha1-K1aLJl7slExtnA3pw9u7ygNUzY4=", "dev": true, "requires": { "p-locate": "^2.0.0", @@ -24624,8 +23023,6 @@ }, "p-limit": { "version": "1.3.0", - "resolved": "https://registry.npmjs.org/p-limit/-/p-limit-1.3.0.tgz", - "integrity": "sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==", "dev": true, "requires": { "p-try": "^1.0.0" @@ -24633,8 +23030,6 @@ }, "p-locate": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/p-locate/-/p-locate-2.0.0.tgz", - "integrity": "sha1-IKAQOyIqcMj9OcwuWAaA893l7EM=", "dev": true, "requires": { "p-limit": "^1.1.0" @@ -24642,14 +23037,10 @@ }, "p-try": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/p-try/-/p-try-1.0.0.tgz", - "integrity": "sha1-y8ec26+P1CKOE/Yh8rGiN8GyB7M=", "dev": true }, "parse-json": { "version": "4.0.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", - "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { "error-ex": "^1.3.1", @@ -24658,20 +23049,14 @@ }, "path-exists": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-3.0.0.tgz", - "integrity": "sha1-zg6+ql94yxiSXqfYENe1mwEP1RU=", "dev": true }, "pify": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", - "integrity": "sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY=", "dev": true }, "pkg-conf": { "version": "2.1.0", - "resolved": "https://registry.npmjs.org/pkg-conf/-/pkg-conf-2.1.0.tgz", - "integrity": "sha1-ISZRTKbyq/69FoWW3xi6V4Z/AFg=", "dev": true, "requires": { "find-up": "^2.0.0", @@ -24680,14 +23065,10 @@ }, "strip-bom": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true }, "supports-color": { "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", "dev": true, "requires": { "has-flag": "^3.0.0" @@ -24707,14 +23088,8 @@ "is-fullwidth-code-point": "^4.0.0" } }, - "source-map": { - "version": "0.5.7", - "dev": true - }, "spawn-error-forwarder": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/spawn-error-forwarder/-/spawn-error-forwarder-1.0.0.tgz", - "integrity": "sha1-Gv2Uc46ZmwNG17n8NzvlXgdXcCk=", "dev": true }, "spawn-sync": { @@ -24725,22 +23100,8 @@ "os-shim": "^0.1.2" } }, - "spawn-wrap": { - "version": "2.0.0", - "dev": true, - "requires": { - "foreground-child": "^2.0.0", - "is-windows": "^1.0.2", - "make-dir": "^3.0.0", - "rimraf": "^3.0.0", - "signal-exit": "^3.0.2", - "which": "^2.0.1" - } - }, "spdx-correct": { "version": "3.1.1", - "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.1.1.tgz", - "integrity": "sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==", "dev": true, "requires": { "spdx-expression-parse": "^3.0.0", @@ -24749,14 +23110,10 @@ }, "spdx-exceptions": { "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", "dev": true }, "spdx-expression-parse": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -24765,14 +23122,10 @@ }, "spdx-license-ids": { "version": "3.0.11", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.11.tgz", - "integrity": "sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==", "dev": true }, "split": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/split/-/split-1.0.1.tgz", - "integrity": "sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==", "dev": true, "requires": { "through": "2" @@ -24780,8 +23133,6 @@ }, "split2": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/split2/-/split2-1.0.0.tgz", - "integrity": "sha1-UuLiIdiMdfmnP5BVbiY/+WdysxQ=", "dev": true, "requires": { "through2": "~2.0.0" @@ -24809,14 +23160,10 @@ }, "stream-buffers": { "version": "3.0.2", - "resolved": "https://registry.npmjs.org/stream-buffers/-/stream-buffers-3.0.2.tgz", - "integrity": "sha512-DQi1h8VEBA/lURbSwFtEHnSTb9s2/pwLEaFuNhXwy1Dx3Sa0lOuYT2yNUr4/j2fs8oCAMANtrZ5OrPZtyVs3MQ==", "dev": true }, "stream-combiner2": { "version": "1.1.1", - "resolved": "https://registry.npmjs.org/stream-combiner2/-/stream-combiner2-1.1.1.tgz", - "integrity": "sha1-+02KFCDqNidk4hrUeAOXvry0HL4=", "dev": true, "requires": { "duplexer2": "~0.1.0", @@ -24825,8 +23172,15 @@ }, "string_decoder": { "version": "1.1.1", + "dev": true, "requires": { "safe-buffer": "~5.1.0" + }, + "dependencies": { + "safe-buffer": { + "version": "5.1.2", + "dev": true + } } }, "string-argv": { @@ -24849,18 +23203,12 @@ "ansi-regex": "^6.0.1" } }, - "strip-bom": { - "version": "4.0.0", - "dev": true - }, "strip-final-newline": { "version": "2.0.0", "dev": true }, "strip-indent": { "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-3.0.0.tgz", - "integrity": "sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ==", "dev": true, "requires": { "min-indent": "^1.0.0" @@ -24871,32 +23219,45 @@ "dev": true }, "superagent": { - "version": "3.8.3", + "version": "7.1.6", + "resolved": "https://registry.npmjs.org/superagent/-/superagent-7.1.6.tgz", + "integrity": "sha512-gZkVCQR1gy/oUXr+kxJMLDjla434KmSOKbx5iGD30Ql+AkJQ/YlPKECJy2nhqOsHLjGHzoDTXNSjhnvWhzKk7g==", + "dev": true, "requires": { - "component-emitter": "^1.2.0", - "cookiejar": "^2.1.0", - "debug": "^3.1.0", - "extend": "^3.0.0", - "form-data": "^2.3.1", - "formidable": "^1.2.0", - "methods": "^1.1.1", - "mime": "^1.4.1", - "qs": "^6.5.1", - "readable-stream": "^2.3.5" + "component-emitter": "^1.3.0", + "cookiejar": "^2.1.3", + "debug": "^4.3.4", + "fast-safe-stringify": "^2.1.1", + "form-data": "^4.0.0", + "formidable": "^2.0.1", + "methods": "^1.1.2", + "mime": "2.6.0", + "qs": "^6.10.3", + "readable-stream": "^3.6.0", + "semver": "^7.3.7" }, "dependencies": { - "debug": { - "version": "3.2.7", + "mime": { + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-2.6.0.tgz", + "integrity": "sha512-USPkMeET31rOMiarsBNIHZKLGgvKc/LrjofAnBlOttf5ajRvqiRA8QsenbcooctK6d6Ts6aqZXBA+XbkKthiQg==", + "dev": true + }, + "readable-stream": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.0.tgz", + "integrity": "sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA==", + "dev": true, "requires": { - "ms": "^2.1.1" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" } } } }, "supertap": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/supertap/-/supertap-3.0.1.tgz", - "integrity": "sha512-u1ZpIBCawJnO+0QePsEiOknOfCRq0yERxiAchT0i4li0WHNUJbf0evXXSXOcCAR4M8iMDoajXYmstm/qO81Isw==", "dev": true, "requires": { "indent-string": "^5.0.0", @@ -24907,8 +23268,6 @@ "dependencies": { "argparse": { "version": "1.0.10", - "resolved": "https://registry.npmjs.org/argparse/-/argparse-1.0.10.tgz", - "integrity": "sha512-o5Roy6tNG4SL/FOkCAN6RzjiakZS25RLYFrcMttJqbdd8BWrnA+fGz57iN5Pb06pvBGvl5gQ0B48dJlslXvoTg==", "dev": true, "requires": { "sprintf-js": "~1.0.2" @@ -24916,14 +23275,10 @@ }, "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 }, "js-yaml": { "version": "3.14.1", - "resolved": "https://registry.npmjs.org/js-yaml/-/js-yaml-3.14.1.tgz", - "integrity": "sha512-okMH7OXXJ7YrN9Ok3/SXrnu4iX9yOk+25nqX4imS2npuvTYDmo/QEZoqwZkYaIDk3jVvBOTOIEgEhaLOynBS9g==", "dev": true, "requires": { "argparse": "^1.0.7", @@ -24933,69 +23288,25 @@ } }, "supertest": { - "version": "6.1.6", + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/supertest/-/supertest-6.2.3.tgz", + "integrity": "sha512-3GSdMYTMItzsSYjnIcljxMVZKPW1J9kYHZY+7yLfD0wpPwww97GeImZC1oOk0S5+wYl2niJwuFusBJqwLqYM3g==", + "dev": true, "requires": { "methods": "^1.1.2", - "superagent": "^6.1.0" - }, - "dependencies": { - "form-data": { - "version": "3.0.1", - "requires": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" - } - }, - "mime": { - "version": "2.6.0" - }, - "readable-stream": { - "version": "3.6.0", - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "superagent": { - "version": "6.1.0", - "requires": { - "component-emitter": "^1.3.0", - "cookiejar": "^2.1.2", - "debug": "^4.1.1", - "fast-safe-stringify": "^2.0.7", - "form-data": "^3.0.0", - "formidable": "^1.2.2", - "methods": "^1.1.2", - "mime": "^2.4.6", - "qs": "^6.9.4", - "readable-stream": "^3.6.0", - "semver": "^7.3.2" - } - } + "superagent": "^7.1.3" } }, "supports-hyperlinks": { "version": "2.2.0", - "resolved": "https://registry.npmjs.org/supports-hyperlinks/-/supports-hyperlinks-2.2.0.tgz", - "integrity": "sha512-6sXEzV5+I5j8Bmq9/vUphGRM/RJNT9SCURJLjwfOg51heRtguGWDzcaBlgAzKhQa0EVNpPEKzQuBwZ8S8WaCeQ==", "dev": true, "requires": { "has-flag": "^4.0.0", "supports-color": "^7.0.0" }, "dependencies": { - "has-flag": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", - "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", - "dev": true - }, "supports-color": { "version": "7.2.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", - "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", "dev": true, "requires": { "has-flag": "^4.0.0" @@ -25005,8 +23316,6 @@ }, "supports-preserve-symlinks-flag": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", - "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", "dev": true }, "temp-dir": { @@ -25015,8 +23324,6 @@ }, "tempy": { "version": "1.0.1", - "resolved": "https://registry.npmjs.org/tempy/-/tempy-1.0.1.tgz", - "integrity": "sha512-biM9brNqxSc04Ee71hzFbryD11nX7VPhQQY32AdDmjFvodsRFz/3ufeoTZ6uYkRFfGo188tENcASNs3vTdsM0w==", "dev": true, "requires": { "del": "^6.0.0", @@ -25028,8 +23335,6 @@ "dependencies": { "type-fest": { "version": "0.16.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-0.16.0.tgz", - "integrity": "sha512-eaBzG6MxNzEn9kiwvtre90cXaNLkmadMWa1zQMs3XORCXNbsH/OewwbxC5ia9dCxIxnTAsSxXJaa/p5y8DlvJg==", "dev": true } } @@ -25045,8 +23350,6 @@ }, "text-extensions": { "version": "1.9.0", - "resolved": "https://registry.npmjs.org/text-extensions/-/text-extensions-1.9.0.tgz", - "integrity": "sha512-wiBrwC1EhBelW12Zy26JeOUkQ5mRu+5o8rpsJk5+2t+Y5vE7e842qtZDQ2g1NpX/29HdyFeJ4nSIhI47ENSxlQ==", "dev": true }, "through": { @@ -25055,8 +23358,6 @@ }, "through2": { "version": "2.0.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-2.0.5.tgz", - "integrity": "sha512-/mrRod8xqpA+IHSLyGCQ2s8SPHiCDEeQJSep1jqLYeEUClOFG2Qsh+4FU6G9VeqpZnGW/Su8LQGc4YKni5rYSQ==", "dev": true, "requires": { "readable-stream": "~2.3.6", @@ -25067,10 +23368,6 @@ "version": "1.0.0", "dev": true }, - "to-fast-properties": { - "version": "2.0.0", - "dev": true - }, "to-regex-range": { "version": "5.0.1", "requires": { @@ -25083,35 +23380,27 @@ }, "tr46": { "version": "0.0.3", - "resolved": "https://registry.npmjs.org/tr46/-/tr46-0.0.3.tgz", - "integrity": "sha1-gYT9NH2snNwYWZLzpmIuFLnZq2o=", "dev": true }, "traverse": { "version": "0.6.6", - "resolved": "https://registry.npmjs.org/traverse/-/traverse-0.6.6.tgz", - "integrity": "sha1-y99WD9e5r2MlAv7UD5GMFX6pcTc=", "dev": true }, "trim-newlines": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-3.0.1.tgz", - "integrity": "sha512-c1PTsA3tYrIsLGkJkzHF+w9F2EyxfXGo4UyJc4pFL++FMjnq0HJS69T3M7d//gKrFKwy429bouPescbjecU+Zw==", "dev": true }, "ts-morph": { - "version": "15.0.0", - "resolved": "https://registry.npmjs.org/ts-morph/-/ts-morph-15.0.0.tgz", - "integrity": "sha512-OZkg0TI1h6FVe8DZXyBo6p7NfCN9EZZkkA736f243KzQ3cypYWtaLc9eyNn/JH/fWYfQ4d6wIA4oM0vElRTGcQ==", + "version": "14.0.0", "requires": { - "@ts-morph/common": "~0.15.0", + "@ts-morph/common": "~0.13.0", "code-block-writer": "^11.0.0" } }, "ts-node": { - "version": "10.8.1", - "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.8.1.tgz", - "integrity": "sha512-Wwsnao4DQoJsN034wePSg5nZiw4YKXf56mPIAeD6wVmiv+RytNSWqc2f3fKvcUoV+Yn2+yocD71VOfQHbmVX4g==", + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/ts-node/-/ts-node-10.9.1.tgz", + "integrity": "sha512-NtVysVPkxxrwFGUUxGYhfux8k78pQB3JqYBXlLRZgdGUqTO5wU/UyHop5p70iEbGhB7q5KmiZiU0Y3KlJrScEw==", "dev": true, "requires": { "@cspotcode/source-map-support": "^0.8.0", @@ -25139,122 +23428,122 @@ "version": "2.3.1" }, "turbo": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.3.1.tgz", - "integrity": "sha512-DXckoGKlZgvTn/PrHpBI/57aeXR7tfyPf2dK+4LmBczt24ELA3o6eYHeA7KzfpSYhB2LE9qveYFQ6mJ1OzGjjg==", - "dev": true, - "requires": { - "turbo-android-arm64": "1.3.1", - "turbo-darwin-64": "1.3.1", - "turbo-darwin-arm64": "1.3.1", - "turbo-freebsd-64": "1.3.1", - "turbo-freebsd-arm64": "1.3.1", - "turbo-linux-32": "1.3.1", - "turbo-linux-64": "1.3.1", - "turbo-linux-arm": "1.3.1", - "turbo-linux-arm64": "1.3.1", - "turbo-linux-mips64le": "1.3.1", - "turbo-linux-ppc64le": "1.3.1", - "turbo-windows-32": "1.3.1", - "turbo-windows-64": "1.3.1", - "turbo-windows-arm64": "1.3.1" + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo/-/turbo-1.4.3.tgz", + "integrity": "sha512-g08eD2HdO/XW5xGHnXr0cXGiWnrgFBI6pN/3u0EOTeerKAsWIZU0ZrpSnl3whRtImeBB/gQu7Eu1waM2VOxzgw==", + "dev": true, + "requires": { + "turbo-android-arm64": "1.4.3", + "turbo-darwin-64": "1.4.3", + "turbo-darwin-arm64": "1.4.3", + "turbo-freebsd-64": "1.4.3", + "turbo-freebsd-arm64": "1.4.3", + "turbo-linux-32": "1.4.3", + "turbo-linux-64": "1.4.3", + "turbo-linux-arm": "1.4.3", + "turbo-linux-arm64": "1.4.3", + "turbo-linux-mips64le": "1.4.3", + "turbo-linux-ppc64le": "1.4.3", + "turbo-windows-32": "1.4.3", + "turbo-windows-64": "1.4.3", + "turbo-windows-arm64": "1.4.3" } }, "turbo-android-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-android-arm64/-/turbo-android-arm64-1.3.1.tgz", - "integrity": "sha512-JcnZh9tLbZDpKaXaao/s/k4qXt3TbNEc1xEYYXurVWnqiMueGeS7QAtThVB85ZSqzj7djk+ngSrZabPy5RG25Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-android-arm64/-/turbo-android-arm64-1.4.3.tgz", + "integrity": "sha512-ZUvdoEHJkTkOFOO9PKWYrdONDBVqkNsvwEMufTVf07RXgqmbXDPkznzT4hcQm6xXyqWqJdjgSAMdlm+2nNE1Og==", "dev": true, "optional": true }, "turbo-darwin-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.3.1.tgz", - "integrity": "sha512-TIGDradVFoGck86VIuM38KaDeNxdKaP2ti93UpQeFw26ZhPIeTAa6wUgnz4DQP6bjIvQmXlYJ16ETZb4tFYygg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-64/-/turbo-darwin-64-1.4.3.tgz", + "integrity": "sha512-gapoVm5qbu2TJS4lJ6fM3o2eAkLyXSxHihw/4NRAYmwHCH3at1/cIAnRcctB/HLL3ZaB/p3HKb8mnI7k6xNHOw==", "dev": true, "optional": true }, "turbo-darwin-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.3.1.tgz", - "integrity": "sha512-aLBq8KiMMmop7uKBkvDt/y+eER2UzxZyUzh1KWcZ7DZB5tFZnknEUyf2qggY2vd2WcDVfQ1EUjZ0MFxhhVaVzA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-darwin-arm64/-/turbo-darwin-arm64-1.4.3.tgz", + "integrity": "sha512-XUe6FTsHamEH7FfNslYYO04yecAaguhZuwW4kE9B/BAP8MUYsmVqONauLPyE/YqM6pf2K0xwVe+RlEGf53CWbg==", "dev": true, "optional": true }, "turbo-freebsd-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.3.1.tgz", - "integrity": "sha512-BOr/ifmxjlBeuDkDQLUJtzqzXQ2zPHHcI14U9Ys+z4Mza1uzQn/oSJqQvU5RuyRBVai7noMrpPS7QuKtDz0Cyg==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-freebsd-64/-/turbo-freebsd-64-1.4.3.tgz", + "integrity": "sha512-1CAjXmDClgMXdWZXreUfAbGBB2WB9TZHfJIdsgnDqt4fIcFGChknzYqc+Fj3tGHAczMpinGjBbWIzFuxOq/ofQ==", "dev": true, "optional": true }, "turbo-freebsd-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.3.1.tgz", - "integrity": "sha512-bHPZjK4xnGLz6/oxl5XmWhdYOdtBMSadrGhptWSZ0wBGNn/gQzDTeZAkQeqhh25AD0eM1hzDe8QUz8GlS43lrA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-freebsd-arm64/-/turbo-freebsd-arm64-1.4.3.tgz", + "integrity": "sha512-j5C7j/vwabPKpr5d6YlLgHGHBZCOcXj3HdkBshDHTQ0wghH0NuCUUaesYxI3wva/4/Ec0dhIrb20Laa/HMxXLA==", "dev": true, "optional": true }, "turbo-linux-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.3.1.tgz", - "integrity": "sha512-c5okimusfvivu9wS8MKSr+rXpQAV+M4TyR9JX+spIK8B1I7AjfECAqiK2D5WFWO1bQ33bUAuxXOEpUuLpgEm+g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-32/-/turbo-linux-32-1.4.3.tgz", + "integrity": "sha512-vnc+StXIoQEnxIU43j7rEz/J+v+RV4dbUdUolBq0k9gkUV8KMCcqPkIa753K47E2KLNGKXMaYDI6AHQX1GAQZg==", "dev": true, "optional": true }, "turbo-linux-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.3.1.tgz", - "integrity": "sha512-O0pNX+N5gbmRcyZT+jsCPUNCN3DpIZHqNN35j7MT5nr0IkZa83CGbZnrEc+7Qws//jFJ26EngqD/JyRB2E8nwQ==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-64/-/turbo-linux-64-1.4.3.tgz", + "integrity": "sha512-KAUeIa8Ejt6BLrBGbVurlrjDxqh62tu75D4cqKqKfzWspcbEtmdqlV6qthXfm8SlzGSNuQXX0+qXEWds2FIZXg==", "dev": true, "optional": true }, "turbo-linux-arm": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.3.1.tgz", - "integrity": "sha512-f+r6JIwv/7ylxxJtgVi8cVw+6oNoD/r1IMTU6ejH8bfyMZZko4kkNwH9VYribQ44KDkJEgzdltnzFG5f6Hz10g==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm/-/turbo-linux-arm-1.4.3.tgz", + "integrity": "sha512-zZNoHUK5ioFyxAngh8tHe763Dzb22ne3LJkaZn0ExkFHJtWClWv536lPcDuQPpIH9W9iz5OwPKtN32DNpNwk8A==", "dev": true, "optional": true }, "turbo-linux-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.3.1.tgz", - "integrity": "sha512-D6+1MeS/x+/VCCooHPU4NIpB8qI/eW70eMRA79bqTPaxxluP0g2CaxXgucco05P51YtNsSxeVcH7X76iadON6Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-arm64/-/turbo-linux-arm64-1.4.3.tgz", + "integrity": "sha512-rzB7w+RHCQkKr8aDxxozv/IzdN976CYyBiRocSf9QGU73uyAg8pCo3i0MiENSRjDC+tUbdbu2lEUwGXf9ziB9Q==", "dev": true, "optional": true }, "turbo-linux-mips64le": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.3.1.tgz", - "integrity": "sha512-yL64jgwVCziOpBcdpMxIsczkgwwOvmaqKObFKWyCNlk/LOl5NKODLwXEaryLaALtpwUAoS4ltMSI64gKqmLrOA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-mips64le/-/turbo-linux-mips64le-1.4.3.tgz", + "integrity": "sha512-Ztr1BM5NiUsHWjB7zpkP2RpRDA/fjbLaCbkyfyGlLmVkrSkh05NFBD03IWs2LSLy/wb6vRpL3MQ4FKcb97Tn8w==", "dev": true, "optional": true }, "turbo-linux-ppc64le": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.3.1.tgz", - "integrity": "sha512-tjnM+8RosykS1lBpOPLDXGOz/Po2h796ty17uBd7IFslWPOI16a/akFOFoLH8PCiGGJMe3CYgRhEKn4sPWNxFA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-linux-ppc64le/-/turbo-linux-ppc64le-1.4.3.tgz", + "integrity": "sha512-tJaFJWxwfy/iLd69VHZj6JcXy9hO8LQ+ZUOna/p/wiy5WrFVgEYlD+4gfECfRZ+52EIelMgXl97vACaN1WMhLw==", "dev": true, "optional": true }, "turbo-windows-32": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.3.1.tgz", - "integrity": "sha512-Snnv+TVigulqwK6guHKndMlrLw88NXj8BtHRGrEksPR0QkyuHlwLf+tHYB4HmvpUl4W9lnXQf4hsljWP64BEdw==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-windows-32/-/turbo-windows-32-1.4.3.tgz", + "integrity": "sha512-w9LyYd+DW3PYFXu9vQiie5lfdqmVIKLV0h181C49hempkIXfgQAosXfaugYWDwBc0GEBoBIQB0vGQKE7gt5nzA==", "dev": true, "optional": true }, "turbo-windows-64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.3.1.tgz", - "integrity": "sha512-gLeohHG07yIhON1Pp0YNE00i/yzip2GFhkA6HdJaK95uE5bKULpqxuO414hOS/WzGwrGVXBKCImfe24XXh5T+Q==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-windows-64/-/turbo-windows-64-1.4.3.tgz", + "integrity": "sha512-qPCqemxxOrXyqqig3fVQozRkOwo5oJSsQ3FTZE5YlNu2NwwWvY1mC0X4WTZIDsbj4oHqr0riqC7RGKbjQm1IIQ==", "dev": true, "optional": true }, "turbo-windows-arm64": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.3.1.tgz", - "integrity": "sha512-0MWcHLvYgs/qdcoTFZ55nu8HhrpeiwXEMw9cbNfgqTlzy3OsrAsovYEJFyQ8KSxeploiD+QJlCdvhxx+5C0tlA==", + "version": "1.4.3", + "resolved": "https://registry.npmjs.org/turbo-windows-arm64/-/turbo-windows-arm64-1.4.3.tgz", + "integrity": "sha512-djnOOBjw33AnUx2SR6TMOpDr3nKLnVD+HcZvnQz70HyE331AKWjBoEE4rtUOteLAfViWAp3afbiljFSOnbU00Q==", "dev": true, "optional": true }, @@ -25277,29 +23566,17 @@ "version": "0.0.6", "dev": true }, - "typedarray-to-buffer": { - "version": "3.1.5", - "dev": true, - "requires": { - "is-typedarray": "^1.0.0" - } - }, "typescript": { "version": "4.6.4", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-4.6.4.tgz", - "integrity": "sha512-9ia/jWHIEbo49HfjrLGfKbZSuWo9iTMwXO+Ca3pRsSpbsMbc7/IU8NKdCZVRRBafVPGnoJeFL76ZOAA84I9fEg==" + "dev": true }, "uglify-js": { - "version": "3.15.5", - "resolved": "https://registry.npmjs.org/uglify-js/-/uglify-js-3.15.5.tgz", - "integrity": "sha512-hNM5q5GbBRB5xB+PMqVRcgYe4c8jbyZ1pzZhS6jbq54/4F2gFK869ZheiE5A8/t+W5jtTNpWef/5Q9zk639FNQ==", + "version": "3.15.4", "dev": true, "optional": true }, "unique-string": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/unique-string/-/unique-string-2.0.0.tgz", - "integrity": "sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==", "dev": true, "requires": { "crypto-random-string": "^2.0.0" @@ -25307,20 +23584,14 @@ }, "universal-user-agent": { "version": "6.0.0", - "resolved": "https://registry.npmjs.org/universal-user-agent/-/universal-user-agent-6.0.0.tgz", - "integrity": "sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w==", "dev": true }, "universalify": { "version": "2.0.0", - "resolved": "https://registry.npmjs.org/universalify/-/universalify-2.0.0.tgz", - "integrity": "sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==", "dev": true }, "unixify": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/unixify/-/unixify-1.0.0.tgz", - "integrity": "sha1-OmQcjC/7zk2mg6XHDwOkYpQMIJA=", "dev": true, "requires": { "normalize-path": "^2.1.1" @@ -25328,8 +23599,6 @@ "dependencies": { "normalize-path": { "version": "2.1.1", - "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-2.1.1.tgz", - "integrity": "sha1-GrKLVW4Zg2Oowab35vogE3/mrtk=", "dev": true, "requires": { "remove-trailing-separator": "^1.0.1" @@ -25342,30 +23611,30 @@ }, "url-join": { "version": "4.0.1", - "resolved": "https://registry.npmjs.org/url-join/-/url-join-4.0.1.tgz", - "integrity": "sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA==", "dev": true }, "util-deprecate": { - "version": "1.0.2" + "version": "1.0.2", + "dev": true }, "utils-merge": { "version": "1.0.1" }, - "uuid": { - "version": "3.4.0", - "dev": true - }, "v8-compile-cache-lib": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz", - "integrity": "sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg==", "dev": true }, + "v8-to-istanbul": { + "version": "9.0.0", + "dev": true, + "requires": { + "@jridgewell/trace-mapping": "^0.3.7", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^1.6.0" + } + }, "validate-npm-package-license": { "version": "3.0.4", - "resolved": "https://registry.npmjs.org/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz", - "integrity": "sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==", "dev": true, "requires": { "spdx-correct": "^3.0.0", @@ -25377,8 +23646,6 @@ }, "webidl-conversions": { "version": "3.0.1", - "resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz", - "integrity": "sha1-JFNCdeKnvGvnvIZhHMFq4KVlSHE=", "dev": true }, "well-known-symbols": { @@ -25387,8 +23654,6 @@ }, "whatwg-url": { "version": "5.0.0", - "resolved": "https://registry.npmjs.org/whatwg-url/-/whatwg-url-5.0.0.tgz", - "integrity": "sha1-lmRU6HZUYuN2RNNib2dCzotwll0=", "dev": true, "requires": { "tr46": "~0.0.3", @@ -25402,20 +23667,12 @@ "isexe": "^2.0.0" } }, - "which-module": { - "version": "2.0.0", - "dev": true - }, "wordwrap": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/wordwrap/-/wordwrap-1.0.0.tgz", - "integrity": "sha1-J1hIEIkUVqQXHI0CJkQa3pDLyus=", "dev": true }, "workerpool": { "version": "6.2.1", - "resolved": "https://registry.npmjs.org/workerpool/-/workerpool-6.2.1.tgz", - "integrity": "sha512-ILEIE97kDZvF9Wb9f6h5aXK4swSlKGUcOEGiIYb2OOu/IrDU9iwj0fD//SsA6E5ibwJxpEvhullJY4Sl4GcpAw==", "dev": true }, "wrap-ansi": { @@ -25438,6 +23695,17 @@ "color-convert": "^2.0.1" } }, + "color-convert": { + "version": "2.0.1", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "dev": true + }, "emoji-regex": { "version": "8.0.0", "dev": true @@ -25468,20 +23736,8 @@ "version": "1.0.2", "dev": true }, - "write-file-atomic": { - "version": "3.0.3", - "dev": true, - "requires": { - "imurmurhash": "^0.1.4", - "is-typedarray": "^1.0.0", - "signal-exit": "^3.0.2", - "typedarray-to-buffer": "^3.1.5" - } - }, "xtend": { "version": "4.0.2", - "resolved": "https://registry.npmjs.org/xtend/-/xtend-4.0.2.tgz", - "integrity": "sha512-LKYU1iAXJXUgAXn9URjiu+MWhyUXHsvfp7mcuYm9dSUKK0/CjtrUwFAxD82/mCWbtLsGjFIad0wIsod4zrTAEQ==", "dev": true }, "y18n": { @@ -25489,7 +23745,7 @@ "dev": true }, "yallist": { - "version": "2.1.2", + "version": "4.0.0", "dev": true }, "yaml": { @@ -25558,7 +23814,7 @@ } }, "yargs-parser": { - "version": "20.2.4", + "version": "20.2.9", "dev": true }, "yargs-unparser": { @@ -25578,6 +23834,10 @@ "decamelize": { "version": "4.0.0", "dev": true + }, + "is-plain-obj": { + "version": "2.1.0", + "dev": true } } }, diff --git a/package.json b/package.json index 473d1877..5c8a2bc4 100644 --- a/package.json +++ b/package.json @@ -22,19 +22,21 @@ "clean": "turbo run clean", "predistclean": "turbo run clean", "distclean": "rm -rf node_modules packages/*/node_modules", + "format": "turbo run format", + "format:fix": "turbo run format:fix", "lint-staged": "lint-staged", "test": "turbo run test" }, "pre-commit": "lint-staged", "devDependencies": { - "@semantic-release/github": "8.0.4", + "@semantic-release/github": "8.0.6", "@semantic-release/npm": "9.0.1", "@semrel-extra/npm": "1.2.0", "lint-staged": "13.0.3", "multi-semantic-release": "2.13.0", "pre-commit": "1.2.2", "prettier": "2.5.1", - "turbo": "1.3.1", + "turbo": "1.4.3", "typescript": "4.6.4" } } diff --git a/packages/express-wrapper/package.json b/packages/express-wrapper/package.json index baacbd63..d498bbeb 100644 --- a/packages/express-wrapper/package.json +++ b/packages/express-wrapper/package.json @@ -12,21 +12,25 @@ "scripts": { "build": "tsc --build --incremental --verbose .", "clean": "rm -rf -- dist", - "test": "ava" + "format": "prettier --check .", + "format:fix": "prettier --write .", + "test": "c8 --all ava" }, "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", "express": "4.17.2", - "fp-ts": "2.12.1", - "io-ts": "2.2.16" + "fp-ts": "2.12.3", + "io-ts": "2.1.3" }, "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.13", - "ava": "4.3.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "ava": "4.3.3", + "c8": "7.12.0", + "ts-node": "10.9.1", + "typescript": "4.7.4" }, "ava": { "typescript": { diff --git a/packages/express-wrapper/src/index.ts b/packages/express-wrapper/src/index.ts index 274d28fe..38dfd278 100644 --- a/packages/express-wrapper/src/index.ts +++ b/packages/express-wrapper/src/index.ts @@ -4,148 +4,74 @@ */ import express from 'express'; -import * as PathReporter from 'io-ts/lib/PathReporter'; -import { - ApiSpec, - HttpResponseCodes, - HttpRoute, - RequestType, - ResponseType, -} from '@api-ts/io-ts-http'; +import { ApiSpec, HttpRoute, Method as HttpMethod } from '@api-ts/io-ts-http'; +import { createRouter } from '@api-ts/typed-express-router'; -export type Function = ( - input: RequestType, -) => ResponseType | Promise>; -export type RouteStack = [ - ...express.RequestHandler[], - Function, -]; +import { handleRequest, onDecodeError, onEncodeError, RouteHandler } from './request'; +import { defaultResponseEncoder, ResponseEncoder } from './response'; -/** - * Dynamically assign a function name to avoid anonymous functions in stack traces - * https://stackoverflow.com/a/69465672 - */ -const createNamedFunction = void>( - name: string, - fn: F, -): F => Object.defineProperty(fn, 'name', { value: name }); - -const isKnownStatusCode = (code: string): code is keyof typeof HttpResponseCodes => - HttpResponseCodes.hasOwnProperty(code); - -const decodeRequestAndEncodeResponse = ( - apiName: string, - httpRoute: Route, - handler: Function, -): express.RequestHandler => { - return createNamedFunction( - 'decodeRequestAndEncodeResponse' + httpRoute.method + apiName, - async (req, res) => { - const maybeRequest = httpRoute.request.decode(req); - if (maybeRequest._tag === 'Left') { - console.log('Request failed to decode'); - const validationErrors = PathReporter.failure(maybeRequest.left); - const validationErrorMessage = validationErrors.join('\n'); - res.writeHead(400, { 'Content-Type': 'application/json' }); - res.write(JSON.stringify({ error: validationErrorMessage })); - res.end(); - return; - } - - let rawResponse: ResponseType | undefined; - try { - rawResponse = await handler(maybeRequest.right); - } catch (err) { - console.warn('Error in route handler:', err); - res.statusCode = 500; - res.end(); - return; - } - - // Take the first match -- the implication is that the ordering of declared response - // codecs is significant! - for (const [statusCode, responseCodec] of Object.entries(httpRoute.response)) { - if (rawResponse.type !== statusCode) { - continue; - } - - if (!isKnownStatusCode(statusCode)) { - console.warn( - `Got unrecognized status code ${statusCode} for ${apiName} ${httpRoute.method}`, - ); - res.status(500); - res.end(); - return; - } - - // We expect that some route implementations may "beat the type - // system away with a stick" and return some unexpected values - // that fail to encode, so we catch errors here just in case - let response: unknown; - try { - response = responseCodec.encode(rawResponse.payload); - } catch (err) { - console.warn( - "Unable to encode route's return value, did you return the expected type?", - err, - ); - res.statusCode = 500; - res.end(); - return; - } - // DISCUSS: safer ways to handle this cast - res.writeHead(HttpResponseCodes[statusCode], { - 'Content-Type': 'application/json', - }); - res.write(JSON.stringify(response)); - res.end(); - return; - } - - // If we got here then we got an unexpected response - res.status(500); - res.end(); - }, - ); -}; - -const isHttpVerb = (verb: string): verb is 'get' | 'put' | 'post' | 'delete' => - ({ get: 1, put: 1, post: 1, delete: 1 }.hasOwnProperty(verb)); +export { middlewareFn, MiddlewareChain, MiddlewareChainOutput } from './middleware'; +export type { ResponseEncoder, KeyedResponseType } from './response'; +export { routeHandler, ServiceFunction } from './request'; -export function createServer( - spec: Spec, - configureExpressApplication: (app: express.Application) => { +type CreateRouterProps = { + spec: Spec; + routeHandlers: { [ApiName in keyof Spec]: { - [Method in keyof Spec[ApiName]]: RouteStack; + [Method in keyof Spec[ApiName] & HttpMethod]: RouteHandler< + NonNullable + >; }; - }, -) { - const app: express.Application = express(); - const routes = configureExpressApplication(app); + }; + encoder?: ResponseEncoder; +}; - const router = express.Router(); +export function routerForApiSpec({ + spec, + routeHandlers, + encoder = defaultResponseEncoder, +}: CreateRouterProps) { + const router = createRouter(spec, { + onDecodeError, + onEncodeError, + }); for (const apiName of Object.keys(spec)) { const resource = spec[apiName] as Spec[string]; for (const method of Object.keys(resource)) { - if (!isHttpVerb(method)) { + if (!HttpMethod.is(method)) { continue; } const httpRoute: HttpRoute = resource[method]!; - const stack = routes[apiName]![method]!; - // Note: `stack` is guaranteed to be non-empty thanks to our function's type signature - const handler = decodeRequestAndEncodeResponse( + const routeHandler = routeHandlers[apiName]![method]!; + const expressRouteHandler = handleRequest( apiName, httpRoute, - stack[stack.length - 1] as Function, + routeHandler as RouteHandler, + encoder, ); - const handlers = [...stack.slice(0, stack.length - 1), handler]; - router[method](httpRoute.path, handlers); + // FIXME: Can't prove to TS here that `apiName` is valid to pass to the generalized `router[method]` + (router[method] as any)(apiName, [expressRouteHandler]); } } - app.use(router); + return router; +} +export const createServer = ( + spec: Spec, + configureExpressApplication: (app: express.Application) => { + [ApiName in keyof Spec]: { + [Method in keyof Spec[ApiName] & HttpMethod]: RouteHandler< + NonNullable + >; + }; + }, +) => { + const app = express(); + const routeHandlers = configureExpressApplication(app); + const router = routerForApiSpec({ spec, routeHandlers }); + app.use(router); return app; -} +}; diff --git a/packages/express-wrapper/src/middleware.ts b/packages/express-wrapper/src/middleware.ts new file mode 100644 index 00000000..539776ac --- /dev/null +++ b/packages/express-wrapper/src/middleware.ts @@ -0,0 +1,206 @@ +import * as express from 'express'; + +export const MiddlewareBrand = Symbol(); +export type MiddlewareBrand = typeof MiddlewareBrand; + +export type MiddlewareFn = ( + req: express.Request, + res: express.Response, +) => Promise; + +type MiddlewareHandler = { + (req: express.Request, res: express.Response, next: express.NextFunction): void; + [MiddlewareBrand]: T; +}; + +export type MiddlewareRequestHandler = express.RequestHandler | MiddlewareHandler; + +type MiddlewareOutput = T extends { + [MiddlewareBrand]: infer R; +} + ? R + : {}; + +type MiddlewareNextFn = (error?: unknown, middlewareResult?: {}) => void; + +/** + * Creates an express request handler that also adds properties to the incoming decoded request. Any existing properties + * with conflicting names will be replaced. + * + * @param fn - an async function that reads the express req/res and returns the desired additional properties. + * @returns + */ +export function middlewareFn(fn: MiddlewareFn): MiddlewareHandler { + const result: express.RequestHandler = (req, res, next: MiddlewareNextFn) => { + fn(req, res) + .then((result) => next(undefined, result)) + .catch((err) => next(err)); + }; + return result as MiddlewareHandler; +} + +type MiddlewareResult = T extends MiddlewareRequestHandler + ? Omit> & MiddlewareOutput + : never; + +export type MiddlewareChain = + | [] + | [MiddlewareRequestHandler] + | [MiddlewareRequestHandler, MiddlewareRequestHandler] + | [MiddlewareRequestHandler, MiddlewareRequestHandler, MiddlewareRequestHandler] + | [ + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + ] + | [ + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + ] + | [ + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + ] + | [ + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + MiddlewareRequestHandler, + ]; + +export type MiddlewareChainOutput< + Input, + Chain extends MiddlewareChain, +> = Chain extends [] + ? Input + : Chain extends [infer A] + ? MiddlewareResult + : Chain extends [infer A, infer B] + ? MiddlewareResult, B> + : Chain extends [infer A, infer B, infer C] + ? MiddlewareResult, B>, C> + : Chain extends [infer A, infer B, infer C, infer D] + ? MiddlewareResult< + MiddlewareResult, B>, C>, + D + > + : Chain extends [infer A, infer B, infer C, infer D, infer E] + ? MiddlewareResult< + MiddlewareResult< + MiddlewareResult, B>, C>, + D + >, + E + > + : Chain extends [infer A, infer B, infer C, infer D, infer E, infer F] + ? MiddlewareResult< + MiddlewareResult< + MiddlewareResult< + MiddlewareResult, B>, C>, + D + >, + E + >, + F + > + : Chain extends [infer A, infer B, infer C, infer D, infer E, infer F, infer G] + ? MiddlewareResult< + MiddlewareResult< + MiddlewareResult< + MiddlewareResult< + MiddlewareResult, B>, C>, + D + >, + E + >, + F + >, + G + > + : never; + +/** + * Runs a middleware chain, and adds any properties returned by middleware.. + * + * @param input - the decoded request properties + * @param chain - the middleware chain + * @param req - express request object + * @param res - express response object + * @returns `input` with possible additional properties as specified by the middleware chain + */ +export async function runMiddlewareChain< + Input extends {}, + Chain extends MiddlewareChain, +>( + input: Input, + chain: Chain, + req: express.Request, + res: express.Response, +): Promise> { + let result: {} = input; + for (const middleware of chain) { + const middlewareResult: {} = await new Promise((resolve, reject) => { + const next = (value?: unknown, middlewareResult?: {}) => { + if (value !== undefined) { + reject(value); + } else if (middlewareResult !== undefined) { + resolve(middlewareResult); + } else { + resolve({}); + } + }; + + try { + middleware(req, res, next); + } catch (err) { + reject(err); + } + }); + + result = { ...result, ...middlewareResult }; + } + + return result as MiddlewareChainOutput; +} + +/** + * Runs a middleware chain, but does not modify the decoded request (input) with properties from any middleware. + * This primarily exists to preserve backwards-compatible behavior for RouteHandlers defined without the `routeHandler` function. + * + * @param input - the decoded request properties (just passed through) + * @param chain - the middleware chain + * @param req - express request object + * @param res - express response object + * @returns `input` unmodified + */ +export async function runMiddlewareChainIgnoringResults< + Input, + Chain extends MiddlewareChain, +>( + input: Input, + chain: Chain, + req: express.Request, + res: express.Response, +): Promise { + for (const middleware of chain) { + await new Promise((resolve, reject) => { + try { + middleware(req, res, resolve); + } catch (err) { + reject(err); + } + }); + } + return input; +} diff --git a/packages/express-wrapper/src/request.ts b/packages/express-wrapper/src/request.ts new file mode 100644 index 00000000..adb34b58 --- /dev/null +++ b/packages/express-wrapper/src/request.ts @@ -0,0 +1,141 @@ +/** + * express-wrapper + * A simple, type-safe web server + */ + +import express from 'express'; +import * as PathReporter from 'io-ts/lib/PathReporter'; + +import { ApiSpec, HttpRoute, RequestType, ResponseType } from '@api-ts/io-ts-http'; +import { + OnDecodeErrorFn, + OnEncodeErrorFn, + TypedRequestHandler, +} from '@api-ts/typed-express-router'; + +import { + runMiddlewareChain, + runMiddlewareChainIgnoringResults, + MiddlewareBrand, + MiddlewareChain, + MiddlewareChainOutput, +} from './middleware'; +import type { KeyedResponseType, ResponseEncoder } from './response'; + +export type ServiceFunction> = + | ((input: Input) => ResponseType | Promise>) + | ((input: Input) => KeyedResponseType | Promise>); + +// The first two alternatives are here to maintain backwards compatibility +export type RouteHandler = + | ServiceFunction + | { + middleware: MiddlewareChain; + handler: ServiceFunction< + R, + MiddlewareChainOutput, MiddlewareChain> + >; + } + | { + middleware: MiddlewareChain; + handler: ServiceFunction; + // Marks this handler as being created via the `routeHandler` function, which enforces the types between + // the middleware chain and the route handler that is accepts the additional properties + [MiddlewareBrand]: true; + }; + +/** + * Produce a route handler that can use additional properties provided by middleware + * + * @param middleware a list of express request handlers. Ones created via `middlewareFn` will add additional properties to the decoded request + * @returns a route handler for an api spec + */ +export function routeHandler({ + handler, +}: { + handler: ServiceFunction; +}): RouteHandler; + +export function routeHandler({ + middleware, + handler, +}: { + middleware: Chain; + handler: ServiceFunction, Chain>>; +}): RouteHandler; + +export function routeHandler({ + middleware = [], + handler, +}: { + middleware?: express.RequestHandler[]; + handler: ServiceFunction; +}): RouteHandler { + // This function wouldn't be needed if TS had value/object level existential quantification, but since it doesn't we enforce the relationship + // between the middleware chain and the handler's input params with this function and then assert the result. + return { middleware, handler, [MiddlewareBrand]: true } as RouteHandler; +} + +export const getServiceFunction = ( + routeHandler: RouteHandler, +): ServiceFunction => + 'handler' in routeHandler ? routeHandler.handler : routeHandler; + +export const getMiddleware = ( + routeHandler: RouteHandler, +): MiddlewareChain => ('middleware' in routeHandler ? routeHandler.middleware : []); + +/** + * Dynamically assign a function name to avoid anonymous functions in stack traces + * https://stackoverflow.com/a/69465672 + */ +const createNamedFunction = void>( + name: string, + fn: F, +): F => Object.defineProperty(fn, 'name', { value: name }); + +export const onDecodeError: OnDecodeErrorFn = (errs, _req, res) => { + const validationErrors = PathReporter.failure(errs); + const validationErrorMessage = validationErrors.join('\n'); + res.writeHead(400, { 'Content-Type': 'application/json' }); + res.write(JSON.stringify({ error: validationErrorMessage })); + res.end(); +}; + +export const onEncodeError: OnEncodeErrorFn = (err, _req, res) => { + console.warn('Error in route handler:', err); + res.status(500).end(); +}; + +export const handleRequest = ( + apiName: string, + httpRoute: HttpRoute, + handler: RouteHandler, + responseEncoder: ResponseEncoder, +): TypedRequestHandler => { + return createNamedFunction( + 'decodeRequestAndEncodeResponse' + httpRoute.method + apiName, + async (req, res, next) => { + try { + const handlerParams = + MiddlewareBrand in handler + ? await runMiddlewareChain(req.decoded, getMiddleware(handler), req, res) + : await runMiddlewareChainIgnoringResults( + req.decoded, + getMiddleware(handler), + req, + res, + ); + const serviceFn = getServiceFunction(handler); + + const response = await serviceFn(handlerParams); + responseEncoder(httpRoute, response)(req, res, next); + } catch (err) { + console.warn('Error in route handler:', err); + res.status(500).end(); + next(); + return; + } + }, + ); +}; diff --git a/packages/express-wrapper/src/response.ts b/packages/express-wrapper/src/response.ts new file mode 100644 index 00000000..263e0d11 --- /dev/null +++ b/packages/express-wrapper/src/response.ts @@ -0,0 +1,41 @@ +import express from 'express'; +import * as t from 'io-ts'; + +import { + HttpRoute, + HttpToKeyStatus, + KeyToHttpStatus, + ResponseType, +} from '@api-ts/io-ts-http'; + +export type KeyedResponseType = { + [Key in keyof R['response'] & keyof HttpToKeyStatus]: { + type: HttpToKeyStatus[Key]; + payload: t.TypeOf; + }; +}[keyof R['response'] & keyof HttpToKeyStatus]; + +export type ResponseEncoder = ( + route: HttpRoute, + serviceFnResponse: ResponseType, +) => express.RequestHandler; + +export const defaultResponseEncoder: ResponseEncoder = + (route, serviceFnResponse) => (_req, res) => { + const { type, payload } = serviceFnResponse; + const status = typeof type === 'number' ? type : (KeyToHttpStatus as any)[type]; + if (status === undefined) { + console.warn('Unknown status code returned'); + res.status(500).end(); + return; + } + const responseCodec = route.response[status]; + try { + res.status(status).json(responseCodec!.encode(payload)).end(); + } catch { + console.warn( + "Unable to encode route's return value, did you return the expected type?", + ); + res.status(500).end(); + } + }; diff --git a/packages/express-wrapper/test/middleware.test.ts b/packages/express-wrapper/test/middleware.test.ts new file mode 100644 index 00000000..4d8f48d0 --- /dev/null +++ b/packages/express-wrapper/test/middleware.test.ts @@ -0,0 +1,96 @@ +import test from 'ava'; +import express from 'express'; + +import { middlewareFn, runMiddlewareChain } from '../src/middleware'; + +// None of these test functions actually use the `req` or `res`, so they can be unsafely stubbed like this +const REQ = {} as express.Request; +const RES = {} as express.Response; + +const noopMiddleware: express.RequestHandler = (_req, _res, next) => { + next(); +}; + +const errorMiddleware: express.RequestHandler = (_req, _res, next) => { + next(new Error('aaaah')); +}; + +const altErrorMiddleware: express.RequestHandler = (_req, _res, next) => { + next(new Error('noooo')); +}; + +const addParamMiddleware = middlewareFn(async () => ({ + addedValue: 1337, +})); + +const addAltParamMiddleware = middlewareFn(async () => ({ + addedValue: 'hello', +})); + +test('should work with normal express middleware', async (t) => { + const result = await runMiddlewareChain({ foo: 'test' }, [noopMiddleware], REQ, RES); + t.deepEqual(result, { foo: 'test' }); +}); + +test('should handle errors passed to next()', async (t) => { + await t.throwsAsync( + runMiddlewareChain({ foo: 'test' }, [errorMiddleware], null as any, null as any), + ); +}); + +test('should work with middleware that return values', async (t) => { + const result = await runMiddlewareChain( + { foo: 'test' }, + [addParamMiddleware], + REQ, + RES, + ); + t.deepEqual(result, { foo: 'test', addedValue: 1337 }); +}); + +test('express and value-producing middleware should work together in any order', async (t) => { + const result = await runMiddlewareChain( + { foo: 'test' }, + [noopMiddleware, addParamMiddleware], + REQ, + RES, + ); + t.deepEqual(result, { foo: 'test', addedValue: 1337 }); + + const resultB = await runMiddlewareChain( + { foo: 'test' }, + [addParamMiddleware, noopMiddleware], + REQ, + RES, + ); + t.deepEqual(resultB, { foo: 'test', addedValue: 1337 }); +}); + +test('middlewares that set the same value should use the last one in the chain', async (t) => { + const result = await runMiddlewareChain( + { foo: 'test' }, + [addParamMiddleware, addAltParamMiddleware], + REQ, + RES, + ); + t.deepEqual(result, { foo: 'test', addedValue: 'hello' }); + + const resultB = await runMiddlewareChain( + { foo: 'test' }, + [addAltParamMiddleware, addParamMiddleware], + REQ, + RES, + ); + t.deepEqual(resultB, { foo: 'test', addedValue: 1337 }); +}); + +test('error-producing middleware should not run subsequent middleware', async (t) => { + await t.throwsAsync( + runMiddlewareChain( + { foo: 'test' }, + [errorMiddleware, altErrorMiddleware], + null as any, + null as any, + ), + ); +}); diff --git a/packages/express-wrapper/test/test-server.ts b/packages/express-wrapper/test/server.test.ts similarity index 55% rename from packages/express-wrapper/test/test-server.ts rename to packages/express-wrapper/test/server.test.ts index 1fce14f3..5e775549 100644 --- a/packages/express-wrapper/test/test-server.ts +++ b/packages/express-wrapper/test/server.test.ts @@ -5,12 +5,10 @@ import express from 'express'; import supertest from 'supertest'; import { ApiSpec, apiSpec, httpRequest, httpRoute, optional } from '@api-ts/io-ts-http'; -import { Response } from '@api-ts/response'; import { buildApiClient, supertestRequestFactory } from '@api-ts/superagent-wrapper'; -import { createServer } from '../src'; +import { createServer, middlewareFn, routeHandler } from '../src'; -// TODO: wallet-platform throws errors instead of returning values const PutHello = httpRoute({ path: '/hello', method: 'PUT', @@ -20,31 +18,44 @@ const PutHello = httpRoute({ body: { secretCode: t.number, appMiddlewareRan: optional(t.boolean), - routeMiddlewareRan: optional(t.boolean), }, }), response: { // TODO: create prettier names for these codecs at the io-ts-http level - ok: t.type({ + 200: t.type({ message: t.string, appMiddlewareRan: t.boolean, routeMiddlewareRan: t.boolean, }), - // In wallet-platform, sometimes we return a 202 (by throwing) - invalidRequest: t.type({ + 400: t.type({ errors: t.string, }), - notFound: t.unknown, - // 500s are also used on prime team + 404: t.unknown, // DISCUSS: what if a response isn't listed here but shows up? - internalError: t.unknown, + 500: t.unknown, }, }); type PutHello = typeof PutHello; +const GetHello = httpRoute({ + path: '/hello/{id}', + method: 'GET', + request: httpRequest({ + params: { + id: t.string, + }, + }), + response: { + 200: t.type({ + id: t.string, + }), + }, +}); + const ApiSpec = apiSpec({ 'hello.world': { put: PutHello, + get: GetHello, }, }); @@ -53,10 +64,9 @@ const appMiddleware: express.RequestHandler = (req, _res, next) => { next(); }; -const routeMiddleware: express.RequestHandler = (req, _res, next) => { - req.body.routeMiddlewareRan = true; - next(); -}; +const routeMiddleware = middlewareFn(async () => { + return { routeMiddlewareRan: true }; +}); // DISCUSS: defining a RouteHandler type or something (also used in decodeRequestAndEncodeResponse) const CreateHelloWorld = async (parameters: { @@ -65,29 +75,41 @@ const CreateHelloWorld = async (parameters: { routeMiddlewareRan?: boolean; }) => { if (parameters.secretCode === 0) { - return Response.invalidRequest({ - errors: 'Please do not tell me zero! I will now explode', - }); + return { + type: 400, + payload: { + errors: 'Please do not tell me zero! I will now explode', + }, + } as const; } - return Response.ok({ - message: - parameters.secretCode === 42 - ? 'Everything you see from here is yours' - : "Who's there?", - appMiddlewareRan: parameters.appMiddlewareRan ?? false, - routeMiddlewareRan: parameters.routeMiddlewareRan ?? false, - }); + return { + type: 200, + payload: { + message: + parameters.secretCode === 42 + ? 'Everything you see from here is yours' + : "Who's there?", + appMiddlewareRan: parameters.appMiddlewareRan ?? false, + routeMiddlewareRan: parameters.routeMiddlewareRan ?? false, + }, + } as const; }; +const GetHelloWorld = async (params: { id: string }) => + ({ + type: 'ok', + payload: params, + } as const); + test('should offer a delightful developer experience', async (t) => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); app.use(appMiddleware); - // Configure route-level middleware return { 'hello.world': { - put: [routeMiddleware, CreateHelloWorld], + put: routeHandler({ middleware: [routeMiddleware], handler: CreateHelloWorld }), + get: GetHelloWorld, }, }; }); @@ -109,15 +131,38 @@ test('should offer a delightful developer experience', async (t) => { t.like(response, { message: "Who's there?" }); }); +test('should handle io-ts-http formatted path parameters', async (t) => { + const app = createServer(ApiSpec, (app: express.Application) => { + app.use(express.json()); + app.use(appMiddleware); + return { + 'hello.world': { + put: routeHandler({ middleware: [routeMiddleware], handler: CreateHelloWorld }), + get: GetHelloWorld, + }, + }; + }); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), ApiSpec); + + const response = await apiClient['hello.world'] + .get({ id: '1337' }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { id: '1337' }); +}); + test('should invoke app-level middleware', async (t) => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); app.use(appMiddleware); - // Configure route-level middleware return { 'hello.world': { - put: [CreateHelloWorld], + put: CreateHelloWorld, + get: GetHelloWorld, }, }; }); @@ -137,10 +182,10 @@ test('should invoke route-level middleware', async (t) => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); - // Configure route-level middleware return { 'hello.world': { - put: [routeMiddleware, CreateHelloWorld], + put: routeHandler({ middleware: [routeMiddleware], handler: CreateHelloWorld }), + get: GetHelloWorld, }, }; }); @@ -156,14 +201,37 @@ test('should invoke route-level middleware', async (t) => { t.like(response, { message: "Who's there?", routeMiddlewareRan: true }); }); +test('should not add parameters from middleware unless routeHandler() is used', async (t) => { + const app = createServer(ApiSpec, (app: express.Application) => { + // Configure app-level middleware + app.use(express.json()); + return { + 'hello.world': { + put: { middleware: [routeMiddleware], handler: CreateHelloWorld }, + get: GetHelloWorld, + }, + }; + }); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), ApiSpec); + + const response = await apiClient['hello.world'] + .put({ secretCode: 1000 }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { message: "Who's there?", routeMiddlewareRan: false }); +}); + test('should infer status code from response type', async (t) => { const app = createServer(ApiSpec, (app: express.Application) => { // Configure app-level middleware app.use(express.json()); - // Configure route-level middleware return { 'hello.world': { - put: [CreateHelloWorld], + put: CreateHelloWorld, + get: GetHelloWorld, }, }; }); @@ -178,3 +246,23 @@ test('should infer status code from response type', async (t) => { t.like(response, { errors: 'Please do not tell me zero! I will now explode' }); }); + +test('should return a 400 when request fails to decode', async (t) => { + const app = createServer(ApiSpec, (app: express.Application) => { + // Configure app-level middleware + app.use(express.json()); + return { + 'hello.world': { + put: CreateHelloWorld, + get: GetHelloWorld, + }, + }; + }); + + const response = await supertest(app) + .put('/hello') + .set('Content-Type', 'application/json') + .expect(400); + + t.true(response.body.error.startsWith('Invalid value undefined supplied to')); +}); diff --git a/packages/express-wrapper/tsconfig.json b/packages/express-wrapper/tsconfig.json index efa731d5..23eec22e 100644 --- a/packages/express-wrapper/tsconfig.json +++ b/packages/express-wrapper/tsconfig.json @@ -1,28 +1,8 @@ { + "extends": "../../tsconfig.json", "include": ["src/**/*", "test/**/*"], - "exclude": ["node_modules", "dist"], "compilerOptions": { - "target": "es2019", - "module": "commonjs", - "lib": ["es2019"], - "moduleResolution": "node", - "outDir": "./dist", - "declaration": true, - "declarationMap": true, - "sourceMap": true, - "strict": true, - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "forceConsistentCasingInFileNames": true, - "downlevelIteration": true, - "esModuleInterop": true, - "resolveJsonModule": true, - "baseUrl": "./", - "paths": { - "*": ["src/@types/*"] - } + "outDir": "./dist" }, "references": [ { @@ -30,6 +10,9 @@ }, { "path": "../superagent-wrapper" + }, + { + "path": "../typed-express-router" } ] } diff --git a/packages/io-ts-http/README.md b/packages/io-ts-http/README.md index 718dbd23..3abe70b7 100644 --- a/packages/io-ts-http/README.md +++ b/packages/io-ts-http/README.md @@ -2,9 +2,44 @@ Runtime types for (de)serializing HTTP requests from both the client and server side +## Contents + +- [@api-ts/io-ts-http](#api-tsio-ts-http) + - [Contents](#contents) + - [Preface](#preface) + - [Introduction](#introduction) + - [Overview](#overview) + - [Example](#example) + - [`apiSpec`](#apispec) + - [`httpRoute`](#httproute) + - [`path`](#path) + - [`method`](#method) + - [`request`](#request) + - [`response`](#response) + - [`httpRequest`](#httprequest) + - [`params`](#params) + - [`query`](#query) + - [`headers`](#headers) + - [`body`](#body) + - [Decoding an `httpRequest`](#decoding-an-httprequest) + - [Documentation](#documentation) + +## Preface + +This package extends [io-ts](https://github.com/gcanti/io-ts) with functionality useful +for typing HTTP requests. Start there for base knowledge required to use this package. + +## Introduction + +io-ts-http is the definition language for api-ts specifications, which define the API +contract for a web sever to an arbitrary degree of precision. Web servers can use the +io-ts-http spec to parse HTTP requests at runtime, and encode HTTP responses. Clients +can use the io-ts-http spec to enforce API compatibility at compile time, and to encode +requests to the server and decode responses. + ## Overview -The primary function in this library is `httpRequest`, which is used to build codecs +The primary function in this library is `httpRequest`. You can use this to build codecs which can parse a generic HTTP request into a more refined type. The generic HTTP request should conform to the following interface: @@ -16,6 +51,9 @@ interface GenericHttpRequest { query: { [K: string]: string | string[]; }; + headers: { + [K: string]: string; + }; body?: unknown; } ``` @@ -53,12 +91,14 @@ type ExampleDecodedResult = { This type is properly inferred by TypeScript and can be used in destructuring like so: ```typescript -// decodeOrElse is a function defined in our common-interface package -const { id, time } = decodeOrElse( - 'Request', - ExampleHttpRequest, - request, - someErrorHandler, +import { pipe } from 'fp-ts/function'; +import * as E from 'fp-ts/Either'; + +const { id, time } = pipe( + ExampleHttpRequest.decode(request), + E.getOrElseW((decodeErrors) => { + someErrorHandler(decodeErrors); + }), ); ``` @@ -78,6 +118,264 @@ possible to encode the API contract (or at least as much of it that is possible express in the type system) and therefore someone calling the API can be confident that the server will correctly interpret a request if the arguments typecheck. +## Example + +Let's define the api-ts spec for a hypothetical `message-user` service. The conventional +top-level export is an +[`apiSpec`](https://github.com/BitGo/api-ts/blob/master/packages/io-ts-http/docs/apiSpec.md) +value; for example: + +### `apiSpec` + +```typescript +import { apiSpec } from '@api-ts/io-ts-http'; + +import { GetMessage, CreateMessage } from './routes/message'; +import { GetUser, CreateUser, UpdateUser, DeleteUser } from './routes/user'; + +/** + * message-user service + * + * @version 1.0.0 + */ +export const API = apiSpec({ + 'api.v1.message': { + get: GetMessage, + post: CreateMessage, + }, + 'api.v1.user': { + get: GetUser, + post: CreateUser, + put: UpdateUser, + delete: DeleteUser, + }, +}); +``` + +The `apiSpec` is imported, along with some named `httpRoute`s (`{Get|Create}Message`, +and `{Get|Create|Update|Delete}User`) [which we'll discuss below](#httproute). + +> Currently, if you add the `@version` JSDoc tag to the exported API spec, it will be +> used as the API `version` when generating an OpenAPI schema. Support for other tags +> may be added in the future. + +The top-level export for `message-user-types` is `API`, which we define as an `apiSpec` +with two endpoints `api/v1/message` and `api/v1/user`. The `api/v1/message` endpoint +responds to `GET` and `POST` verbs while the second reponds to `GET`, `POST`, `PUT`, and +`DELETE` verbs using `httpRoute`s defined in `./routes/message`. The following are the +`httpRoute`s defined in `./routes/message`. + +### `httpRoute` + +```typescript +import * as t from 'io-ts'; +import { httpRoute, httpRequest } from '@api-ts/io-ts-http'; + +export const GetMessage = httpRoute({ + path: '/message/{id}', + method: 'GET', + request: httpRequest({ + params: { + id: t.string, + }, + }), + response: { + 200: t.type({ + id: t.string, + message: t.string, + }), + 404: t.type({ + error: t.string, + }), + }, +}); + +export const CreateMessage = httpRoute({ + path: '/message', + method: 'POST', + request: httpRequest({ + body: { + message: t.string, + }, + }), + response: { + 200: t.type({ + id: t.string, + message: t.string, + }), + 404: t.type({ + error: t.string, + }), + }, +}); +``` + +The first import is the `io-ts` package. It's usually imported `as t` for use in +describing the types of data properties. Again, review +[io-ts](https://github.com/gcanti/io-ts) documentation for more context on how to use it +and this package. + +Then `httpRoute` and `httpRequest` are imported. We'll review the +[`httpRequest`](#httprequest) below, but first, let's review the `GetMessage` +`httpRoute`. + +```typescript +export const GetMessage = httpRoute({ + path: '/message/{id}', + method: 'GET', + request: httpRequest({ + params: { + id: t.string, + }, + }), + response: { + 200: t.type({ + id: t.string, + message: t.string, + }), + 404: t.type({ + error: t.string, + }), + }, +}); +``` + +[`httpRoute`](https://github.com/BitGo/api-ts/blob/master/packages/io-ts-http/docs/httpRoute.md)s +`apiSpec`s use +[`httpRoute`](https://github.com/BitGo/api-ts/blob/master/packages/io-ts-http/docs/httpRoute.md)s +to define the `path`, `method`, `request` and `response` of a route. + +#### `path` + +The route's `path` along with possible path variables. You should surround variables +with brackets like `{name}`, and are to the `request` codec under the `params` property. + +#### `method` + +The route's `method` is the +[HTTP request method](https://developer.mozilla.org/en-US/docs/Web/HTTP/Methods) to use +for that route. In our `GetMessage` example, the `method` is `GET`, while in our +`PostMessage` example, the `method` is `POST`. + +#### `request` + +The route's `request` is the output of the `httpRequest` function. This will be +described below. + +#### `response` + +The route's `response` describes the possible +[HTTP responses](https://developer.mozilla.org/en-US/docs/Web/HTTP/Status) the route can +produce. The key-value pairs of the `response` object are an HTTP status code followed +by the `io-ts` type of the response body. In our `GetMessage` example, a `200` status +response yields a payload of a JSON object with two properties, `message` which is a +`string` and `id` which is also a `string`, and a `404` yeilds a payload of a JSON +object with a single property `error` which is a `String`. + +### `httpRequest` + +Use `httpRequest` to build the expected type that you pass in a request to the route. In +our example `GetMessage` + +```typescript +export const GetMessage = httpRoute({ + path: '/message/{id}', + method: 'GET', + request: httpRequest({ + params: { + id: t.string, + }, + }), + // ... +}); +``` + +`httpRequest`s have a total of 4 optional properties: `params` (shown in the example), +`query`, `headers`, and `body`. + +#### `params` + +`params` is an object representing the types of path parameters in a URL. Any URL +parameters in the `path` property of an `httpRoute` must be accounted for in the +`params` property of the `httpRequest`. Our request has a single URL parameter it is +expecting, `id`. This is the type of this parameter is captured in the `params` object +of our `httpRequest`. + +#### `query` + +`query` is the object representing the values passed in via query parameters at the end +of a URL. The following example uses a new route, `GetMessages`, to our API that +searches messages related to a specific `author`: + +```typescript +export const GetMessages = httpRoute({ + path: '/messages', + method: 'GET', + request: httpRequest({ + query: { + author: t.string, + }, + }), + // ... +}); +``` + +#### `headers` + +`headers` is an object representing the types of the +[HTTP headers](https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers) passed in with +a request. + +#### `body` + +`body` is an object representing the type of the +[HTTP body](https://developer.mozilla.org/en-US/docs/Web/HTTP/Messages#body) of a +request. Often this is a JSON object. The `CreateMessage` `httpRoute` in our example +uses the `body` property: + +```typescript +export const CreateMessage = httpRoute({ + path: '/message', + method: 'POST', + request: httpRequest({ + body: { + message: t.string, + }, + }), + // ... +}); +``` + +#### Decoding an `httpRequest` + +When you decode `httpRequests` using `io-ts` helpers, the properties of the request are +flattened like this: + +```typescript +import { DateFromString, NumberFromString } from 'io-ts-types'; + +// build an httpRequest with one parameter id and a body with content and a timestamp +const Request = httpRequest({ + params: { + id: NumberFromString, + }, + body: { + content: t.string, + timestamp: DateFromISOString, + }, +}); + +// use io-ts to get the type of the Request +type Request = t.TypeOf; + +// same as +type Request = { + id: number; + content: string; + timestamp: Date; +}; +``` + ## Documentation -- [API Reference](docs/apiReference.md) +- [API Reference](https://github.com/BitGo/api-ts/blob/master/packages/io-ts-http/docs/apiReference.md) diff --git a/packages/io-ts-http/docs/httpRoute.md b/packages/io-ts-http/docs/httpRoute.md index 8ea159f9..bbd7abf5 100644 --- a/packages/io-ts-http/docs/httpRoute.md +++ b/packages/io-ts-http/docs/httpRoute.md @@ -21,7 +21,7 @@ httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, }); ``` @@ -38,7 +38,7 @@ httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, }); ``` @@ -64,7 +64,7 @@ const Route = httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, }); @@ -86,8 +86,8 @@ const response: string = await routeApiClient({ id: 1337 }); ### `response` Declares the potential responses that a route may return along with the codec associated -to each response. The possible response keys can be found in the `io-ts-response` -package. Incoming responses are assumed to be JSON. +to each response. Response keys correspond to HTTP status codes. Incoming responses are +assumed to be JSON. ```typescript const Route = httpRoute({ @@ -95,13 +95,13 @@ const Route = httpRoute({ method: 'GET', request: httpRequest({}), response: { - ok: t.type({ + 200: t.type({ foo: t.string, }), - notFound: t.type({ + 404: t.type({ message: t.string, }), - invalidRequest: t.type({ + 400: t.type({ message: t.string, }), }, @@ -154,7 +154,7 @@ const StringBodyRoute = httpRoute({ }), ]), response: { - ok: t.string, + 200: t.string, }, }); @@ -191,7 +191,7 @@ const UnionRoute = httpRoute({ }), ]), response: { - ok: string, + 200: string, }, }); diff --git a/packages/io-ts-http/package.json b/packages/io-ts-http/package.json index 1173a3c6..e1246537 100644 --- a/packages/io-ts-http/package.json +++ b/packages/io-ts-http/package.json @@ -14,24 +14,24 @@ "scripts": { "build": "tsc --build --incremental --verbose .", "clean": "rm -rf -- dist", - "test": "nyc --reporter=lcov --reporter=text --reporter=json-summary mocha test/**/*.test.ts --require ts-node/register --exit" + "format": "prettier --check .", + "format:fix": "prettier --write .", + "test": "c8 mocha test/**/*.test.ts --require ts-node/register --exit" }, "dependencies": { "@api-ts/response": "0.0.0-semantically-released", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", - "io-ts-types": "0.5.16", - "monocle-ts": "2.3.10", - "newtype-ts": "0.3.5" + "fp-ts": "2.12.3", + "io-ts": "2.1.3", + "io-ts-types": "0.5.16" }, "devDependencies": { - "@types/chai": "4.3.1", + "@types/chai": "4.3.3", "@types/mocha": "9.1.1", + "c8": "7.11.2", "chai": "4.3.6", "mocha": "10.0.0", - "nyc": "15.1.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "ts-node": "10.9.1", + "typescript": "4.7.4" }, "publishConfig": { "access": "public" diff --git a/packages/io-ts-http/src/array-from-non-empty-delimited-string.ts b/packages/io-ts-http/src/array-from-non-empty-delimited-string.ts deleted file mode 100644 index 730948da..00000000 --- a/packages/io-ts-http/src/array-from-non-empty-delimited-string.ts +++ /dev/null @@ -1,33 +0,0 @@ -import { pipe } from 'fp-ts/function'; -import * as E from 'fp-ts/Either'; -import { NonEmptyArray } from 'fp-ts/NonEmptyArray'; -import * as t from 'io-ts'; -import { nonEmptyArray, NonEmptyString } from 'io-ts-types'; - -function arrayFromNonEmptyDelimitedString( - delimiter: string, - delimiterName: string, -): >( - codec: C, - codecName?: string, -) => t.Type>, string> { - return >(codec: C, codecName: string = codec.name) => { - const neaCodec = nonEmptyArray(codec); - return new t.Type>, string>( - `ArrayFromNonEmpty${delimiterName}DelimitedString(${codecName})`, - neaCodec.is, - (input, context) => - pipe( - NonEmptyString.validate(input, context), - E.map((s) => s.split(delimiter)), - E.chain((arr) => neaCodec.validate(arr, context)), - ), - (a) => a.map(codec.encode).join(delimiter), - ); - }; -} - -export const arrayFromNonEmptyCommaDelimitedString = arrayFromNonEmptyDelimitedString( - ',', - 'Comma', -); diff --git a/packages/io-ts-http/src/combinators.ts b/packages/io-ts-http/src/combinators.ts index 90021945..a54654d2 100644 --- a/packages/io-ts-http/src/combinators.ts +++ b/packages/io-ts-http/src/combinators.ts @@ -1,19 +1,29 @@ +import { pipe } from 'fp-ts/function'; import * as E from 'fp-ts/Either'; import * as R from 'fp-ts/Record'; import * as t from 'io-ts'; -import { Flattened, FlattenedC, NestedC, PossiblyUndefinedKeys } from './utils'; +import { + Flattened, + NestedType, + NestedOutputType, + NestedProps, + OptionalizedC, + OptionalProps, + RequiredProps, + Simplify, +} from './utils'; export const optional = (subCodec: C) => t.union([subCodec, t.undefined]); -export const optionalized =

(props: P) => { +export const optionalized =

(props: P): OptionalizedC

=> { const requiredProps: t.Props = {}; const optionalProps: t.Props = {}; for (const key in props) { if (!props.hasOwnProperty(key)) { continue; } - const codec = props[key]; + const codec = props[key]!; const isOptional = codec.is(undefined); if (isOptional) { optionalProps[key] = codec; @@ -22,16 +32,19 @@ export const optionalized =

(props: P) => { } } return t.intersection([ - t.type(requiredProps as Omit>), - t.partial(optionalProps as Pick>), + t.type(requiredProps) as t.TypeC>, + t.partial(optionalProps) as t.PartialC>, ]); }; -export const flattened = >( +export const flattened = ( name: string, props: Props, -) => { - let flatProps: Partial> & t.Props = {}; +): t.Type< + Simplify>>, + Simplify> +> => { + let flatProps: t.Props = {}; for (const key in props) { if (!props.hasOwnProperty(key)) { continue; @@ -39,29 +52,32 @@ export const flattened = >( const innerProps = props[key]; flatProps = { ...flatProps, ...innerProps }; } - const flatCodec = t.exact(optionalized(flatProps)) as unknown as FlattenedC; + const flatCodec = t.exact(optionalized(flatProps)); const nestedProps = R.map((innerProps: t.Props) => t.exact(optionalized(innerProps)))( props, ); - const nestedCodec = t.strict(nestedProps) as unknown as NestedC; + const nestedCodec = t.strict(nestedProps); - return new t.Type>, t.OutputOf>>( + return new t.Type( name, - flatCodec.is, + flatCodec.is as any, (input, context) => - E.map((nested: t.TypeOf>) => { - let flattened: Partial>> = {}; - for (const key in nested) { - if (!nested.hasOwnProperty(key)) { - continue; + pipe( + nestedCodec.validate(input, context), + E.map((nested) => { + let flattened = {}; + for (const key in nested) { + if (!nested.hasOwnProperty(key)) { + continue; + } + flattened = { ...flattened, ...nested[key] }; } - flattened = { ...flattened, ...nested[key] }; - } - return flattened as t.TypeOf>; - })(nestedCodec.validate(input, context)), - (input) => { - const nested: Record> = {}; + return flattened as Simplify>>; + }), + ), + (input: any) => { + const nested: Record = {}; for (const o in props) { if (!props.hasOwnProperty(o)) { continue; @@ -69,12 +85,12 @@ export const flattened = >( nested[o] = {}; for (const i in props[o]) { if ((input as {}).hasOwnProperty(i)) { - const codec = props[o][i]; - nested[o][i] = codec.encode((input as any)[i as any]); + const codec = props[o]![i]!; + nested[o]![i] = codec.encode(input[i]); } } } - return nested as unknown as t.OutputOf>; + return nested as Simplify>; }, ); }; diff --git a/packages/io-ts-http/src/httpRequest.ts b/packages/io-ts-http/src/httpRequest.ts index 0775eb6d..391972d4 100644 --- a/packages/io-ts-http/src/httpRequest.ts +++ b/packages/io-ts-http/src/httpRequest.ts @@ -1,7 +1,6 @@ import * as t from 'io-ts'; import { Json } from 'io-ts-types'; import { flattened, optional, optionalized } from './combinators'; -import { DerefProp, FieldPowerSet, OutputConstrainedProps } from './utils'; export const GenericHttpRequest = optionalized({ // DISCUSS: renaming this to something more specific, e.g. route, or path, or routeParams, or pathParams @@ -18,20 +17,45 @@ export type HttpRequestCodec = t.Type< >; export type HttpRequestCombinatorProps = { - params?: OutputConstrainedProps; - query?: OutputConstrainedProps; -} & FieldPowerSet<{ - headers: OutputConstrainedProps; - body: t.Props; -}>; + params?: NonNullable; + query?: NonNullable; + headers?: NonNullable; + body?: NonNullable; +}; -export const httpRequest = ({ - params = {}, - query = {}, - ...rest -}: Props) => - flattened('httpRequest', { - params: params as DerefProp, - query: query as DerefProp, - ...rest, - }); +/** + * Attempts to produce a helpful error message when invalid codecs are passed to `httpRequest` + * It is a workaround until something like https://github.com/microsoft/TypeScript/pull/40468 + * is merged. + */ +type EmitOutputTypeErrors< + P extends t.Props | undefined, + O, + OName extends string, +> = P extends undefined + ? P + : { + [K in keyof P & string]: P[K] extends t.Type + ? P[K] + : `Codec's output type is not assignable to \`${OName}\`. Try using one like \`NumberFromString\``; + }; + +type QueryValue = string | string[] | undefined; +type ParamValue = string | undefined; +type HeaderValue = string | undefined; + +type EmitPropsErrors

= { + params?: EmitOutputTypeErrors; + query?: EmitOutputTypeErrors; + headers?: EmitOutputTypeErrors; +}; + +export function httpRequest< + Props extends HttpRequestCombinatorProps & EmitPropsErrors, +>(props: Props) { + return flattened('httpRequest', { + query: {}, + params: {}, + ...(props as Omit), + } as { query: {}; params: {} } & Props); +} diff --git a/packages/io-ts-http/src/httpResponse.ts b/packages/io-ts-http/src/httpResponse.ts index bafc380e..c76db03e 100644 --- a/packages/io-ts-http/src/httpResponse.ts +++ b/packages/io-ts-http/src/httpResponse.ts @@ -1,44 +1,9 @@ import * as t from 'io-ts'; -import { Status } from '@api-ts/response'; - export type HttpResponse = { - [K in Status]?: t.Mixed; + [K: number | string]: t.Mixed; }; -export type KnownResponses = { - [K in keyof Response]: K extends Status - ? undefined extends Response[K] - ? never - : K - : never; -}[keyof Response]; - -export const HttpResponseCodes = { - ok: 200, - invalidRequest: 400, - unauthenticated: 401, - permissionDenied: 403, - notFound: 404, - rateLimitExceeded: 429, - internalError: 500, - serviceUnavailable: 503, -} as const; - -export type HttpResponseCodes = typeof HttpResponseCodes; - -// Create a type-level assertion that the HttpResponseCodes map contains every key -// in the Status union of string literals, and no unexpected keys. Violations of -// this assertion will cause compile-time errors. -// -// Thanks to https://stackoverflow.com/a/67027737 -type ShapeOf = Record; -type AssertKeysEqual, Y extends ShapeOf> = never; -type _AssertHttpStatusCodeIsDefinedForAllResponses = AssertKeysEqual< - { [K in Status]: number }, - HttpResponseCodes ->; - export type ResponseTypeForStatus< Response extends HttpResponse, S extends keyof Response, diff --git a/packages/io-ts-http/src/httpRoute.ts b/packages/io-ts-http/src/httpRoute.ts index 509a4251..22c73074 100644 --- a/packages/io-ts-http/src/httpRoute.ts +++ b/packages/io-ts-http/src/httpRoute.ts @@ -1,36 +1,49 @@ import * as t from 'io-ts'; -import { HttpResponse, KnownResponses } from './httpResponse'; -import { httpRequest, HttpRequestCodec } from './httpRequest'; -import { Status } from '@api-ts/response'; +import { HttpResponse } from './httpResponse'; +import { HttpRequestCodec } from './httpRequest'; -export type Method = 'GET' | 'POST' | 'PUT' | 'DELETE'; +export const Method = t.keyof({ + get: 1, + post: 1, + put: 1, + delete: 1, +}); -export type HttpRoute = { +export type Method = t.TypeOf; + +export type HttpRoute = { readonly path: string; - readonly method: Method; + readonly method: Uppercase; readonly request: HttpRequestCodec; readonly response: HttpResponse; }; -type ResponseItem = Codec extends t.Mixed - ? { - type: Status; - payload: t.TypeOf; - } - : never; - export type RequestType = t.TypeOf; export type ResponseType = { - [K in KnownResponses]: ResponseItem; -}[KnownResponses]; + [K in keyof T['response']]: T['response'][K] extends t.Mixed + ? { + type: K; + payload: t.TypeOf; + } + : never; +}[keyof T['response']]; export type ApiSpec = { - [Key: string]: { - [Req: string]: HttpRoute; + [ApiAction: string]: { + [M in Method]?: HttpRoute; + }; +}; + +type UnknownKeysToError = { + [ApiAction in keyof Spec]: { + [M in keyof Spec[ApiAction]]: M extends Method + ? Spec[ApiAction][M] + : `Unsupported HTTP Method. Use "get" | "post" | "put" | "delete"`; }; }; -export const apiSpec = (spec: Spec): Spec => spec; +export const apiSpec = (spec: UnknownKeysToError): Spec => + spec as Spec; export const httpRoute = (spec: Props): Props => spec; diff --git a/packages/io-ts-http/src/index.ts b/packages/io-ts-http/src/index.ts index 66cb8063..6d0bbc9c 100644 --- a/packages/io-ts-http/src/index.ts +++ b/packages/io-ts-http/src/index.ts @@ -3,9 +3,8 @@ * Codecs for (de)serializing HTTP requests from both the client and server side */ -export * from './array-from-non-empty-delimited-string'; export * from './combinators'; export * from './httpResponse'; export * from './httpRequest'; export * from './httpRoute'; -export * from './query-params'; +export * from './statusCode'; diff --git a/packages/io-ts-http/src/query-params.ts b/packages/io-ts-http/src/query-params.ts deleted file mode 100644 index 7fce6842..00000000 --- a/packages/io-ts-http/src/query-params.ts +++ /dev/null @@ -1,38 +0,0 @@ -import { NonEmptyArray } from 'fp-ts/NonEmptyArray'; -import * as t from 'io-ts'; -import { nonEmptyArray } from 'io-ts-types'; - -import { arrayFromNonEmptyCommaDelimitedString } from './array-from-non-empty-delimited-string'; - -export type { NonEmptyArray } from 'fp-ts/NonEmptyArray'; - -const emptyArrayFromUndefined = () => - new t.Type( - 'EmptyArrayFromUndefined', - (input): input is C[] => Array.isArray(input) && input.length === 0, - (input, context) => - t.undefined.is(input) ? t.success([]) : t.failure(input, context), - (_input) => undefined, - ); - -/** - * @param codec a codec that parses from or encodes to a string - * @returns a codec that handles query param parsing, enforcing the presence of at least one value - */ -export const nonEmptyArrayFromQueryParam = >(codec: C) => - t.union([ - arrayFromNonEmptyCommaDelimitedString(codec), - nonEmptyArray(codec), - ]) as t.Type>, string>; - -/** - * @deprecated remove in BG-35828 - * @param codec a codec that decodes from and encodes to a string - * @returns a codec that handles query param parsing, representing zero/undefined params as an empty array - */ -export const arrayFromQueryParam = >(codec: C) => - t.union([ - arrayFromNonEmptyCommaDelimitedString(codec), - emptyArrayFromUndefined>(), - t.array(codec), - ]) as t.Type[], string | undefined>; diff --git a/packages/io-ts-http/src/statusCode.ts b/packages/io-ts-http/src/statusCode.ts new file mode 100644 index 00000000..a7185191 --- /dev/null +++ b/packages/io-ts-http/src/statusCode.ts @@ -0,0 +1,27 @@ +// TODO: Enforce consistency at the type level + +export const HttpToKeyStatus = { + 200: 'ok', + 400: 'invalidRequest', + 401: 'unauthenticated', + 403: 'permissionDenied', + 404: 'notFound', + 429: 'rateLimitExceeded', + 500: 'internalError', + 503: 'serviceUnavailable', +} as const; + +export type HttpToKeyStatus = typeof HttpToKeyStatus; + +export const KeyToHttpStatus = { + ok: 200, + invalidRequest: 400, + unauthenticated: 401, + permissionDenied: 403, + notFound: 404, + rateLimitExceeded: 429, + internalError: 500, + serviceUnavailable: 503, +} as const; + +export type KeyToHttpStatus = typeof KeyToHttpStatus; diff --git a/packages/io-ts-http/src/utils.ts b/packages/io-ts-http/src/utils.ts index 95738a50..a7504dde 100644 --- a/packages/io-ts-http/src/utils.ts +++ b/packages/io-ts-http/src/utils.ts @@ -1,58 +1,49 @@ import type * as t from 'io-ts'; -export type OutputConstrainedProps = { - [K: string]: t.Type; -}; - -export type HasProp = { [K in Key]: any }; -export type DerefProp = T extends HasProp - ? T[Key] - : Fallback; +type PossiblyUndefinedKeys = { + [K in keyof T]: undefined extends T[K] ? K : never; +}[keyof T]; -export type PossiblyUndefinedKeys = { +export type PossiblyUndefinedProps = { [K in keyof T]: undefined extends t.TypeOf ? K : never; }[keyof T]; -export type NestedObject> = { - [O in keyof Self]: Omit>>; +type Optionalized = Simplify< + Omit> & Partial>> +>; + +export type OptionalProps = Pick< + Props, + PossiblyUndefinedProps +>; + +export type RequiredProps = Omit< + Props, + PossiblyUndefinedProps +>; + +export type OptionalizedC = t.IntersectionC< + [t.TypeC>, t.PartialC>] +>; + +export type NestedProps = { + [K: string]: t.Props; +}; + +export type NestedType = { + [K in keyof Props]: Optionalized>; +}; + +export type NestedOutputType = { + [K in keyof Props]: Optionalized>; }; +export type Flattened = UnionToIntersection; + type UnionToIntersection = (T extends any ? (x: T) => any : never) extends ( x: infer R, ) => any ? R : never; -export type Flattened = UnionToIntersection; - -export type OptionalizedC = t.IntersectionC< - [ - t.TypeC>>, - t.PartialC>>, - ] ->; - -export type NestedC> = t.TypeC<{ - [O in keyof Self]: OptionalizedC; -}>; - -export type FlattenedC> = - Flattened extends t.Props ? OptionalizedC> : never; - -/** - * Returns the power set of type T, where fields in the type are considered set items. The power set of a - * set S is the set of all subsets of S. Translating that here, it gives a union of every field combination - * of the input type, including the empty object {}. - * - * Example: - * - * FieldPowerSet<{ a: number, b: string }> = {} | { a: number } | { b: string } | { a: number, b: string } - */ -export type FieldPowerSet = keyof T extends never - ? {} - : { - [K in keyof T]: { - with: Pick & FieldPowerSet>; - without: FieldPowerSet>; - }; - }[keyof T]['with' | 'without']; +export type Simplify = T extends unknown ? { [K in keyof T]: T[K] } : never; diff --git a/packages/io-ts-http/test/combinators.test.ts b/packages/io-ts-http/test/combinators.test.ts index 521dde74..e5ffa0b5 100644 --- a/packages/io-ts-http/test/combinators.test.ts +++ b/packages/io-ts-http/test/combinators.test.ts @@ -1,6 +1,5 @@ import { assert } from 'chai'; import * as t from 'io-ts'; -import { NumberFromString } from 'io-ts-types'; import * as c from '../src/combinators'; import { assertDecodes, assertEncodes, assertRejects } from './utils'; diff --git a/packages/io-ts-http/test/query-param.test.ts b/packages/io-ts-http/test/query-param.test.ts deleted file mode 100644 index 98850305..00000000 --- a/packages/io-ts-http/test/query-param.test.ts +++ /dev/null @@ -1,243 +0,0 @@ -import { assert } from 'chai'; -import { flow } from 'fp-ts/lib/function'; -import * as E from 'fp-ts/Either'; -import * as t from 'io-ts'; -import { PathReporter } from 'io-ts/lib/PathReporter'; - -import { arrayFromQueryParam, nonEmptyArrayFromQueryParam } from '../src/query-params'; -import { NumberFromString } from 'io-ts-types'; - -describe('nonEmptyArrayFromQueryParam combinations', () => { - const TestType = t.exact( - t.partial({ - fruit: nonEmptyArrayFromQueryParam(t.string), - veggies: nonEmptyArrayFromQueryParam(t.string), - }), - ); - type TestType = t.TypeOf; - - const convertParams = flow( - TestType.decode, - E.getOrElseW((e) => { - throw new Error(`failed to parse bliss ${PathReporter.report(E.left(e))}`); - }), - ); - - it('nonEmptyArrayFromQueryParam - no values', () => { - assert.deepEqual( - convertParams({ - bogus: 'ignore this', - }), - {}, - 'should be empty', - ); - }); - - it('nonEmptyArrayFromQueryParam - single value', () => { - assert.deepEqual( - convertParams({ - fruit: 'raspberry', - }), - { - fruit: ['raspberry'], - }, - 'should match single value', - ); - }); - - it('nonEmptyArrayFromQueryParam - single comma-delimited value', () => { - assert.deepEqual( - convertParams({ - fruit: 'raspberry,strawberry', - }), - { - fruit: ['raspberry', 'strawberry'], - }, - 'should match comma delimited values', - ); - }); - - it('nonEmptyArrayFromQueryParam - multiple values', () => { - assert.deepEqual( - convertParams({ - fruit: ['raspberry', 'strawberry'], - }), - { - fruit: ['raspberry', 'strawberry'], - }, - 'should match multiple values', - ); - }); - - it('nonEmptyArrayFromQueryParam - fruits and veggies', () => { - assert.deepEqual( - convertParams({ - fruit: ['raspberry', 'strawberry'], - veggies: 'carrots,potatoes', - }), - { - fruit: ['raspberry', 'strawberry'], - veggies: ['carrots', 'potatoes'], - }, - 'should match fruits and veggies', - ); - }); -}); - -describe('nonEmptyArrayFromQueryParam parsed combinations', () => { - const TestType = t.exact( - t.partial({ - num: nonEmptyArrayFromQueryParam(NumberFromString), - }), - ); - type TestType = t.TypeOf; - - const convertParams = flow( - TestType.decode, - E.getOrElseW((e) => { - throw new Error(PathReporter.report(E.left(e)).join('\n')); - }), - ); - - it('nonEmptyArrayFromQueryParam - no values', () => { - assert.deepEqual( - convertParams({ - bogus: 'ignore this', - }), - {}, - 'should be empty', - ); - }); - - it('nonEmptyArrayFromQueryParam - single value', () => { - assert.deepEqual( - convertParams({ - num: '1', - }), - { - num: [1], - }, - 'should be single item array', - ); - }); - - it('nonEmptyArrayFromQueryParam - comma-delimited string', () => { - assert.deepEqual( - convertParams({ - num: '1,2', - }), - { - num: [1, 2], - }, - 'should be array', - ); - }); - - it('nonEmptyArrayFromQueryParam - array', () => { - assert.deepEqual( - convertParams({ - num: ['1', '2'], - }), - { - num: [1, 2], - }, - 'should be array', - ); - }); -}); - -describe('arrayFromQueryParam combinations', () => { - const TestType = t.exact( - t.partial({ - fruit: arrayFromQueryParam(t.string), - veggies: arrayFromQueryParam(t.string), - }), - ); - type TestType = t.TypeOf; - - const convertParams = flow( - TestType.decode, - E.getOrElseW((e) => { - throw new Error(PathReporter.report(E.left(e)).join('\n')); - }), - ); - - it('arrayFromQueryParam - no values', () => { - assert.deepEqual( - convertParams({ - bogus: 'ignore this', - }), - { - fruit: [], - veggies: [], - }, - 'should be empty', - ); - }); - - it('arrayFromQueryParam - empty array', () => { - assert.deepEqual( - convertParams({ - fruit: [], - }), - { - fruit: [], - veggies: [], - }, - 'should match empty array', - ); - }); - - it('arrayFromQueryParam - single value', () => { - assert.deepEqual( - convertParams({ - fruit: 'raspberry', - }), - { - fruit: ['raspberry'], - veggies: [], - }, - 'should match single value', - ); - }); - - it('arrayFromQueryParam - single comma-delimited value', () => { - assert.deepEqual( - convertParams({ - fruit: 'raspberry,strawberry', - }), - { - fruit: ['raspberry', 'strawberry'], - veggies: [], - }, - 'should match comma delimited values', - ); - }); - - it('arrayFromQueryParam - multiple values', () => { - assert.deepEqual( - convertParams({ - fruit: ['raspberry', 'strawberry'], - }), - { - fruit: ['raspberry', 'strawberry'], - veggies: [], - }, - 'should match multiple values', - ); - }); - - it('arrayFromQueryParam - fruits and veggies', () => { - assert.deepEqual( - convertParams({ - fruit: ['raspberry', 'strawberry'], - veggies: 'carrots,potatoes', - }), - { - fruit: ['raspberry', 'strawberry'], - veggies: ['carrots', 'potatoes'], - }, - 'should match fruits and veggies', - ); - }); -}); diff --git a/packages/io-ts-http/tsconfig.json b/packages/io-ts-http/tsconfig.json index aa3da4ff..793e43b6 100644 --- a/packages/io-ts-http/tsconfig.json +++ b/packages/io-ts-http/tsconfig.json @@ -1,14 +1,8 @@ { + "extends": "../../tsconfig.json", "include": ["src/**/*", "test/**/*"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "target": "es2019", - "lib": ["es2019"], - "module": "commonjs", - "outDir": "./dist", - "composite": true, - "strict": true, - "skipLibCheck": true + "outDir": "dist" }, "references": [ { diff --git a/packages/openapi-generator/corpus/test-array-property.ts b/packages/openapi-generator/corpus/test-array-property.ts index a64ae84c..5361741a 100644 --- a/packages/openapi-generator/corpus/test-array-property.ts +++ b/packages/openapi-generator/corpus/test-array-property.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.array(t.string), + 200: t.array(t.string), }, }); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-boolean-literal.ts b/packages/openapi-generator/corpus/test-boolean-literal.ts index c9cacb2d..fdba635f 100644 --- a/packages/openapi-generator/corpus/test-boolean-literal.ts +++ b/packages/openapi-generator/corpus/test-boolean-literal.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.literal(false), + 200: t.literal(false), }, }); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-discriminated-union.ts b/packages/openapi-generator/corpus/test-discriminated-union.ts index 9d50117a..4b9301ff 100644 --- a/packages/openapi-generator/corpus/test-discriminated-union.ts +++ b/packages/openapi-generator/corpus/test-discriminated-union.ts @@ -10,7 +10,10 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.union([t.type({ key: t.literal('foo') }), t.type({ key: t.literal('bar') })]), + 200: t.union([ + t.type({ key: t.literal('foo') }), + t.type({ key: t.literal('bar') }), + ]), }, } as const); @@ -33,7 +36,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-intersection-flattening.ts b/packages/openapi-generator/corpus/test-intersection-flattening.ts index 2e6b1161..6a9f1539 100644 --- a/packages/openapi-generator/corpus/test-intersection-flattening.ts +++ b/packages/openapi-generator/corpus/test-intersection-flattening.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.intersection([t.type({ foo: t.string }), t.type({ bar: t.string })]), + 200: t.intersection([t.type({ foo: t.string }), t.type({ bar: t.string })]), }, }); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-multi-route.ts b/packages/openapi-generator/corpus/test-multi-route.ts index b2210c19..7ae476f0 100644 --- a/packages/openapi-generator/corpus/test-multi-route.ts +++ b/packages/openapi-generator/corpus/test-multi-route.ts @@ -22,7 +22,7 @@ const FirstRoute = h.httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, } as const); @@ -42,7 +42,7 @@ const SecondRoute = h.httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, }); @@ -68,7 +68,6 @@ export const Routes = h.apiSpec({ "/test/{id}/first": { "get": { "summary": "FirstRoute", - "description": "", "parameters": [ { "name": "horse", @@ -115,7 +114,6 @@ export const Routes = h.apiSpec({ "/test/{id}/second": { "get": { "summary": "SecondRoute", - "description": "", "parameters": [ { "name": "horse", diff --git a/packages/openapi-generator/corpus/test-multi-union.ts b/packages/openapi-generator/corpus/test-multi-union.ts index 2ae04d7e..9ae41155 100644 --- a/packages/openapi-generator/corpus/test-multi-union.ts +++ b/packages/openapi-generator/corpus/test-multi-union.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.union([t.literal('foo'), t.literal(42), t.type({ message: t.string })]), + 200: t.union([t.literal('foo'), t.literal(42), t.type({ message: t.string })]), }, } as const); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-null-param.ts b/packages/openapi-generator/corpus/test-null-param.ts index 08ba7285..1de47cad 100644 --- a/packages/openapi-generator/corpus/test-null-param.ts +++ b/packages/openapi-generator/corpus/test-null-param.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.null, + 200: t.null, }, }); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-optional-property.ts b/packages/openapi-generator/corpus/test-optional-property.ts index 03ab0c47..f06f920d 100644 --- a/packages/openapi-generator/corpus/test-optional-property.ts +++ b/packages/openapi-generator/corpus/test-optional-property.ts @@ -15,7 +15,7 @@ const MyRoute = h.httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, }); @@ -38,11 +38,9 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [ { "name": "req", - "description": "", "schema": { "type": "string" }, @@ -51,7 +49,6 @@ export const Routes = h.apiSpec({ }, { "name": "opt", - "description": "", "schema": { "type": "string" }, diff --git a/packages/openapi-generator/corpus/test-record-type.ts b/packages/openapi-generator/corpus/test-record-type.ts index 3c2164b8..25fd32fb 100644 --- a/packages/openapi-generator/corpus/test-record-type.ts +++ b/packages/openapi-generator/corpus/test-record-type.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.record(t.string, t.string), + 200: t.record(t.string, t.string), }, }); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-single-route-multi-method.ts b/packages/openapi-generator/corpus/test-single-route-multi-method.ts index 991001e9..52e182a3 100644 --- a/packages/openapi-generator/corpus/test-single-route-multi-method.ts +++ b/packages/openapi-generator/corpus/test-single-route-multi-method.ts @@ -16,7 +16,7 @@ const FirstRoute = h.httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, } as const); @@ -35,7 +35,7 @@ const SecondRoute = h.httpRoute({ }, }), response: { - ok: t.string, + 200: t.string, }, }); @@ -59,7 +59,6 @@ export const Routes = h.apiSpec({ "/test/{id}": { "get": { "summary": "FirstRoute", - "description": "", "parameters": [ { "name": "id", @@ -86,7 +85,6 @@ export const Routes = h.apiSpec({ }, "post": { "summary": "SecondRoute", - "description": "", "parameters": [ { "name": "id", diff --git a/packages/openapi-generator/corpus/test-single-route.ts b/packages/openapi-generator/corpus/test-single-route.ts index 0d3d4439..18d8c230 100644 --- a/packages/openapi-generator/corpus/test-single-route.ts +++ b/packages/openapi-generator/corpus/test-single-route.ts @@ -2,7 +2,6 @@ /// file: other.ts -import * as t from 'io-ts'; import { NumberFromString } from 'io-ts-types'; /** @@ -39,8 +38,8 @@ const MyRoute = h.httpRoute({ }, }), response: { - ok: t.number, - invalidRequest: t.type({ foo: t.string, bar: t.number }), + 200: t.number, + 400: t.type({ foo: t.string, bar: t.number }), }, }); diff --git a/packages/openapi-generator/corpus/test-string-union.ts b/packages/openapi-generator/corpus/test-string-union.ts index b13f295e..70f0bb9a 100644 --- a/packages/openapi-generator/corpus/test-string-union.ts +++ b/packages/openapi-generator/corpus/test-string-union.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.keyof({ foo: 1, bar: 1, baz: 1 }), + 200: t.keyof({ foo: 1, bar: 1, baz: 1 }), }, } as const); @@ -33,7 +33,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/corpus/test-unknown-property.ts b/packages/openapi-generator/corpus/test-unknown-property.ts index 8a331d63..3a68a2d0 100644 --- a/packages/openapi-generator/corpus/test-unknown-property.ts +++ b/packages/openapi-generator/corpus/test-unknown-property.ts @@ -15,7 +15,7 @@ const MyRoute = h.httpRoute({ }, }), response: { - ok: t.type({ + 200: t.type({ foo: t.unknown, }), }, @@ -40,7 +40,6 @@ export const Routes = h.apiSpec({ "/test/{id}": { "post": { "summary": "MyRoute", - "description": "", "parameters": [ { "name": "id", diff --git a/packages/openapi-generator/corpus/test-version-tag.ts b/packages/openapi-generator/corpus/test-version-tag.ts index 1e230f7b..d1b7a917 100644 --- a/packages/openapi-generator/corpus/test-version-tag.ts +++ b/packages/openapi-generator/corpus/test-version-tag.ts @@ -10,7 +10,7 @@ const MyRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.string, + 200: t.string, }, }); @@ -38,7 +38,6 @@ export const Routes = h.apiSpec({ "/test": { "get": { "summary": "MyRoute", - "description": "", "parameters": [], "responses": { "200": { diff --git a/packages/openapi-generator/dummyProject/empty.ts b/packages/openapi-generator/dummyProject/empty.ts new file mode 100644 index 00000000..91debfee --- /dev/null +++ b/packages/openapi-generator/dummyProject/empty.ts @@ -0,0 +1,2 @@ +// This file intentionally left blank +// It silences a compiler warning about no files included when there are only virtual ones diff --git a/packages/openapi-generator/dummyProject/tsconfig.json b/packages/openapi-generator/dummyProject/tsconfig.json index a51d1ba8..183b02a0 100644 --- a/packages/openapi-generator/dummyProject/tsconfig.json +++ b/packages/openapi-generator/dummyProject/tsconfig.json @@ -17,7 +17,8 @@ "skipLibCheck": false, "sourceMap": true, "strict": true, - "target": "es2021" + "target": "es2021", + "rootDir": "." }, - "include": ["./index.ts"] + "include": ["."] } diff --git a/packages/openapi-generator/package.json b/packages/openapi-generator/package.json index 198bb0c0..7558f2b7 100644 --- a/packages/openapi-generator/package.json +++ b/packages/openapi-generator/package.json @@ -15,24 +15,27 @@ "scripts": { "build": "tsc --build --incremental --verbose .", "clean": "rm -rf -- dist", - "test": "ava test/test-corpus.ts" + "format": "prettier --check .", + "format:fix": "prettier --write .", + "test": "c8 --all --src src ava test/corpusFiles/*.ts" }, "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", "cmd-ts": "0.11.0", "comment-parser": "1.3.1", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", + "fp-ts": "2.12.3", + "io-ts": "2.1.3", "io-ts-types": "0.5.16", - "openapi-types": "11.0.1", - "ts-morph": "15.0.0", - "typescript": "4.6.4" + "openapi-types": "12.0.2", + "ts-morph": "14.0.0", + "typescript": "4.7.4" }, "devDependencies": { "@ava/typescript": "3.0.1", - "ava": "4.3.0", + "ava": "4.3.3", + "c8": "7.12.0", "parser-ts": "0.6.16", - "ts-node": "10.8.1" + "ts-node": "10.9.1" }, "ava": { "typescript": { @@ -44,7 +47,7 @@ "test/": "dist/test/" } }, - "timeout": "1m" + "timeout": "2m" }, "publishConfig": { "access": "public" diff --git a/packages/openapi-generator/src/cli.ts b/packages/openapi-generator/src/cli.ts index 16d26a9f..69081f0b 100644 --- a/packages/openapi-generator/src/cli.ts +++ b/packages/openapi-generator/src/cli.ts @@ -59,13 +59,10 @@ const app = command({ }), }, handler: async ({ input, output, tsConfig, name, includeInternal }) => { - const baseDir = p.dirname(tsConfig); - const relativeInput = p.relative(baseDir, input); - const api = pipe( componentsForProject({ virtualFiles: {}, - index: relativeInput, + index: input, tsConfig, name, includeInternal, @@ -78,7 +75,7 @@ const app = command({ (api) => api, ), ); - const formattedApi = JSON.stringify(api, null, 2); + const formattedApi = JSON.stringify(api, null, 2) + '\n'; await writeFile(output, formattedApi); }, }); diff --git a/packages/openapi-generator/src/project.ts b/packages/openapi-generator/src/project.ts index 587a6b96..97d57a8a 100644 --- a/packages/openapi-generator/src/project.ts +++ b/packages/openapi-generator/src/project.ts @@ -1,10 +1,16 @@ -import { flow, pipe } from 'fp-ts/function'; +import { pipe } from 'fp-ts/function'; import * as A from 'fp-ts/Alt'; import * as RA from 'fp-ts/ReadonlyArray'; import * as E from 'fp-ts/Either'; import * as RE from 'fp-ts/ReaderEither'; import { OpenAPIV3, OpenAPIV3_1 } from 'openapi-types'; -import { Node, Project, Symbol, VariableDeclaration } from 'ts-morph'; +import { + DiagnosticCategory, + Node, + Project, + Symbol, + VariableDeclaration, +} from 'ts-morph'; import { apiSpecVersion, schemaForApiSpec } from './route'; import { Config } from './config'; @@ -24,6 +30,22 @@ const project = ({ project.createSourceFile(filename, source); } + const errors = project + .getPreEmitDiagnostics() + .filter((diag) => diag.getCategory() === DiagnosticCategory.Error); + + if (errors.length > 0) { + const messages = errors.map((err) => { + const message = err.getMessageText(); + if (typeof message === 'string') { + return message; + } else { + return message.getMessageText(); + } + }); + return E.left(`Errors found in project:\n${messages.join('\n')}`); + } + return E.right(project); }; @@ -55,65 +77,63 @@ const routesForSymbol = variableDeclarationOfSymbol(sym), E.chain(schemaForApiSpec(memo)), E.map( - flow( - RA.reduce( - {}, - ( - paths: PathSpec, - { - path, - method, - query, - params, - body, - responses, - summary, - description, - isPrivate, - }, - ) => - isPrivate && !includeInternal - ? paths - : { - ...paths, - [path]: { - ...paths[path], - [method]: { - summary, - description, - ...(isPrivate ? { 'x-internal': true } : {}), - parameters: [ - ...(query as ParameterList), - ...(params as ParameterList), - ], - responses: responses.reduce( - (acc, { code, schema: { schema } }) => ({ - ...acc, - [code]: { - description: '', - content: { - 'application/json': { schema }, - }, + RA.reduce( + {}, + ( + paths: PathSpec, + { + path, + method, + query, + params, + body, + responses, + summary, + description, + isPrivate, + }, + ) => + isPrivate && !includeInternal + ? paths + : { + ...paths, + [path]: { + ...paths[path], + [method]: { + summary, + ...(description !== undefined ? { description } : {}), + ...(isPrivate ? { 'x-internal': true } : {}), + parameters: [ + ...(query as ParameterList), + ...(params as ParameterList), + ], + responses: responses.reduce( + (acc, { code, schema: { schema } }) => ({ + ...acc, + [code]: { + description: '', // DISCUSS: This field actually is required, is there a better default for this? + content: { + 'application/json': { schema }, }, - }), - {}, - ), - ...(body !== undefined - ? { - requestBody: { - content: { - 'application/json': { - schema: body.schema, - }, + }, + }), + {}, + ), + ...(body !== undefined + ? { + requestBody: { + content: { + 'application/json': { + schema: body.schema, }, - required: body.required, }, - } - : {}), - }, + required: body.required, + }, + } + : {}), }, }, - ), + }, ), ), ); diff --git a/packages/openapi-generator/src/route.ts b/packages/openapi-generator/src/route.ts index fb4da4be..d1f81827 100644 --- a/packages/openapi-generator/src/route.ts +++ b/packages/openapi-generator/src/route.ts @@ -1,4 +1,3 @@ -import { HttpResponseCodes } from '@api-ts/io-ts-http'; import { parse as parseComment } from 'comment-parser'; import { flow, pipe } from 'fp-ts/function'; import * as E from 'fp-ts/Either'; @@ -102,7 +101,9 @@ const parametersFromCodecOutputSym = (paramIn: 'query' | 'path') => schema, required, in: paramIn, - description: description[description.length - 1] ?? '', + ...(description.length > 0 + ? { description: description[description.length - 1] } + : {}), })), ), ), @@ -151,7 +152,7 @@ const routeSummary = (init: Node) => { } }; -const routeDescription = (init: Node) => { +const routeDescription = (init: Node): { description?: string; isPrivate: boolean } => { return pipe( E.fromNullable('No symbol for initializer')(init.getSymbol()), E.chain((sym) => @@ -159,7 +160,7 @@ const routeDescription = (init: Node) => { (sym.getAliasedSymbol() ?? sym).getValueDeclaration(), ), ), - E.chain((decl) => { + E.chain((decl): E.Either => { let current: Node | undefined = decl; while (current !== undefined) { const comments = current.getLeadingCommentRanges(); @@ -183,7 +184,7 @@ const routeDescription = (init: Node) => { } return E.left('no comment found'); }), - E.getOrElse(() => ({ description: '', isPrivate: false })), + E.getOrElseW(() => ({ isPrivate: false })), ); }; @@ -247,11 +248,8 @@ export const schemaForRouteNode = (memo: any) => (node: Expression { const name = sym.getName(); - const statusCode = HttpResponseCodes.hasOwnProperty(name) - ? HttpResponseCodes[name as keyof typeof HttpResponseCodes] - : undefined; return RE.fromEither( - E.fromNullable(`unknown response type '${name}`)(statusCode), + E.fromNullable('undefined response code name')(name), ); }), ), 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 new file mode 100644 index 00000000..0d7348b7 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/check-one-to-one-file-match.ts @@ -0,0 +1,26 @@ +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 new file mode 100644 index 00000000..c0d2f878 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-array-property.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..d6fd49d3 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-boolean-literal.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..b7e8a8dd --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-discriminated-union.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..7a440e7d --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-intersection-flattening.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..0b977fc0 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-multi-route.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..7e8f5462 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-multi-union.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..993d7cb9 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-null-param.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..50ef9ee5 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-optional-property.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..5cc6bbf3 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-record-type.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..67f66128 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-single-route-multi-method.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..97e12171 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-single-route.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..6786bc68 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-string-union.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..54c56d66 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-unknown-property.ts @@ -0,0 +1,4 @@ +// 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 new file mode 100644 index 00000000..c6c99d02 --- /dev/null +++ b/packages/openapi-generator/test/corpusFiles/test-version-tag.ts @@ -0,0 +1,4 @@ +// 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 45599039..ece0cef2 100644 --- a/packages/openapi-generator/test/test-corpus.ts +++ b/packages/openapi-generator/test/test-corpus.ts @@ -11,16 +11,22 @@ import { TestCase, TestCasesFromString } from './test-case'; // System under test import { componentsForProject } from '../src/project'; -const TEST_CONFIG = path.join(__dirname, '..', '..', 'dummyProject', 'tsconfig.json'); +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)); + const fileContentsByFilename = testCase.inputs.reduce< Record >( - (acc, { filename, contents }) => Object.assign(acc, { [filename]: contents }), + (acc, { filename, contents }) => + Object.assign(acc, { [path.join(ROOT_DIR, filename)]: contents }), {}, ); @@ -60,16 +66,7 @@ const evaluateTestCases = (filename: string) => { } }; -const main = () => { - // ava runs with cwd in the package root - const corpusDirectory = 'corpus'; - const corpusFilenames = fs - .readdirSync(corpusDirectory) - .map((filename) => path.join(corpusDirectory, filename)); - - for (const filename of corpusFilenames) { - evaluateTestCases(filename); - } +export const testCorpusFile = (name: string) => { + const filename = path.join(TEST_CORPUS_DIR, `${name}.ts`); + evaluateTestCases(filename); }; - -main(); diff --git a/packages/openapi-generator/tsconfig.json b/packages/openapi-generator/tsconfig.json index 00fa6c07..412320cd 100644 --- a/packages/openapi-generator/tsconfig.json +++ b/packages/openapi-generator/tsconfig.json @@ -1,25 +1,9 @@ { + "extends": "../../tsconfig.json", + "include": ["src/**/*.ts", "test/**/*.json", "test/**/*.ts"], "compilerOptions": { - "allowUnreachableCode": false, - "composite": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "lib": ["es2019"], - "module": "commonjs", - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "dist", - "resolveJsonModule": true, - "skipLibCheck": false, - "sourceMap": true, - "strict": true, - "target": "es2019" + "outDir": "dist" }, - "include": ["src/**/*.ts", "test/**/*.json", "test/**/*.ts"], "references": [ { "path": "../io-ts-http" diff --git a/packages/response/package.json b/packages/response/package.json index 830ec05f..aa341ef5 100644 --- a/packages/response/package.json +++ b/packages/response/package.json @@ -13,10 +13,12 @@ ], "scripts": { "build": "tsc --build --incremental --verbose .", + "format": "prettier --check .", + "format:fix": "prettier --write .", "clean": "rm -rf -- dist" }, "devDependencies": { - "typescript": "4.6.4" + "typescript": "4.7.4" }, "publishConfig": { "access": "public" diff --git a/packages/response/src/index.ts b/packages/response/src/index.ts index 0f2befa7..ce1daa19 100644 --- a/packages/response/src/index.ts +++ b/packages/response/src/index.ts @@ -1,4 +1,5 @@ -// ----------------------------|--------------------|------------ +// HTTP | GRPC | Response +// ----------------------------|--------------------|--------------------------- // 400 (bad request) | INVALID_ARGUMENT | Response.invalidRequest // 401 (unauthorized) | UNAUTHENTICATED | Response.unauthenticated // 403 (forbidden) | PERMISSION_DENIED | Response.permissionDenied diff --git a/packages/response/tsconfig.json b/packages/response/tsconfig.json index f512af59..fc29e4cd 100644 --- a/packages/response/tsconfig.json +++ b/packages/response/tsconfig.json @@ -1,23 +1,7 @@ { + "extends": "../../tsconfig.json", + "include": ["src/**/*.ts", "test/**/*.json", "test/**/*.ts"], "compilerOptions": { - "allowUnreachableCode": false, - "composite": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "lib": ["es2019"], - "module": "commonjs", - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": true, - "noUnusedLocals": true, - "noUnusedParameters": true, - "outDir": "dist", - "resolveJsonModule": true, - "skipLibCheck": false, - "sourceMap": true, - "strict": true, - "target": "es2019" - }, - "include": ["src/**/*.ts", "test/**/*.json", "test/**/*.ts"] + "outDir": "dist" + } } diff --git a/packages/superagent-wrapper/package.json b/packages/superagent-wrapper/package.json index 2cb9ae9b..9ae7f4fd 100644 --- a/packages/superagent-wrapper/package.json +++ b/packages/superagent-wrapper/package.json @@ -12,31 +12,31 @@ "scripts": { "build": "tsc --build --incremental --verbose .", "clean": "rm -rf -- dist", - "test": "nyc --reporter=lcov --reporter=text --reporter=json-summary mocha test/**/*.test.ts --require ts-node/register --exit" + "format": "prettier --check .", + "format:fix": "prettier --write .", + "test": "c8 --all mocha test/**/*.test.ts --require ts-node/register --exit" }, "dependencies": { "@api-ts/io-ts-http": "0.0.0-semantically-released", - "fp-ts": "2.12.1", - "io-ts": "2.2.16", - "superagent": "3.8.3", - "supertest": "6.1.6" + "fp-ts": "2.12.3", + "io-ts": "2.1.3" }, "devDependencies": { - "@types/chai": "4.3.1", + "@types/superagent": "4.1.5", + "@types/supertest": "2.0.12", + "@types/chai": "4.3.3", "@types/express": "4.17.13", "@types/mocha": "9.1.1", - "@types/superagent": "4.1.5", - "@types/supertest": "2.0.11", "body-parser": "1.20.0", "chai": "4.3.6", "express": "4.17.1", "io-ts-types": "0.5.16", "mocha": "10.0.0", - "monocle-ts": "2.3.10", - "newtype-ts": "0.3.5", - "nyc": "15.1.0", - "ts-node": "10.8.1", - "typescript": "4.6.4" + "c8": "7.11.2", + "superagent": "7.1.6", + "supertest": "6.2.3", + "ts-node": "10.9.1", + "typescript": "4.7.4" }, "publishConfig": { "access": "public" diff --git a/packages/superagent-wrapper/src/request.ts b/packages/superagent-wrapper/src/request.ts index 337218b5..58149295 100644 --- a/packages/superagent-wrapper/src/request.ts +++ b/packages/superagent-wrapper/src/request.ts @@ -1,55 +1,67 @@ import * as h from '@api-ts/io-ts-http'; import * as E from 'fp-ts/Either'; import * as t from 'io-ts'; -import type { Response, SuperAgent, SuperAgentRequest } from 'superagent'; -import type { SuperTest } from 'supertest'; +import * as PathReporter from 'io-ts/lib/PathReporter'; import { URL } from 'url'; import { pipe } from 'fp-ts/function'; -import { Status } from '@api-ts/response'; type SuccessfulResponses = { - [R in h.KnownResponses]: { - status: h.HttpResponseCodes[R]; + [R in keyof Route['response']]: { + status: R; error?: undefined; body: h.ResponseTypeForStatus; original: Response; }; -}[h.KnownResponses]; +}[keyof Route['response']]; -type DecodedResponse = +export type DecodedResponse = | SuccessfulResponses | { status: 'decodeError'; - error: unknown; + error: string; body: unknown; original: Response; }; +export class DecodeError extends Error { + readonly decodedResponse: DecodedResponse; + + constructor(message: string, decodedResponse: DecodedResponse) { + super(message); + this.decodedResponse = decodedResponse; + } +} + const decodedResponse = (res: DecodedResponse) => res; type ExpectedDecodedResponse< Route extends h.HttpRoute, - StatusCode extends h.HttpResponseCodes[h.KnownResponses], + StatusCode extends keyof Route['response'], > = DecodedResponse & { status: StatusCode }; -type PatchedRequest = Req & { +type PatchedRequest = Req & { decode: () => Promise>; - decodeExpecting: < - StatusCode extends h.HttpResponseCodes[h.KnownResponses], - >( + decodeExpecting: ( status: StatusCode, ) => Promise>; }; -type SuperagentMethod = 'get' | 'post' | 'put' | 'delete'; +type SuperagentLike = { + [K in h.Method]: (url: string) => Req; +}; -const METHOD_MAP: { [K in h.Method]: SuperagentMethod } = { - GET: 'get', - POST: 'post', - PUT: 'put', - DELETE: 'delete', +type Response = { + body: unknown; + status: number; }; +interface SuperagentRequest extends Promise { + ok(callback: (response: Res) => boolean): this; + query(params: Record): this; + set(name: string, value: string): this; + send(body: string): this; +} + const substitutePathParams = (path: string, params: Record) => { for (const key in params) { if (params.hasOwnProperty(key)) { @@ -59,39 +71,47 @@ const substitutePathParams = (path: string, params: Record) => { return path; }; -export type RequestFactory = ( +export type RequestFactory = ( route: Route, params: Record, ) => Req; export const superagentRequestFactory = - ( - superagent: SuperAgent, - base: string, - ): RequestFactory => + (superagent: SuperagentLike, base: string): RequestFactory => (route: Route, params: Record) => { - const method = METHOD_MAP[route.method]; + const method = route.method.toLowerCase(); + if (!h.Method.is(method)) { + // Not supposed to happen if the route typechecked + throw Error(`Unsupported http method "${route.method}"`); + } const url = new URL(base); url.pathname = substitutePathParams(route.path, params); return superagent[method](url.toString()); }; export const supertestRequestFactory = - (supertest: SuperTest): RequestFactory => + (supertest: SuperagentLike): RequestFactory => (route: Route, params: Record) => { - const method = METHOD_MAP[route.method]; + const method = route.method.toLowerCase(); + if (!h.Method.is(method)) { + // Not supposed to happen if the route typechecked + throw Error(`Unsupported http method "${route.method}"`); + } const path = substitutePathParams(route.path, params); return supertest[method](path); }; -const hasCodecForStatus = ( +const hasCodecForStatus = ( responses: h.HttpResponse, status: S, ): responses is { [K in S]: t.Mixed } => { return status in responses && responses[status] !== undefined; }; -const patchRequest = ( +const patchRequest = < + Req extends SuperagentRequest, + Route extends h.HttpRoute, +>( route: Route, req: Req, ): PatchedRequest => { @@ -99,24 +119,7 @@ const patchRequest = ( patchedReq.decode = () => req.then((res) => { - const { body, status: statusCode } = res; - - let status: Status | undefined; - // DISCUSS: Should we have this as a preprocessed const in io-ts-http? - for (const [name, code] of Object.entries(h.HttpResponseCodes)) { - if (statusCode === code) { - status = name as Status; - break; - } - } - if (status === undefined) { - return decodedResponse({ - status: 'decodeError', - error: `Unknown status code ${statusCode}`, - body, - original: res, - }); - } + const { body, status } = res; if (!hasCodecForStatus(route.response, status)) { return decodedResponse({ @@ -131,9 +134,7 @@ const patchRequest = ( route.response[status].decode(res.body), E.map((body) => decodedResponse({ - status: statusCode as h.HttpResponseCodes[h.KnownResponses< - Route['response'] - >], + status, body, original: res, } as SuccessfulResponses), @@ -142,7 +143,7 @@ const patchRequest = ( // DISCUSS: what's this non-standard HTTP status code? decodedResponse({ status: 'decodeError', - error, + error: PathReporter.failure(error).join('\n'), body: res.body, original: res, }), @@ -150,29 +151,38 @@ const patchRequest = ( ); }); - patchedReq.decodeExpecting = < - StatusCode extends h.HttpResponseCodes[h.KnownResponses], - >( + patchedReq.decodeExpecting = ( status: StatusCode, ) => patchedReq.decode().then((res) => { - if (res.status !== status) { - const error = res.error ?? `Unexpected status code ${res.status}`; - throw new Error(JSON.stringify(error)); + if (res.original.status !== status) { + const error = `Unexpected response ${res.original.status}: ${JSON.stringify( + res.original.body, + )}`; + throw new DecodeError(error, res as DecodedResponse); + } else if (res.status === 'decodeError') { + const error = `Could not decode response ${ + res.original.status + }: ${JSON.stringify(res.original.body)}`; + throw new DecodeError(error, res as DecodedResponse); } else { return res as ExpectedDecodedResponse; } }); + + // Stop superagent from throwing on non-2xx status codes + patchedReq.ok(() => true); + return patchedReq; }; export type BoundRequestFactory< - Req extends SuperAgentRequest, + Req extends SuperagentRequest, Route extends h.HttpRoute, > = (params: h.RequestType) => PatchedRequest; export const requestForRoute = - ( + , Route extends h.HttpRoute>( requestFactory: RequestFactory, route: Route, ): BoundRequestFactory => diff --git a/packages/superagent-wrapper/src/routes.ts b/packages/superagent-wrapper/src/routes.ts index a1da6e6c..7b9d31eb 100644 --- a/packages/superagent-wrapper/src/routes.ts +++ b/packages/superagent-wrapper/src/routes.ts @@ -5,13 +5,7 @@ import { requestForRoute, BoundRequestFactory, RequestFactory } from './request' export type ApiClient = { [A in keyof Spec]: { - [B in keyof Spec[A]]: BoundRequestFactory; - }; -}; - -type PartialApiClient = { - [A in keyof Spec]?: { - [B in keyof Spec[A]]?: BoundRequestFactory; + [B in keyof Spec[A] & h.Method]: BoundRequestFactory>; }; }; @@ -19,20 +13,25 @@ export const buildApiClient = , spec: Spec, ): ApiClient => { - const result: PartialApiClient = {}; - for (const a in spec) { - if (!spec.hasOwnProperty(a)) { + const result: any = {}; + for (const apiName in spec) { + if (!spec.hasOwnProperty(apiName)) { continue; } - const subSpec: PartialApiClient[typeof a] = {}; - for (const b in spec[a]) { - if (!spec[a].hasOwnProperty(b)) { + const subSpec: any = {}; + for (const method in spec[apiName]) { + if (!spec[apiName].hasOwnProperty(method) || !h.Method.is(method)) { continue; } - const route = spec[a][b]; - subSpec[b] = requestForRoute(requestFactory, route); + const route = spec[apiName][method]; + if (route === undefined) { + // Should only happen with an explicit undefined property, which we can only prevent at the + // type level with the `exactOptionalPropertyTypes` tsconfig option + throw Error(`Method "${method}" at "${apiName}" must not be "undefined"'`); + } + subSpec[method] = requestForRoute(requestFactory, route); } - result[a] = subSpec; + result[apiName] = subSpec; } // Type assert that I did in fact add all the expected properties diff --git a/packages/superagent-wrapper/test/request.test.ts b/packages/superagent-wrapper/test/request.test.ts index 13b752b8..04922890 100644 --- a/packages/superagent-wrapper/test/request.test.ts +++ b/packages/superagent-wrapper/test/request.test.ts @@ -5,9 +5,15 @@ import express from 'express'; import * as E from 'fp-ts/Either'; import * as t from 'io-ts'; import { NumberFromString } from 'io-ts-types'; +import superagent from 'superagent'; import supertest from 'supertest'; +import { URL } from 'url'; -import { supertestRequestFactory } from '../src/request'; +import { + DecodeError, + superagentRequestFactory, + supertestRequestFactory, +} from '../src/request'; import { buildApiClient } from '../src/routes'; const PostTestRoute = h.httpRoute({ @@ -25,12 +31,15 @@ const PostTestRoute = h.httpRoute({ }, }), response: { - ok: t.type({ + 200: t.type({ id: t.number, foo: t.string, bar: t.number, baz: t.boolean, }), + 401: t.type({ + message: t.string, + }), }, }); @@ -39,7 +48,7 @@ const HeaderGetTestRoute = h.httpRoute({ method: 'GET', request: h.httpRequest({}), response: { - ok: t.type({ + 200: t.type({ value: t.string, }), }, @@ -73,13 +82,18 @@ testApp.post('/test/:id', (req, res) => { res.send({ invalid: 'response', }); - } else if (req.headers['x-send-unexpected-status-code']) { + } else if (req.headers['x-send-unknown-status-code']) { res.status(400); res.send({ error: 'bad request', }); + } else if (req.headers['x-send-unexpected-status-code']) { + res.status(401); + res.send({ + message: 'unauthorized', + }); } else { - const response = PostTestRoute.response['ok'].encode({ + const response = PostTestRoute.response[200].encode({ ...params, baz: true, }); @@ -89,7 +103,7 @@ testApp.post('/test/:id', (req, res) => { testApp.get(HeaderGetTestRoute.path, (req, res) => { res.send( - HeaderGetTestRoute.response['ok'].encode({ + HeaderGetTestRoute.response[200].encode({ value: String(req.headers['x-custom'] ?? ''), }), ); @@ -127,10 +141,10 @@ describe('request', () => { }); }); - it('gracefully handles unexpected status codes', async () => { + it('gracefully handles unknown status codes', async () => { const response = await apiClient['api.v1.test'] .post({ id: 1337, foo: 'test', bar: 42 }) - .set('x-send-unexpected-status-code', 'true') + .set('x-send-unknown-status-code', 'true') .decode(); assert.equal(response.status, 'decodeError'); @@ -167,10 +181,21 @@ describe('request', () => { .post({ id: 1337, foo: 'test', bar: 42 }) .set('x-send-unexpected-status-code', 'true') .decodeExpecting(200) - .then(() => false) - .catch(() => true); + .then(() => '') + .catch((err) => (err instanceof DecodeError ? err.message : '')); - assert.isTrue(result); + assert.equal(result, 'Unexpected response 401: {"message":"unauthorized"}'); + }); + + it('throws for unknown responses', async () => { + const result = await apiClient['api.v1.test'] + .post({ id: 1337, foo: 'test', bar: 42 }) + .set('x-send-unknown-status-code', 'true') + .decodeExpecting(200) + .then(() => '') + .catch((err) => (err instanceof DecodeError ? err.message : '')); + + assert.equal(result, 'Unexpected response 400: {"error":"bad request"}'); }); it('throws for decode errors', async () => { @@ -178,10 +203,37 @@ describe('request', () => { .post({ id: 1337, foo: 'test', bar: 42 }) .set('x-send-invalid-response-body', 'true') .decodeExpecting(200) - .then(() => false) - .catch(() => true); + .then(() => '') + .catch((err) => (err instanceof DecodeError ? err.message : '')); + + assert.equal(result, 'Could not decode response 200: {"invalid":"response"}'); + }); + }); + + describe('superagent', async () => { + it('does not throw on non-2xx status codes', async () => { + // Figure out what host/port supertest set up (the response is just thrown away on purpose) + const superTestReq = apiClient['api.v1.test'].post({ + id: 1337, + foo: 'test', + bar: 42, + }); + + // Construct an api client that uses superagent, with the base url extracted from the supertest + // request above. + const url = new URL(superTestReq.url); + url.pathname = '/'; + const superagentClient = buildApiClient( + superagentRequestFactory(superagent, url.toString()), + TestRoutes, + ); + + const req = await superagentClient['api.v1.test'] + .post({ id: 1337, foo: 'test', bar: 42 }) + .set('x-send-unexpected-status-code', 'true') + .decode(); - assert.isTrue(result); + assert.equal(req.status, 401); }); }); }); diff --git a/packages/superagent-wrapper/tsconfig.json b/packages/superagent-wrapper/tsconfig.json index 5a700599..e2d50d4b 100644 --- a/packages/superagent-wrapper/tsconfig.json +++ b/packages/superagent-wrapper/tsconfig.json @@ -1,26 +1,10 @@ { + "extends": "../../tsconfig.json", "include": ["src/**/*", "test/**/*"], - "exclude": ["dist", "node_modules"], "compilerOptions": { - "allowUnreachableCode": false, - "composite": true, - "declaration": true, - "declarationMap": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, "lib": ["dom", "es2019"], - "module": "commonjs", - "noImplicitReturns": true, - "noFallthroughCasesInSwitch": true, - "noUncheckedIndexedAccess": false, - "noUnusedLocals": true, - "noUnusedParameters": true, "outDir": "dist", - "resolveJsonModule": true, - "skipLibCheck": false, - "sourceMap": true, - "strict": true, - "target": "es2019" + "noUncheckedIndexedAccess": false }, "references": [ { diff --git a/packages/tsconfig.json b/packages/tsconfig.json deleted file mode 100644 index cba4ba6f..00000000 --- a/packages/tsconfig.json +++ /dev/null @@ -1,20 +0,0 @@ -{ - "files": [], - "references": [ - { - "path": "express-wrapper" - }, - { - "path": "io-ts-http" - }, - { - "path": "openapi-generator" - }, - { - "path": "response" - }, - { - "path": "superagent-wrapper" - } - ] -} diff --git a/packages/typed-express-router/LICENSE b/packages/typed-express-router/LICENSE new file mode 100644 index 00000000..b99f7843 --- /dev/null +++ b/packages/typed-express-router/LICENSE @@ -0,0 +1,13 @@ +Copyright 2022 BitGo Inc + +Licensed under the Apache License, Version 2.0 (the "License"); +you may not use this file except in compliance with the License. +You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + +Unless required by applicable law or agreed to in writing, software +distributed under the License is distributed on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +See the License for the specific language governing permissions and +limitations under the License. diff --git a/packages/typed-express-router/README.md b/packages/typed-express-router/README.md new file mode 100644 index 00000000..cb026bbf --- /dev/null +++ b/packages/typed-express-router/README.md @@ -0,0 +1,127 @@ +# @api-ts/typed-express-router + +A thin wrapper around Express's `Router` + +## Goals + +- Define Express routes that are associated with routes in an api-ts `apiSpec` +- Augment the existing Express request with the decoded request object and api-ts route + metadata +- Augment the existing Express response with a type-checked `encode` function +- Allow customization of what to do on decode/encode errors, per-route if desired +- Allow action to be performed after an encoded response is sent, per-route if desired +- Allow routes to define alias routes with path that is different than the one specified + in the `httpRoute` +- Follow the express router api as closely as possible otherwise + +## Non-Goals + +- Enforce that all routes listed in an `apiSpec` have an associated route handler +- Layer anything on top of the `express.RequestHandler[]` chain beyond the additional + properties described in `Goals` (projects and other libraries can do this) + +## Usage + +### Creating a router + +Two very similar functions are provided by this library that respectively create or wrap +an Express router: + +```ts +import { createRouter, wrapRouter } from '@api-ts/typed-express-router'; +import express from 'express'; + +import { MyApi } from 'my-api-package'; + +const app = express(); + +const typedRouter = createRouter(MyApi); +app.use(typedRouter); +``` + +### Adding routes + +Once you have the `typedRouter`, you can start adding routes by the api-ts api name: + +```ts +typedRouter.get('hello.world', [HelloWorldHandler]); +``` + +Here, `HelloWorldHandler` is a almost like an Express request handler, but `req` and +`res` have an extra property. `req.decoded` contains the validated and decoded request. +On the response side, there is an extra `res.sendEncoded(status, payload)` function that +will enforce types on the payload and encode types appropriately (e.g. +`BigIntFromString` will be converted to a string). The exported `TypedRequestHandler` +type may be used to infer the parameter types for these functions. + +### Route aliases + +If more flexibility is needed in the route path, a `routeAliases` function may be +provided to match multiple paths. These paths may use the full Express matching syntax, +but take care to preserve any path parameters or else you will likely get decode errors. + +```ts +typedRouter.get('hello.world', [HelloWorldHandler], { + routeAliases: ['/oldDeprecatedHelloWorld'], +}); +``` + +### Hooks and error handlers + +The `createRouter`, `wrapRouter`, and individual route methods all take an optional last +parameter where a post-response and error handling function may be provided. Ones +specified for a specific route take precedence over the top-level ones. These may be +used to customize error responses and perform other actions like metrics collection or +logging. + +```ts +const typedRouter = createRouter(MyApi, { + onDecodeError: (errs, req, res) => { + // Format `errs` however you want + res.send(400).json({ message: 'Bad request' }).end(); + }, + onEncodeError: (err, req, res) => { + // Ideally won't happen unless type safety is violated, so it's a 500 + res.send(500).json({ message: 'Internal server error' }).end(); + }, + afterEncodedResponseSent: (status, payload, req, res) => { + // Perform side effects or other things, `res` should be ended by this point + endRequestMetricsCollection(req); + }, +}); + +// Override the decode error handler on one route +typedRouter.get('hello.world', [HelloWorldHandler], { + onDecodeError: customHelloDecodeErrorHandler, +}); +``` + +### Unchecked routes + +If you need custom behavior on decode errors that is more involved than just sending an +error response, then the unchecked variant of the router functions can be used. They do +not fail and call `onDecodeError` when a request is invalid. Instead, they will still +populate `req.decoded`, except this time it'll contain the +`Either` type for route handlers to inspect. + +```ts +// Just a normal express route +typedRouter.getUnchecked('hello.world', (req, res) => { + if (E.isLeft(req.decoded)) { + console.warn('Route failed to decode! Continuing anyway'); + }) + + res.send(200).end(); +}); +``` + +### Router middleware + +Middleware added with `typedRouter.use()` is ran just after the request is decoded but +before it is validated, even on checked routes. It'll have access to `req.decoded` in +the same way that unchecked routes do. + +### Other usage + +Other than what is documented above, a wrapped router should behave like a regular +Express one, so things like `typedRouter.use()` should behave the same. diff --git a/packages/typed-express-router/package.json b/packages/typed-express-router/package.json new file mode 100644 index 00000000..9ad93c92 --- /dev/null +++ b/packages/typed-express-router/package.json @@ -0,0 +1,48 @@ +{ + "name": "@api-ts/typed-express-router", + "version": "0.0.0-semantically-released", + "description": "Implement an HTTP specification with Express", + "author": "Patrick McLaughlin ", + "license": "Apache-2.0", + "main": "dist/src/index.js", + "types": "dist/src/index.d.ts", + "files": [ + "dist/src/" + ], + "scripts": { + "build": "tsc --build --incremental --verbose .", + "clean": "rm -rf -- dist", + "format": "prettier --check .", + "format:fix": "prettier --write .", + "test": "c8 --all ava" + }, + "dependencies": { + "@api-ts/io-ts-http": "0.0.0-semantically-released", + "express": "4.17.2", + "fp-ts": "2.12.3", + "io-ts": "2.1.3" + }, + "devDependencies": { + "@api-ts/superagent-wrapper": "0.0.0-semantically-released", + "@ava/typescript": "3.0.1", + "@types/express": "4.17.13", + "ava": "4.3.3", + "c8": "7.12.0", + "ts-node": "10.9.1", + "typescript": "4.7.4" + }, + "ava": { + "typescript": { + "compile": false, + "extensions": [ + "ts" + ], + "rewritePaths": { + "test/": "dist/test/" + } + } + }, + "publishConfig": { + "access": "public" + } +} diff --git a/packages/typed-express-router/src/errors.ts b/packages/typed-express-router/src/errors.ts new file mode 100644 index 00000000..226f84ac --- /dev/null +++ b/packages/typed-express-router/src/errors.ts @@ -0,0 +1,22 @@ +import express from 'express'; +import { Errors } from 'io-ts'; +import * as PathReporter from 'io-ts/lib/PathReporter'; + +export function defaultOnDecodeError( + errs: Errors, + _req: express.Request, + res: express.Response, +) { + const validationErrors = PathReporter.failure(errs); + const validationErrorMessage = validationErrors.join('\n'); + res.status(400).json({ error: validationErrorMessage }).end(); +} + +export function defaultOnEncodeError( + err: unknown, + _req: express.Request, + res: express.Response, +) { + res.status(500).end(); + console.warn(`Error in route handler: ${err}`); +} diff --git a/packages/typed-express-router/src/index.ts b/packages/typed-express-router/src/index.ts new file mode 100644 index 00000000..c1c7ee7a --- /dev/null +++ b/packages/typed-express-router/src/index.ts @@ -0,0 +1,195 @@ +import { ApiSpec, HttpRoute, KeyToHttpStatus } from '@api-ts/io-ts-http'; +import express from 'express'; +import * as E from 'fp-ts/Either'; +import { pipe } from 'fp-ts/function'; +import { defaultOnDecodeError, defaultOnEncodeError } from './errors'; +import { apiTsPathToExpress } from './path'; +import { + AddRouteHandler, + AddUncheckedRouteHandler, + Methods, + UncheckedRequestHandler, + WrappedRequest, + WrappedResponse, + WrappedRouteOptions, + WrappedRouter, + WrappedRouterOptions, +} from './types'; + +export type { + AfterEncodedResponseSentFn, + OnDecodeErrorFn, + OnEncodeErrorFn, + TypedRequestHandler, + UncheckedRequestHandler, + WrappedRouter, + WrappedRouteOptions, + WrappedRouterOptions, + WrappedRequest, + WrappedResponse, +} from './types'; + +/** + * Creates a new Express router and wraps it with the specified api-ts spec + * + * @param spec {ApiSpec} the api-ts spec to associate with the router + * @param options {WrappedRouterOptions} Express router options as well as default error handlers and hooks to use for routes + * @returns {WrappedRouter} the wrapped Express router + */ +export function createRouter( + spec: Spec, + { + onDecodeError, + onEncodeError, + afterEncodedResponseSent, + ...options + }: WrappedRouterOptions = {}, +): WrappedRouter { + const router = express.Router(options); + return wrapRouter(router, spec, { + onDecodeError, + onEncodeError, + afterEncodedResponseSent, + }); +} + +/** + * Wraps an existing Express router + * + * @param router {express.Router} the Express router to wrap + * @param spec {ApiSpec} the api-ts spec to associate with the router + * @param options {WrappedRouteOptions} default error handlers and hooks to use for routes + * @returns {WrappedRouter} the wrapped Express router + */ +export function wrapRouter( + router: express.Router, + spec: Spec, + { + onDecodeError = defaultOnDecodeError, + onEncodeError = defaultOnEncodeError, + afterEncodedResponseSent = () => {}, + }: WrappedRouteOptions, +): WrappedRouter { + const routerMiddleware: UncheckedRequestHandler[] = []; + + function makeAddUncheckedRoute( + method: Method, + ): AddUncheckedRouteHandler { + return (apiName, handlers, options) => { + const route: HttpRoute | undefined = spec[apiName]?.[method]; + if (route === undefined) { + // Should only happen with an explicit undefined property, which we can only prevent at the + // type level with the `exactOptionalPropertyTypes` tsconfig option + throw Error(`Method "${method}" at "${apiName}" must not be "undefined"'`); + } + const wrapReqAndRes: UncheckedRequestHandler = (req, res, next) => { + const decoded = route.request.decode(req); + req.decoded = decoded; + req.apiName = apiName; + req.httpRoute = route; + res.sendEncoded = ( + status: keyof typeof route['response'], + payload: unknown, + ) => { + try { + const codec = route.response[status]; + if (!codec) { + throw new Error(`no codec defined for response status ${status}`); + } + const statusCode = + typeof status === 'number' + ? status + : KeyToHttpStatus[status as keyof KeyToHttpStatus]; + if (statusCode === undefined) { + throw new Error(`unknown HTTP status code for key ${status}`); + } else if (!codec.is(payload)) { + throw new Error(`response does not match expected type ${codec.name}`); + } + const encoded = codec.encode(payload); + res.status(statusCode).json(encoded).end(); + (options?.afterEncodedResponseSent ?? afterEncodedResponseSent)( + statusCode, + payload, + req as WrappedRequest, + res as WrappedResponse, + ); + } catch (err) { + (options?.onEncodeError ?? onEncodeError)( + err, + req as WrappedRequest, + res as WrappedResponse, + ); + } + }; + next(); + }; + + const middlewareChain = [ + wrapReqAndRes, + ...routerMiddleware, + ...handlers, + ] as express.RequestHandler[]; + + const path = spec[apiName as keyof typeof spec]![method]!.path; + router[method](apiTsPathToExpress(path), middlewareChain); + + options?.routeAliases?.forEach((alias) => { + router[method](alias, middlewareChain); + }); + }; + } + + function makeAddRoute( + method: Method, + ): AddRouteHandler { + return (apiName, handlers, options) => { + const validateMiddleware: UncheckedRequestHandler< + Spec, + typeof apiName, + Method + > = (req, res, next) => { + pipe( + req.decoded, + E.matchW( + (errs) => { + (options?.onDecodeError ?? onDecodeError)(errs, req, res); + }, + (value) => { + req.decoded = value; + next(); + }, + ), + ); + }; + + return makeAddUncheckedRoute(method)( + apiName, + [validateMiddleware, ...(handlers as express.RequestHandler[])], + options, + ); + }; + } + + const result: WrappedRouter = Object.assign( + (req: express.Request, res: express.Response, next: express.NextFunction) => + router.call(router, req, res, next), + { + ...router, + get: makeAddRoute('get'), + post: makeAddRoute('post'), + put: makeAddRoute('put'), + delete: makeAddRoute('delete'), + getUnchecked: makeAddUncheckedRoute('get'), + postUnchecked: makeAddUncheckedRoute('post'), + putUnchecked: makeAddUncheckedRoute('put'), + deleteUnchecked: makeAddUncheckedRoute('delete'), + use: (middleware: UncheckedRequestHandler) => { + routerMiddleware.push(middleware); + }, + }, + ); + + Object.setPrototypeOf(result, Object.getPrototypeOf(router)); + + return result; +} diff --git a/packages/typed-express-router/src/path.ts b/packages/typed-express-router/src/path.ts new file mode 100644 index 00000000..21752d1f --- /dev/null +++ b/packages/typed-express-router/src/path.ts @@ -0,0 +1,8 @@ +// Converts an io-ts-http path to an express one +// assumes that only simple path parameters are present and the wildcard features in express +// arent used. + +const PATH_PARAM = /{(\w+)}/g; + +export const apiTsPathToExpress = (inputPath: string) => + inputPath.replace(PATH_PARAM, ':$1'); diff --git a/packages/typed-express-router/src/types.ts b/packages/typed-express-router/src/types.ts new file mode 100644 index 00000000..b19cfc74 --- /dev/null +++ b/packages/typed-express-router/src/types.ts @@ -0,0 +1,129 @@ +import { ApiSpec, HttpRoute, Method as HttpMethod } from '@api-ts/io-ts-http'; +import express from 'express'; +import * as t from 'io-ts'; + +export type Methods = Lowercase; + +export type WrappedRequest = express.Request & { + decoded: Decoded; + apiName: string; + httpRoute: HttpRoute; +}; + +export type WrappedResponse> = + express.Response & { + sendEncoded: ( + status: Status, + payload: Responses[Status], + ) => void; + }; + +export type OnDecodeErrorFn = ( + errs: t.Errors, + req: express.Request, + res: express.Response, +) => void; + +export type OnEncodeErrorFn = ( + err: unknown, + req: WrappedRequest, + res: WrappedResponse, +) => void; + +export type AfterEncodedResponseSentFn = ( + status: number, + payload: unknown, + req: WrappedRequest, + res: WrappedResponse, +) => void; + +export type UncheckedWrappedRouteOptions = { + onEncodeError?: OnEncodeErrorFn; + afterEncodedResponseSent?: AfterEncodedResponseSentFn; + routeAliases?: string[]; +}; + +export type WrappedRouteOptions = UncheckedWrappedRouteOptions & { + onDecodeError?: OnDecodeErrorFn; +}; + +export type WrappedRouterOptions = express.RouterOptions & WrappedRouteOptions; + +export type TypedRequestHandler< + Spec extends ApiSpec = ApiSpec, + ApiName extends keyof Spec = keyof Spec, + Method extends keyof Spec[ApiName] & HttpMethod = keyof Spec[ApiName] & HttpMethod, +> = ( + req: WrappedRequest['request']>>, + res: WrappedResponse['response']>>, + next: express.NextFunction, +) => void; + +export type UncheckedRequestHandler< + Spec extends ApiSpec = ApiSpec, + ApiName extends keyof Spec = keyof Spec, + Method extends keyof Spec[ApiName] & HttpMethod = keyof Spec[ApiName] & HttpMethod, +> = ( + req: WrappedRequest< + t.Validation['request']>> + >, + res: WrappedResponse['response']>>, + next: express.NextFunction, +) => void; + +type ApiNamesWithMethod = { + [K in keyof Spec & string]: Method extends keyof Spec[K] ? K : never; +}[keyof Spec & string]; + +/** + * Defines a route from one listed in an `apiSpec`. The request object will contain + * a `decoded` request property, and the response object will have a type-checked + * `sendEncoded` function with the correct types. + * + * @param apiName {string} the api name defined in the `apiSpec` assoiated with this router + * @param handlers {TypedRequestHandler[]} a series of Express request handlers with extra properties + * @param options {WrappedRouteOptions} error and response hooks for this route that override the top-level ones if provided + */ +export type AddRouteHandler = < + ApiName extends ApiNamesWithMethod, +>( + apiName: ApiName, + handlers: TypedRequestHandler[], + options?: WrappedRouteOptions, +) => void; + +/** + * Defines a route from one listed in an `apiSpec`. The request object will contain + * a `decoded` request property, and the response object will have a type-checked + * `sendEncoded` function with the correct types. + * + * @param apiName {string} the api name defined in the `apiSpec` assoiated with this router + * @param handlers {TypedRequestHandler[]} a series of Express request handlers with extra properties + * @param options {UncheckedWrappedRouteOptions} error and response hooks for this route that override the top-level ones if provided + */ +export type AddUncheckedRouteHandler = < + ApiName extends ApiNamesWithMethod, +>( + apiName: ApiName, + handlers: UncheckedRequestHandler[], + options?: UncheckedWrappedRouteOptions, +) => void; + +/** + * An Express router that is wrapped and associated with an api-ts `apiSpec`. + */ +export type WrappedRouter = Omit< + express.Router, + 'get' | 'post' | 'put' | 'delete' | 'use' +> & + express.RequestHandler & { + use: (middleware: UncheckedRequestHandler) => void; + get: AddRouteHandler; + post: AddRouteHandler; + put: AddRouteHandler; + delete: AddRouteHandler; + getUnchecked: AddUncheckedRouteHandler; + postUnchecked: AddUncheckedRouteHandler; + putUnchecked: AddUncheckedRouteHandler; + deleteUnchecked: AddUncheckedRouteHandler; + }; diff --git a/packages/typed-express-router/test/path.test.ts b/packages/typed-express-router/test/path.test.ts new file mode 100644 index 00000000..4be371f1 --- /dev/null +++ b/packages/typed-express-router/test/path.test.ts @@ -0,0 +1,21 @@ +import test from 'ava'; + +import { apiTsPathToExpress } from '../src/path'; + +test('should pass through paths with no parameters', (t) => { + const input = '/foo/bar'; + const output = apiTsPathToExpress(input); + t.deepEqual(output, input); +}); + +test('should translate a path segment that specifies a parameter', (t) => { + const input = '/foo/{bar}'; + const output = apiTsPathToExpress(input); + t.deepEqual(output, '/foo/:bar'); +}); + +test('should translate multiple path segments', (t) => { + const input = '/foo/{bar}/baz/{id}'; + const output = apiTsPathToExpress(input); + t.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 new file mode 100644 index 00000000..0770b106 --- /dev/null +++ b/packages/typed-express-router/test/server.test.ts @@ -0,0 +1,576 @@ +import test from 'ava'; + +import * as t from 'io-ts'; +import express from 'express'; +import supertest from 'supertest'; + +import { apiSpec, httpRequest, httpRoute, optional } from '@api-ts/io-ts-http'; +import { buildApiClient, supertestRequestFactory } from '@api-ts/superagent-wrapper'; + +import { createRouter } from '../src'; +import { TypedRequestHandler } from '../src/types'; + +const PutHello = httpRoute({ + path: '/hello', + method: 'PUT', + // DISCUSS: what about req.user? + // and more generally, things that aren't in headers/body/query/route + request: httpRequest({ + body: { + secretCode: t.number, + appMiddlewareRan: optional(t.boolean), + }, + }), + response: { + // TODO: create prettier names for these codecs at the io-ts-http level + 200: t.type({ + message: t.string, + appMiddlewareRan: t.boolean, + routeMiddlewareRan: t.boolean, + }), + 400: t.type({ + errors: t.string, + }), + 404: t.unknown, + // DISCUSS: what if a response isn't listed here but shows up? + 500: t.unknown, + }, +}); +type PutHello = typeof PutHello; + +const GetHello = httpRoute({ + path: '/hello/{id}', + method: 'GET', + request: httpRequest({ + params: { + id: t.string, + }, + }), + response: { + 200: t.type({ + id: t.string, + }), + }, +}); + +const GetHelloOverlap = httpRoute({ + path: '/hello/world', + method: 'GET', + request: httpRequest({}), + response: { + 200: t.literal('Hello World!'), + }, +}); + +const TestApiSpec = apiSpec({ + 'hello.world': { + put: PutHello, + get: GetHello, + }, + 'hello.world.overlap': { + get: GetHelloOverlap, + }, +}); + +type TestApiSpec = typeof TestApiSpec; + +const appMiddleware: express.RequestHandler = (req, _res, next) => { + req.body.appMiddlewareRan = true; + next(); +}; + +const routeMiddleware: express.RequestHandler = (req, _res, next) => { + (req as any).routeMiddlewareRan = true; + next(); +}; + +const CreateHelloWorld: TypedRequestHandler = ( + req, + res, +) => { + const { secretCode, appMiddlewareRan } = req.decoded; + if (secretCode === 0) { + res.sendEncoded(400, { + errors: 'Please do not tell me zero! I will now explode', + }); + } else { + res.sendEncoded(200, { + message: + secretCode === 42 ? 'Everything you see from here is yours' : "Who's there?", + appMiddlewareRan: appMiddlewareRan ?? false, + routeMiddlewareRan: (req as any).routeMiddlewareRan ?? false, + }); + } +}; + +const GetHelloWorld: TypedRequestHandler = ( + { decoded: { id } }, + res, +) => res.sendEncoded(200, { id }); + +test('should match basic routes', async (t) => { + const router = createRouter(TestApiSpec); + + router.put('hello.world', [routeMiddleware, CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(appMiddleware); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + const response = await apiClient['hello.world'] + .put({ secretCode: 1000 }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { message: "Who's there?" }); +}); + +test('should match aliased routes', async (t) => { + const router = createRouter(TestApiSpec); + + router.get('hello.world', [GetHelloWorld], { routeAliases: ['/alternateHello/:id'] }); + + const app = express(); + app.use(express.json()); + app.use(appMiddleware); + app.use(router); + + const apiClient = supertest(app); + + const response = await apiClient + .get('/alternateHello/1234') + .expect(200) + .then((res) => res.body); + + t.like(response, { id: '1234' }); +}); + +test('should invoke post-response hook', async (t) => { + const router = createRouter(TestApiSpec); + + let hookRun = false; + + router.put('hello.world', [routeMiddleware, CreateHelloWorld], { + afterEncodedResponseSent: () => { + hookRun = true; + }, + }); + + const app = express(); + app.use(express.json()); + app.use(appMiddleware); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + await apiClient['hello.world'].put({ secretCode: 1000 }).expect(200); + + t.true(hookRun); +}); + +test('should match first defined route when there is an overlap', async (t) => { + const router = createRouter(TestApiSpec); + + router.get('hello.world', [GetHelloWorld]); + + // This won't be matched because of definition order + router.get('hello.world.overlap', [ + (_req, res) => { + res.sendEncoded(200, 'Hello World!'); + }, + ]); + + const app = express(); + app.use(router); + app.use(express.json()); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + 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' }); +}); + +test('should handle io-ts-http formatted path parameters', async (t) => { + const router = createRouter(TestApiSpec); + + router.put('hello.world', [routeMiddleware, CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(appMiddleware); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + const response = await apiClient['hello.world'] + .get({ id: '1337' }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { id: '1337' }); +}); + +test('should invoke app-level middleware', async (t) => { + const router = createRouter(TestApiSpec); + + router.put('hello.world', [CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(appMiddleware); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + const response = await apiClient['hello.world'] + .put({ secretCode: 1000 }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { message: "Who's there?", appMiddlewareRan: true }); +}); + +test('should invoke router-level middleware', async (t) => { + const router = createRouter(TestApiSpec); + + let routerMiddlewareRan: string = ''; + router.use((req, _res, next) => { + routerMiddlewareRan = req.apiName; + next(); + }); + + router.put('hello.world', [CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + const response = await apiClient['hello.world'] + .put({ secretCode: 1000 }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { message: "Who's there?", appMiddlewareRan: false }); + t.is(routerMiddlewareRan, 'hello.world'); +}); + +test('router-level middleware should run before request validation on checked routes', async (t) => { + const router = createRouter(TestApiSpec); + + let routerMiddlewareRan: string = ''; + router.use((req, _res, next) => { + routerMiddlewareRan = req.apiName; + next(); + }); + + router.put('hello.world', [CreateHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + await apiClient['hello.world'].put({} as any).expect(400); + + t.is(routerMiddlewareRan, 'hello.world'); +}); + +test('should invoke route-level middleware', async (t) => { + const router = createRouter(TestApiSpec); + + router.put('hello.world', [routeMiddleware, CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + const response = await apiClient['hello.world'] + .put({ secretCode: 1000 }) + .decodeExpecting(200) + .then((res) => res.body); + + t.like(response, { message: "Who's there?", routeMiddlewareRan: true }); +}); + +test('should infer status code from response type', async (t) => { + const router = createRouter(TestApiSpec); + + router.put('hello.world', [routeMiddleware, CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + + const response = await apiClient['hello.world'] + .put({ secretCode: 0 }) + .decodeExpecting(400) + .then((res) => res.body); + + t.like(response, { errors: 'Please do not tell me zero! I will now explode' }); +}); + +test('should return a 400 when request fails to decode', async (t) => { + const router = createRouter(TestApiSpec); + + router.put('hello.world', [routeMiddleware, CreateHelloWorld]); + router.get('hello.world', [GetHelloWorld]); + + const app = express(); + app.use(express.json()); + app.use(router); + + t.notThrows(async () => { + await supertest(app) + .put('/hello') + .set('Content-Type', 'application/json') + .expect(400); + }); +}); + +test('should invoke custom decode error function', async (t) => { + const router = createRouter(TestApiSpec, { + onDecodeError: (_errs, _req, res) => { + res.status(400).json('Custom decode error').end(); + }, + }); + + router.get( + 'hello.world', + [ + (_req, res) => { + res.sendEncoded(200, { id: '1234' }); + }, + ], + { + routeAliases: ['/helloNoPathParams'], + }, + ); + + const app = express(); + app.use(express.json()); + app.use(router); + + const apiClient = supertest(app); + const response = await apiClient.get('/helloNoPathParams').expect(400); + + t.is(response.body, 'Custom decode error'); +}); + +test('should invoke per-route custom decode error function', async (t) => { + const router = createRouter(TestApiSpec, { + onDecodeError: (_errs, _req, res) => { + res.status(400).json('Top-level decode error').end(); + }, + }); + + router.get( + 'hello.world', + [ + (_req, res) => { + res.sendEncoded(200, { id: '1234' }); + }, + ], + { + onDecodeError: (_errs, _req, res) => { + res.status(400).json('Route decode error').end(); + }, + routeAliases: ['/helloNoPathParams'], + }, + ); + + const app = express(); + app.use(express.json()); + app.use(router); + + const apiClient = supertest(app); + const response = await apiClient.get('/helloNoPathParams').expect(400); + + t.is(response.body, 'Route decode error'); +}); + +test('should send a 500 when response type does not match', async (t) => { + const router = createRouter(TestApiSpec); + + router.get('hello.world', [ + (_req, res) => { + res.sendEncoded(200, { what: 'is this parameter?' } as any); + }, + ]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + const apiClient = buildApiClient(supertestRequestFactory(server), TestApiSpec); + const response = await apiClient['hello.world'].get({ id: '1234' }).decode(); + + t.is(response.original.status, 500); +}); + +test('should invoke custom encode error function when response type does not match', async (t) => { + const router = createRouter(TestApiSpec, { + onEncodeError: (_err, _req, res) => { + res.status(500).json('Custom encode error').end(); + }, + }); + + router.get('hello.world', [ + (_req, res) => { + res.sendEncoded(200, { what: 'is this parameter?' } as any); + }, + ]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + 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'); +}); + +test('should invoke per-route custom encode error function when response type does not match', async (t) => { + const router = createRouter(TestApiSpec, { + onEncodeError: (_err, _req, res) => { + res.status(500).json('Top-level encode error').end(); + }, + }); + + router.get( + 'hello.world', + [ + (_req, res) => { + res.sendEncoded(200, { what: 'is this parameter?' } as any); + }, + ], + { + onEncodeError: (_err, _req, res) => { + res.status(500).json('Route encode error').end(); + }, + }, + ); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + 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'); +}); + +test('should invoke custom encode error function when an unknown HTTP status is passed to `sendEncoded`', async (t) => { + const router = createRouter(TestApiSpec, { + onEncodeError: (_err, _req, res) => { + res.status(500).json('Custom encode error').end(); + }, + }); + + router.get('hello.world', [ + (_req, res) => { + res.sendEncoded(202 as any, {} as any); + }, + ]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + 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'); +}); + +test('should invoke custom encode error function when an unknown keyed status is passed to `sendEncoded`', async (test) => { + const WeirdApi = apiSpec({ + foo: { + get: httpRoute({ + path: '/foo', + method: 'GET', + request: httpRequest({}), + response: { + wat: t.type({}), + }, + }), + }, + }); + + const router = createRouter(WeirdApi, { + onEncodeError: (_err, _req, res) => { + res.status(500).json('Custom encode error').end(); + }, + }); + + router.get('foo', [ + (_req, res) => { + res.sendEncoded('wat', {}); + }, + ]); + + const app = express(); + app.use(express.json()); + app.use(router); + + const server = supertest(app); + 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'); +}); + +const ExplicitUndefinedApiSpec = apiSpec({ + empty: { + get: undefined, + }, +}); + +test('should throw on explicitly undefined route definition', async (t) => { + const router = createRouter(ExplicitUndefinedApiSpec); + + t.throws(() => { + router.get('empty', [ + (_req, res) => { + res.send(200); + }, + ]); + }); +}); diff --git a/packages/typed-express-router/tsconfig.json b/packages/typed-express-router/tsconfig.json new file mode 100644 index 00000000..4433521c --- /dev/null +++ b/packages/typed-express-router/tsconfig.json @@ -0,0 +1,15 @@ +{ + "extends": "../../tsconfig.json", + "include": ["src/**/*", "test/**/*"], + "compilerOptions": { + "outDir": "./dist" + }, + "references": [ + { + "path": "../io-ts-http" + }, + { + "path": "../superagent-wrapper" + } + ] +} diff --git a/shell.nix b/shell.nix index 3c0a9cab..e6d91731 100644 --- a/shell.nix +++ b/shell.nix @@ -1,14 +1,14 @@ -{ pkgs ? import {} }: - -let - PROJECT_ROOT=builtins.toString ./.; - -in pkgs.mkShell { - packages = with pkgs; [ - nodejs-16_x - ]; - - shellHook = with pkgs; '' - export PATH="${PROJECT_ROOT}/node_modules/.bin:$PATH" - ''; -} +( + import + ( + let + lock = builtins.fromJSON (builtins.readFile ./flake.lock); + in + fetchTarball { + url = "https://github.com/edolstra/flake-compat/archive/${lock.nodes.flake-compat.locked.rev}.tar.gz"; + sha256 = lock.nodes.flake-compat.locked.narHash; + } + ) + {src = ./.;} +) +.shellNix diff --git a/tsconfig.json b/tsconfig.json index ed328da2..0db0a4ed 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,8 +1,27 @@ { - "files": [], - "references": [ - { - "path": "packages" - } - ] + "compilerOptions": { + "target": "es2019", + "module": "commonjs", + "moduleResolution": "node", + "lib": ["es2019"], + "composite": true, + "declaration": true, + "declarationMap": true, + "sourceMap": true, + "incremental": true, + "strict": true, + "downlevelIteration": true, + "emitDecoratorMetadata": true, + "esModuleInterop": true, + "experimentalDecorators": true, + "forceConsistentCasingInFileNames": true, + "noFallthroughCasesInSwitch": true, + "noUncheckedIndexedAccess": true, + "noImplicitReturns": true, + "noUnusedLocals": true, + "noUnusedParameters": true, + "resolveJsonModule": true, + "allowUnreachableCode": false, + "removeComments": true + } } diff --git a/turbo.json b/turbo.json index 91db7cb6..476cf470 100644 --- a/turbo.json +++ b/turbo.json @@ -7,12 +7,17 @@ "outputs": ["dist/**"] }, "test": { - "dependsOn": ["build"], - "outputs": [".nyc_output/**"] + "dependsOn": ["build"] }, "clean": { "outputs": [], "cache": false + }, + "format": { + "outputs": [] + }, + "format:fix": { + "outputs": [] } } }