diff --git a/.circleci/config.yml b/.circleci/config.yml index 27c0772320..6ee576b6fe 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -61,6 +61,7 @@ commands: keys: - npm-{{ arch }}-v1-{{ checksum "package-lock.json" }} - npm-{{ arch }}-v1 + - run: curl -fsSL https://deno.land/install.sh | sh -s -- v1.42.3 - run: << parameters.command >> - save_cache: key: npm-{{ arch }}-v1-{{ checksum "package-lock.json" }} diff --git a/.eslintrc.cjs b/.eslintrc.cjs index 3a47db076e..712f997c06 100644 --- a/.eslintrc.cjs +++ b/.eslintrc.cjs @@ -24,6 +24,11 @@ const config = { 'packages/framework-info/test/fixtures/**', 'packages/framework-info/dist/**', 'packages/*/lib/**', + + 'packages/edge-bundler/deno/**/*', + 'packages/edge-bundler/node/vendor/**', + 'packages/edge-bundler/test/deno/**/*', + 'packages/edge-bundler/test/fixtures/**/*', ], rules: { // ----------------------------------------------------------- diff --git a/.github/workflows/workflow.yml b/.github/workflows/workflow.yml index 35cbc08db8..f7197367e2 100644 --- a/.github/workflows/workflow.yml +++ b/.github/workflows/workflow.yml @@ -51,9 +51,12 @@ jobs: matrix: os: [ubuntu-latest, macOS-latest, windows-latest] node-version: ['*'] + # Must include the minimum deno version from the `DENO_VERSION_RANGE` constant in `node/bridge.ts`. + deno-version: ['v1.37.0', 'v1.x'] include: - os: ubuntu-latest node-version: '14.16.0' + deno-version: 'v1.x' fail-fast: false steps: # Sets an output parameter if this is a release PR @@ -79,6 +82,13 @@ jobs: - name: Install npm@7 run: npm install -g npm@7 if: ${{ matrix.node-version == '14.16.0' && !steps.release-check.outputs.IS_RELEASE }} + - name: Setup Deno + uses: denoland/setup-deno@v1 + with: + deno-version: ${{ matrix.deno-version }} + if: ${{ !steps.release-check.outputs.IS_RELEASE }} + - name: Setup Deno dependencies + run: deno cache https://deno.land/x/eszip@v0.55.2/eszip.ts - name: Set up Go uses: actions/setup-go@v4 with: diff --git a/.prettierignore b/.prettierignore index a2f9fef4d4..b747f71e21 100644 --- a/.prettierignore +++ b/.prettierignore @@ -1,8 +1,13 @@ # don't format fixtures (sometimes faulty behaviour is desired) packages/*/tests/**/fixtures/** +packages/*/test/**/fixtures/** packages/framework-info/test/fixtures/** # don't lint outputs packages/*/lib +# don't lint deno files +packages/edge-bundler/deno/** +# don't lint vendored files +packages/edge-bundler/*/vendor/** # don't lint changelog files as they get auto-generated CHANGELOG.md coverage diff --git a/.release-please-manifest.json b/.release-please-manifest.json index 96e58f23af..6751f19e71 100644 --- a/.release-please-manifest.json +++ b/.release-please-manifest.json @@ -1,6 +1,7 @@ { "packages/build-info": "7.13.2", "packages/build": "29.40.0", + "packages/edge-bundler": "11.4.0", "packages/cache-utils": "5.1.5", "packages/config": "20.12.1", "packages/framework-info": "9.8.11", diff --git a/package-lock.json b/package-lock.json index 2b94a0032d..701b446b27 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6654,3142 +6654,3617 @@ "link": true }, "node_modules/@netlify/edge-bundler": { - "version": "11.4.0", - "resolved": "https://registry.npmjs.org/@netlify/edge-bundler/-/edge-bundler-11.4.0.tgz", - "integrity": "sha512-YoI3Avxj6IPXmESSRIfY+ctMNvdVYrITZgXa9mCkI2NebFd5jeKZ+CldLjnCJsvIfIPklnmAx8XOlNBWUKQYMg==", + "resolved": "packages/edge-bundler", + "link": true + }, + "node_modules/@netlify/framework-info": { + "resolved": "packages/framework-info", + "link": true + }, + "node_modules/@netlify/functions-utils": { + "resolved": "packages/functions-utils", + "link": true + }, + "node_modules/@netlify/git-utils": { + "resolved": "packages/git-utils", + "link": true + }, + "node_modules/@netlify/nock-udp": { + "resolved": "packages/nock-udp", + "link": true + }, + "node_modules/@netlify/node-cookies": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz", + "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==", + "engines": { + "node": "^14.16.0 || >=16.0.0" + } + }, + "node_modules/@netlify/open-api": { + "version": "2.28.0", + "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.28.0.tgz", + "integrity": "sha512-lSx9yVn5mzTS7u9aevQyDRoWaHJYNl15B7CU373g8We39wW8fGh4sdNY7ciPWshf42FblOVlBdoasn/LpzquXg==", + "engines": { + "node": ">=14" + } + }, + "node_modules/@netlify/opentelemetry-sdk-setup": { + "resolved": "packages/opentelemetry-sdk-setup", + "link": true + }, + "node_modules/@netlify/opentelemetry-utils": { + "resolved": "packages/opentelemetry-utils", + "link": true + }, + "node_modules/@netlify/plugins-list": { + "version": "6.77.0", + "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.77.0.tgz", + "integrity": "sha512-czL3FH61hFhhVQydRj2xjIwLVYHDNskMhRib7dUfOQrUHifqLlUFKp03NwBD87G9BFKXUYGWZMEUU+JjIpVc9w==", + "engines": { + "node": "^14.14.0 || >=16.0.0" + } + }, + "node_modules/@netlify/run-utils": { + "resolved": "packages/run-utils", + "link": true + }, + "node_modules/@netlify/serverless-functions-api": { + "version": "1.16.2", + "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.16.2.tgz", + "integrity": "sha512-v28g91/bnvvFw+LO/ro/n766RhbWqB5UG2H73kwEUuSqlnLuO/tMgPh13vOeeIgjZcXZoulGn13g7eUs4j6Qpg==", "dependencies": { - "@import-maps/resolve": "^1.0.1", - "@vercel/nft": "^0.26.0", - "ajv": "^8.11.2", - "ajv-errors": "^3.0.0", - "better-ajv-errors": "^1.2.0", + "@netlify/node-cookies": "^0.1.0", + "urlpattern-polyfill": "8.0.2" + }, + "engines": { + "node": "^14.18.0 || >=16.0.0" + } + }, + "node_modules/@netlify/testing": { + "resolved": "packages/testing", + "link": true + }, + "node_modules/@netlify/zip-it-and-ship-it": { + "version": "9.31.3", + "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.31.3.tgz", + "integrity": "sha512-cB8DE0pV90IYShytLcKyxZFy6aolKqSuFDMOKVL/svJ6hMQOVlngz5ZKcNRX4rQ2uHWHTe75tgTn6OqmelQYrw==", + "dependencies": { + "@babel/parser": "^7.22.5", + "@babel/types": "7.23.6", + "@netlify/binary-info": "^1.0.0", + "@netlify/serverless-functions-api": "^1.16.2", + "@vercel/nft": "^0.23.0", + "archiver": "^6.0.0", "common-path-prefix": "^3.0.0", - "env-paths": "^3.0.0", - "esbuild": "0.20.2", + "cp-file": "^10.0.0", + "es-module-lexer": "^1.0.0", + "esbuild": "0.19.11", "execa": "^6.0.0", - "find-up": "^6.3.0", - "get-package-name": "^2.2.0", - "get-port": "^6.1.2", + "fast-glob": "^3.3.2", + "filter-obj": "^5.0.0", + "find-up": "^6.0.0", + "glob": "^8.0.3", + "is-builtin-module": "^3.1.0", "is-path-inside": "^4.0.0", - "jsonc-parser": "^3.2.0", - "node-fetch": "^3.1.1", - "node-stream-zip": "^1.15.0", - "p-retry": "^5.1.1", - "p-wait-for": "^4.1.0", - "path-key": "^4.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "merge-options": "^3.0.4", + "minimatch": "^9.0.0", + "normalize-path": "^3.0.0", + "p-map": "^5.0.0", + "path-exists": "^5.0.0", + "precinct": "^11.0.0", + "require-package-name": "^2.0.1", + "resolve": "^2.0.0-next.1", "semver": "^7.3.8", - "tmp-promise": "^3.0.3", + "tmp-promise": "^3.0.2", + "toml": "^3.0.0", + "unixify": "^1.0.0", "urlpattern-polyfill": "8.0.2", - "uuid": "^9.0.0" + "yargs": "^17.0.0" + }, + "bin": { + "zip-it-and-ship-it": "dist/bin.js" }, "engines": { - "node": "^14.16.0 || >=16.0.0" + "node": "^14.18.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/aix-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", - "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "aix" - ], + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft": { + "version": "0.23.1", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.23.1.tgz", + "integrity": "sha512-NE0xSmGWVhgHF1OIoir71XAd0W0C1UE3nzFyhpFiMr3rVhetww7NvM1kc41trBsPG37Bh+dE5FYCTMzM/gBu0w==", + "dependencies": { + "@mapbox/node-pre-gyp": "^1.0.5", + "@rollup/pluginutils": "^4.0.0", + "acorn": "^8.6.0", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.2", + "node-gyp-build": "^4.2.2", + "resolve-from": "^5.0.0" + }, + "bin": { + "nft": "out/cli.js" + }, + "engines": { + "node": ">=14" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/glob": { + "version": "7.2.3", + "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", + "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" + }, + "engines": { + "node": "*" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/aggregate-error": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", + "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/android-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", - "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@netlify/zip-it-and-ship-it/node_modules/execa": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/glob": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", + "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/android-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", - "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@netlify/zip-it-and-ship-it/node_modules/glob/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/human-signals": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "engines": { + "node": ">=12.20.0" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/is-stream": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "dependencies": { + "path-key": "^4.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/onetime": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "dependencies": { + "mimic-fn": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/p-map": { + "version": "5.5.0", + "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", + "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "dependencies": { + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@netlify/zip-it-and-ship-it/node_modules/strip-final-newline": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "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/@npmcli/arborist": { + "version": "5.3.0", + "dev": 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/metavuln-calculator": "^3.0.1", + "@npmcli/move-file": "^2.0.0", + "@npmcli/name-from-folder": "^1.0.1", + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/package-json": "^2.0.0", + "@npmcli/run-script": "^4.1.3", + "bin-links": "^3.0.0", + "cacache": "^16.0.6", + "common-ancestor-path": "^1.0.1", + "json-parse-even-better-errors": "^2.3.1", + "json-stringify-nice": "^1.1.4", + "mkdirp": "^1.0.4", + "mkdirp-infer-owner": "^2.0.0", + "nopt": "^5.0.0", + "npm-install-checks": "^5.0.0", + "npm-package-arg": "^9.0.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.0", + "npmlog": "^6.0.2", + "pacote": "^13.6.1", + "parse-conflict-json": "^2.0.1", + "proc-log": "^2.0.0", + "promise-all-reject-late": "^1.0.0", + "promise-call-limit": "^1.0.1", + "read-package-json-fast": "^2.0.2", + "readdir-scoped-modules": "^1.1.0", + "rimraf": "^3.0.2", + "semver": "^7.3.7", + "ssri": "^9.0.0", + "treeverse": "^2.0.0", + "walk-up-path": "^1.0.0" + }, + "bin": { + "arborist": "bin/index.js" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/@npmcli/arborist/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/@npmcli/arborist/node_modules/are-we-there-yet": { + "version": "3.0.1", + "dev": true, + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/android-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", - "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/@npmcli/arborist/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/@npmcli/arborist/node_modules/gauge": { + "version": "4.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/darwin-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", - "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { + "version": "5.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/darwin-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", - "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/@npmcli/arborist/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/freebsd-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", - "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { + "version": "9.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/freebsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", - "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/@npmcli/arborist/node_modules/npmlog": { + "version": "6.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-arm": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", - "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/arborist/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": ">=12" + "node": ">=8" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", - "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/arborist/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", - "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/fs": { + "version": "2.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@gar/promisify": "^1.1.3", + "semver": "^7.3.5" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-loong64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", - "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/git": { + "version": "3.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/promise-spawn": "^3.0.0", + "lru-cache": "^7.4.4", + "mkdirp": "^1.0.4", + "npm-pick-manifest": "^7.0.0", + "proc-log": "^2.0.0", + "promise-inflight": "^1.0.1", + "promise-retry": "^2.0.1", + "semver": "^7.3.5", + "which": "^2.0.2" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-mips64el": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", - "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/installed-package-contents": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "npm-bundled": "^1.1.1", + "npm-normalize-package-bin": "^1.0.1" + }, + "bin": { + "installed-package-contents": "index.js" + }, "engines": { - "node": ">=12" + "node": ">= 10" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-ppc64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", - "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/map-workspaces": { + "version": "2.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/name-from-folder": "^1.0.1", + "glob": "^8.0.1", + "minimatch": "^5.0.1", + "read-package-json-fast": "^2.0.3" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-riscv64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", - "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/map-workspaces/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-s390x": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", - "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/linux-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", - "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/@npmcli/metavuln-calculator": { + "version": "3.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "cacache": "^16.0.0", + "json-parse-even-better-errors": "^2.3.1", + "pacote": "^13.0.3", + "semver": "^7.3.5" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/netbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", - "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], + "node_modules/@npmcli/move-file": { + "version": "2.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "mkdirp": "^1.0.4", + "rimraf": "^3.0.2" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/openbsd-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", - "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], + "node_modules/@npmcli/name-from-folder": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/@npmcli/node-gyp": { + "version": "2.0.0", + "dev": true, + "license": "ISC", "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/sunos-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", - "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], + "node_modules/@npmcli/package-json": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "json-parse-even-better-errors": "^2.3.1" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/win32-arm64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", - "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@npmcli/promise-spawn": { + "version": "3.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "infer-owner": "^1.0.4" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/win32-ia32": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", - "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/@npmcli/run-script": { + "version": "4.2.1", + "dev": true, + "license": "ISC", + "dependencies": { + "@npmcli/node-gyp": "^2.0.0", + "@npmcli/promise-spawn": "^3.0.0", + "node-gyp": "^9.0.0", + "read-package-json-fast": "^2.0.3", + "which": "^2.0.2" + }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/@netlify/edge-bundler/node_modules/@esbuild/win32-x64": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", - "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], - "engines": { - "node": ">=12" + "node_modules/@nrwl/cli": { + "version": "14.8.9", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "14.8.9" } }, - "node_modules/@netlify/edge-bundler/node_modules/esbuild": { - "version": "0.20.2", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", - "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "node_modules/@nrwl/devkit": { + "version": "15.9.7", + "dev": true, + "license": "MIT", + "dependencies": { + "ejs": "^3.1.7", + "ignore": "^5.0.4", + "semver": "7.5.4", + "tmp": "~0.2.1", + "tslib": "^2.3.0" }, - "engines": { - "node": ">=12" + "peerDependencies": { + "nx": ">= 14.1 <= 16" + } + }, + "node_modules/@nrwl/devkit/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" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.20.2", - "@esbuild/android-arm": "0.20.2", - "@esbuild/android-arm64": "0.20.2", - "@esbuild/android-x64": "0.20.2", - "@esbuild/darwin-arm64": "0.20.2", - "@esbuild/darwin-x64": "0.20.2", - "@esbuild/freebsd-arm64": "0.20.2", - "@esbuild/freebsd-x64": "0.20.2", - "@esbuild/linux-arm": "0.20.2", - "@esbuild/linux-arm64": "0.20.2", - "@esbuild/linux-ia32": "0.20.2", - "@esbuild/linux-loong64": "0.20.2", - "@esbuild/linux-mips64el": "0.20.2", - "@esbuild/linux-ppc64": "0.20.2", - "@esbuild/linux-riscv64": "0.20.2", - "@esbuild/linux-s390x": "0.20.2", - "@esbuild/linux-x64": "0.20.2", - "@esbuild/netbsd-x64": "0.20.2", - "@esbuild/openbsd-x64": "0.20.2", - "@esbuild/sunos-x64": "0.20.2", - "@esbuild/win32-arm64": "0.20.2", - "@esbuild/win32-ia32": "0.20.2", - "@esbuild/win32-x64": "0.20.2" + "engines": { + "node": ">=10" } }, - "node_modules/@netlify/edge-bundler/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "node_modules/@nrwl/devkit/node_modules/semver": { + "version": "7.5.4", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", + "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" + } + }, + "node_modules/@nrwl/tao": { + "version": "14.8.9", + "dev": true, + "license": "MIT", + "dependencies": { + "nx": "14.8.9" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "bin": { + "tao": "index.js" } }, - "node_modules/@netlify/edge-bundler/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "node_modules/@octokit/auth-token": { + "version": "3.0.4", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12.20.0" + "node": ">= 14" } }, - "node_modules/@netlify/edge-bundler/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node_modules/@octokit/core": { + "version": "4.2.4", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/auth-token": "^3.0.0", + "@octokit/graphql": "^5.0.0", + "@octokit/request": "^6.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "before-after-hook": "^2.2.0", + "universal-user-agent": "^6.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">= 14" } }, - "node_modules/@netlify/edge-bundler/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/@octokit/endpoint": { + "version": "7.0.6", + "dev": true, + "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/@netlify/edge-bundler/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/@octokit/graphql": { + "version": "5.0.6", + "dev": true, + "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "@octokit/request": "^6.0.0", + "@octokit/types": "^9.0.0", + "universal-user-agent": "^6.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 14" } }, - "node_modules/@netlify/edge-bundler/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/@octokit/openapi-types": { + "version": "18.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-enterprise-rest": { + "version": "6.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/plugin-paginate-rest": { + "version": "6.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/tsconfig": "^1.0.2", + "@octokit/types": "^9.2.3" + }, "engines": { - "node": ">=12" + "node": ">= 14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@octokit/core": ">=4" } }, - "node_modules/@netlify/framework-info": { - "resolved": "packages/framework-info", - "link": true - }, - "node_modules/@netlify/functions-utils": { - "resolved": "packages/functions-utils", - "link": true - }, - "node_modules/@netlify/git-utils": { - "resolved": "packages/git-utils", - "link": true - }, - "node_modules/@netlify/nock-udp": { - "resolved": "packages/nock-udp", - "link": true - }, - "node_modules/@netlify/node-cookies": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/@netlify/node-cookies/-/node-cookies-0.1.0.tgz", - "integrity": "sha512-OAs1xG+FfLX0LoRASpqzVntVV/RpYkgpI0VrUnw2u0Q1qiZUzcPffxRK8HF3gc4GjuhG5ahOEMJ9bswBiZPq0g==", - "engines": { - "node": "^14.16.0 || >=16.0.0" + "node_modules/@octokit/plugin-request-log": { + "version": "1.0.4", + "dev": true, + "license": "MIT", + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/@netlify/open-api": { - "version": "2.28.0", - "resolved": "https://registry.npmjs.org/@netlify/open-api/-/open-api-2.28.0.tgz", - "integrity": "sha512-lSx9yVn5mzTS7u9aevQyDRoWaHJYNl15B7CU373g8We39wW8fGh4sdNY7ciPWshf42FblOVlBdoasn/LpzquXg==", + "node_modules/@octokit/plugin-rest-endpoint-methods": { + "version": "7.2.3", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/types": "^10.0.0" + }, "engines": { - "node": ">=14" + "node": ">= 14" + }, + "peerDependencies": { + "@octokit/core": ">=3" } }, - "node_modules/@netlify/opentelemetry-sdk-setup": { - "resolved": "packages/opentelemetry-sdk-setup", - "link": true - }, - "node_modules/@netlify/opentelemetry-utils": { - "resolved": "packages/opentelemetry-utils", - "link": true + "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { + "version": "10.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/openapi-types": "^18.0.0" + } }, - "node_modules/@netlify/plugins-list": { - "version": "6.77.0", - "resolved": "https://registry.npmjs.org/@netlify/plugins-list/-/plugins-list-6.77.0.tgz", - "integrity": "sha512-czL3FH61hFhhVQydRj2xjIwLVYHDNskMhRib7dUfOQrUHifqLlUFKp03NwBD87G9BFKXUYGWZMEUU+JjIpVc9w==", + "node_modules/@octokit/request": { + "version": "6.2.8", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/endpoint": "^7.0.0", + "@octokit/request-error": "^3.0.0", + "@octokit/types": "^9.0.0", + "is-plain-object": "^5.0.0", + "node-fetch": "^2.6.7", + "universal-user-agent": "^6.0.0" + }, "engines": { - "node": "^14.14.0 || >=16.0.0" + "node": ">= 14" } }, - "node_modules/@netlify/run-utils": { - "resolved": "packages/run-utils", - "link": true - }, - "node_modules/@netlify/serverless-functions-api": { - "version": "1.16.2", - "resolved": "https://registry.npmjs.org/@netlify/serverless-functions-api/-/serverless-functions-api-1.16.2.tgz", - "integrity": "sha512-v28g91/bnvvFw+LO/ro/n766RhbWqB5UG2H73kwEUuSqlnLuO/tMgPh13vOeeIgjZcXZoulGn13g7eUs4j6Qpg==", + "node_modules/@octokit/request-error": { + "version": "3.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "@netlify/node-cookies": "^0.1.0", - "urlpattern-polyfill": "8.0.2" + "@octokit/types": "^9.0.0", + "deprecation": "^2.0.0", + "once": "^1.4.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 14" } }, - "node_modules/@netlify/testing": { - "resolved": "packages/testing", - "link": true - }, - "node_modules/@netlify/zip-it-and-ship-it": { - "version": "9.31.3", - "resolved": "https://registry.npmjs.org/@netlify/zip-it-and-ship-it/-/zip-it-and-ship-it-9.31.3.tgz", - "integrity": "sha512-cB8DE0pV90IYShytLcKyxZFy6aolKqSuFDMOKVL/svJ6hMQOVlngz5ZKcNRX4rQ2uHWHTe75tgTn6OqmelQYrw==", + "node_modules/@octokit/request/node_modules/node-fetch": { + "version": "2.7.0", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/parser": "^7.22.5", - "@babel/types": "7.23.6", - "@netlify/binary-info": "^1.0.0", - "@netlify/serverless-functions-api": "^1.16.2", - "@vercel/nft": "^0.23.0", - "archiver": "^6.0.0", - "common-path-prefix": "^3.0.0", - "cp-file": "^10.0.0", - "es-module-lexer": "^1.0.0", - "esbuild": "0.19.11", - "execa": "^6.0.0", - "fast-glob": "^3.3.2", - "filter-obj": "^5.0.0", - "find-up": "^6.0.0", - "glob": "^8.0.3", - "is-builtin-module": "^3.1.0", - "is-path-inside": "^4.0.0", - "junk": "^4.0.0", - "locate-path": "^7.0.0", - "merge-options": "^3.0.4", - "minimatch": "^9.0.0", - "normalize-path": "^3.0.0", - "p-map": "^5.0.0", - "path-exists": "^5.0.0", - "precinct": "^11.0.0", - "require-package-name": "^2.0.1", - "resolve": "^2.0.0-next.1", - "semver": "^7.3.8", - "tmp-promise": "^3.0.2", - "toml": "^3.0.0", - "unixify": "^1.0.0", - "urlpattern-polyfill": "8.0.2", - "yargs": "^17.0.0" + "whatwg-url": "^5.0.0" }, - "bin": { - "zip-it-and-ship-it": "dist/bin.js" + "engines": { + "node": "4.x || >=6.0.0" + }, + "peerDependencies": { + "encoding": "^0.1.0" + }, + "peerDependenciesMeta": { + "encoding": { + "optional": true + } + } + }, + "node_modules/@octokit/rest": { + "version": "19.0.13", + "dev": true, + "license": "MIT", + "dependencies": { + "@octokit/core": "^4.2.1", + "@octokit/plugin-paginate-rest": "^6.1.2", + "@octokit/plugin-request-log": "^1.0.4", + "@octokit/plugin-rest-endpoint-methods": "^7.1.2" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">= 14" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.23.1.tgz", - "integrity": "sha512-NE0xSmGWVhgHF1OIoir71XAd0W0C1UE3nzFyhpFiMr3rVhetww7NvM1kc41trBsPG37Bh+dE5FYCTMzM/gBu0w==", + "node_modules/@octokit/tsconfig": { + "version": "1.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/@octokit/types": { + "version": "9.3.2", + "dev": true, + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", - "acorn": "^8.6.0", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", - "node-gyp-build": "^4.2.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" + "@octokit/openapi-types": "^18.0.0" + } + }, + "node_modules/@opentelemetry/api": { + "version": "1.8.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", + "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/@opentelemetry/api-logs": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.49.1.tgz", + "integrity": "sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q==", + "dependencies": { + "@opentelemetry/api": "^1.0.0" }, "engines": { "node": ">=14" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node_modules/@opentelemetry/context-async-hooks": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.22.0.tgz", + "integrity": "sha512-Nfdxyg8YtWqVWkyrCukkundAjPhUXi93JtVQmqDT1mZRVKqA7e2r7eJCrI+F651XUBMp0hsOJSGiFk3QSpaIJw==", + "engines": { + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/glob": { - "version": "7.2.3", - "resolved": "https://registry.npmjs.org/glob/-/glob-7.2.3.tgz", - "integrity": "sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==", + "node_modules/@opentelemetry/core": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.22.0.tgz", + "integrity": "sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "@opentelemetry/semantic-conventions": "1.22.0" }, "engines": { - "node": "*" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/@vercel/nft/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.49.1.tgz", + "integrity": "sha512-bq592KlXFCtKy1K+SSx/IgnczbYZqbAMyk9NwR7TOP2m9RTdeO7HwRvoRAsyZc83obEeLjkRXIsrF3OZk9x8TQ==", "dependencies": { - "brace-expansion": "^1.1.7" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.22.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.49.1", + "@opentelemetry/otlp-grpc-exporter-base": "0.49.1", + "@opentelemetry/otlp-transformer": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-metrics": "1.22.0" }, "engines": { - "node": "*" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/aggregate-error": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/aggregate-error/-/aggregate-error-4.0.1.tgz", - "integrity": "sha512-0poP0T7el6Vq3rstR8Mn4V/IQrpBLO6POkUSrN7RhyY+GF/InCFShQzsQ39T25gkHhLgSLByyAz+Kjb+c2L98w==", + "node_modules/@opentelemetry/exporter-metrics-otlp-http": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.49.1.tgz", + "integrity": "sha512-t/sWYqfcwn81SvYHIyYJDlJD2CjFz3/h2t4j+XCtdoHAfu+WVJQmwLsGYJPlCDp3UXQfFpMJMWvLlvtD2SL+rg==", "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/otlp-exporter-base": "0.49.1", + "@opentelemetry/otlp-transformer": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-metrics": "1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/execa": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", - "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", + "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.49.1.tgz", + "integrity": "sha512-xKI6aCRY+STxbF7PA+6YNNYWFf6IS065rZZeqlqvqQsp0HaFUqpPEzMJn0OmQMGuy40o7wWtmZ9/bSu4jlhfYw==", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/exporter-metrics-otlp-http": "0.49.1", + "@opentelemetry/otlp-exporter-base": "0.49.1", + "@opentelemetry/otlp-proto-exporter-base": "0.49.1", + "@opentelemetry/otlp-transformer": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-metrics": "1.22.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/glob": { - "version": "8.1.0", - "resolved": "https://registry.npmjs.org/glob/-/glob-8.1.0.tgz", - "integrity": "sha512-r8hpEjiQEYlF2QU0df3dS+nxxSIreXQS1qRhMJM0Q5NDdR386C7jb7Hwwod8Fgiuex+k0GFjgft18yvxm5XoCQ==", + "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.49.1.tgz", + "integrity": "sha512-Zbd7f3zF7fI2587MVhBizaW21cO/SordyrZGtMtvhoxU6n4Qb02Gx71X4+PzXH620e0+JX+Pcr9bYb1HTeVyJA==", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.22.0", + "@opentelemetry/otlp-grpc-exporter-base": "0.49.1", + "@opentelemetry/otlp-transformer": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/glob/node_modules/minimatch": { - "version": "5.1.6", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", - "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "node_modules/@opentelemetry/exporter-trace-otlp-http": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.49.1.tgz", + "integrity": "sha512-KOLtZfZvIrpGZLVvblKsiVQT7gQUZNKcUUH24Zz6Xbi7LJb9Vt6xtUZFYdR5IIjvt47PIqBKDWUQlU0o1wAsRw==", "dependencies": { - "brace-expansion": "^2.0.1" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/otlp-exporter-base": "0.49.1", + "@opentelemetry/otlp-transformer": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0" }, "engines": { - "node": ">=10" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/human-signals": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", - "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", + "node_modules/@opentelemetry/exporter-trace-otlp-proto": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.49.1.tgz", + "integrity": "sha512-n8ON/c9pdMyYAfSFWKkgsPwjYoxnki+6Olzo+klKfW7KqLWoyEkryNkbcMIYnGGNXwdkMIrjoaP0VxXB26Oxcg==", + "dependencies": { + "@opentelemetry/core": "1.22.0", + "@opentelemetry/otlp-exporter-base": "0.49.1", + "@opentelemetry/otlp-proto-exporter-base": "0.49.1", + "@opentelemetry/otlp-transformer": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0" + }, "engines": { - "node": ">=12.20.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/is-stream": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", - "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", + "node_modules/@opentelemetry/exporter-zipkin": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.22.0.tgz", + "integrity": "sha512-XcFs6rGvcTz0qW5uY7JZDYD0yNEXdekXAb6sFtnZgY/cHY6BQ09HMzOjv9SX+iaXplRDcHr1Gta7VQKM1XXM6g==", + "dependencies": { + "@opentelemetry/core": "1.22.0", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0", + "@opentelemetry/semantic-conventions": "1.22.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/npm-run-path": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", - "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", + "node_modules/@opentelemetry/instrumentation": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.49.1.tgz", + "integrity": "sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ==", "dependencies": { - "path-key": "^4.0.0" + "@opentelemetry/api-logs": "0.49.1", + "@types/shimmer": "^1.0.2", + "import-in-the-middle": "1.7.1", + "require-in-the-middle": "^7.1.1", + "semver": "^7.5.2", + "shimmer": "^1.2.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.3.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/onetime": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", - "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", + "node_modules/@opentelemetry/otlp-exporter-base": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.49.1.tgz", + "integrity": "sha512-z6sHliPqDgJU45kQatAettY9/eVF58qVPaTuejw9YWfSRqid9pXPYeegDCSdyS47KAUgAtm+nC28K3pfF27HWg==", "dependencies": { - "mimic-fn": "^4.0.0" + "@opentelemetry/core": "1.22.0" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/p-map": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/p-map/-/p-map-5.5.0.tgz", - "integrity": "sha512-VFqfGDHlx87K66yZrNdI4YGtD70IRyd+zSvgks6mzHPRNkoKy+9EKP4SFC77/vTTQYmRmti7dvqC+m5jBrBAcg==", + "node_modules/@opentelemetry/otlp-grpc-exporter-base": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.49.1.tgz", + "integrity": "sha512-DNDNUWmOqtKTFJAyOyHHKotVox0NQ/09ETX8fUOeEtyNVHoGekAVtBbvIA3AtK+JflP7LC0PTjlLfruPM3Wy6w==", "dependencies": { - "aggregate-error": "^4.0.0" + "@grpc/grpc-js": "^1.7.1", + "@opentelemetry/core": "1.22.0", + "@opentelemetry/otlp-exporter-base": "0.49.1", + "protobufjs": "^7.2.3" }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@netlify/zip-it-and-ship-it/node_modules/strip-final-newline": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", - "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", + "node_modules/@opentelemetry/otlp-proto-exporter-base": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.49.1.tgz", + "integrity": "sha512-x1qB4EUC7KikUl2iNuxCkV8yRzrSXSyj4itfpIO674H7dhI7Zv37SFaOJTDN+8Z/F50gF2ISFH9CWQ4KCtGm2A==", + "dependencies": { + "@opentelemetry/core": "1.22.0", + "@opentelemetry/otlp-exporter-base": "0.49.1", + "protobufjs": "^7.2.3" + }, "engines": { - "node": ">=12" + "node": ">=14" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependencies": { + "@opentelemetry/api": "^1.0.0" } }, - "node_modules/@nodelib/fs.scandir": { - "version": "2.1.5", - "license": "MIT", + "node_modules/@opentelemetry/otlp-transformer": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.49.1.tgz", + "integrity": "sha512-Z+koA4wp9L9e3jkFacyXTGphSWTbOKjwwXMpb0CxNb0kjTHGUxhYRN8GnkLFsFo5NbZPjP07hwAqeEG/uCratQ==", "dependencies": { - "@nodelib/fs.stat": "2.0.5", - "run-parallel": "^1.1.9" + "@opentelemetry/api-logs": "0.49.1", + "@opentelemetry/core": "1.22.0", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-logs": "0.49.1", + "@opentelemetry/sdk-metrics": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0" }, "engines": { - "node": ">= 8" - } - }, - "node_modules/@nodelib/fs.stat": { - "version": "2.0.5", - "license": "MIT", - "engines": { - "node": ">= 8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.9.0" } }, - "node_modules/@nodelib/fs.walk": { - "version": "1.2.8", - "license": "MIT", + "node_modules/@opentelemetry/propagator-b3": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.22.0.tgz", + "integrity": "sha512-qBItJm9ygg/jCB5rmivyGz1qmKZPsL/sX715JqPMFgq++Idm0x+N9sLQvWFHFt2+ZINnCSojw7FVBgFW6izcXA==", "dependencies": { - "@nodelib/fs.scandir": "2.1.5", - "fastq": "^1.6.0" + "@opentelemetry/core": "1.22.0" }, "engines": { - "node": ">= 8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@npmcli/arborist": { - "version": "5.3.0", - "dev": true, - "license": "ISC", + "node_modules/@opentelemetry/propagator-jaeger": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.22.0.tgz", + "integrity": "sha512-pMLgst3QIwrUfepraH5WG7xfpJ8J3CrPKrtINK0t7kBkuu96rn+HDYQ8kt3+0FXvrZI8YJE77MCQwnJWXIrgpA==", "dependencies": { - "@isaacs/string-locale-compare": "^1.1.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/map-workspaces": "^2.0.3", - "@npmcli/metavuln-calculator": "^3.0.1", - "@npmcli/move-file": "^2.0.0", - "@npmcli/name-from-folder": "^1.0.1", - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/package-json": "^2.0.0", - "@npmcli/run-script": "^4.1.3", - "bin-links": "^3.0.0", - "cacache": "^16.0.6", - "common-ancestor-path": "^1.0.1", - "json-parse-even-better-errors": "^2.3.1", - "json-stringify-nice": "^1.1.4", - "mkdirp": "^1.0.4", - "mkdirp-infer-owner": "^2.0.0", - "nopt": "^5.0.0", - "npm-install-checks": "^5.0.0", - "npm-package-arg": "^9.0.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.0", - "npmlog": "^6.0.2", - "pacote": "^13.6.1", - "parse-conflict-json": "^2.0.1", - "proc-log": "^2.0.0", - "promise-all-reject-late": "^1.0.0", - "promise-call-limit": "^1.0.1", - "read-package-json-fast": "^2.0.2", - "readdir-scoped-modules": "^1.1.0", - "rimraf": "^3.0.2", - "semver": "^7.3.7", - "ssri": "^9.0.0", - "treeverse": "^2.0.0", - "walk-up-path": "^1.0.0" - }, - "bin": { - "arborist": "bin/index.js" + "@opentelemetry/core": "1.22.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "node_modules/@opentelemetry/resources": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.22.0.tgz", + "integrity": "sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/semantic-conventions": "1.22.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/@npmcli/arborist/node_modules/gauge": { - "version": "4.0.4", - "dev": true, - "license": "ISC", + "node_modules/@opentelemetry/sdk-logs": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.49.1.tgz", + "integrity": "sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/resources": "1.22.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.4.0 <1.9.0", + "@opentelemetry/api-logs": ">=0.39.1" } }, - "node_modules/@npmcli/arborist/node_modules/hosted-git-info": { - "version": "5.2.1", - "dev": true, - "license": "ISC", + "node_modules/@opentelemetry/sdk-metrics": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.22.0.tgz", + "integrity": "sha512-k6iIx6H3TZ+BVMr2z8M16ri2OxWaljg5h8ihGJxi/KQWcjign6FEaEzuigXt5bK9wVEhqAcWLCfarSftaNWkkg==", "dependencies": { - "lru-cache": "^7.5.1" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/resources": "1.22.0", + "lodash.merge": "^4.6.2" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/npm-package-arg": { - "version": "9.1.2", - "dev": true, - "license": "ISC", + "node_modules/@opentelemetry/sdk-node": { + "version": "0.49.1", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.49.1.tgz", + "integrity": "sha512-feBIT85ndiSHXsQ2gfGpXC/sNeX4GCHLksC4A9s/bfpUbbgbCSl0RvzZlmEpCHarNrkZMwFRi4H0xFfgvJEjrg==", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "@opentelemetry/api-logs": "0.49.1", + "@opentelemetry/core": "1.22.0", + "@opentelemetry/exporter-trace-otlp-grpc": "0.49.1", + "@opentelemetry/exporter-trace-otlp-http": "0.49.1", + "@opentelemetry/exporter-trace-otlp-proto": "0.49.1", + "@opentelemetry/exporter-zipkin": "1.22.0", + "@opentelemetry/instrumentation": "0.49.1", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/sdk-logs": "0.49.1", + "@opentelemetry/sdk-metrics": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0", + "@opentelemetry/sdk-trace-node": "1.22.0", + "@opentelemetry/semantic-conventions": "1.22.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/arborist/node_modules/npmlog": { - "version": "6.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "node": ">=14" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependencies": { + "@opentelemetry/api": ">=1.3.0 <1.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/string-width": { - "version": "4.2.3", - "dev": true, - "license": "MIT", + "node_modules/@opentelemetry/sdk-trace-base": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.22.0.tgz", + "integrity": "sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@opentelemetry/core": "1.22.0", + "@opentelemetry/resources": "1.22.0", + "@opentelemetry/semantic-conventions": "1.22.0" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@npmcli/arborist/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, - "license": "MIT", + "node_modules/@opentelemetry/sdk-trace-node": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.22.0.tgz", + "integrity": "sha512-gTGquNz7ue8uMeiWPwp3CU321OstQ84r7PCDtOaCicjbJxzvO8RZMlEC4geOipTeiF88kss5n6w+//A0MhP1lQ==", "dependencies": { - "ansi-regex": "^5.0.1" + "@opentelemetry/context-async-hooks": "1.22.0", + "@opentelemetry/core": "1.22.0", + "@opentelemetry/propagator-b3": "1.22.0", + "@opentelemetry/propagator-jaeger": "1.22.0", + "@opentelemetry/sdk-trace-base": "1.22.0", + "semver": "^7.5.2" }, "engines": { - "node": ">=8" + "node": ">=14" + }, + "peerDependencies": { + "@opentelemetry/api": ">=1.0.0 <1.9.0" } }, - "node_modules/@npmcli/fs": { - "version": "2.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "@gar/promisify": "^1.1.3", - "semver": "^7.3.5" - }, + "node_modules/@opentelemetry/semantic-conventions": { + "version": "1.22.0", + "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.22.0.tgz", + "integrity": "sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" } }, - "node_modules/@npmcli/git": { - "version": "3.0.2", + "node_modules/@parcel/watcher": { + "version": "2.0.4", "dev": true, - "license": "ISC", + "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@npmcli/promise-spawn": "^3.0.0", - "lru-cache": "^7.4.4", - "mkdirp": "^1.0.4", - "npm-pick-manifest": "^7.0.0", - "proc-log": "^2.0.0", - "promise-inflight": "^1.0.1", - "promise-retry": "^2.0.1", - "semver": "^7.3.5", - "which": "^2.0.2" + "node-addon-api": "^3.2.1", + "node-gyp-build": "^4.3.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" } }, - "node_modules/@npmcli/installed-package-contents": { - "version": "1.0.7", + "node_modules/@playwright/test": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", + "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", "dev": true, - "license": "ISC", "dependencies": { - "npm-bundled": "^1.1.1", - "npm-normalize-package-bin": "^1.0.1" + "playwright": "1.41.2" }, "bin": { - "installed-package-contents": "index.js" + "playwright": "cli.js" }, "engines": { - "node": ">= 10" + "node": ">=16" } }, - "node_modules/@npmcli/map-workspaces": { - "version": "2.0.4", + "node_modules/@polka/url": { + "version": "1.0.0-next.24", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/@protobufjs/aspromise": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", + "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" + }, + "node_modules/@protobufjs/base64": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", + "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + }, + "node_modules/@protobufjs/codegen": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", + "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + }, + "node_modules/@protobufjs/eventemitter": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", + "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + }, + "node_modules/@protobufjs/fetch": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", + "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", "dependencies": { - "@npmcli/name-from-folder": "^1.0.1", - "glob": "^8.0.1", - "minimatch": "^5.0.1", - "read-package-json-fast": "^2.0.3" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "@protobufjs/aspromise": "^1.1.1", + "@protobufjs/inquire": "^1.1.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/glob": { - "version": "8.1.0", - "dev": true, - "license": "ISC", + "node_modules/@protobufjs/float": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", + "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + }, + "node_modules/@protobufjs/inquire": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", + "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + }, + "node_modules/@protobufjs/path": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", + "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + }, + "node_modules/@protobufjs/pool": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", + "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + }, + "node_modules/@protobufjs/utf8": { + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", + "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + }, + "node_modules/@rollup/pluginutils": { + "version": "4.2.1", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "estree-walker": "^2.0.1", + "picomatch": "^2.2.2" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node": ">= 8.0.0" } }, - "node_modules/@npmcli/map-workspaces/node_modules/minimatch": { - "version": "5.1.6", - "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, + "node_modules/@rollup/pluginutils/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@npmcli/metavuln-calculator": { - "version": "3.1.1", + "node_modules/@sinclair/typebox": { + "version": "0.27.8", "dev": true, - "license": "ISC", - "dependencies": { - "cacache": "^16.0.0", - "json-parse-even-better-errors": "^2.3.1", - "pacote": "^13.0.3", - "semver": "^7.3.5" - }, + "license": "MIT" + }, + "node_modules/@sindresorhus/is": { + "version": "5.6.0", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/@npmcli/move-file": { - "version": "2.0.1", - "dev": true, + "node_modules/@sindresorhus/slugify": { + "version": "2.2.1", "license": "MIT", "dependencies": { - "mkdirp": "^1.0.4", - "rimraf": "^3.0.2" + "@sindresorhus/transliterate": "^1.0.0", + "escape-string-regexp": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/@npmcli/name-from-folder": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/@npmcli/node-gyp": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/package-json": { - "version": "2.0.0", - "dev": true, - "license": "ISC", + "node_modules/@sindresorhus/transliterate": { + "version": "1.6.0", + "license": "MIT", "dependencies": { - "json-parse-even-better-errors": "^2.3.1" + "escape-string-regexp": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@npmcli/promise-spawn": { - "version": "3.0.0", + "node_modules/@sinonjs/commons": { + "version": "1.8.6", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "infer-owner": "^1.0.4" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "type-detect": "4.0.8" } }, - "node_modules/@npmcli/run-script": { - "version": "4.2.1", + "node_modules/@sinonjs/fake-timers": { + "version": "9.1.2", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "@npmcli/node-gyp": "^2.0.0", - "@npmcli/promise-spawn": "^3.0.0", - "node-gyp": "^9.0.0", - "read-package-json-fast": "^2.0.3", - "which": "^2.0.2" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "@sinonjs/commons": "^1.7.0" } }, - "node_modules/@nrwl/cli": { - "version": "14.8.9", + "node_modules/@sinonjs/samsam": { + "version": "6.1.3", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "nx": "14.8.9" + "@sinonjs/commons": "^1.6.0", + "lodash.get": "^4.4.2", + "type-detect": "^4.0.8" } }, - "node_modules/@nrwl/devkit": { - "version": "15.9.7", + "node_modules/@sinonjs/text-encoding": { + "version": "0.7.2", "dev": true, + "license": "(Unlicense OR Apache-2.0)" + }, + "node_modules/@szmarczak/http-timer": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "ejs": "^3.1.7", - "ignore": "^5.0.4", - "semver": "7.5.4", - "tmp": "~0.2.1", - "tslib": "^2.3.0" + "defer-to-connect": "^2.0.1" }, - "peerDependencies": { - "nx": ">= 14.1 <= 16" + "engines": { + "node": ">=14.16" } }, - "node_modules/@nrwl/devkit/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==", + "node_modules/@tootallnate/once": { + "version": "2.0.0", "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/@nrwl/devkit/node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "node_modules/@tsconfig/node10": { + "version": "1.0.9", + "license": "MIT" + }, + "node_modules/@tsconfig/node12": { + "version": "1.0.11", + "license": "MIT" + }, + "node_modules/@tsconfig/node14": { + "version": "1.0.3", + "license": "MIT" + }, + "node_modules/@tsconfig/node16": { + "version": "1.0.4", + "license": "MIT" + }, + "node_modules/@tsd/typescript": { + "version": "5.3.3", + "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.3.3.tgz", + "integrity": "sha512-CQlfzol0ldaU+ftWuG52vH29uRoKboLinLy84wS8TQOu+m+tWoaUfk4svL4ij2V8M5284KymJBlHUusKj6k34w==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" - }, "engines": { - "node": ">=10" + "node": ">=14.17" } }, - "node_modules/@nrwl/tao": { - "version": "14.8.9", + "node_modules/@types/cacheable-request": { + "version": "6.0.3", "dev": true, "license": "MIT", "dependencies": { - "nx": "14.8.9" - }, - "bin": { - "tao": "index.js" + "@types/http-cache-semantics": "*", + "@types/keyv": "^3.1.4", + "@types/node": "*", + "@types/responselike": "^1.0.0" } }, - "node_modules/@octokit/auth-token": { - "version": "3.0.4", + "node_modules/@types/chai": { + "version": "4.3.11", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/chai-subset": { + "version": "1.3.5", "dev": true, "license": "MIT", - "engines": { - "node": ">= 14" + "dependencies": { + "@types/chai": "*" } }, - "node_modules/@octokit/core": { - "version": "4.2.4", + "node_modules/@types/eslint": { + "version": "7.29.0", "dev": true, "license": "MIT", "dependencies": { - "@octokit/auth-token": "^3.0.0", - "@octokit/graphql": "^5.0.0", - "@octokit/request": "^6.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "before-after-hook": "^2.2.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "@types/estree": "*", + "@types/json-schema": "*" } }, - "node_modules/@octokit/endpoint": { - "version": "7.0.6", + "node_modules/@types/eslint-scope": { + "version": "3.7.7", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "@types/eslint": "*", + "@types/estree": "*" } }, - "node_modules/@octokit/graphql": { - "version": "5.0.6", + "node_modules/@types/estree": { + "version": "1.0.5", "dev": true, + "license": "MIT" + }, + "node_modules/@types/glob-to-regexp": { + "version": "0.4.4", + "resolved": "https://registry.npmjs.org/@types/glob-to-regexp/-/glob-to-regexp-0.4.4.tgz", + "integrity": "sha512-nDKoaKJYbnn1MZxUY0cA1bPmmgZbg0cTq7Rh13d0KWYNOiKbqoR+2d89SnRPszGh7ROzSwZ/GOjZ4jPbmmZ6Eg==", + "dev": true + }, + "node_modules/@types/http-cache-semantics": { + "version": "4.0.4", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-coverage": { + "version": "2.0.6", + "license": "MIT" + }, + "node_modules/@types/istanbul-lib-report": { + "version": "3.0.3", "license": "MIT", "dependencies": { - "@octokit/request": "^6.0.0", - "@octokit/types": "^9.0.0", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "@types/istanbul-lib-coverage": "*" } }, - "node_modules/@octokit/openapi-types": { - "version": "18.1.1", + "node_modules/@types/istanbul-reports": { + "version": "3.0.4", + "license": "MIT", + "dependencies": { + "@types/istanbul-lib-report": "*" + } + }, + "node_modules/@types/json-schema": { + "version": "7.0.15", "dev": true, "license": "MIT" }, - "node_modules/@octokit/plugin-enterprise-rest": { - "version": "6.0.1", + "node_modules/@types/json5": { + "version": "0.0.29", "dev": true, "license": "MIT" }, - "node_modules/@octokit/plugin-paginate-rest": { - "version": "6.1.2", + "node_modules/@types/keyv": { + "version": "3.1.4", "dev": true, "license": "MIT", "dependencies": { - "@octokit/tsconfig": "^1.0.2", - "@octokit/types": "^9.2.3" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=4" + "@types/node": "*" } }, - "node_modules/@octokit/plugin-request-log": { - "version": "1.0.4", + "node_modules/@types/lodash": { + "version": "4.14.202", "dev": true, - "license": "MIT", - "peerDependencies": { - "@octokit/core": ">=3" - } + "license": "MIT" }, - "node_modules/@octokit/plugin-rest-endpoint-methods": { - "version": "7.2.3", + "node_modules/@types/lodash-es": { + "version": "4.17.12", "dev": true, "license": "MIT", "dependencies": { - "@octokit/types": "^10.0.0" - }, - "engines": { - "node": ">= 14" - }, - "peerDependencies": { - "@octokit/core": ">=3" + "@types/lodash": "*" } }, - "node_modules/@octokit/plugin-rest-endpoint-methods/node_modules/@octokit/types": { - "version": "10.0.0", + "node_modules/@types/minimatch": { + "version": "3.0.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/minimist": { + "version": "1.2.5", + "dev": true, + "license": "MIT" + }, + "node_modules/@types/node": { + "version": "14.18.63", + "license": "MIT" + }, + "node_modules/@types/normalize-package-data": { + "version": "2.4.4", + "license": "MIT" + }, + "node_modules/@types/parse-json": { + "version": "4.0.2", "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } + "license": "MIT" }, - "node_modules/@octokit/request": { - "version": "6.2.8", + "node_modules/@types/responselike": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "@octokit/endpoint": "^7.0.0", - "@octokit/request-error": "^3.0.0", - "@octokit/types": "^9.0.0", - "is-plain-object": "^5.0.0", - "node-fetch": "^2.6.7", - "universal-user-agent": "^6.0.0" - }, - "engines": { - "node": ">= 14" + "@types/node": "*" } }, - "node_modules/@octokit/request-error": { - "version": "3.0.3", - "dev": true, + "node_modules/@types/retry": { + "version": "0.12.1", + "license": "MIT" + }, + "node_modules/@types/semver": { + "version": "7.5.8", + "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", + "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", + "dev": true + }, + "node_modules/@types/shimmer": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz", + "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==" + }, + "node_modules/@types/uuid": { + "version": "9.0.8", + "resolved": "https://registry.npmjs.org/@types/uuid/-/uuid-9.0.8.tgz", + "integrity": "sha512-jg+97EGIcY9AGHJJRaaPVgetKDsrTgbRjQ5Msgjh/DQKEFl0DtyRr/VCOyD1T2R1MNeWPK/u7JoGhlDZnKBAfA==", + "dev": true + }, + "node_modules/@types/yargs": { + "version": "16.0.9", "license": "MIT", "dependencies": { - "@octokit/types": "^9.0.0", - "deprecation": "^2.0.0", - "once": "^1.4.0" - }, - "engines": { - "node": ">= 14" + "@types/yargs-parser": "*" } }, - "node_modules/@octokit/request/node_modules/node-fetch": { - "version": "2.7.0", + "node_modules/@types/yargs-parser": { + "version": "21.0.3", + "license": "MIT" + }, + "node_modules/@typescript-eslint/eslint-plugin": { + "version": "5.62.0", "dev": true, "license": "MIT", "dependencies": { - "whatwg-url": "^5.0.0" + "@eslint-community/regexpp": "^4.4.0", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/type-utils": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "graphemer": "^1.4.0", + "ignore": "^5.2.0", + "natural-compare-lite": "^1.4.0", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": "4.x || >=6.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "encoding": "^0.1.0" + "@typescript-eslint/parser": "^5.0.0", + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" }, "peerDependenciesMeta": { - "encoding": { + "typescript": { "optional": true } } }, - "node_modules/@octokit/rest": { - "version": "19.0.13", + "node_modules/@typescript-eslint/parser": { + "version": "5.62.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "peer": true, "dependencies": { - "@octokit/core": "^4.2.1", - "@octokit/plugin-paginate-rest": "^6.1.2", - "@octokit/plugin-request-log": "^1.0.4", - "@octokit/plugin-rest-endpoint-methods": "^7.1.2" + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "debug": "^4.3.4" }, "engines": { - "node": ">= 14" - } - }, - "node_modules/@octokit/tsconfig": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/@octokit/types": { - "version": "9.3.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@octokit/openapi-types": "^18.0.0" - } - }, - "node_modules/@opentelemetry/api": { - "version": "1.8.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/api/-/api-1.8.0.tgz", - "integrity": "sha512-I/s6F7yKUDdtMsoBWXJe8Qz40Tui5vsuKCWJEWVL+5q9sSWRzzx6v2KeNsOBEwd94j0eWkpWCH4yB6rZg9Mf0w==", - "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/@opentelemetry/api-logs": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/api-logs/-/api-logs-0.49.1.tgz", - "integrity": "sha512-kaNl/T7WzyMUQHQlVq7q0oV4Kev6+0xFwqzofryC66jgGMacd0QH5TwfpbUwSTby+SdAdprAe5UKMvBw4tKS5Q==", - "dependencies": { - "@opentelemetry/api": "^1.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "engines": { - "node": ">=14" - } - }, - "node_modules/@opentelemetry/context-async-hooks": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/context-async-hooks/-/context-async-hooks-1.22.0.tgz", - "integrity": "sha512-Nfdxyg8YtWqVWkyrCukkundAjPhUXi93JtVQmqDT1mZRVKqA7e2r7eJCrI+F651XUBMp0hsOJSGiFk3QSpaIJw==", - "engines": { - "node": ">=14" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@opentelemetry/core": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/core/-/core-1.22.0.tgz", - "integrity": "sha512-0VoAlT6x+Xzik1v9goJ3pZ2ppi6+xd3aUfg4brfrLkDBHRIVjMP0eBHrKrhB+NKcDyMAg8fAbGL3Npg/F6AwWA==", + "node_modules/@typescript-eslint/scope-manager": { + "version": "5.62.0", + "dev": true, + "license": "MIT", "dependencies": { - "@opentelemetry/semantic-conventions": "1.22.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0" }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-grpc": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-grpc/-/exporter-metrics-otlp-grpc-0.49.1.tgz", - "integrity": "sha512-bq592KlXFCtKy1K+SSx/IgnczbYZqbAMyk9NwR7TOP2m9RTdeO7HwRvoRAsyZc83obEeLjkRXIsrF3OZk9x8TQ==", + "node_modules/@typescript-eslint/type-utils": { + "version": "5.62.0", + "dev": true, + "license": "MIT", "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.22.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.49.1", - "@opentelemetry/otlp-grpc-exporter-base": "0.49.1", - "@opentelemetry/otlp-transformer": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-metrics": "1.22.0" + "@typescript-eslint/typescript-estree": "5.62.0", + "@typescript-eslint/utils": "5.62.0", + "debug": "^4.3.4", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "eslint": "*" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-http": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-http/-/exporter-metrics-otlp-http-0.49.1.tgz", - "integrity": "sha512-t/sWYqfcwn81SvYHIyYJDlJD2CjFz3/h2t4j+XCtdoHAfu+WVJQmwLsGYJPlCDp3UXQfFpMJMWvLlvtD2SL+rg==", - "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/otlp-exporter-base": "0.49.1", - "@opentelemetry/otlp-transformer": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-metrics": "1.22.0" - }, + "node_modules/@typescript-eslint/types": { + "version": "5.62.0", + "license": "MIT", "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@opentelemetry/exporter-metrics-otlp-proto": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-metrics-otlp-proto/-/exporter-metrics-otlp-proto-0.49.1.tgz", - "integrity": "sha512-xKI6aCRY+STxbF7PA+6YNNYWFf6IS065rZZeqlqvqQsp0HaFUqpPEzMJn0OmQMGuy40o7wWtmZ9/bSu4jlhfYw==", + "node_modules/@typescript-eslint/typescript-estree": { + "version": "5.62.0", + "license": "BSD-2-Clause", "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/exporter-metrics-otlp-http": "0.49.1", - "@opentelemetry/otlp-exporter-base": "0.49.1", - "@opentelemetry/otlp-proto-exporter-base": "0.49.1", - "@opentelemetry/otlp-transformer": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-metrics": "1.22.0" + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/visitor-keys": "5.62.0", + "debug": "^4.3.4", + "globby": "^11.1.0", + "is-glob": "^4.0.3", + "semver": "^7.3.7", + "tsutils": "^3.21.0" }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/@opentelemetry/exporter-trace-otlp-grpc": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-grpc/-/exporter-trace-otlp-grpc-0.49.1.tgz", - "integrity": "sha512-Zbd7f3zF7fI2587MVhBizaW21cO/SordyrZGtMtvhoxU6n4Qb02Gx71X4+PzXH620e0+JX+Pcr9bYb1HTeVyJA==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { + "version": "11.1.0", + "license": "MIT", "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.22.0", - "@opentelemetry/otlp-grpc-exporter-base": "0.49.1", - "@opentelemetry/otlp-transformer": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0" + "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": ">=14" + "node": ">=10" }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-http": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-http/-/exporter-trace-otlp-http-0.49.1.tgz", - "integrity": "sha512-KOLtZfZvIrpGZLVvblKsiVQT7gQUZNKcUUH24Zz6Xbi7LJb9Vt6xtUZFYdR5IIjvt47PIqBKDWUQlU0o1wAsRw==", + "node_modules/@typescript-eslint/utils": { + "version": "5.62.0", + "dev": true, + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/otlp-exporter-base": "0.49.1", - "@opentelemetry/otlp-transformer": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0" + "@eslint-community/eslint-utils": "^4.2.0", + "@types/json-schema": "^7.0.9", + "@types/semver": "^7.3.12", + "@typescript-eslint/scope-manager": "5.62.0", + "@typescript-eslint/types": "5.62.0", + "@typescript-eslint/typescript-estree": "5.62.0", + "eslint-scope": "^5.1.1", + "semver": "^7.3.7" }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" } }, - "node_modules/@opentelemetry/exporter-trace-otlp-proto": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-trace-otlp-proto/-/exporter-trace-otlp-proto-0.49.1.tgz", - "integrity": "sha512-n8ON/c9pdMyYAfSFWKkgsPwjYoxnki+6Olzo+klKfW7KqLWoyEkryNkbcMIYnGGNXwdkMIrjoaP0VxXB26Oxcg==", + "node_modules/@typescript-eslint/visitor-keys": { + "version": "5.62.0", + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/otlp-exporter-base": "0.49.1", - "@opentelemetry/otlp-proto-exporter-base": "0.49.1", - "@opentelemetry/otlp-transformer": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0" + "@typescript-eslint/types": "5.62.0", + "eslint-visitor-keys": "^3.3.0" }, "engines": { - "node": ">=14" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" } }, - "node_modules/@opentelemetry/exporter-zipkin": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/exporter-zipkin/-/exporter-zipkin-1.22.0.tgz", - "integrity": "sha512-XcFs6rGvcTz0qW5uY7JZDYD0yNEXdekXAb6sFtnZgY/cHY6BQ09HMzOjv9SX+iaXplRDcHr1Gta7VQKM1XXM6g==", + "node_modules/@ungap/structured-clone": { + "version": "1.2.0", + "dev": true, + "license": "ISC" + }, + "node_modules/@vercel/nft": { + "version": "0.26.2", + "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.26.2.tgz", + "integrity": "sha512-bxe2iShmKZi7476xYamyKvhhKwQ6JPEtQ2FSq1AjMUH2buMd8LQMkdoHinTqZYc+1sMTh3G0ARdjzNvV1FEisA==", "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0", - "@opentelemetry/semantic-conventions": "1.22.0" + "@mapbox/node-pre-gyp": "^1.0.5", + "@rollup/pluginutils": "^4.0.0", + "acorn": "^8.6.0", + "acorn-import-attributes": "^1.9.2", + "async-sema": "^3.1.1", + "bindings": "^1.4.0", + "estree-walker": "2.0.2", + "glob": "^7.1.3", + "graceful-fs": "^4.2.9", + "micromatch": "^4.0.2", + "node-gyp-build": "^4.2.2", + "resolve-from": "^5.0.0" }, - "engines": { - "node": ">=14" + "bin": { + "nft": "out/cli.js" }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "engines": { + "node": ">=16" } }, - "node_modules/@opentelemetry/instrumentation": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/instrumentation/-/instrumentation-0.49.1.tgz", - "integrity": "sha512-0DLtWtaIppuNNRRllSD4bjU8ZIiLp1cDXvJEbp752/Zf+y3gaLNaoGRGIlX4UHhcsrmtL+P2qxi3Hodi8VuKiQ==", + "node_modules/@vitest/coverage-c8": { + "version": "0.33.0", + "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.33.0.tgz", + "integrity": "sha512-DaF1zJz4dcOZS4k/neiQJokmOWqsGXwhthfmUdPGorXIQHjdPvV6JQSYhQDI41MyI8c+IieQUdIDs5XAMHtDDw==", + "deprecated": "v8 coverage is moved to @vitest/coverage-v8 package", + "dev": true, "dependencies": { - "@opentelemetry/api-logs": "0.49.1", - "@types/shimmer": "^1.0.2", - "import-in-the-middle": "1.7.1", - "require-in-the-middle": "^7.1.1", - "semver": "^7.5.2", - "shimmer": "^1.2.1" + "@ampproject/remapping": "^2.2.1", + "c8": "^7.14.0", + "magic-string": "^0.30.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3" }, - "engines": { - "node": ">=14" + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@opentelemetry/api": "^1.3.0" + "vitest": ">=0.30.0 <1" } }, - "node_modules/@opentelemetry/otlp-exporter-base": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-exporter-base/-/otlp-exporter-base-0.49.1.tgz", - "integrity": "sha512-z6sHliPqDgJU45kQatAettY9/eVF58qVPaTuejw9YWfSRqid9pXPYeegDCSdyS47KAUgAtm+nC28K3pfF27HWg==", + "node_modules/@vitest/coverage-c8/node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "node": ">=12" } }, - "node_modules/@opentelemetry/otlp-grpc-exporter-base": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-grpc-exporter-base/-/otlp-grpc-exporter-base-0.49.1.tgz", - "integrity": "sha512-DNDNUWmOqtKTFJAyOyHHKotVox0NQ/09ETX8fUOeEtyNVHoGekAVtBbvIA3AtK+JflP7LC0PTjlLfruPM3Wy6w==", + "node_modules/@vitest/coverage-v8": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/coverage-v8/-/coverage-v8-0.34.6.tgz", + "integrity": "sha512-fivy/OK2d/EsJFoEoxHFEnNGTg+MmdZBAVK9Ka4qhXR2K3J0DS08vcGVwzDtXSuUMabLv4KtPcpSKkcMXFDViw==", + "dev": true, "dependencies": { - "@grpc/grpc-js": "^1.7.1", - "@opentelemetry/core": "1.22.0", - "@opentelemetry/otlp-exporter-base": "0.49.1", - "protobufjs": "^7.2.3" + "@ampproject/remapping": "^2.2.1", + "@bcoe/v8-coverage": "^0.2.3", + "istanbul-lib-coverage": "^3.2.0", + "istanbul-lib-report": "^3.0.1", + "istanbul-lib-source-maps": "^4.0.1", + "istanbul-reports": "^3.1.5", + "magic-string": "^0.30.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "test-exclude": "^6.0.0", + "v8-to-istanbul": "^9.1.0" }, - "engines": { - "node": ">=14" + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "vitest": ">=0.32.0 <1" } }, - "node_modules/@opentelemetry/otlp-proto-exporter-base": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-proto-exporter-base/-/otlp-proto-exporter-base-0.49.1.tgz", - "integrity": "sha512-x1qB4EUC7KikUl2iNuxCkV8yRzrSXSyj4itfpIO674H7dhI7Zv37SFaOJTDN+8Z/F50gF2ISFH9CWQ4KCtGm2A==", + "node_modules/@vitest/coverage-v8/node_modules/magic-string": { + "version": "0.30.10", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.10.tgz", + "integrity": "sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/otlp-exporter-base": "0.49.1", - "protobufjs": "^7.2.3" + "@jridgewell/sourcemap-codec": "^1.4.15" + } + }, + "node_modules/@vitest/expect": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", + "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", + "dev": true, + "dependencies": { + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "chai": "^4.3.10" }, - "engines": { - "node": ">=14" + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/runner": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", + "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "dev": true, + "dependencies": { + "@vitest/utils": "0.34.6", + "p-limit": "^4.0.0", + "pathe": "^1.1.1" }, - "peerDependencies": { - "@opentelemetry/api": "^1.0.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@opentelemetry/otlp-transformer": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/otlp-transformer/-/otlp-transformer-0.49.1.tgz", - "integrity": "sha512-Z+koA4wp9L9e3jkFacyXTGphSWTbOKjwwXMpb0CxNb0kjTHGUxhYRN8GnkLFsFo5NbZPjP07hwAqeEG/uCratQ==", + "node_modules/@vitest/snapshot": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", + "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "dev": true, "dependencies": { - "@opentelemetry/api-logs": "0.49.1", - "@opentelemetry/core": "1.22.0", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-logs": "0.49.1", - "@opentelemetry/sdk-metrics": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0" + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "pretty-format": "^29.5.0" }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/snapshot/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=10" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@opentelemetry/propagator-b3": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-b3/-/propagator-b3-1.22.0.tgz", - "integrity": "sha512-qBItJm9ygg/jCB5rmivyGz1qmKZPsL/sX715JqPMFgq++Idm0x+N9sLQvWFHFt2+ZINnCSojw7FVBgFW6izcXA==", + "node_modules/@vitest/snapshot/node_modules/magic-string": { + "version": "0.30.5", + "dev": true, + "license": "MIT", "dependencies": { - "@opentelemetry/core": "1.22.0" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "node": ">=12" } }, - "node_modules/@opentelemetry/propagator-jaeger": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/propagator-jaeger/-/propagator-jaeger-1.22.0.tgz", - "integrity": "sha512-pMLgst3QIwrUfepraH5WG7xfpJ8J3CrPKrtINK0t7kBkuu96rn+HDYQ8kt3+0FXvrZI8YJE77MCQwnJWXIrgpA==", + "node_modules/@vitest/snapshot/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@opentelemetry/resources": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/resources/-/resources-1.22.0.tgz", - "integrity": "sha512-+vNeIFPH2hfcNL0AJk/ykJXoUCtR1YaDUZM+p3wZNU4Hq98gzq+7b43xbkXjadD9VhWIUQqEwXyY64q6msPj6A==", + "node_modules/@vitest/snapshot/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@vitest/spy": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", + "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/semantic-conventions": "1.22.0" - }, - "engines": { - "node": ">=14" + "tinyspy": "^2.1.1" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "funding": { + "url": "https://opencollective.com/vitest" } }, - "node_modules/@opentelemetry/sdk-logs": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-logs/-/sdk-logs-0.49.1.tgz", - "integrity": "sha512-gCzYWsJE0h+3cuh3/cK+9UwlVFyHvj3PReIOCDOmdeXOp90ZjKRoDOJBc3mvk1LL6wyl1RWIivR8Rg9OToyesw==", + "node_modules/@vitest/ui": { + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.7.tgz", + "integrity": "sha512-iizUu9R5Rsvsq8FtdJ0suMqEfIsIIzziqnasMHe4VH8vG+FnZSA3UAtCHx6rLeRupIFVAVg7bptMmuvMcsn8WQ==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/resources": "1.22.0" + "@vitest/utils": "0.34.7", + "fast-glob": "^3.3.0", + "fflate": "^0.8.0", + "flatted": "^3.2.7", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "sirv": "^2.0.3" }, - "engines": { - "node": ">=14" + "funding": { + "url": "https://opencollective.com/vitest" }, "peerDependencies": { - "@opentelemetry/api": ">=1.4.0 <1.9.0", - "@opentelemetry/api-logs": ">=0.39.1" + "vitest": ">=0.30.1 <1" } }, - "node_modules/@opentelemetry/sdk-metrics": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-metrics/-/sdk-metrics-1.22.0.tgz", - "integrity": "sha512-k6iIx6H3TZ+BVMr2z8M16ri2OxWaljg5h8ihGJxi/KQWcjign6FEaEzuigXt5bK9wVEhqAcWLCfarSftaNWkkg==", + "node_modules/@vitest/ui/node_modules/@vitest/utils": { + "version": "0.34.7", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz", + "integrity": "sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/resources": "1.22.0", - "lodash.merge": "^4.6.2" + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/ui/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=10" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@opentelemetry/sdk-node": { - "version": "0.49.1", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-node/-/sdk-node-0.49.1.tgz", - "integrity": "sha512-feBIT85ndiSHXsQ2gfGpXC/sNeX4GCHLksC4A9s/bfpUbbgbCSl0RvzZlmEpCHarNrkZMwFRi4H0xFfgvJEjrg==", + "node_modules/@vitest/ui/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { - "@opentelemetry/api-logs": "0.49.1", - "@opentelemetry/core": "1.22.0", - "@opentelemetry/exporter-trace-otlp-grpc": "0.49.1", - "@opentelemetry/exporter-trace-otlp-http": "0.49.1", - "@opentelemetry/exporter-trace-otlp-proto": "0.49.1", - "@opentelemetry/exporter-zipkin": "1.22.0", - "@opentelemetry/instrumentation": "0.49.1", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/sdk-logs": "0.49.1", - "@opentelemetry/sdk-metrics": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0", - "@opentelemetry/sdk-trace-node": "1.22.0", - "@opentelemetry/semantic-conventions": "1.22.0" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.3.0 <1.9.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@opentelemetry/sdk-trace-base": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-base/-/sdk-trace-base-1.22.0.tgz", - "integrity": "sha512-pfTuSIpCKONC6vkTpv6VmACxD+P1woZf4q0K46nSUvXFvOFqjBYKFaAMkKD3M1mlKUUh0Oajwj35qNjMl80m1Q==", + "node_modules/@vitest/ui/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@vitest/utils": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", + "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", + "dev": true, "dependencies": { - "@opentelemetry/core": "1.22.0", - "@opentelemetry/resources": "1.22.0", - "@opentelemetry/semantic-conventions": "1.22.0" + "diff-sequences": "^29.4.3", + "loupe": "^2.3.6", + "pretty-format": "^29.5.0" }, + "funding": { + "url": "https://opencollective.com/vitest" + } + }, + "node_modules/@vitest/utils/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "dev": true, "engines": { - "node": ">=14" + "node": ">=10" }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@opentelemetry/sdk-trace-node": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/sdk-trace-node/-/sdk-trace-node-1.22.0.tgz", - "integrity": "sha512-gTGquNz7ue8uMeiWPwp3CU321OstQ84r7PCDtOaCicjbJxzvO8RZMlEC4geOipTeiF88kss5n6w+//A0MhP1lQ==", + "node_modules/@vitest/utils/node_modules/pretty-format": { + "version": "29.7.0", + "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", + "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "dev": true, "dependencies": { - "@opentelemetry/context-async-hooks": "1.22.0", - "@opentelemetry/core": "1.22.0", - "@opentelemetry/propagator-b3": "1.22.0", - "@opentelemetry/propagator-jaeger": "1.22.0", - "@opentelemetry/sdk-trace-base": "1.22.0", - "semver": "^7.5.2" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, "engines": { - "node": ">=14" - }, - "peerDependencies": { - "@opentelemetry/api": ">=1.0.0 <1.9.0" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/@opentelemetry/semantic-conventions": { - "version": "1.22.0", - "resolved": "https://registry.npmjs.org/@opentelemetry/semantic-conventions/-/semantic-conventions-1.22.0.tgz", - "integrity": "sha512-CAOgFOKLybd02uj/GhCdEeeBjOS0yeoDeo/CA7ASBSmenpZHAKGB3iDm/rv3BQLcabb/OprDEsSQ1y0P8A7Siw==", - "engines": { - "node": ">=14" + "node_modules/@vitest/utils/node_modules/react-is": { + "version": "18.2.0", + "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", + "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", + "dev": true + }, + "node_modules/@webassemblyjs/ast": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/helper-numbers": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + } + }, + "node_modules/@webassemblyjs/floating-point-hex-parser": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-api-error": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-buffer": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-numbers": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/floating-point-hex-parser": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@xtuc/long": "4.2.2" + } + }, + "node_modules/@webassemblyjs/helper-wasm-bytecode": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true + }, + "node_modules/@webassemblyjs/helper-wasm-section": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6" } }, - "node_modules/@parcel/watcher": { - "version": "2.0.4", + "node_modules/@webassemblyjs/ieee754": { + "version": "1.11.6", "dev": true, - "hasInstallScript": true, "license": "MIT", + "peer": true, "dependencies": { - "node-addon-api": "^3.2.1", - "node-gyp-build": "^4.3.0" - }, - "engines": { - "node": ">= 10.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/parcel" + "@xtuc/ieee754": "^1.2.0" } }, - "node_modules/@playwright/test": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/@playwright/test/-/test-1.41.2.tgz", - "integrity": "sha512-qQB9h7KbibJzrDpkXkYvsmiDJK14FULCCZgEcoe2AvFAS64oCirWTwzTlAYEbKaRxWs5TFesE1Na6izMv3HfGg==", + "node_modules/@webassemblyjs/leb128": { + "version": "1.11.6", "dev": true, + "license": "Apache-2.0", + "peer": true, "dependencies": { - "playwright": "1.41.2" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=16" + "@xtuc/long": "4.2.2" } }, - "node_modules/@polka/url": { - "version": "1.0.0-next.24", + "node_modules/@webassemblyjs/utf8": { + "version": "1.11.6", "dev": true, - "license": "MIT" - }, - "node_modules/@protobufjs/aspromise": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/aspromise/-/aspromise-1.1.2.tgz", - "integrity": "sha512-j+gKExEuLmKwvz3OgROXtrJ2UG2x8Ch2YZUxahh+s1F2HZ+wAceUNLkvy6zKCPVRkU++ZWQrdxsUeQXmcg4uoQ==" - }, - "node_modules/@protobufjs/base64": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/base64/-/base64-1.1.2.tgz", - "integrity": "sha512-AZkcAA5vnN/v4PDqKyMR5lx7hZttPDgClv83E//FMNhR2TMcLUhfRUBHCmSl0oi9zMgDDqRUJkSxO3wm85+XLg==" + "license": "MIT", + "peer": true }, - "node_modules/@protobufjs/codegen": { - "version": "2.0.4", - "resolved": "https://registry.npmjs.org/@protobufjs/codegen/-/codegen-2.0.4.tgz", - "integrity": "sha512-YyFaikqM5sH0ziFZCN3xDC7zeGaB/d0IUb9CATugHWbd1FRFwWwt4ld4OYMPWu5a3Xe01mGAULCdqhMlPl29Jg==" + "node_modules/@webassemblyjs/wasm-edit": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/helper-wasm-section": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-opt": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6", + "@webassemblyjs/wast-printer": "1.11.6" + } }, - "node_modules/@protobufjs/eventemitter": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/eventemitter/-/eventemitter-1.1.0.tgz", - "integrity": "sha512-j9ednRT81vYJ9OfVuXG6ERSTdEL1xVsNgqpkxMsbIabzSo3goCjDIveeGv5d03om39ML71RdmrGNjG5SReBP/Q==" + "node_modules/@webassemblyjs/wasm-gen": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } }, - "node_modules/@protobufjs/fetch": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/fetch/-/fetch-1.1.0.tgz", - "integrity": "sha512-lljVXpqXebpsijW71PZaCYeIcE5on1w5DlQy5WH6GLbFryLUrBD4932W/E2BSpfRJWseIL4v/KPgBFxDOIdKpQ==", + "node_modules/@webassemblyjs/wasm-opt": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@protobufjs/aspromise": "^1.1.1", - "@protobufjs/inquire": "^1.1.0" + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-buffer": "1.11.6", + "@webassemblyjs/wasm-gen": "1.11.6", + "@webassemblyjs/wasm-parser": "1.11.6" } }, - "node_modules/@protobufjs/float": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/@protobufjs/float/-/float-1.0.2.tgz", - "integrity": "sha512-Ddb+kVXlXst9d+R9PfTIxh1EdNkgoRe5tOX6t01f1lYWOvJnSPDBlG241QLzcyPdoNTsblLUdujGSE4RzrTZGQ==" + "node_modules/@webassemblyjs/wasm-parser": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@webassemblyjs/helper-api-error": "1.11.6", + "@webassemblyjs/helper-wasm-bytecode": "1.11.6", + "@webassemblyjs/ieee754": "1.11.6", + "@webassemblyjs/leb128": "1.11.6", + "@webassemblyjs/utf8": "1.11.6" + } }, - "node_modules/@protobufjs/inquire": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/inquire/-/inquire-1.1.0.tgz", - "integrity": "sha512-kdSefcPdruJiFMVSbn801t4vFK7KB/5gd2fYvrxhuJYg8ILrmn9SKSX2tZdV6V+ksulWqS7aXjBcRXl3wHoD9Q==" + "node_modules/@webassemblyjs/wast-printer": { + "version": "1.11.6", + "dev": true, + "license": "MIT", + "peer": true, + "dependencies": { + "@webassemblyjs/ast": "1.11.6", + "@xtuc/long": "4.2.2" + } }, - "node_modules/@protobufjs/path": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@protobufjs/path/-/path-1.1.2.tgz", - "integrity": "sha512-6JOcJ5Tm08dOHAbdR3GrvP+yUUfkjG5ePsHYczMFLq3ZmMkAD98cDgcT2iA1lJ9NVwFd4tH/iSSoe44YWkltEA==" + "node_modules/@xtuc/ieee754": { + "version": "1.2.0", + "dev": true, + "license": "BSD-3-Clause", + "peer": true }, - "node_modules/@protobufjs/pool": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/pool/-/pool-1.1.0.tgz", - "integrity": "sha512-0kELaGSIDBKvcgS4zkjz1PeddatrjYcmMWOlAuAPwAeccUrPHdUqo/J6LiymHHEiJT5NrF1UVwxY14f+fy4WQw==" + "node_modules/@xtuc/long": { + "version": "4.2.2", + "dev": true, + "license": "Apache-2.0", + "peer": true }, - "node_modules/@protobufjs/utf8": { + "node_modules/@yarnpkg/lockfile": { "version": "1.1.0", - "resolved": "https://registry.npmjs.org/@protobufjs/utf8/-/utf8-1.1.0.tgz", - "integrity": "sha512-Vvn3zZrhQZkkBE8LSuW3em98c0FwgO4nxzv6OdSxPKJIEKY2bGbHn+mhGIPerzI4twdxaP8/0+06HBpwf345Lw==" + "dev": true, + "license": "BSD-2-Clause" }, - "node_modules/@rollup/pluginutils": { - "version": "4.2.1", - "license": "MIT", + "node_modules/@yarnpkg/parsers": { + "version": "3.0.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "estree-walker": "^2.0.1", - "picomatch": "^2.2.2" + "js-yaml": "^3.10.0", + "tslib": "^2.4.0" }, "engines": { - "node": ">= 8.0.0" + "node": ">=18.12.0" } }, - "node_modules/@rollup/pluginutils/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/@yarnpkg/parsers/node_modules/argparse": { + "version": "1.0.10", + "dev": true, "license": "MIT", - "engines": { - "node": ">=8.6" - }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "dependencies": { + "sprintf-js": "~1.0.2" } }, - "node_modules/@sinclair/typebox": { - "version": "0.27.8", + "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { + "version": "3.14.1", "dev": true, - "license": "MIT" - }, - "node_modules/@sindresorhus/is": { - "version": "5.6.0", "license": "MIT", - "engines": { - "node": ">=14.16" + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" }, - "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/@sindresorhus/slugify": { - "version": "2.2.1", + "node_modules/@zkochan/js-yaml": { + "version": "0.0.6", + "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/transliterate": "^1.0.0", - "escape-string-regexp": "^5.0.0" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=12" + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/abbrev": { + "version": "1.1.1", + "license": "ISC" + }, + "node_modules/acorn": { + "version": "8.11.2", + "license": "MIT", + "bin": { + "acorn": "bin/acorn" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.4.0" } }, - "node_modules/@sindresorhus/transliterate": { - "version": "1.6.0", + "node_modules/acorn-import-assertions": { + "version": "1.9.0", + "license": "MIT", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-import-attributes": { + "version": "1.9.2", + "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.2.tgz", + "integrity": "sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==", + "peerDependencies": { + "acorn": "^8" + } + }, + "node_modules/acorn-jsx": { + "version": "5.3.2", + "dev": true, + "license": "MIT", + "peerDependencies": { + "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + } + }, + "node_modules/acorn-walk": { + "version": "8.3.1", "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.4.0" } }, - "node_modules/@sinonjs/commons": { - "version": "1.8.6", + "node_modules/add-stream": { + "version": "1.0.0", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "type-detect": "4.0.8" - } + "license": "MIT" }, - "node_modules/@sinonjs/fake-timers": { - "version": "9.1.2", - "dev": true, - "license": "BSD-3-Clause", + "node_modules/agent-base": { + "version": "6.0.2", + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^1.7.0" + "debug": "4" + }, + "engines": { + "node": ">= 6.0.0" } }, - "node_modules/@sinonjs/samsam": { - "version": "6.1.3", + "node_modules/agentkeepalive": { + "version": "4.5.0", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^1.6.0", - "lodash.get": "^4.4.2", - "type-detect": "^4.0.8" + "humanize-ms": "^1.2.1" + }, + "engines": { + "node": ">= 8.0.0" } }, - "node_modules/@sinonjs/text-encoding": { - "version": "0.7.2", + "node_modules/aggregate-error": { + "version": "3.1.0", "dev": true, - "license": "(Unlicense OR Apache-2.0)" - }, - "node_modules/@szmarczak/http-timer": { - "version": "5.0.1", "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.1" + "clean-stack": "^2.0.0", + "indent-string": "^4.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=8" } }, - "node_modules/@tootallnate/once": { - "version": "2.0.0", + "node_modules/aggregate-error/node_modules/clean-stack": { + "version": "2.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/@tsconfig/node10": { - "version": "1.0.9", - "license": "MIT" - }, - "node_modules/@tsconfig/node12": { - "version": "1.0.11", - "license": "MIT" - }, - "node_modules/@tsconfig/node14": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/@tsconfig/node16": { - "version": "1.0.4", - "license": "MIT" - }, - "node_modules/@tsd/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/@tsd/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-CQlfzol0ldaU+ftWuG52vH29uRoKboLinLy84wS8TQOu+m+tWoaUfk4svL4ij2V8M5284KymJBlHUusKj6k34w==", + "node_modules/aggregate-error/node_modules/indent-string": { + "version": "4.0.0", "dev": true, + "license": "MIT", "engines": { - "node": ">=14.17" + "node": ">=8" } }, - "node_modules/@types/cacheable-request": { - "version": "6.0.3", - "dev": true, + "node_modules/ajv": { + "version": "8.12.0", "license": "MIT", "dependencies": { - "@types/http-cache-semantics": "*", - "@types/keyv": "^3.1.4", - "@types/node": "*", - "@types/responselike": "^1.0.0" + "fast-deep-equal": "^3.1.1", + "json-schema-traverse": "^1.0.0", + "require-from-string": "^2.0.2", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/@types/chai": { - "version": "4.3.11", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/chai-subset": { - "version": "1.3.5", - "dev": true, + "node_modules/ajv-errors": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "@types/chai": "*" + "peerDependencies": { + "ajv": "^8.0.1" } }, - "node_modules/@types/eslint": { - "version": "7.29.0", + "node_modules/all-node-versions": { + "version": "9.0.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "@types/estree": "*", - "@types/json-schema": "*" + "fetch-node-website": "^6.0.0", + "filter-obj": "^2.0.2", + "get-stream": "^6.0.0", + "global-cache-dir": "^3.0.1", + "jest-validate": "^27.0.2", + "path-exists": "^4.0.0", + "semver": "^7.3.5", + "write-file-atomic": "^3.0.3" + }, + "engines": { + "node": ">=12.20.0" } }, - "node_modules/@types/eslint-scope": { - "version": "3.7.7", + "node_modules/all-node-versions/node_modules/filter-obj": { + "version": "2.0.2", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@types/eslint": "*", - "@types/estree": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/estree": { - "version": "1.0.5", + "node_modules/all-node-versions/node_modules/path-exists": { + "version": "4.0.0", "dev": true, - "license": "MIT" - }, - "node_modules/@types/http-cache-semantics": { - "version": "4.0.4", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-coverage": { - "version": "2.0.6", - "license": "MIT" - }, - "node_modules/@types/istanbul-lib-report": { - "version": "3.0.3", "license": "MIT", - "dependencies": { - "@types/istanbul-lib-coverage": "*" + "engines": { + "node": ">=8" } }, - "node_modules/@types/istanbul-reports": { - "version": "3.0.4", - "license": "MIT", + "node_modules/all-node-versions/node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "@types/istanbul-lib-report": "*" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" } }, - "node_modules/@types/json-schema": { - "version": "7.0.15", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/json5": { - "version": "0.0.29", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/keyv": { - "version": "3.1.4", + "node_modules/ansi-colors": { + "version": "4.1.3", "dev": true, "license": "MIT", - "dependencies": { - "@types/node": "*" + "engines": { + "node": ">=6" } }, - "node_modules/@types/lodash": { - "version": "4.14.202", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/lodash-es": { - "version": "4.17.12", - "dev": true, + "node_modules/ansi-escapes": { + "version": "6.2.0", "license": "MIT", "dependencies": { - "@types/lodash": "*" + "type-fest": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@types/minimatch": { - "version": "3.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "dev": true, - "license": "MIT" - }, - "node_modules/@types/node": { - "version": "14.18.63", - "license": "MIT" - }, - "node_modules/@types/normalize-package-data": { - "version": "2.4.4", - "license": "MIT" + "node_modules/ansi-regex": { + "version": "6.0.1", + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } }, - "node_modules/@types/parse-json": { - "version": "4.0.2", + "node_modules/ansi-styles": { + "version": "6.2.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } }, - "node_modules/@types/responselike": { - "version": "1.0.3", + "node_modules/anymatch": { + "version": "3.1.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "@types/node": "*" + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/@types/retry": { - "version": "0.12.1", - "license": "MIT" - }, - "node_modules/@types/semver": { - "version": "7.5.8", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.8.tgz", - "integrity": "sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ==", - "dev": true + "node_modules/anymatch/node_modules/picomatch": { + "version": "2.3.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } }, - "node_modules/@types/shimmer": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/@types/shimmer/-/shimmer-1.0.5.tgz", - "integrity": "sha512-9Hp0ObzwwO57DpLFF0InUjUm/II8GmKAvzbefxQTihCb7KI6yc9yzf0nLc4mVdby5N4DRCgQM2wCup9KTieeww==" + "node_modules/aproba": { + "version": "2.0.0", + "license": "ISC" }, - "node_modules/@types/yargs": { - "version": "16.0.9", + "node_modules/archiver": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "@types/yargs-parser": "*" + "archiver-utils": "^4.0.1", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^3.0.0", + "zip-stream": "^5.0.1" + }, + "engines": { + "node": ">= 12.0.0" } }, - "node_modules/@types/yargs-parser": { - "version": "21.0.3", - "license": "MIT" - }, - "node_modules/@typescript-eslint/eslint-plugin": { - "version": "5.62.0", - "dev": true, + "node_modules/archiver-utils": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "@eslint-community/regexpp": "^4.4.0", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/type-utils": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "natural-compare-lite": "^1.4.0", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "glob": "^8.0.0", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash": "^4.17.15", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "@typescript-eslint/parser": "^5.0.0", - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "node": ">= 12.0.0" } }, - "node_modules/@typescript-eslint/parser": { - "version": "5.62.0", - "dev": true, - "license": "BSD-2-Clause", - "peer": true, + "node_modules/archiver-utils/node_modules/glob": { + "version": "8.1.0", + "license": "ISC", "dependencies": { - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "debug": "^4.3.4" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=12" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/archiver-utils/node_modules/minimatch": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "engines": { + "node": ">=10" + } + }, + "node_modules/are-we-there-yet": { + "version": "2.0.0", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "engines": { + "node": ">=10" } }, - "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", + "node_modules/arg": { + "version": "4.1.3", + "license": "MIT" + }, + "node_modules/argparse": { + "version": "2.0.1", + "license": "Python-2.0" + }, + "node_modules/array-back": { + "version": "3.1.0", "dev": true, "license": "MIT", - "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" - }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=6" } }, - "node_modules/@typescript-eslint/type-utils": { - "version": "5.62.0", + "node_modules/array-buffer-byte-length": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "5.62.0", - "@typescript-eslint/utils": "5.62.0", - "debug": "^4.3.4", - "tsutils": "^3.21.0" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "call-bind": "^1.0.2", + "is-array-buffer": "^3.0.1" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "*" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/types": { - "version": "5.62.0", + "node_modules/array-differ": { + "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "node": ">=8" } }, - "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "license": "BSD-2-Clause", + "node_modules/array-find-index": { + "version": "1.0.2", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/array-ify": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/array-includes": { + "version": "3.1.7", + "dev": true, + "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", - "debug": "^4.3.4", - "globby": "^11.1.0", - "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-string": "^1.0.7" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/typescript-estree/node_modules/globby": { - "version": "11.1.0", + "node_modules/array-union": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/array.prototype.findlastindex": { + "version": "1.2.3", + "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" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0", + "get-intrinsic": "^1.2.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", + "node_modules/array.prototype.flat": { + "version": "1.3.2", "dev": true, "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", + "node_modules/array.prototype.flatmap": { + "version": "1.3.2", + "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "es-shim-unscopables": "^1.0.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">= 0.4" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@ungap/structured-clone": { - "version": "1.2.0", + "node_modules/arraybuffer.prototype.slice": { + "version": "1.0.2", "dev": true, - "license": "ISC" - }, - "node_modules/@vercel/nft": { - "version": "0.26.2", - "resolved": "https://registry.npmjs.org/@vercel/nft/-/nft-0.26.2.tgz", - "integrity": "sha512-bxe2iShmKZi7476xYamyKvhhKwQ6JPEtQ2FSq1AjMUH2buMd8LQMkdoHinTqZYc+1sMTh3G0ARdjzNvV1FEisA==", + "license": "MIT", "dependencies": { - "@mapbox/node-pre-gyp": "^1.0.5", - "@rollup/pluginutils": "^4.0.0", - "acorn": "^8.6.0", - "acorn-import-attributes": "^1.9.2", - "async-sema": "^3.1.1", - "bindings": "^1.4.0", - "estree-walker": "2.0.2", - "glob": "^7.1.3", - "graceful-fs": "^4.2.9", - "micromatch": "^4.0.2", - "node-gyp-build": "^4.2.2", - "resolve-from": "^5.0.0" - }, - "bin": { - "nft": "out/cli.js" + "array-buffer-byte-length": "^1.0.0", + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1", + "is-array-buffer": "^3.0.2", + "is-shared-array-buffer": "^1.0.2" }, "engines": { - "node": ">=16" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vitest/coverage-c8": { - "version": "0.33.0", - "resolved": "https://registry.npmjs.org/@vitest/coverage-c8/-/coverage-c8-0.33.0.tgz", - "integrity": "sha512-DaF1zJz4dcOZS4k/neiQJokmOWqsGXwhthfmUdPGorXIQHjdPvV6JQSYhQDI41MyI8c+IieQUdIDs5XAMHtDDw==", - "deprecated": "v8 coverage is moved to @vitest/coverage-v8 package", + "node_modules/arrgv": { + "version": "1.0.2", "dev": true, - "dependencies": { - "@ampproject/remapping": "^2.2.1", - "c8": "^7.14.0", - "magic-string": "^0.30.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3" + "license": "MIT", + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/arrify": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "vitest": ">=0.30.0 <1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/coverage-c8/node_modules/magic-string": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", - "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "node_modules/asap": { + "version": "2.0.6", "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, + "license": "MIT" + }, + "node_modules/assertion-error": { + "version": "1.1.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/@vitest/expect": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/expect/-/expect-0.34.6.tgz", - "integrity": "sha512-QUzKpUQRc1qC7qdGo7rMK3AkETI7w18gTCUrsNnyjjJKYiuUB9+TQK3QnR1unhCnWRC0AbKv2omLGQDF/mIjOw==", - "dev": true, - "dependencies": { - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "chai": "^4.3.10" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node_modules/ast-module-types": { + "version": "5.0.0", + "license": "MIT", + "engines": { + "node": ">=14" } }, - "node_modules/@vitest/runner": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/runner/-/runner-0.34.6.tgz", - "integrity": "sha512-1CUQgtJSLF47NnhN+F9X2ycxUP0kLHQ/JWvNHbeBfwW8CzEGgeskzNnHDyv1ieKTltuR6sdIHV+nmR6kPxQqzQ==", + "node_modules/async": { + "version": "3.2.5", + "license": "MIT" + }, + "node_modules/async-sema": { + "version": "3.1.1", + "license": "MIT" + }, + "node_modules/asynckit": { + "version": "0.4.0", + "license": "MIT" + }, + "node_modules/at-least-node": { + "version": "1.0.0", "dev": true, - "dependencies": { - "@vitest/utils": "0.34.6", - "p-limit": "^4.0.0", - "pathe": "^1.1.1" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "license": "ISC", + "engines": { + "node": ">= 4.0.0" } }, - "node_modules/@vitest/snapshot": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/snapshot/-/snapshot-0.34.6.tgz", - "integrity": "sha512-B3OZqYn6k4VaN011D+ve+AA4whM4QkcwcrwaKwAbyyvS/NB1hCWjFIBQxAQQSQir9/RtyAAGuq+4RJmbn2dH4w==", + "node_modules/atob": { + "version": "2.1.2", "dev": true, - "dependencies": { - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "pretty-format": "^29.5.0" + "license": "(MIT OR Apache-2.0)", + "bin": { + "atob": "bin/atob.js" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">= 4.5.0" } }, - "node_modules/@vitest/snapshot/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/ava": { + "version": "4.3.3", "dev": true, + "license": "MIT", + "dependencies": { + "acorn": "^8.7.1", + "acorn-walk": "^8.2.0", + "ansi-styles": "^6.1.0", + "arrgv": "^1.0.2", + "arrify": "^3.0.0", + "callsites": "^4.0.0", + "cbor": "^8.1.0", + "chalk": "^5.0.1", + "chokidar": "^3.5.3", + "chunkd": "^2.0.1", + "ci-info": "^3.3.1", + "ci-parallel-vars": "^1.0.1", + "clean-yaml-object": "^0.1.0", + "cli-truncate": "^3.1.0", + "code-excerpt": "^4.0.0", + "common-path-prefix": "^3.0.0", + "concordance": "^5.0.4", + "currently-unhandled": "^0.4.1", + "debug": "^4.3.4", + "del": "^6.1.1", + "emittery": "^0.11.0", + "figures": "^4.0.1", + "globby": "^13.1.1", + "ignore-by-default": "^2.1.0", + "indent-string": "^5.0.0", + "is-error": "^2.2.2", + "is-plain-object": "^5.0.0", + "is-promise": "^4.0.0", + "matcher": "^5.0.0", + "mem": "^9.0.2", + "ms": "^2.1.3", + "p-event": "^5.0.1", + "p-map": "^5.4.0", + "picomatch": "^2.3.1", + "pkg-conf": "^4.0.0", + "plur": "^5.1.0", + "pretty-ms": "^7.0.1", + "resolve-cwd": "^3.0.0", + "slash": "^3.0.0", + "stack-utils": "^2.0.5", + "strip-ansi": "^7.0.1", + "supertap": "^3.0.1", + "temp-dir": "^2.0.0", + "write-file-atomic": "^4.0.1", + "yargs": "^17.5.1" + }, + "bin": { + "ava": "entrypoints/cli.mjs" + }, "engines": { - "node": ">=10" + "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "peerDependencies": { + "@ava/typescript": "*" + }, + "peerDependenciesMeta": { + "@ava/typescript": { + "optional": true + } } }, - "node_modules/@vitest/snapshot/node_modules/magic-string": { - "version": "0.30.5", + "node_modules/ava/node_modules/aggregate-error": { + "version": "4.0.1", "dev": true, "license": "MIT", "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" }, "engines": { "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/snapshot/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/ava/node_modules/figures": { + "version": "4.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/snapshot/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/@vitest/spy": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/spy/-/spy-0.34.6.tgz", - "integrity": "sha512-xaCvneSaeBw/cz8ySmF7ZwGvL0lBjfvqc1LpQ/vcdHEvpLn3Ff1vAvjw+CoGn0802l++5L/pxb7whwcWAw+DUQ==", - "dev": true, - "dependencies": { - "tinyspy": "^2.1.1" + "node": ">=12" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/ui": { - "version": "0.34.7", - "resolved": "https://registry.npmjs.org/@vitest/ui/-/ui-0.34.7.tgz", - "integrity": "sha512-iizUu9R5Rsvsq8FtdJ0suMqEfIsIIzziqnasMHe4VH8vG+FnZSA3UAtCHx6rLeRupIFVAVg7bptMmuvMcsn8WQ==", + "node_modules/ava/node_modules/p-map": { + "version": "5.5.0", "dev": true, + "license": "MIT", "dependencies": { - "@vitest/utils": "0.34.7", - "fast-glob": "^3.3.0", - "fflate": "^0.8.0", - "flatted": "^3.2.7", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "sirv": "^2.0.3" + "aggregate-error": "^4.0.0" }, - "funding": { - "url": "https://opencollective.com/vitest" + "engines": { + "node": ">=12" }, - "peerDependencies": { - "vitest": ">=0.30.1 <1" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/ui/node_modules/@vitest/utils": { - "version": "0.34.7", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.7.tgz", - "integrity": "sha512-ziAavQLpCYS9sLOorGrFFKmy2gnfiNU0ZJ15TsMz/K92NAPS/rp9K4z6AJQQk5Y8adCy4Iwpxy7pQumQ/psnRg==", + "node_modules/ava/node_modules/parse-ms": { + "version": "2.1.0", "dev": true, - "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "license": "MIT", + "engines": { + "node": ">=6" } }, - "node_modules/@vitest/ui/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/ava/node_modules/picomatch": { + "version": "2.3.1", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=8.6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/@vitest/ui/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", + "node_modules/ava/node_modules/pretty-ms": { + "version": "7.0.1", "dev": true, + "license": "MIT", "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" + "parse-ms": "^2.1.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" - } - }, - "node_modules/@vitest/ui/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/@vitest/utils": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/@vitest/utils/-/utils-0.34.6.tgz", - "integrity": "sha512-IG5aDD8S6zlvloDsnzHw0Ut5xczlF+kv2BOTo+iXfPr54Yhi5qbVOgGB1hZaVq4iJ4C/MZ2J0y15IlsV/ZcI0A==", - "dev": true, - "dependencies": { - "diff-sequences": "^29.4.3", - "loupe": "^2.3.6", - "pretty-format": "^29.5.0" + "node": ">=10" }, "funding": { - "url": "https://opencollective.com/vitest" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/@vitest/utils/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", + "node_modules/available-typed-arrays": { + "version": "1.0.5", "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/@vitest/utils/node_modules/pretty-format": { - "version": "29.7.0", - "resolved": "https://registry.npmjs.org/pretty-format/-/pretty-format-29.7.0.tgz", - "integrity": "sha512-Pdlw/oPxN+aXdmM9R00JVC9WVFoCLTKJvDVLgmJ+qAffBMxsV85l/Lu7sNx4zSzPyoL2euImuEwHhOXdEgNFZQ==", - "dev": true, - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/@vitest/utils/node_modules/react-is": { - "version": "18.2.0", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-18.2.0.tgz", - "integrity": "sha512-xWGDIW6x921xtzPkhiULtthJHoJvBbF3q26fzloPCK0hsvxtPVelvftw3zjbHWSkR2km9Z+4uxbDDK/6Zw9B8w==", - "dev": true - }, - "node_modules/@webassemblyjs/ast": { - "version": "1.11.6", - "dev": true, + "node_modules/axios": { + "version": "1.6.2", "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/helper-numbers": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6" + "follow-redirects": "^1.15.0", + "form-data": "^4.0.0", + "proxy-from-env": "^1.1.0" } }, - "node_modules/@webassemblyjs/floating-point-hex-parser": { - "version": "1.11.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-api-error": { - "version": "1.11.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-buffer": { - "version": "1.11.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/helper-numbers": { - "version": "1.11.6", - "dev": true, + "node_modules/axios/node_modules/form-data": { + "version": "4.0.0", "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/floating-point-hex-parser": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@xtuc/long": "4.2.2" + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/@webassemblyjs/helper-wasm-bytecode": { - "version": "1.11.6", - "dev": true, - "license": "MIT", - "peer": true + "node_modules/b4a": { + "version": "1.6.4", + "license": "ISC" }, - "node_modules/@webassemblyjs/helper-wasm-section": { - "version": "1.11.6", + "node_modules/babel-loader": { + "version": "8.3.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6" + "find-cache-dir": "^3.3.1", + "loader-utils": "^2.0.0", + "make-dir": "^3.1.0", + "schema-utils": "^2.6.5" + }, + "engines": { + "node": ">= 8.9" + }, + "peerDependencies": { + "@babel/core": "^7.0.0", + "webpack": ">=2" } }, - "node_modules/@webassemblyjs/ieee754": { - "version": "1.11.6", + "node_modules/balanced-match": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/base64-js": { + "version": "1.5.1", "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@xtuc/ieee754": "^1.2.0" - } + "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/@webassemblyjs/leb128": { - "version": "1.11.6", + "node_modules/before-after-hook": { + "version": "2.2.3", "dev": true, + "license": "Apache-2.0" + }, + "node_modules/better-ajv-errors": { + "version": "1.2.0", "license": "Apache-2.0", - "peer": true, "dependencies": { - "@xtuc/long": "4.2.2" + "@babel/code-frame": "^7.16.0", + "@humanwhocodes/momoa": "^2.0.2", + "chalk": "^4.1.2", + "jsonpointer": "^5.0.0", + "leven": "^3.1.0 < 4" + }, + "engines": { + "node": ">= 12.13.0" + }, + "peerDependencies": { + "ajv": "4.11.8 - 8" } }, - "node_modules/@webassemblyjs/utf8": { - "version": "1.11.6", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/@webassemblyjs/wasm-edit": { - "version": "1.11.6", - "dev": true, + "node_modules/better-ajv-errors/node_modules/ansi-styles": { + "version": "4.3.0", "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/helper-wasm-section": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-opt": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6", - "@webassemblyjs/wast-printer": "1.11.6" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/@webassemblyjs/wasm-gen": { - "version": "1.11.6", - "dev": true, + "node_modules/better-ajv-errors/node_modules/chalk": { + "version": "4.1.2", "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/@webassemblyjs/wasm-opt": { - "version": "1.11.6", - "dev": true, + "node_modules/better-ajv-errors/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-buffer": "1.11.6", - "@webassemblyjs/wasm-gen": "1.11.6", - "@webassemblyjs/wasm-parser": "1.11.6" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/@webassemblyjs/wasm-parser": { - "version": "1.11.6", - "dev": true, + "node_modules/better-ajv-errors/node_modules/supports-color": { + "version": "7.2.0", "license": "MIT", - "peer": true, "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@webassemblyjs/helper-api-error": "1.11.6", - "@webassemblyjs/helper-wasm-bytecode": "1.11.6", - "@webassemblyjs/ieee754": "1.11.6", - "@webassemblyjs/leb128": "1.11.6", - "@webassemblyjs/utf8": "1.11.6" + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/@webassemblyjs/wast-printer": { - "version": "1.11.6", + "node_modules/big.js": { + "version": "5.2.2", "dev": true, "license": "MIT", - "peer": true, - "dependencies": { - "@webassemblyjs/ast": "1.11.6", - "@xtuc/long": "4.2.2" + "engines": { + "node": "*" } }, - "node_modules/@xtuc/ieee754": { - "version": "1.2.0", - "dev": true, - "license": "BSD-3-Clause", - "peer": true - }, - "node_modules/@xtuc/long": { - "version": "4.2.2", + "node_modules/bin-links": { + "version": "3.0.3", "dev": true, - "license": "Apache-2.0", - "peer": true + "license": "ISC", + "dependencies": { + "cmd-shim": "^5.0.0", + "mkdirp-infer-owner": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0", + "read-cmd-shim": "^3.0.0", + "rimraf": "^3.0.0", + "write-file-atomic": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/@yarnpkg/lockfile": { - "version": "1.1.0", + "node_modules/bin-links/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", "dev": true, - "license": "BSD-2-Clause" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/@yarnpkg/parsers": { - "version": "3.0.0", + "node_modules/binary-extensions": { + "version": "2.2.0", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "js-yaml": "^3.10.0", - "tslib": "^2.4.0" - }, + "license": "MIT", "engines": { - "node": ">=18.12.0" + "node": ">=8" } }, - "node_modules/@yarnpkg/parsers/node_modules/argparse": { - "version": "1.0.10", - "dev": true, + "node_modules/bindings": { + "version": "1.5.0", "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "file-uri-to-path": "1.0.0" } }, - "node_modules/@yarnpkg/parsers/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/bl": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "buffer": "^5.5.0", + "inherits": "^2.0.4", + "readable-stream": "^3.4.0" } }, - "node_modules/@zkochan/js-yaml": { - "version": "0.0.6", + "node_modules/blueimp-md5": { + "version": "2.19.0", "dev": true, + "license": "MIT" + }, + "node_modules/brace-expansion": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" + "balanced-match": "^1.0.0" } }, - "node_modules/abbrev": { - "version": "1.1.1", - "license": "ISC" - }, - "node_modules/acorn": { - "version": "8.11.2", + "node_modules/braces": { + "version": "3.0.2", "license": "MIT", - "bin": { - "acorn": "bin/acorn" + "dependencies": { + "fill-range": "^7.0.1" }, "engines": { - "node": ">=0.4.0" + "node": ">=8" } }, - "node_modules/acorn-import-assertions": { - "version": "1.9.0", + "node_modules/browserslist": { + "version": "4.22.2", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", - "peerDependencies": { - "acorn": "^8" - } - }, - "node_modules/acorn-import-attributes": { - "version": "1.9.2", - "resolved": "https://registry.npmjs.org/acorn-import-attributes/-/acorn-import-attributes-1.9.2.tgz", - "integrity": "sha512-O+nfJwNolEA771IYJaiLWK1UAwjNsQmZbTRqqwBYxCgVQTmpFEMvBw6LOIQV0Me339L5UMVYFyRohGnGlQDdIQ==", - "peerDependencies": { - "acorn": "^8" + "peer": true, + "dependencies": { + "caniuse-lite": "^1.0.30001565", + "electron-to-chromium": "^1.4.601", + "node-releases": "^2.0.14", + "update-browserslist-db": "^1.0.13" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" } }, - "node_modules/acorn-jsx": { - "version": "5.3.2", + "node_modules/buffer": { + "version": "5.7.1", "dev": true, + "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", - "peerDependencies": { - "acorn": "^6.0.0 || ^7.0.0 || ^8.0.0" + "dependencies": { + "base64-js": "^1.3.1", + "ieee754": "^1.1.13" } }, - "node_modules/acorn-walk": { - "version": "8.3.1", + "node_modules/buffer-crc32": { + "version": "0.2.13", "license": "MIT", "engines": { - "node": ">=0.4.0" + "node": "*" } }, - "node_modules/add-stream": { - "version": "1.0.0", + "node_modules/buffer-from": { + "version": "1.1.2", "dev": true, "license": "MIT" }, - "node_modules/agent-base": { - "version": "6.0.2", + "node_modules/builtin-modules": { + "version": "3.3.0", "license": "MIT", - "dependencies": { - "debug": "4" - }, "engines": { - "node": ">= 6.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/agentkeepalive": { - "version": "4.5.0", - "dev": true, + "node_modules/builtins": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "humanize-ms": "^1.2.1" - }, + "semver": "^7.0.0" + } + }, + "node_modules/byline": { + "version": "5.0.0", + "license": "MIT", "engines": { - "node": ">= 8.0.0" + "node": ">=0.10.0" } }, - "node_modules/aggregate-error": { - "version": "3.1.0", + "node_modules/byte-size": { + "version": "7.0.1", "dev": true, "license": "MIT", - "dependencies": { - "clean-stack": "^2.0.0", - "indent-string": "^4.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/aggregate-error/node_modules/clean-stack": { - "version": "2.2.0", + "node_modules/c8": { + "version": "7.14.0", "dev": true, - "license": "MIT", + "license": "ISC", + "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": ">=6" + "node": ">=10.12.0" } }, - "node_modules/aggregate-error/node_modules/indent-string": { - "version": "4.0.0", + "node_modules/c8/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ajv": { - "version": "8.12.0", + "node_modules/c8/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/c8/node_modules/find-up": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=10" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ajv-errors": { + "node_modules/c8/node_modules/is-fullwidth-code-point": { "version": "3.0.0", + "dev": true, "license": "MIT", - "peerDependencies": { - "ajv": "^8.0.1" + "engines": { + "node": ">=8" } }, - "node_modules/all-node-versions": { - "version": "9.0.0", + "node_modules/c8/node_modules/locate-path": { + "version": "6.0.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "fetch-node-website": "^6.0.0", - "filter-obj": "^2.0.2", - "get-stream": "^6.0.0", - "global-cache-dir": "^3.0.1", - "jest-validate": "^27.0.2", - "path-exists": "^4.0.0", - "semver": "^7.3.5", - "write-file-atomic": "^3.0.3" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=12.20.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-node-versions/node_modules/filter-obj": { - "version": "2.0.2", + "node_modules/c8/node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", + "dependencies": { + "yocto-queue": "^0.1.0" + }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/all-node-versions/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/c8/node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/all-node-versions/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" + "p-limit": "^3.0.2" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ansi-colors": { - "version": "4.1.3", + "node_modules/c8/node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ansi-escapes": { - "version": "6.2.0", + "node_modules/c8/node_modules/string-width": { + "version": "4.2.3", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^3.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ansi-regex": { + "node_modules/c8/node_modules/strip-ansi": { "version": "6.0.1", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/ansi-regex?sponsor=1" - } - }, - "node_modules/ansi-styles": { - "version": "6.2.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "ansi-regex": "^5.0.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/anymatch": { - "version": "3.1.3", + "node_modules/c8/node_modules/yargs": { + "version": "16.2.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-path": "^3.0.0", - "picomatch": "^2.0.4" + "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/anymatch/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/c8/node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/aproba": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/archiver": { - "version": "6.0.1", + "node_modules/cac": { + "version": "6.7.14", + "dev": true, "license": "MIT", - "dependencies": { - "archiver-utils": "^4.0.1", - "async": "^3.2.4", - "buffer-crc32": "^0.2.1", - "readable-stream": "^3.6.0", - "readdir-glob": "^1.1.2", - "tar-stream": "^3.0.0", - "zip-stream": "^5.0.1" - }, "engines": { - "node": ">= 12.0.0" + "node": ">=8" } - }, - "node_modules/archiver-utils": { - "version": "4.0.1", - "license": "MIT", + }, + "node_modules/cacache": { + "version": "16.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "glob": "^8.0.0", - "graceful-fs": "^4.2.0", - "lazystream": "^1.0.0", - "lodash": "^4.17.15", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "@npmcli/fs": "^2.1.0", + "@npmcli/move-file": "^2.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "glob": "^8.0.1", + "infer-owner": "^1.0.4", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "mkdirp": "^1.0.4", + "p-map": "^4.0.0", + "promise-inflight": "^1.0.1", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11", + "unique-filename": "^2.0.0" }, "engines": { - "node": ">= 12.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/archiver-utils/node_modules/glob": { + "node_modules/cacache/node_modules/glob": { "version": "8.1.0", + "dev": true, "license": "ISC", "dependencies": { "fs.realpath": "^1.0.0", @@ -9805,8 +10280,9 @@ "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/archiver-utils/node_modules/minimatch": { + "node_modules/cacache/node_modules/minimatch": { "version": "5.1.6", + "dev": true, "license": "ISC", "dependencies": { "brace-expansion": "^2.0.1" @@ -9815,725 +10291,676 @@ "node": ">=10" } }, - "node_modules/are-we-there-yet": { - "version": "2.0.0", - "license": "ISC", + "node_modules/cacache/node_modules/p-map": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "aggregate-error": "^3.0.0" }, "engines": { "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/arg": { - "version": "4.1.3", - "license": "MIT" + "node_modules/cacheable-lookup": { + "version": "7.0.0", + "license": "MIT", + "engines": { + "node": ">=14.16" + } }, - "node_modules/argparse": { - "version": "2.0.1", - "license": "Python-2.0" + "node_modules/cacheable-request": { + "version": "10.2.14", + "license": "MIT", + "dependencies": { + "@types/http-cache-semantics": "^4.0.2", + "get-stream": "^6.0.1", + "http-cache-semantics": "^4.1.1", + "keyv": "^4.5.3", + "mimic-response": "^4.0.0", + "normalize-url": "^8.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + } }, - "node_modules/array-back": { - "version": "3.1.0", + "node_modules/cachedir": { + "version": "2.4.0", "dev": true, "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/array-buffer-byte-length": { - "version": "1.0.0", - "dev": true, + "node_modules/call-bind": { + "version": "1.0.5", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "is-array-buffer": "^3.0.1" + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.1", + "set-function-length": "^1.1.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/array-differ": { - "version": "3.0.0", + "node_modules/callsites": { + "version": "4.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-find-index": { - "version": "1.0.2", + "node_modules/camelcase": { + "version": "6.3.0", + "license": "MIT", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/camelcase-keys": { + "version": "6.2.2", "dev": true, "license": "MIT", + "dependencies": { + "camelcase": "^5.3.1", + "map-obj": "^4.0.0", + "quick-lru": "^4.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-ify": { - "version": "1.0.0", + "node_modules/camelcase-keys/node_modules/camelcase": { + "version": "5.3.1", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/array-includes": { - "version": "3.1.7", + "node_modules/camelcase-keys/node_modules/map-obj": { + "version": "4.3.0", "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-string": "^1.0.7" - }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/array-union": { - "version": "2.1.0", + "node_modules/camelcase-keys/node_modules/quick-lru": { + "version": "4.0.1", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/array.prototype.findlastindex": { - "version": "1.2.3", + "node_modules/caniuse-lite": { + "version": "1.0.30001568", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "CC-BY-4.0", + "peer": true + }, + "node_modules/cbor": { + "version": "8.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0", - "get-intrinsic": "^1.2.1" + "nofilter": "^3.1.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.19" } }, - "node_modules/array.prototype.flat": { - "version": "1.3.2", + "node_modules/chai": { + "version": "4.3.10", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "assertion-error": "^1.1.0", + "check-error": "^1.0.3", + "deep-eql": "^4.1.3", + "get-func-name": "^2.0.2", + "loupe": "^2.3.6", + "pathval": "^1.1.1", + "type-detect": "^4.0.8" }, "engines": { - "node": ">= 0.4" + "node": ">=4" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "license": "MIT", + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/array.prototype.flatmap": { - "version": "1.3.2", + "node_modules/chardet": { + "version": "0.7.0", + "dev": true, + "license": "MIT" + }, + "node_modules/check-error": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-shim-unscopables": "^1.0.0" + "get-func-name": "^2.0.2" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "*" } }, - "node_modules/arraybuffer.prototype.slice": { - "version": "1.0.2", + "node_modules/chokidar": { + "version": "3.5.3", "dev": true, + "funding": [ + { + "type": "individual", + "url": "https://paulmillr.com/funding/" + } + ], "license": "MIT", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1", - "is-array-buffer": "^3.0.2", - "is-shared-array-buffer": "^1.0.2" + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" }, "engines": { - "node": ">= 0.4" + "node": ">= 8.10.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/arrgv": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node_modules/chownr": { + "version": "2.0.0", + "license": "ISC", "engines": { - "node": ">=8.0.0" + "node": ">=10" } }, - "node_modules/arrify": { - "version": "3.0.0", + "node_modules/chrome-trace-event": { + "version": "1.0.3", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6.0" } }, - "node_modules/asap": { - "version": "2.0.6", + "node_modules/chunkd": { + "version": "2.0.1", "dev": true, "license": "MIT" }, - "node_modules/assertion-error": { - "version": "1.1.0", + "node_modules/ci-info": { + "version": "3.9.0", "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/sibiraj-s" + } + ], "license": "MIT", "engines": { - "node": "*" - } - }, - "node_modules/ast-module-types": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/async": { - "version": "3.2.5", + "node_modules/ci-parallel-vars": { + "version": "1.0.1", + "dev": true, "license": "MIT" }, - "node_modules/async-sema": { - "version": "3.1.1", - "license": "MIT" + "node_modules/cjs-module-lexer": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", + "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" }, - "node_modules/asynckit": { - "version": "0.4.0", - "license": "MIT" + "node_modules/clean-stack": { + "version": "4.2.0", + "license": "MIT", + "dependencies": { + "escape-string-regexp": "5.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } }, - "node_modules/at-least-node": { - "version": "1.0.0", + "node_modules/clean-yaml-object": { + "version": "0.1.0", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">= 4.0.0" + "node": ">=0.10.0" } }, - "node_modules/atob": { - "version": "2.1.2", + "node_modules/cli-cursor": { + "version": "3.1.0", "dev": true, - "license": "(MIT OR Apache-2.0)", - "bin": { - "atob": "bin/atob.js" + "license": "MIT", + "dependencies": { + "restore-cursor": "^3.1.0" }, "engines": { - "node": ">= 4.5.0" + "node": ">=8" } }, - "node_modules/ava": { - "version": "4.3.3", + "node_modules/cli-progress": { + "version": "3.12.0", "dev": true, "license": "MIT", "dependencies": { - "acorn": "^8.7.1", - "acorn-walk": "^8.2.0", - "ansi-styles": "^6.1.0", - "arrgv": "^1.0.2", - "arrify": "^3.0.0", - "callsites": "^4.0.0", - "cbor": "^8.1.0", - "chalk": "^5.0.1", - "chokidar": "^3.5.3", - "chunkd": "^2.0.1", - "ci-info": "^3.3.1", - "ci-parallel-vars": "^1.0.1", - "clean-yaml-object": "^0.1.0", - "cli-truncate": "^3.1.0", - "code-excerpt": "^4.0.0", - "common-path-prefix": "^3.0.0", - "concordance": "^5.0.4", - "currently-unhandled": "^0.4.1", - "debug": "^4.3.4", - "del": "^6.1.1", - "emittery": "^0.11.0", - "figures": "^4.0.1", - "globby": "^13.1.1", - "ignore-by-default": "^2.1.0", - "indent-string": "^5.0.0", - "is-error": "^2.2.2", - "is-plain-object": "^5.0.0", - "is-promise": "^4.0.0", - "matcher": "^5.0.0", - "mem": "^9.0.2", - "ms": "^2.1.3", - "p-event": "^5.0.1", - "p-map": "^5.4.0", - "picomatch": "^2.3.1", - "pkg-conf": "^4.0.0", - "plur": "^5.1.0", - "pretty-ms": "^7.0.1", - "resolve-cwd": "^3.0.0", - "slash": "^3.0.0", - "stack-utils": "^2.0.5", - "strip-ansi": "^7.0.1", - "supertap": "^3.0.1", - "temp-dir": "^2.0.0", - "write-file-atomic": "^4.0.1", - "yargs": "^17.5.1" - }, - "bin": { - "ava": "entrypoints/cli.mjs" + "string-width": "^4.2.3" }, "engines": { - "node": ">=12.22 <13 || >=14.17 <15 || >=16.4 <17 || >=18" - }, - "peerDependencies": { - "@ava/typescript": "*" - }, - "peerDependenciesMeta": { - "@ava/typescript": { - "optional": true - } + "node": ">=4" } }, - "node_modules/ava/node_modules/aggregate-error": { - "version": "4.0.1", + "node_modules/cli-progress/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ava/node_modules/figures": { - "version": "4.0.1", + "node_modules/cli-progress/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/cli-progress/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" - }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ava/node_modules/p-map": { - "version": "5.5.0", + "node_modules/cli-progress/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/ava/node_modules/parse-ms": { - "version": "2.1.0", + "node_modules/cli-progress/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/ava/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/cli-spinners": { + "version": "2.6.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=6" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ava/node_modules/pretty-ms": { - "version": "7.0.1", + "node_modules/cli-truncate": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "parse-ms": "^2.1.0" + "slice-ansi": "^5.0.0", + "string-width": "^5.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/available-typed-arrays": { - "version": "1.0.5", + "node_modules/cli-width": { + "version": "3.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10" } }, - "node_modules/axios": { - "version": "1.6.2", + "node_modules/cliui": { + "version": "7.0.4", + "dev": true, + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.0", + "wrap-ansi": "^7.0.0" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "follow-redirects": "^1.15.0", - "form-data": "^4.0.0", - "proxy-from-env": "^1.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/axios/node_modules/form-data": { - "version": "4.0.0", + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 6" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/b4a": { - "version": "1.6.4", - "license": "ISC" - }, - "node_modules/babel-loader": { - "version": "8.3.0", + "node_modules/cliui/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "find-cache-dir": "^3.3.1", - "loader-utils": "^2.0.0", - "make-dir": "^3.1.0", - "schema-utils": "^2.6.5" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 8.9" - }, - "peerDependencies": { - "@babel/core": "^7.0.0", - "webpack": ">=2" + "node": ">=7.0.0" } }, - "node_modules/balanced-match": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/base64-js": { - "version": "1.5.1", + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "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/before-after-hook": { - "version": "2.2.3", + "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/better-ajv-errors": { - "version": "1.2.0", - "license": "Apache-2.0", + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "dev": true, + "license": "MIT", "dependencies": { - "@babel/code-frame": "^7.16.0", - "@humanwhocodes/momoa": "^2.0.2", - "chalk": "^4.1.2", - "jsonpointer": "^5.0.0", - "leven": "^3.1.0 < 4" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">= 12.13.0" - }, - "peerDependencies": { - "ajv": "4.11.8 - 8" + "node": ">=8" } }, - "node_modules/better-ajv-errors/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/better-ajv-errors/node_modules/chalk": { - "version": "4.1.2", + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/better-ajv-errors/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/clone": { + "version": "1.0.4", + "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=0.8" } }, - "node_modules/better-ajv-errors/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/clone-deep": { + "version": "4.0.1", + "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "is-plain-object": "^2.0.4", + "kind-of": "^6.0.2", + "shallow-clone": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/big.js": { - "version": "5.2.2", + "node_modules/clone-deep/node_modules/is-plain-object": { + "version": "2.0.4", "dev": true, "license": "MIT", + "dependencies": { + "isobject": "^3.0.1" + }, "engines": { - "node": "*" + "node": ">=0.10.0" } }, - "node_modules/bin-links": { - "version": "3.0.3", + "node_modules/clone-response": { + "version": "1.0.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cmd-shim": "^5.0.0", - "mkdirp-infer-owner": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0", - "read-cmd-shim": "^3.0.0", - "rimraf": "^3.0.0", - "write-file-atomic": "^4.0.0" + "mimic-response": "^1.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/clone-response/node_modules/mimic-response": { + "version": "1.0.1", + "dev": true, + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=4" } }, - "node_modules/bin-links/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", + "node_modules/cmd-shim": { + "version": "5.0.0", "dev": true, "license": "ISC", + "dependencies": { + "mkdirp-infer-owner": "^2.0.0" + }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/binary-extensions": { - "version": "2.2.0", + "node_modules/code-excerpt": { + "version": "4.0.0", "dev": true, "license": "MIT", + "dependencies": { + "convert-to-spaces": "^2.0.1" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/bindings": { - "version": "1.5.0", + "node_modules/color-convert": { + "version": "1.9.3", "license": "MIT", "dependencies": { - "file-uri-to-path": "1.0.0" + "color-name": "1.1.3" } }, - "node_modules/bl": { - "version": "4.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "buffer": "^5.5.0", - "inherits": "^2.0.4", - "readable-stream": "^3.4.0" - } + "node_modules/color-convert/node_modules/color-name": { + "version": "1.1.3", + "license": "MIT" }, - "node_modules/blueimp-md5": { - "version": "2.19.0", - "dev": true, + "node_modules/color-name": { + "version": "1.1.4", "license": "MIT" }, - "node_modules/brace-expansion": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0" + "node_modules/color-support": { + "version": "1.1.3", + "license": "ISC", + "bin": { + "color-support": "bin.js" } }, - "node_modules/braces": { - "version": "3.0.2", - "license": "MIT", - "dependencies": { - "fill-range": "^7.0.1" - }, - "engines": { - "node": ">=8" - } + "node_modules/colorette": { + "version": "2.0.20", + "dev": true, + "license": "MIT" }, - "node_modules/browserslist": { - "version": "4.22.2", + "node_modules/colors-option": { + "version": "2.0.1", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "peer": true, + "license": "Apache-2.0", "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", - "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" - }, - "bin": { - "browserslist": "cli.js" + "chalk": "^4.1.0", + "filter-obj": "^2.0.1", + "is-plain-obj": "^4.0.0", + "jest-validate": "^27.0.2" }, "engines": { - "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + "node": ">=12.20.0" } }, - "node_modules/buffer": { - "version": "5.7.1", + "node_modules/colors-option/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "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", "dependencies": { - "base64-js": "^1.3.1", - "ieee754": "^1.1.13" - } - }, - "node_modules/buffer-crc32": { - "version": "0.2.13", - "license": "MIT", + "color-convert": "^2.0.1" + }, "engines": { - "node": "*" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/buffer-from": { - "version": "1.1.2", + "node_modules/colors-option/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "MIT" - }, - "node_modules/builtin-modules": { - "version": "3.3.0", "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">=6" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/builtins": { - "version": "5.0.1", + "node_modules/colors-option/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "semver": "^7.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/byline": { - "version": "5.0.0", + "node_modules/colors-option/node_modules/filter-obj": { + "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/byte-size": { - "version": "7.0.1", + "node_modules/colors-option/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/c8": { - "version": "7.14.0", + "node_modules/columnify": { + "version": "1.6.0", "dev": true, - "license": "ISC", + "license": "MIT", "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" + "strip-ansi": "^6.0.1", + "wcwidth": "^1.0.0" }, "engines": { - "node": ">=10.12.0" + "node": ">=8.0.0" } }, - "node_modules/c8/node_modules/ansi-regex": { + "node_modules/columnify/node_modules/ansi-regex": { "version": "5.0.1", "dev": true, "license": "MIT", @@ -10541,638 +10968,660 @@ "node": ">=8" } }, - "node_modules/c8/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/c8/node_modules/find-up": { - "version": "5.0.0", + "node_modules/columnify/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/c8/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, + "node_modules/combined-stream": { + "version": "1.0.8", "license": "MIT", + "dependencies": { + "delayed-stream": "~1.0.0" + }, "engines": { - "node": ">=8" + "node": ">= 0.8" } }, - "node_modules/c8/node_modules/locate-path": { - "version": "6.0.0", + "node_modules/command-line-args": { + "version": "5.2.1", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "array-back": "^3.1.0", + "find-replace": "^3.0.0", + "lodash.camelcase": "^4.3.0", + "typical": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4.0.0" } }, - "node_modules/c8/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/command-line-usage": { + "version": "6.1.3", "dev": true, "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" + "array-back": "^4.0.2", + "chalk": "^2.4.2", + "table-layout": "^1.0.2", + "typical": "^5.2.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.0.0" } }, - "node_modules/c8/node_modules/p-locate": { - "version": "5.0.0", + "node_modules/command-line-usage/node_modules/ansi-styles": { + "version": "3.2.1", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" + "color-convert": "^1.9.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/c8/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/command-line-usage/node_modules/array-back": { + "version": "4.0.2", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/c8/node_modules/string-width": { - "version": "4.2.3", + "node_modules/command-line-usage/node_modules/chalk": { + "version": "2.4.2", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-styles": "^3.2.1", + "escape-string-regexp": "^1.0.5", + "supports-color": "^5.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/c8/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/command-line-usage/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=0.8.0" } }, - "node_modules/c8/node_modules/yargs": { - "version": "16.2.0", + "node_modules/command-line-usage/node_modules/has-flag": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=4" + } + }, + "node_modules/command-line-usage/node_modules/supports-color": { + "version": "5.5.0", "dev": true, "license": "MIT", "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" + "has-flag": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/c8/node_modules/yocto-queue": { - "version": "0.1.0", + "node_modules/command-line-usage/node_modules/typical": { + "version": "5.2.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" + } + }, + "node_modules/commander": { + "version": "11.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=16" + } + }, + "node_modules/common-ancestor-path": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/common-path-prefix": { + "version": "3.0.0", + "license": "ISC" + }, + "node_modules/commondir": { + "version": "1.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/compare-func": { + "version": "2.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "array-ify": "^1.0.0", + "dot-prop": "^5.1.0" } }, - "node_modules/cac": { - "version": "6.7.14", + "node_modules/compare-func/node_modules/dot-prop": { + "version": "5.3.0", "dev": true, "license": "MIT", + "dependencies": { + "is-obj": "^2.0.0" + }, "engines": { "node": ">=8" } }, - "node_modules/cacache": { - "version": "16.1.3", - "dev": true, - "license": "ISC", + "node_modules/compress-commons": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "@npmcli/fs": "^2.1.0", - "@npmcli/move-file": "^2.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "glob": "^8.0.1", - "infer-owner": "^1.0.4", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "mkdirp": "^1.0.4", - "p-map": "^4.0.0", - "promise-inflight": "^1.0.1", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11", - "unique-filename": "^2.0.0" + "crc-32": "^1.2.0", + "crc32-stream": "^5.0.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 12.0.0" } }, - "node_modules/cacache/node_modules/glob": { - "version": "8.1.0", + "node_modules/concat-map": { + "version": "0.0.1", + "license": "MIT" + }, + "node_modules/concat-stream": { + "version": "2.0.0", "dev": true, - "license": "ISC", + "engines": [ + "node >= 6.0" + ], + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" + "buffer-from": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.0.2", + "typedarray": "^0.0.6" } }, - "node_modules/cacache/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/concordance": { + "version": "5.0.4", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" + "date-time": "^3.1.0", + "esutils": "^2.0.3", + "fast-diff": "^1.2.0", + "js-string-escape": "^1.0.1", + "lodash": "^4.17.15", + "md5-hex": "^3.0.1", + "semver": "^7.3.2", + "well-known-symbols": "^2.0.0" }, "engines": { - "node": ">=10" + "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" } }, - "node_modules/cacache/node_modules/p-map": { - "version": "4.0.0", + "node_modules/config-chain": { + "version": "1.1.13", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "ini": "^1.3.4", + "proto-list": "~1.2.1" } }, - "node_modules/cacheable-lookup": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=14.16" - } + "node_modules/consola": { + "version": "2.15.3", + "dev": true, + "license": "MIT" }, - "node_modules/cacheable-request": { - "version": "10.2.14", - "license": "MIT", + "node_modules/console-control-strings": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/conventional-changelog-angular": { + "version": "6.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "@types/http-cache-semantics": "^4.0.2", - "get-stream": "^6.0.1", - "http-cache-semantics": "^4.1.1", - "keyv": "^4.5.3", - "mimic-response": "^4.0.0", - "normalize-url": "^8.0.0", - "responselike": "^3.0.0" + "compare-func": "^2.0.0" }, "engines": { - "node": ">=14.16" + "node": ">=14" } }, - "node_modules/cachedir": { - "version": "2.4.0", + "node_modules/conventional-changelog-conventionalcommits": { + "version": "6.1.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" - } - }, - "node_modules/call-bind": { - "version": "1.0.5", - "license": "MIT", + "license": "ISC", "dependencies": { - "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.1", - "set-function-length": "^1.1.1" + "compare-func": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=14" } }, - "node_modules/callsites": { - "version": "4.1.0", + "node_modules/conventional-changelog-core": { + "version": "4.2.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=12.20" + "dependencies": { + "add-stream": "^1.0.0", + "conventional-changelog-writer": "^5.0.0", + "conventional-commits-parser": "^3.2.0", + "dateformat": "^3.0.0", + "get-pkg-repo": "^4.0.0", + "git-raw-commits": "^2.0.8", + "git-remote-origin-url": "^2.0.0", + "git-semver-tags": "^4.1.1", + "lodash": "^4.17.15", + "normalize-package-data": "^3.0.0", + "q": "^1.5.1", + "read-pkg": "^3.0.0", + "read-pkg-up": "^3.0.0", + "through2": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase": { - "version": "6.3.0", - "license": "MIT", "engines": { "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/camelcase-keys": { - "version": "6.2.2", + "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { + "version": "3.2.4", "dev": true, "license": "MIT", "dependencies": { - "camelcase": "^5.3.1", - "map-obj": "^4.0.0", - "quick-lru": "^4.0.1" + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "conventional-commits-parser": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/camelcase-keys/node_modules/camelcase": { - "version": "5.3.1", + "node_modules/conventional-changelog-core/node_modules/find-up": { + "version": "2.1.0", "dev": true, "license": "MIT", + "dependencies": { + "locate-path": "^2.0.0" + }, "engines": { - "node": ">=6" + "node": ">=4" } }, - "node_modules/camelcase-keys/node_modules/map-obj": { - "version": "4.3.0", + "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { + "version": "2.8.9", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "ISC" }, - "node_modules/camelcase-keys/node_modules/quick-lru": { - "version": "4.0.1", + "node_modules/conventional-changelog-core/node_modules/load-json-file": { + "version": "4.0.0", "dev": true, "license": "MIT", + "dependencies": { + "graceful-fs": "^4.1.2", + "parse-json": "^4.0.0", + "pify": "^3.0.0", + "strip-bom": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/caniuse-lite": { - "version": "1.0.30001568", - "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/caniuse-lite" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "CC-BY-4.0", - "peer": true - }, - "node_modules/cbor": { - "version": "8.1.0", + "node_modules/conventional-changelog-core/node_modules/locate-path": { + "version": "2.0.0", "dev": true, "license": "MIT", "dependencies": { - "nofilter": "^3.1.0" + "p-locate": "^2.0.0", + "path-exists": "^3.0.0" }, "engines": { - "node": ">=12.19" + "node": ">=4" } }, - "node_modules/chai": { - "version": "4.3.10", + "node_modules/conventional-changelog-core/node_modules/p-limit": { + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "assertion-error": "^1.1.0", - "check-error": "^1.0.3", - "deep-eql": "^4.1.3", - "get-func-name": "^2.0.2", - "loupe": "^2.3.6", - "pathval": "^1.1.1", - "type-detect": "^4.0.8" + "p-try": "^1.0.0" }, "engines": { "node": ">=4" } }, - "node_modules/chalk": { - "version": "5.3.0", + "node_modules/conventional-changelog-core/node_modules/p-locate": { + "version": "2.0.0", + "dev": true, "license": "MIT", - "engines": { - "node": "^12.17.0 || ^14.13 || >=16.0.0" + "dependencies": { + "p-limit": "^1.1.0" }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "engines": { + "node": ">=4" } }, - "node_modules/chardet": { - "version": "0.7.0", + "node_modules/conventional-changelog-core/node_modules/p-try": { + "version": "1.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "engines": { + "node": ">=4" + } }, - "node_modules/check-error": { - "version": "1.0.3", + "node_modules/conventional-changelog-core/node_modules/parse-json": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "get-func-name": "^2.0.2" + "error-ex": "^1.3.1", + "json-parse-better-errors": "^1.0.1" }, "engines": { - "node": "*" + "node": ">=4" } }, - "node_modules/chokidar": { - "version": "3.5.3", + "node_modules/conventional-changelog-core/node_modules/path-exists": { + "version": "3.0.0", "dev": true, - "funding": [ - { - "type": "individual", - "url": "https://paulmillr.com/funding/" - } - ], "license": "MIT", - "dependencies": { - "anymatch": "~3.1.2", - "braces": "~3.0.2", - "glob-parent": "~5.1.2", - "is-binary-path": "~2.1.0", - "is-glob": "~4.0.1", - "normalize-path": "~3.0.0", - "readdirp": "~3.6.0" - }, "engines": { - "node": ">= 8.10.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "node": ">=4" } }, - "node_modules/chownr": { - "version": "2.0.0", - "license": "ISC", + "node_modules/conventional-changelog-core/node_modules/path-type": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^3.0.0" + }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/chrome-trace-event": { - "version": "1.0.3", + "node_modules/conventional-changelog-core/node_modules/pify": { + "version": "3.0.0", "dev": true, "license": "MIT", - "peer": true, "engines": { - "node": ">=6.0" + "node": ">=4" } }, - "node_modules/chunkd": { - "version": "2.0.1", + "node_modules/conventional-changelog-core/node_modules/read-pkg": { + "version": "3.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "load-json-file": "^4.0.0", + "normalize-package-data": "^2.3.2", + "path-type": "^3.0.0" + }, + "engines": { + "node": ">=4" + } }, - "node_modules/ci-info": { - "version": "3.9.0", + "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { + "version": "3.0.0", "dev": true, - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/sibiraj-s" - } - ], "license": "MIT", + "dependencies": { + "find-up": "^2.0.0", + "read-pkg": "^3.0.0" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/ci-parallel-vars": { - "version": "1.0.1", + "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", "dev": true, - "license": "MIT" - }, - "node_modules/cjs-module-lexer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/cjs-module-lexer/-/cjs-module-lexer-1.2.3.tgz", - "integrity": "sha512-0TNiGstbQmCFwt4akjjBg5pLRTSyj/PkWQ1ZoO2zntmg9yLqSRxwEa4iCfQLGjqhiqBfOJa7W/E8wfGrTDmlZQ==" + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } }, - "node_modules/clean-stack": { - "version": "4.2.0", + "node_modules/conventional-changelog-core/node_modules/resolve": { + "version": "1.22.8", + "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "5.0.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/clean-yaml-object": { - "version": "0.1.0", + "node_modules/conventional-changelog-core/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" + } + }, + "node_modules/conventional-changelog-core/node_modules/strip-bom": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=4" } }, - "node_modules/cli-cursor": { - "version": "3.1.0", + "node_modules/conventional-changelog-core/node_modules/through2": { + "version": "4.0.2", "dev": true, "license": "MIT", "dependencies": { - "restore-cursor": "^3.1.0" - }, - "engines": { - "node": ">=8" + "readable-stream": "3" } }, - "node_modules/cli-progress": { - "version": "3.12.0", + "node_modules/conventional-changelog-preset-loader": { + "version": "2.3.4", "dev": true, "license": "MIT", - "dependencies": { - "string-width": "^4.2.3" - }, "engines": { - "node": ">=4" + "node": ">=10" } }, - "node_modules/cli-progress/node_modules/ansi-regex": { + "node_modules/conventional-changelog-writer": { "version": "5.0.1", "dev": true, "license": "MIT", + "dependencies": { + "conventional-commits-filter": "^2.0.7", + "dateformat": "^3.0.0", + "handlebars": "^4.7.7", + "json-stringify-safe": "^5.0.1", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "semver": "^6.0.0", + "split": "^1.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-changelog-writer": "cli.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cli-progress/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/cli-progress/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/conventional-changelog-writer/node_modules/semver": { + "version": "6.3.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/cli-progress/node_modules/string-width": { - "version": "4.2.3", + "node_modules/conventional-changelog-writer/node_modules/through2": { + "version": "4.0.2", "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" + "readable-stream": "3" } }, - "node_modules/cli-progress/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/conventional-commits-filter": { + "version": "2.0.7", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "lodash.ismatch": "^4.4.0", + "modify-values": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/cli-spinners": { - "version": "2.6.1", + "node_modules/conventional-commits-parser": { + "version": "4.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=6" + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.3.5", + "meow": "^8.1.2", + "split2": "^3.2.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "conventional-commits-parser": "cli.js" + }, + "engines": { + "node": ">=14" } }, - "node_modules/cli-truncate": { - "version": "3.1.0", + "node_modules/conventional-recommended-bump": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "slice-ansi": "^5.0.0", - "string-width": "^5.0.0" + "concat-stream": "^2.0.0", + "conventional-changelog-preset-loader": "^2.3.4", + "conventional-commits-filter": "^2.0.7", + "conventional-commits-parser": "^3.2.0", + "git-raw-commits": "^2.0.8", + "git-semver-tags": "^4.1.1", + "meow": "^8.0.0", + "q": "^1.5.1" }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "conventional-recommended-bump": "cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/cli-width": { - "version": "3.0.0", + "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { + "version": "3.2.4", "dev": true, - "license": "ISC", + "license": "MIT", + "dependencies": { + "is-text-path": "^1.0.1", + "JSONStream": "^1.0.4", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "conventional-commits-parser": "cli.js" + }, "engines": { - "node": ">= 10" + "node": ">=10" } }, - "node_modules/cliui": { - "version": "7.0.4", + "node_modules/conventional-recommended-bump/node_modules/through2": { + "version": "4.0.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", - "wrap-ansi": "^7.0.0" + "readable-stream": "3" } }, - "node_modules/cliui/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/convert-source-map": { + "version": "2.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/convert-to-spaces": { + "version": "2.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/cliui/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/copyfiles": { + "version": "2.4.1", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "glob": "^7.0.5", + "minimatch": "^3.0.3", + "mkdirp": "^1.0.4", + "noms": "0.0.0", + "through2": "^2.0.1", + "untildify": "^4.0.0", + "yargs": "^16.1.0" }, + "bin": { + "copyfiles": "copyfiles", + "copyup": "copyfiles" + } + }, + "node_modules/copyfiles/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, + "license": "MIT", "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/cliui/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/copyfiles/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/cliui/node_modules/emoji-regex": { + "node_modules/copyfiles/node_modules/emoji-regex": { "version": "8.0.0", "dev": true, "license": "MIT" }, - "node_modules/cliui/node_modules/is-fullwidth-code-point": { + "node_modules/copyfiles/node_modules/is-fullwidth-code-point": { "version": "3.0.0", "dev": true, "license": "MIT", @@ -11180,7 +11629,18 @@ "node": ">=8" } }, - "node_modules/cliui/node_modules/string-width": { + "node_modules/copyfiles/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/copyfiles/node_modules/string-width": { "version": "4.2.3", "dev": true, "license": "MIT", @@ -11193,7 +11653,7 @@ "node": ">=8" } }, - "node_modules/cliui/node_modules/strip-ansi": { + "node_modules/copyfiles/node_modules/strip-ansi": { "version": "6.0.1", "dev": true, "license": "MIT", @@ -11204,1647 +11664,1683 @@ "node": ">=8" } }, - "node_modules/cliui/node_modules/wrap-ansi": { - "version": "7.0.0", + "node_modules/copyfiles/node_modules/yargs": { + "version": "16.2.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.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": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" - } - }, - "node_modules/clone": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8" } }, - "node_modules/clone-deep": { - "version": "4.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-object": "^2.0.4", - "kind-of": "^6.0.2", - "shallow-clone": "^3.0.0" - }, - "engines": { - "node": ">=6" - } + "node_modules/core-util-is": { + "version": "1.0.3", + "license": "MIT" }, - "node_modules/clone-deep/node_modules/is-plain-object": { - "version": "2.0.4", + "node_modules/cosmiconfig": { + "version": "8.3.6", "dev": true, "license": "MIT", "dependencies": { - "isobject": "^3.0.1" + "import-fresh": "^3.3.0", + "js-yaml": "^4.1.0", + "parse-json": "^5.2.0", + "path-type": "^4.0.0" }, "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/clone-response": { - "version": "1.0.3", - "dev": true, - "license": "MIT", - "dependencies": { - "mimic-response": "^1.0.0" + "node": ">=14" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/d-fischer" + }, + "peerDependencies": { + "typescript": ">=4.9.5" + }, + "peerDependenciesMeta": { + "typescript": { + "optional": true + } } }, - "node_modules/clone-response/node_modules/mimic-response": { - "version": "1.0.1", + "node_modules/cosmiconfig-typescript-loader": { + "version": "4.4.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" - } - }, - "node_modules/cmd-shim": { - "version": "5.0.0", - "dev": true, - "license": "ISC", - "dependencies": { - "mkdirp-infer-owner": "^2.0.0" + "node": ">=v14.21.3" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "peerDependencies": { + "@types/node": "*", + "cosmiconfig": ">=7", + "ts-node": ">=10", + "typescript": ">=4" } }, - "node_modules/code-excerpt": { + "node_modules/cosmiconfig/node_modules/path-type": { "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "convert-to-spaces": "^2.0.1" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" } }, - "node_modules/color-convert": { - "version": "1.9.3", + "node_modules/cp-file": { + "version": "10.0.0", "license": "MIT", "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/color-convert/node_modules/color-name": { - "version": "1.1.3", - "license": "MIT" - }, - "node_modules/color-name": { - "version": "1.1.4", - "license": "MIT" - }, - "node_modules/color-support": { - "version": "1.1.3", - "license": "ISC", - "bin": { - "color-support": "bin.js" - } - }, - "node_modules/colorette": { - "version": "2.0.20", - "dev": true, - "license": "MIT" - }, - "node_modules/colors-option": { - "version": "2.0.1", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "chalk": "^4.1.0", - "filter-obj": "^2.0.1", - "is-plain-obj": "^4.0.0", - "jest-validate": "^27.0.2" + "graceful-fs": "^4.2.10", + "nested-error-stacks": "^2.1.1", + "p-event": "^5.0.1" }, "engines": { - "node": ">=12.20.0" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/colors-option/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/cpy": { + "version": "9.0.1", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "arrify": "^3.0.0", + "cp-file": "^9.1.0", + "globby": "^13.1.1", + "junk": "^4.0.0", + "micromatch": "^4.0.4", + "nested-error-stacks": "^2.1.0", + "p-filter": "^3.0.0", + "p-map": "^5.3.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/colors-option/node_modules/chalk": { - "version": "4.1.2", + "node_modules/cpy-cli": { + "version": "4.2.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "cpy": "^9.0.0", + "meow": "^10.1.2" + }, + "bin": { + "cpy": "cli.js" }, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/colors-option/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/cpy-cli/node_modules/camelcase-keys": { + "version": "7.0.2", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "camelcase": "^6.3.0", + "map-obj": "^4.1.0", + "quick-lru": "^5.1.1", + "type-fest": "^1.2.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/colors-option/node_modules/filter-obj": { - "version": "2.0.2", + "node_modules/cpy-cli/node_modules/decamelize": { + "version": "5.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/colors-option/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/cpy-cli/node_modules/find-up": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "locate-path": "^6.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/columnify": { - "version": "1.6.0", + "node_modules/cpy-cli/node_modules/locate-path": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "strip-ansi": "^6.0.1", - "wcwidth": "^1.0.0" + "p-locate": "^5.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/columnify/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/cpy-cli/node_modules/map-obj": { + "version": "4.3.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/columnify/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/cpy-cli/node_modules/meow": { + "version": "10.1.5", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@types/minimist": "^1.2.2", + "camelcase-keys": "^7.0.0", + "decamelize": "^5.0.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.2", + "read-pkg-up": "^8.0.0", + "redent": "^4.0.0", + "trim-newlines": "^4.0.2", + "type-fest": "^1.2.2", + "yargs-parser": "^20.2.9" }, "engines": { - "node": ">=8" - } - }, - "node_modules/combined-stream": { - "version": "1.0.8", - "license": "MIT", - "dependencies": { - "delayed-stream": "~1.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">= 0.8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-args": { - "version": "5.2.1", + "node_modules/cpy-cli/node_modules/p-limit": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "array-back": "^3.1.0", - "find-replace": "^3.0.0", - "lodash.camelcase": "^4.3.0", - "typical": "^4.0.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": ">=4.0.0" - } - }, - "node_modules/command-line-usage": { - "version": "6.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "array-back": "^4.0.2", - "chalk": "^2.4.2", - "table-layout": "^1.0.2", - "typical": "^5.2.0" + "node": ">=10" }, - "engines": { - "node": ">=8.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/ansi-styles": { - "version": "3.2.1", + "node_modules/cpy-cli/node_modules/p-locate": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^1.9.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/array-back": { - "version": "4.0.2", + "node_modules/cpy-cli/node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/command-line-usage/node_modules/chalk": { - "version": "2.4.2", + "node_modules/cpy-cli/node_modules/read-pkg": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/escape-string-regexp": { - "version": "1.0.5", + "node_modules/cpy-cli/node_modules/read-pkg-up": { + "version": "8.0.0", "dev": true, "license": "MIT", + "dependencies": { + "find-up": "^5.0.0", + "read-pkg": "^6.0.0", + "type-fest": "^1.0.1" + }, "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/has-flag": { - "version": "3.0.0", + "node_modules/cpy-cli/node_modules/redent": { + "version": "4.0.0", "dev": true, "license": "MIT", + "dependencies": { + "indent-string": "^5.0.0", + "strip-indent": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/supports-color": { - "version": "5.5.0", + "node_modules/cpy-cli/node_modules/strip-indent": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^3.0.0" + "min-indent": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/command-line-usage/node_modules/typical": { - "version": "5.2.0", + "node_modules/cpy-cli/node_modules/trim-newlines": { + "version": "4.1.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/commander": { - "version": "11.0.0", + "node_modules/cpy-cli/node_modules/type-fest": { + "version": "1.4.0", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=16" - } - }, - "node_modules/common-ancestor-path": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/common-path-prefix": { - "version": "3.0.0", - "license": "ISC" - }, - "node_modules/commondir": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/compare-func": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "array-ify": "^1.0.0", - "dot-prop": "^5.1.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/compare-func/node_modules/dot-prop": { - "version": "5.3.0", + "node_modules/cpy-cli/node_modules/yocto-queue": { + "version": "0.1.0", "dev": true, "license": "MIT", - "dependencies": { - "is-obj": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/compress-commons": { - "version": "5.0.1", + "node_modules/cpy/node_modules/aggregate-error": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "crc-32": "^1.2.0", - "crc32-stream": "^5.0.0", - "normalize-path": "^3.0.0", - "readable-stream": "^3.6.0" + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concat-map": { - "version": "0.0.1", - "license": "MIT" - }, - "node_modules/concat-stream": { - "version": "2.0.0", - "dev": true, - "engines": [ - "node >= 6.0" - ], + "node_modules/cpy/node_modules/cp-file": { + "version": "9.1.0", "license": "MIT", "dependencies": { - "buffer-from": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.0.2", - "typedarray": "^0.0.6" + "graceful-fs": "^4.1.2", + "make-dir": "^3.0.0", + "nested-error-stacks": "^2.0.0", + "p-event": "^4.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/concordance": { - "version": "5.0.4", - "dev": true, - "license": "ISC", + "node_modules/cpy/node_modules/p-event": { + "version": "4.2.0", + "license": "MIT", "dependencies": { - "date-time": "^3.1.0", - "esutils": "^2.0.3", - "fast-diff": "^1.2.0", - "js-string-escape": "^1.0.1", - "lodash": "^4.17.15", - "md5-hex": "^3.0.1", - "semver": "^7.3.2", - "well-known-symbols": "^2.0.0" + "p-timeout": "^3.1.0" }, "engines": { - "node": ">=10.18.0 <11 || >=12.14.0 <13 || >=14" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/config-chain": { - "version": "1.1.13", - "dev": true, + "node_modules/cpy/node_modules/p-map": { + "version": "5.5.0", "license": "MIT", "dependencies": { - "ini": "^1.3.4", - "proto-list": "~1.2.1" + "aggregate-error": "^4.0.0" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/consola": { - "version": "2.15.3", - "dev": true, - "license": "MIT" - }, - "node_modules/console-control-strings": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/conventional-changelog-angular": { - "version": "6.0.0", - "dev": true, - "license": "ISC", + "node_modules/cpy/node_modules/p-timeout": { + "version": "3.2.0", + "license": "MIT", "dependencies": { - "compare-func": "^2.0.0" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/conventional-changelog-conventionalcommits": { - "version": "6.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "compare-func": "^2.0.0" + "node_modules/crc-32": { + "version": "1.2.2", + "license": "Apache-2.0", + "bin": { + "crc32": "bin/crc32.njs" }, "engines": { - "node": ">=14" + "node": ">=0.8" } }, - "node_modules/conventional-changelog-core": { - "version": "4.2.4", - "dev": true, + "node_modules/crc32-stream": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "add-stream": "^1.0.0", - "conventional-changelog-writer": "^5.0.0", - "conventional-commits-parser": "^3.2.0", - "dateformat": "^3.0.0", - "get-pkg-repo": "^4.0.0", - "git-raw-commits": "^2.0.8", - "git-remote-origin-url": "^2.0.0", - "git-semver-tags": "^4.1.1", - "lodash": "^4.17.15", - "normalize-package-data": "^3.0.0", - "q": "^1.5.1", - "read-pkg": "^3.0.0", - "read-pkg-up": "^3.0.0", - "through2": "^4.0.0" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" }, "engines": { - "node": ">=10" + "node": ">= 12.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/conventional-commits-parser": { - "version": "3.2.4", - "dev": true, + "node_modules/create-require": { + "version": "1.1.1", + "license": "MIT" + }, + "node_modules/cron-parser": { + "version": "4.9.0", "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "luxon": "^3.2.1" }, "engines": { - "node": ">=10" + "node": ">=12.0.0" } }, - "node_modules/conventional-changelog-core/node_modules/find-up": { - "version": "2.1.0", + "node_modules/cross-env": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-env/-/cross-env-7.0.3.tgz", + "integrity": "sha512-+/HKd6EgcQCJGh2PSjZuUitQBQynKor4wrFbRg4DtAgS1aWO+gU52xpH7M9ScGgXSYmAVS9bIJ8EzuaGw0oNAw==", "dev": true, - "license": "MIT", "dependencies": { - "locate-path": "^2.0.0" + "cross-spawn": "^7.0.1" + }, + "bin": { + "cross-env": "src/bin/cross-env.js", + "cross-env-shell": "src/bin/cross-env-shell.js" }, "engines": { - "node": ">=4" + "node": ">=10.14", + "npm": ">=6", + "yarn": ">=1" } }, - "node_modules/conventional-changelog-core/node_modules/hosted-git-info": { - "version": "2.8.9", - "dev": true, - "license": "ISC" - }, - "node_modules/conventional-changelog-core/node_modules/load-json-file": { - "version": "4.0.0", - "dev": true, + "node_modules/cross-spawn": { + "version": "7.0.3", "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "parse-json": "^4.0.0", - "pify": "^3.0.0", - "strip-bom": "^3.0.0" + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" }, "engines": { - "node": ">=4" + "node": ">= 8" } }, - "node_modules/conventional-changelog-core/node_modules/locate-path": { - "version": "2.0.0", - "dev": true, + "node_modules/cross-spawn/node_modules/path-key": { + "version": "3.1.1", "license": "MIT", - "dependencies": { - "p-locate": "^2.0.0", - "path-exists": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/p-limit": { - "version": "1.3.0", + "node_modules/currently-unhandled": { + "version": "0.4.1", "dev": true, "license": "MIT", "dependencies": { - "p-try": "^1.0.0" + "array-find-index": "^1.0.1" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-core/node_modules/p-locate": { - "version": "2.0.0", + "node_modules/dargs": { + "version": "7.0.0", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^1.1.0" - }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/conventional-changelog-core/node_modules/p-try": { - "version": "1.0.0", - "dev": true, + "node_modules/data-uri-to-buffer": { + "version": "4.0.1", "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 12" } }, - "node_modules/conventional-changelog-core/node_modules/parse-json": { - "version": "4.0.0", + "node_modules/date-time": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "error-ex": "^1.3.1", - "json-parse-better-errors": "^1.0.1" + "time-zone": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/conventional-changelog-core/node_modules/path-exists": { - "version": "3.0.0", + "node_modules/dateformat": { + "version": "3.0.3", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/conventional-changelog-core/node_modules/path-type": { - "version": "3.0.0", - "dev": true, + "node_modules/debug": { + "version": "4.3.4", "license": "MIT", "dependencies": { - "pify": "^3.0.0" + "ms": "2.1.2" }, "engines": { - "node": ">=4" + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } } }, - "node_modules/conventional-changelog-core/node_modules/pify": { - "version": "3.0.0", + "node_modules/debug/node_modules/ms": { + "version": "2.1.2", + "license": "MIT" + }, + "node_modules/debuglog": { + "version": "1.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": "*" } }, - "node_modules/conventional-changelog-core/node_modules/read-pkg": { - "version": "3.0.0", + "node_modules/decamelize": { + "version": "1.2.0", "dev": true, "license": "MIT", - "dependencies": { - "load-json-file": "^4.0.0", - "normalize-package-data": "^2.3.2", - "path-type": "^3.0.0" - }, "engines": { - "node": ">=4" + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-core/node_modules/read-pkg-up": { - "version": "3.0.0", + "node_modules/decamelize-keys": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^2.0.0", - "read-pkg": "^3.0.0" + "decamelize": "^1.1.0", + "map-obj": "^1.0.0" }, "engines": { - "node": ">=4" + "node": ">=0.10.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/decamelize-keys/node_modules/map-obj": { + "version": "1.0.1", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-core/node_modules/resolve": { - "version": "1.22.8", - "dev": true, + "node_modules/decompress-response": { + "version": "6.0.0", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "mimic-response": "^3.1.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/conventional-changelog-core/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, + "node_modules/decompress-response/node_modules/mimic-response": { + "version": "3.1.0", "license": "MIT", "engines": { - "node": ">=4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-changelog-core/node_modules/through2": { - "version": "4.0.2", + "node_modules/dedent": { + "version": "0.7.0", "dev": true, - "license": "MIT", - "dependencies": { - "readable-stream": "3" - } + "license": "MIT" }, - "node_modules/conventional-changelog-preset-loader": { - "version": "2.3.4", + "node_modules/deep-eql": { + "version": "4.1.3", "dev": true, "license": "MIT", + "dependencies": { + "type-detect": "^4.0.0" + }, "engines": { - "node": ">=10" + "node": ">=6" } }, - "node_modules/conventional-changelog-writer": { - "version": "5.0.1", + "node_modules/deep-extend": { + "version": "0.6.0", "dev": true, "license": "MIT", - "dependencies": { - "conventional-commits-filter": "^2.0.7", - "dateformat": "^3.0.0", - "handlebars": "^4.7.7", - "json-stringify-safe": "^5.0.1", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "semver": "^6.0.0", - "split": "^1.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-changelog-writer": "cli.js" - }, "engines": { - "node": ">=10" + "node": ">=4.0.0" } }, - "node_modules/conventional-changelog-writer/node_modules/semver": { - "version": "6.3.1", + "node_modules/deep-is": { + "version": "0.1.4", "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "license": "MIT" + }, + "node_modules/deepmerge": { + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", + "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/conventional-changelog-writer/node_modules/through2": { - "version": "4.0.2", + "node_modules/defaults": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "3" + "clone": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/conventional-commits-filter": { - "version": "2.0.7", - "dev": true, + "node_modules/defer-to-connect": { + "version": "2.0.1", "license": "MIT", - "dependencies": { - "lodash.ismatch": "^4.4.0", - "modify-values": "^1.0.0" - }, "engines": { "node": ">=10" } }, - "node_modules/conventional-commits-parser": { - "version": "4.0.0", - "dev": true, + "node_modules/define-data-property": { + "version": "1.1.1", "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.3.5", - "meow": "^8.1.2", - "split2": "^3.2.2" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">=14" + "node": ">= 0.4" } }, - "node_modules/conventional-recommended-bump": { - "version": "6.1.0", + "node_modules/define-lazy-prop": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "concat-stream": "^2.0.0", - "conventional-changelog-preset-loader": "^2.3.4", - "conventional-commits-filter": "^2.0.7", - "conventional-commits-parser": "^3.2.0", - "git-raw-commits": "^2.0.8", - "git-semver-tags": "^4.1.1", - "meow": "^8.0.0", - "q": "^1.5.1" - }, - "bin": { - "conventional-recommended-bump": "cli.js" - }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/conventional-recommended-bump/node_modules/conventional-commits-parser": { - "version": "3.2.4", + "node_modules/define-properties": { + "version": "1.2.1", "dev": true, "license": "MIT", "dependencies": { - "is-text-path": "^1.0.1", - "JSONStream": "^1.0.4", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "conventional-commits-parser": "cli.js" + "define-data-property": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "object-keys": "^1.1.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/conventional-recommended-bump/node_modules/through2": { - "version": "4.0.2", + "node_modules/del": { + "version": "6.1.1", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "3" - } - }, - "node_modules/convert-source-map": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/convert-to-spaces": { - "version": "2.0.1", - "dev": true, - "license": "MIT", + "globby": "^11.0.1", + "graceful-fs": "^4.2.4", + "is-glob": "^4.0.1", + "is-path-cwd": "^2.2.0", + "is-path-inside": "^3.0.2", + "p-map": "^4.0.0", + "rimraf": "^3.0.2", + "slash": "^3.0.0" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copyfiles": { - "version": "2.4.1", + "node_modules/del/node_modules/globby": { + "version": "11.1.0", "dev": true, "license": "MIT", "dependencies": { - "glob": "^7.0.5", - "minimatch": "^3.0.3", - "mkdirp": "^1.0.4", - "noms": "0.0.0", - "through2": "^2.0.1", - "untildify": "^4.0.0", - "yargs": "^16.1.0" + "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" }, - "bin": { - "copyfiles": "copyfiles", - "copyup": "copyfiles" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copyfiles/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/del/node_modules/is-path-inside": { + "version": "3.0.3", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/copyfiles/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/del/node_modules/p-map": { + "version": "4.0.0", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "aggregate-error": "^3.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/copyfiles/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, + "node_modules/delayed-stream": { + "version": "1.0.0", + "license": "MIT", + "engines": { + "node": ">=0.4.0" + } + }, + "node_modules/delegates": { + "version": "1.0.0", "license": "MIT" }, - "node_modules/copyfiles/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/deprecation": { + "version": "2.3.1", + "dev": true, + "license": "ISC" + }, + "node_modules/detect-indent": { + "version": "6.1.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/copyfiles/node_modules/minimatch": { - "version": "3.1.2", - "dev": true, - "license": "ISC", + "node_modules/detect-libc": { + "version": "2.0.2", + "license": "Apache-2.0", + "engines": { + "node": ">=8" + } + }, + "node_modules/detective-amd": { + "version": "5.0.2", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "ast-module-types": "^5.0.0", + "escodegen": "^2.0.0", + "get-amd-module-type": "^5.0.1", + "node-source-walk": "^6.0.1" + }, + "bin": { + "detective-amd": "bin/cli.js" }, "engines": { - "node": "*" + "node": ">=14" } }, - "node_modules/copyfiles/node_modules/string-width": { - "version": "4.2.3", - "dev": true, + "node_modules/detective-cjs": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ast-module-types": "^5.0.0", + "node-source-walk": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/copyfiles/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, + "node_modules/detective-es6": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "node-source-walk": "^6.0.1" }, "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/copyfiles/node_modules/yargs": { - "version": "16.2.0", - "dev": true, + "node_modules/detective-postcss": { + "version": "6.1.3", "license": "MIT", "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" + "is-url": "^1.2.4", + "postcss": "^8.4.23", + "postcss-values-parser": "^6.0.2" }, "engines": { - "node": ">=10" + "node": "^12.0.0 || ^14.0.0 || >=16.0.0" } }, - "node_modules/core-util-is": { - "version": "1.0.3", - "license": "MIT" - }, - "node_modules/cosmiconfig": { - "version": "8.3.6", - "dev": true, + "node_modules/detective-sass": { + "version": "5.0.3", "license": "MIT", "dependencies": { - "import-fresh": "^3.3.0", - "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "gonzales-pe": "^4.3.0", + "node-source-walk": "^6.0.1" }, "engines": { "node": ">=14" - }, - "funding": { - "url": "https://github.com/sponsors/d-fischer" - }, - "peerDependencies": { - "typescript": ">=4.9.5" - }, - "peerDependenciesMeta": { - "typescript": { - "optional": true - } } }, - "node_modules/cosmiconfig-typescript-loader": { - "version": "4.4.0", - "dev": true, + "node_modules/detective-scss": { + "version": "4.0.3", "license": "MIT", - "engines": { - "node": ">=v14.21.3" + "dependencies": { + "gonzales-pe": "^4.3.0", + "node-source-walk": "^6.0.1" }, - "peerDependencies": { - "@types/node": "*", - "cosmiconfig": ">=7", - "ts-node": ">=10", - "typescript": ">=4" + "engines": { + "node": ">=14" } }, - "node_modules/cosmiconfig/node_modules/path-type": { + "node_modules/detective-stylus": { "version": "4.0.0", - "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14" } }, - "node_modules/cp-file": { - "version": "10.0.0", + "node_modules/detective-typescript": { + "version": "11.1.0", "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.10", - "nested-error-stacks": "^2.1.1", - "p-event": "^5.0.1" + "@typescript-eslint/typescript-estree": "^5.59.5", + "ast-module-types": "^5.0.0", + "node-source-walk": "^6.0.1", + "typescript": "^5.0.4" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.14.0 || >=16.0.0" } }, - "node_modules/cpy": { - "version": "9.0.1", - "license": "MIT", + "node_modules/dezalgo": { + "version": "1.0.4", + "dev": true, + "license": "ISC", "dependencies": { - "arrify": "^3.0.0", - "cp-file": "^9.1.0", - "globby": "^13.1.1", - "junk": "^4.0.0", - "micromatch": "^4.0.4", - "nested-error-stacks": "^2.1.0", - "p-filter": "^3.0.0", - "p-map": "^5.3.0" - }, + "asap": "^2.0.0", + "wrappy": "1" + } + }, + "node_modules/diff": { + "version": "5.1.0", + "dev": true, + "license": "BSD-3-Clause", "engines": { - "node": "^12.20.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.3.1" } }, - "node_modules/cpy-cli": { - "version": "4.2.0", + "node_modules/diff-sequences": { + "version": "29.6.3", "dev": true, "license": "MIT", - "dependencies": { - "cpy": "^9.0.0", - "meow": "^10.1.2" - }, - "bin": { - "cpy": "cli.js" - }, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/cpy-cli/node_modules/camelcase-keys": { - "version": "7.0.2", - "dev": true, + "node_modules/dir-glob": { + "version": "3.0.1", "license": "MIT", "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" + "path-type": "^4.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cpy-cli/node_modules/decamelize": { - "version": "5.0.1", - "dev": true, + "node_modules/dir-glob/node_modules/path-type": { + "version": "4.0.0", "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/cpy-cli/node_modules/find-up": { - "version": "5.0.0", + "node_modules/doctrine": { + "version": "3.0.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" + "esutils": "^2.0.2" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.0.0" } }, - "node_modules/cpy-cli/node_modules/locate-path": { - "version": "6.0.0", - "dev": true, + "node_modules/dot-prop": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "type-fest": "^2.11.2" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cpy-cli/node_modules/map-obj": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/dot-prop/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cpy-cli/node_modules/meow": { - "version": "10.1.5", + "node_modules/dotenv": { + "version": "10.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, + "license": "BSD-2-Clause", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/cpy-cli/node_modules/p-limit": { - "version": "3.1.0", + "node_modules/duplexer": { + "version": "0.1.2", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "license": "MIT" + }, + "node_modules/ejs": { + "version": "3.1.9", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "yocto-queue": "^0.1.0" + "jake": "^10.8.5" }, - "engines": { - "node": ">=10" + "bin": { + "ejs": "bin/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/cpy-cli/node_modules/p-locate": { - "version": "5.0.0", + "node_modules/electron-to-chromium": { + "version": "1.4.609", + "dev": true, + "license": "ISC", + "peer": true + }, + "node_modules/emittery": { + "version": "0.11.0", "dev": true, "license": "MIT", - "dependencies": { - "p-limit": "^3.0.2" - }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/emittery?sponsor=1" } }, - "node_modules/cpy-cli/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/emoji-regex": { + "version": "9.2.2", + "license": "MIT" + }, + "node_modules/emojis-list": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 4" } }, - "node_modules/cpy-cli/node_modules/read-pkg": { - "version": "6.0.0", - "dev": true, + "node_modules/encoding": { + "version": "0.1.13", "license": "MIT", + "optional": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "iconv-lite": "^0.6.2" } }, - "node_modules/cpy-cli/node_modules/read-pkg-up": { - "version": "8.0.0", - "dev": true, + "node_modules/encoding/node_modules/iconv-lite": { + "version": "0.6.3", "license": "MIT", + "optional": true, "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" + "safer-buffer": ">= 2.1.2 < 3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/cpy-cli/node_modules/redent": { - "version": "4.0.0", + "node_modules/end-of-stream": { + "version": "1.4.4", + "license": "MIT", + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.15.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10.13.0" } }, - "node_modules/cpy-cli/node_modules/strip-indent": { - "version": "4.0.0", + "node_modules/enquirer": { + "version": "2.3.6", "dev": true, "license": "MIT", "dependencies": { - "min-indent": "^1.0.1" + "ansi-colors": "^4.1.1" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6" } }, - "node_modules/cpy-cli/node_modules/trim-newlines": { - "version": "4.1.1", - "dev": true, + "node_modules/env-paths": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=12" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/cpy-cli/node_modules/type-fest": { - "version": "1.4.0", + "node_modules/envinfo": { + "version": "7.11.0", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "license": "MIT", + "bin": { + "envinfo": "dist/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=4" } }, - "node_modules/cpy-cli/node_modules/yocto-queue": { - "version": "0.1.0", + "node_modules/err-code": { + "version": "2.0.3", "dev": true, + "license": "MIT" + }, + "node_modules/error-ex": { + "version": "1.3.2", "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "is-arrayish": "^0.2.1" } }, - "node_modules/cpy/node_modules/aggregate-error": { - "version": "4.0.1", + "node_modules/error-stack-parser": { + "version": "2.1.4", "license": "MIT", "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "stackframe": "^1.3.4" } }, - "node_modules/cpy/node_modules/cp-file": { - "version": "9.1.0", + "node_modules/es-abstract": { + "version": "1.22.3", + "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.1.2", - "make-dir": "^3.0.0", - "nested-error-stacks": "^2.0.0", - "p-event": "^4.1.0" + "array-buffer-byte-length": "^1.0.0", + "arraybuffer.prototype.slice": "^1.0.2", + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.5", + "es-set-tostringtag": "^2.0.1", + "es-to-primitive": "^1.2.1", + "function.prototype.name": "^1.1.6", + "get-intrinsic": "^1.2.2", + "get-symbol-description": "^1.0.0", + "globalthis": "^1.0.3", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0", + "internal-slot": "^1.0.5", + "is-array-buffer": "^3.0.2", + "is-callable": "^1.2.7", + "is-negative-zero": "^2.0.2", + "is-regex": "^1.1.4", + "is-shared-array-buffer": "^1.0.2", + "is-string": "^1.0.7", + "is-typed-array": "^1.1.12", + "is-weakref": "^1.0.2", + "object-inspect": "^1.13.1", + "object-keys": "^1.1.1", + "object.assign": "^4.1.4", + "regexp.prototype.flags": "^1.5.1", + "safe-array-concat": "^1.0.1", + "safe-regex-test": "^1.0.0", + "string.prototype.trim": "^1.2.8", + "string.prototype.trimend": "^1.0.7", + "string.prototype.trimstart": "^1.0.7", + "typed-array-buffer": "^1.0.0", + "typed-array-byte-length": "^1.0.0", + "typed-array-byte-offset": "^1.0.0", + "typed-array-length": "^1.0.4", + "unbox-primitive": "^1.0.2", + "which-typed-array": "^1.1.13" }, "engines": { - "node": ">=10" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/cpy/node_modules/p-event": { - "version": "4.2.0", + "node_modules/es-module-lexer": { + "version": "1.4.1", + "license": "MIT" + }, + "node_modules/es-set-tostringtag": { + "version": "2.0.2", + "dev": true, "license": "MIT", "dependencies": { - "p-timeout": "^3.1.0" + "get-intrinsic": "^1.2.2", + "has-tostringtag": "^1.0.0", + "hasown": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 0.4" } }, - "node_modules/cpy/node_modules/p-map": { - "version": "5.5.0", + "node_modules/es-shim-unscopables": { + "version": "1.0.2", + "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "hasown": "^2.0.0" } }, - "node_modules/cpy/node_modules/p-timeout": { - "version": "3.2.0", + "node_modules/es-to-primitive": { + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "p-finally": "^1.0.0" + "is-callable": "^1.1.4", + "is-date-object": "^1.0.1", + "is-symbol": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/crc-32": { - "version": "1.2.2", - "license": "Apache-2.0", + "node_modules/esbuild": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", + "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", + "hasInstallScript": true, "bin": { - "crc32": "bin/crc32.njs" + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=0.8" + "node": ">=12" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.19.11", + "@esbuild/android-arm": "0.19.11", + "@esbuild/android-arm64": "0.19.11", + "@esbuild/android-x64": "0.19.11", + "@esbuild/darwin-arm64": "0.19.11", + "@esbuild/darwin-x64": "0.19.11", + "@esbuild/freebsd-arm64": "0.19.11", + "@esbuild/freebsd-x64": "0.19.11", + "@esbuild/linux-arm": "0.19.11", + "@esbuild/linux-arm64": "0.19.11", + "@esbuild/linux-ia32": "0.19.11", + "@esbuild/linux-loong64": "0.19.11", + "@esbuild/linux-mips64el": "0.19.11", + "@esbuild/linux-ppc64": "0.19.11", + "@esbuild/linux-riscv64": "0.19.11", + "@esbuild/linux-s390x": "0.19.11", + "@esbuild/linux-x64": "0.19.11", + "@esbuild/netbsd-x64": "0.19.11", + "@esbuild/openbsd-x64": "0.19.11", + "@esbuild/sunos-x64": "0.19.11", + "@esbuild/win32-arm64": "0.19.11", + "@esbuild/win32-ia32": "0.19.11", + "@esbuild/win32-x64": "0.19.11" } }, - "node_modules/crc32-stream": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "crc-32": "^1.2.0", - "readable-stream": "^3.4.0" - }, + "node_modules/esbuild/node_modules/@esbuild/android-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", + "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 12.0.0" + "node": ">=12" } }, - "node_modules/create-require": { - "version": "1.1.1", - "license": "MIT" - }, - "node_modules/cron-parser": { - "version": "4.9.0", - "license": "MIT", - "dependencies": { - "luxon": "^3.2.1" - }, + "node_modules/esbuild/node_modules/@esbuild/android-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", + "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=12.0.0" + "node": ">=12" } }, - "node_modules/cross-spawn": { - "version": "7.0.3", - "license": "MIT", - "dependencies": { - "path-key": "^3.1.0", - "shebang-command": "^2.0.0", - "which": "^2.0.1" - }, + "node_modules/esbuild/node_modules/@esbuild/android-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", + "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">= 8" + "node": ">=12" } }, - "node_modules/cross-spawn/node_modules/path-key": { - "version": "3.1.1", - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", + "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/currently-unhandled": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "dependencies": { - "array-find-index": "^1.0.1" - }, + "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", + "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/dargs": { - "version": "7.0.0", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", + "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/data-uri-to-buffer": { - "version": "4.0.1", - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/linux-arm": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", + "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 12" + "node": ">=12" } }, - "node_modules/date-time": { - "version": "3.1.0", - "dev": true, - "license": "MIT", - "dependencies": { - "time-zone": "^1.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", + "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/dateformat": { - "version": "3.0.3", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", + "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/debug": { - "version": "4.3.4", - "license": "MIT", - "dependencies": { - "ms": "2.1.2" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", + "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=6.0" - }, - "peerDependenciesMeta": { - "supports-color": { - "optional": true - } + "node": ">=12" } }, - "node_modules/debug/node_modules/ms": { - "version": "2.1.2", - "license": "MIT" - }, - "node_modules/debuglog": { - "version": "1.0.1", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", + "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": "*" + "node": ">=12" } }, - "node_modules/decamelize": { - "version": "1.2.0", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", + "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "dev": true, - "license": "MIT", - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", + "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", + "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=0.10.0" + "node": ">=12" } }, - "node_modules/decompress-response": { - "version": "6.0.0", - "license": "MIT", - "dependencies": { - "mimic-response": "^3.1.0" - }, + "node_modules/esbuild/node_modules/@esbuild/linux-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", + "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/decompress-response/node_modules/mimic-response": { - "version": "3.1.0", - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", + "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/dedent": { - "version": "0.7.0", - "dev": true, - "license": "MIT" - }, - "node_modules/deep-eql": { - "version": "4.1.3", - "dev": true, - "license": "MIT", - "dependencies": { - "type-detect": "^4.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", + "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/deep-extend": { - "version": "0.6.0", - "dev": true, - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", + "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=4.0.0" + "node": ">=12" } }, - "node_modules/deep-is": { - "version": "0.1.4", - "dev": true, - "license": "MIT" - }, - "node_modules/deepmerge": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/deepmerge/-/deepmerge-4.3.1.tgz", - "integrity": "sha512-3sUqbMEc77XqpdNO7FRyRog+eW3ph+GYCbj+rK+uYyRMuwsVy0rMiVtPn+QJlKFvWP/1PYpapqYn0Me2knFn+A==", + "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", + "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/defaults": { - "version": "1.0.4", - "dev": true, - "license": "MIT", - "dependencies": { - "clone": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12" } }, - "node_modules/defer-to-connect": { - "version": "2.0.1", - "license": "MIT", + "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", + "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/define-data-property": { - "version": "1.1.1", - "license": "MIT", - "dependencies": { - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" - }, + "node_modules/esbuild/node_modules/@esbuild/win32-x64": { + "version": "0.19.11", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", + "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">= 0.4" + "node": ">=12" } }, - "node_modules/define-lazy-prop": { - "version": "2.0.0", - "dev": true, + "node_modules/escalade": { + "version": "3.1.1", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/define-properties": { - "version": "1.2.1", - "dev": true, + "node_modules/escape-string-regexp": { + "version": "5.0.0", "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "object-keys": "^1.1.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/del": { - "version": "6.1.1", - "dev": true, - "license": "MIT", + "node_modules/escodegen": { + "version": "2.1.0", + "license": "BSD-2-Clause", "dependencies": { - "globby": "^11.0.1", - "graceful-fs": "^4.2.4", - "is-glob": "^4.0.1", - "is-path-cwd": "^2.2.0", - "is-path-inside": "^3.0.2", - "p-map": "^4.0.0", - "rimraf": "^3.0.2", - "slash": "^3.0.0" + "esprima": "^4.0.1", + "estraverse": "^5.2.0", + "esutils": "^2.0.2" + }, + "bin": { + "escodegen": "bin/escodegen.js", + "esgenerate": "bin/esgenerate.js" }, "engines": { - "node": ">=10" + "node": ">=6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "source-map": "~0.6.1" } }, - "node_modules/del/node_modules/globby": { - "version": "11.1.0", + "node_modules/escodegen/node_modules/estraverse": { + "version": "5.3.0", + "license": "BSD-2-Clause", + "engines": { + "node": ">=4.0" + } + }, + "node_modules/eslint": { + "version": "8.56.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", + "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", "dev": true, - "license": "MIT", "dependencies": { - "array-union": "^2.1.0", - "dir-glob": "^3.0.1", - "fast-glob": "^3.2.9", + "@eslint-community/eslint-utils": "^4.2.0", + "@eslint-community/regexpp": "^4.6.1", + "@eslint/eslintrc": "^2.1.4", + "@eslint/js": "8.56.0", + "@humanwhocodes/config-array": "^0.11.13", + "@humanwhocodes/module-importer": "^1.0.1", + "@nodelib/fs.walk": "^1.2.8", + "@ungap/structured-clone": "^1.2.0", + "ajv": "^6.12.4", + "chalk": "^4.0.0", + "cross-spawn": "^7.0.2", + "debug": "^4.3.2", + "doctrine": "^3.0.0", + "escape-string-regexp": "^4.0.0", + "eslint-scope": "^7.2.2", + "eslint-visitor-keys": "^3.4.3", + "espree": "^9.6.1", + "esquery": "^1.4.2", + "esutils": "^2.0.2", + "fast-deep-equal": "^3.1.3", + "file-entry-cache": "^6.0.1", + "find-up": "^5.0.0", + "glob-parent": "^6.0.2", + "globals": "^13.19.0", + "graphemer": "^1.4.0", "ignore": "^5.2.0", - "merge2": "^1.4.1", - "slash": "^3.0.0" + "imurmurhash": "^0.1.4", + "is-glob": "^4.0.0", + "is-path-inside": "^3.0.3", + "js-yaml": "^4.1.0", + "json-stable-stringify-without-jsonify": "^1.0.1", + "levn": "^0.4.1", + "lodash.merge": "^4.6.2", + "minimatch": "^3.1.2", + "natural-compare": "^1.4.0", + "optionator": "^0.9.3", + "strip-ansi": "^6.0.1", + "text-table": "^0.2.0" + }, + "bin": { + "eslint": "bin/eslint.js" }, "engines": { - "node": ">=10" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/del/node_modules/is-path-inside": { - "version": "3.0.3", + "node_modules/eslint-config-prettier": { + "version": "8.10.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "eslint-config-prettier": "bin/cli.js" + }, + "peerDependencies": { + "eslint": ">=7.0.0" } }, - "node_modules/del/node_modules/p-map": { - "version": "4.0.0", + "node_modules/eslint-formatter-pretty": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "aggregate-error": "^3.0.0" + "@types/eslint": "^7.2.13", + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.0", + "eslint-rule-docs": "^1.1.5", + "log-symbols": "^4.0.0", + "plur": "^4.0.0", + "string-width": "^4.2.0", + "supports-hyperlinks": "^2.0.0" }, "engines": { "node": ">=10" @@ -12853,1057 +13349,957 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/delayed-stream": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">=0.4.0" - } - }, - "node_modules/delegates": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/deprecation": { - "version": "2.3.1", - "dev": true, - "license": "ISC" - }, - "node_modules/detect-indent": { - "version": "6.1.0", + "node_modules/eslint-formatter-pretty/node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/detect-libc": { - "version": "2.0.2", - "license": "Apache-2.0", - "engines": { - "node": ">=8" - } - }, - "node_modules/detective-amd": { - "version": "5.0.2", - "license": "MIT", - "dependencies": { - "ast-module-types": "^5.0.0", - "escodegen": "^2.0.0", - "get-amd-module-type": "^5.0.1", - "node-source-walk": "^6.0.1" - }, - "bin": { - "detective-amd": "bin/cli.js" - }, - "engines": { - "node": ">=14" - } - }, - "node_modules/detective-cjs": { - "version": "5.0.1", - "license": "MIT", "dependencies": { - "ast-module-types": "^5.0.0", - "node-source-walk": "^6.0.0" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=14" - } - }, - "node_modules/detective-es6": { - "version": "4.0.1", - "license": "MIT", - "dependencies": { - "node-source-walk": "^6.0.1" + "node": ">=8" }, - "engines": { - "node": ">=14" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/detective-postcss": { - "version": "6.1.3", + "node_modules/eslint-formatter-pretty/node_modules/ansi-regex": { + "version": "5.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "is-url": "^1.2.4", - "postcss": "^8.4.23", - "postcss-values-parser": "^6.0.2" - }, "engines": { - "node": "^12.0.0 || ^14.0.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/detective-sass": { - "version": "5.0.3", + "node_modules/eslint-formatter-pretty/node_modules/ansi-styles": { + "version": "4.3.0", + "dev": true, "license": "MIT", "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^6.0.1" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=14" - } - }, - "node_modules/detective-scss": { - "version": "4.0.3", - "license": "MIT", - "dependencies": { - "gonzales-pe": "^4.3.0", - "node-source-walk": "^6.0.1" + "node": ">=8" }, - "engines": { - "node": ">=14" - } - }, - "node_modules/detective-stylus": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=14" + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/detective-typescript": { - "version": "11.1.0", - "license": "MIT", - "dependencies": { - "@typescript-eslint/typescript-estree": "^5.59.5", - "ast-module-types": "^5.0.0", - "node-source-walk": "^6.0.1", - "typescript": "^5.0.4" + "node_modules/eslint-formatter-pretty/node_modules/chalk": { + "version": "4.1.2", + "dev": true, + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^14.14.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/dezalgo": { - "version": "1.0.4", + "node_modules/eslint-formatter-pretty/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "asap": "^2.0.0", - "wrappy": "1" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/diff": { - "version": "5.1.0", + "node_modules/eslint-formatter-pretty/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.3.1" - } + "license": "MIT" }, - "node_modules/diff-sequences": { - "version": "29.6.3", + "node_modules/eslint-formatter-pretty/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=8" } }, - "node_modules/dir-glob": { - "version": "3.0.1", + "node_modules/eslint-formatter-pretty/node_modules/plur": { + "version": "4.0.0", + "dev": true, "license": "MIT", "dependencies": { - "path-type": "^4.0.0" + "irregular-plurals": "^3.2.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dir-glob/node_modules/path-type": { - "version": "4.0.0", + "node_modules/eslint-formatter-pretty/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/doctrine": { - "version": "3.0.0", + "node_modules/eslint-formatter-pretty/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "esutils": "^2.0.2" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6.0.0" + "node": ">=8" } }, - "node_modules/dot-prop": { + "node_modules/eslint-formatter-pretty/node_modules/supports-color": { "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^2.11.2" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/dot-prop/node_modules/type-fest": { - "version": "2.19.0", + "node_modules/eslint-formatter-pretty/node_modules/type-fest": { + "version": "0.21.3", + "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12.20" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/dotenv": { - "version": "10.0.0", + "node_modules/eslint-import-resolver-node": { + "version": "0.3.9", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "debug": "^3.2.7", + "is-core-module": "^2.13.0", + "resolve": "^1.22.4" } }, - "node_modules/duplexer": { - "version": "0.1.2", + "node_modules/eslint-import-resolver-node/node_modules/debug": { + "version": "3.2.7", "dev": true, - "license": "MIT" - }, - "node_modules/eastasianwidth": { - "version": "0.2.0", - "license": "MIT" + "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } }, - "node_modules/ejs": { - "version": "3.1.9", + "node_modules/eslint-import-resolver-node/node_modules/resolve": { + "version": "1.22.8", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "jake": "^10.8.5" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "ejs": "bin/cli.js" + "resolve": "bin/resolve" }, - "engines": { - "node": ">=0.10.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/electron-to-chromium": { - "version": "1.4.609", - "dev": true, - "license": "ISC", - "peer": true - }, - "node_modules/emittery": { - "version": "0.11.0", + "node_modules/eslint-module-utils": { + "version": "2.8.0", "dev": true, "license": "MIT", + "dependencies": { + "debug": "^3.2.7" + }, "engines": { - "node": ">=12" + "node": ">=4" }, - "funding": { - "url": "https://github.com/sindresorhus/emittery?sponsor=1" + "peerDependenciesMeta": { + "eslint": { + "optional": true + } } }, - "node_modules/emoji-regex": { - "version": "9.2.2", - "license": "MIT" - }, - "node_modules/emojis-list": { - "version": "3.0.0", + "node_modules/eslint-module-utils/node_modules/debug": { + "version": "3.2.7", "dev": true, "license": "MIT", + "dependencies": { + "ms": "^2.1.1" + } + }, + "node_modules/eslint-plugin-import": { + "version": "2.29.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", + "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", + "dev": true, + "dependencies": { + "array-includes": "^3.1.7", + "array.prototype.findlastindex": "^1.2.3", + "array.prototype.flat": "^1.3.2", + "array.prototype.flatmap": "^1.3.2", + "debug": "^3.2.7", + "doctrine": "^2.1.0", + "eslint-import-resolver-node": "^0.3.9", + "eslint-module-utils": "^2.8.0", + "hasown": "^2.0.0", + "is-core-module": "^2.13.1", + "is-glob": "^4.0.3", + "minimatch": "^3.1.2", + "object.fromentries": "^2.0.7", + "object.groupby": "^1.0.1", + "object.values": "^1.1.7", + "semver": "^6.3.1", + "tsconfig-paths": "^3.15.0" + }, "engines": { - "node": ">= 4" + "node": ">=4" + }, + "peerDependencies": { + "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" } }, - "node_modules/encoding": { - "version": "0.1.13", - "license": "MIT", - "optional": true, + "node_modules/eslint-plugin-import/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, "dependencies": { - "iconv-lite": "^0.6.2" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/encoding/node_modules/iconv-lite": { - "version": "0.6.3", - "license": "MIT", - "optional": true, + "node_modules/eslint-plugin-import/node_modules/debug": { + "version": "3.2.7", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", + "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "dev": true, "dependencies": { - "safer-buffer": ">= 2.1.2 < 3.0.0" - }, - "engines": { - "node": ">=0.10.0" + "ms": "^2.1.1" } }, - "node_modules/end-of-stream": { - "version": "1.4.4", - "license": "MIT", + "node_modules/eslint-plugin-import/node_modules/doctrine": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", + "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "dev": true, "dependencies": { - "once": "^1.4.0" + "esutils": "^2.0.2" + }, + "engines": { + "node": ">=0.10.0" } }, - "node_modules/enhanced-resolve": { - "version": "5.15.0", + "node_modules/eslint-plugin-import/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", - "peer": true, "dependencies": { - "graceful-fs": "^4.2.4", - "tapable": "^2.2.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10.13.0" + "node": "*" } }, - "node_modules/enquirer": { - "version": "2.3.6", + "node_modules/eslint-plugin-import/node_modules/semver": { + "version": "6.3.1", + "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", + "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", + "dev": true, + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/eslint-rule-docs": { + "version": "1.1.235", + "dev": true, + "license": "MIT" + }, + "node_modules/eslint-scope": { + "version": "5.1.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ansi-colors": "^4.1.1" + "esrecurse": "^4.3.0", + "estraverse": "^4.1.1" }, "engines": { - "node": ">=8.6" + "node": ">=8.0.0" } }, - "node_modules/env-paths": { - "version": "3.0.0", - "license": "MIT", + "node_modules/eslint-visitor-keys": { + "version": "3.4.3", + "license": "Apache-2.0", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/eslint" } }, - "node_modules/envinfo": { - "version": "7.11.0", + "node_modules/eslint/node_modules/ajv": { + "version": "6.12.6", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", + "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", "dev": true, - "license": "MIT", - "bin": { - "envinfo": "dist/cli.js" + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=4" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/err-code": { - "version": "2.0.3", + "node_modules/eslint/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" - }, - "node_modules/error-ex": { - "version": "1.3.2", - "license": "MIT", - "dependencies": { - "is-arrayish": "^0.2.1" - } - }, - "node_modules/error-stack-parser": { - "version": "2.1.4", - "license": "MIT", - "dependencies": { - "stackframe": "^1.3.4" + "engines": { + "node": ">=8" } }, - "node_modules/es-abstract": { - "version": "1.22.3", + "node_modules/eslint/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": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", - "es-to-primitive": "^1.2.1", - "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", - "globalthis": "^1.0.3", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", - "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", - "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", - "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", - "is-weakref": "^1.0.2", - "object-inspect": "^1.13.1", - "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", - "string.prototype.trim": "^1.2.8", - "string.prototype.trimend": "^1.0.7", - "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", - "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "color-convert": "^2.0.1" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/es-module-lexer": { - "version": "1.4.1", - "license": "MIT" + "node_modules/eslint/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } }, - "node_modules/es-set-tostringtag": { - "version": "2.0.2", + "node_modules/eslint/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": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">= 0.4" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/es-shim-unscopables": { - "version": "1.0.2", + "node_modules/eslint/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", "dev": true, - "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/es-to-primitive": { - "version": "1.2.1", + "node_modules/eslint/node_modules/escape-string-regexp": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", + "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.4", - "is-date-object": "^1.0.1", - "is-symbol": "^1.0.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.19.11.tgz", - "integrity": "sha512-HJ96Hev2hX/6i5cDVwcqiJBBtuo9+FeIJOtZ9W1kA5M6AMJRHUZlpYZ1/SbEwtO0ioNAW8rUooVpC/WehY2SfA==", - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" + "node_modules/eslint/node_modules/eslint-scope": { + "version": "7.2.2", + "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", + "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "dev": true, + "dependencies": { + "esrecurse": "^4.3.0", + "estraverse": "^5.2.0" }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" }, - "optionalDependencies": { - "@esbuild/aix-ppc64": "0.19.11", - "@esbuild/android-arm": "0.19.11", - "@esbuild/android-arm64": "0.19.11", - "@esbuild/android-x64": "0.19.11", - "@esbuild/darwin-arm64": "0.19.11", - "@esbuild/darwin-x64": "0.19.11", - "@esbuild/freebsd-arm64": "0.19.11", - "@esbuild/freebsd-x64": "0.19.11", - "@esbuild/linux-arm": "0.19.11", - "@esbuild/linux-arm64": "0.19.11", - "@esbuild/linux-ia32": "0.19.11", - "@esbuild/linux-loong64": "0.19.11", - "@esbuild/linux-mips64el": "0.19.11", - "@esbuild/linux-ppc64": "0.19.11", - "@esbuild/linux-riscv64": "0.19.11", - "@esbuild/linux-s390x": "0.19.11", - "@esbuild/linux-x64": "0.19.11", - "@esbuild/netbsd-x64": "0.19.11", - "@esbuild/openbsd-x64": "0.19.11", - "@esbuild/sunos-x64": "0.19.11", - "@esbuild/win32-arm64": "0.19.11", - "@esbuild/win32-ia32": "0.19.11", - "@esbuild/win32-x64": "0.19.11" - } - }, - "node_modules/esbuild/node_modules/@esbuild/android-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.19.11.tgz", - "integrity": "sha512-5OVapq0ClabvKvQ58Bws8+wkLCV+Rxg7tUVbo9xu034Nm536QTII4YzhaFriQ7rMrorfnFKUsArD2lqKbFY4vw==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "android" - ], - "engines": { - "node": ">=12" + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/android-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.19.11.tgz", - "integrity": "sha512-aiu7K/5JnLj//KOnOfEZ0D90obUkRzDMyqd/wNAUQ34m4YUPVhRZpnqKV9uqDGxT7cToSDnIHsGooyIczu9T+Q==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/eslint/node_modules/estraverse": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", + "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/android-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.19.11.tgz", - "integrity": "sha512-eccxjlfGw43WYoY9QgB82SgGgDbibcqyDTlk3l3C0jOVHKxrjdc9CTwDUQd0vkvYg5um0OH+GpxYvp39r+IPOg==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "android" - ], + "node_modules/eslint/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": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/darwin-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.19.11.tgz", - "integrity": "sha512-fkFUiS6IUK9WYUO/+22omwetaSNl5/A8giXvQlcinLIjVkxwTLSktbF5f/kJMftM2MJp9+fXqZ5ezS7+SALp4g==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "darwin" - ], + "node_modules/eslint/node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, "engines": { - "node": ">=12" + "node": ">=10.13.0" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.19.11.tgz", - "integrity": "sha512-lhoSp5K6bxKRNdXUtHoNc5HhbXVCS8V0iZmDvyWvYq9S5WSfTIHU2UGjcGt7UeS6iEYp9eeymIl5mJBn0yiuxA==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/eslint/node_modules/is-path-inside": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", + "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/freebsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.19.11.tgz", - "integrity": "sha512-JkUqn44AffGXitVI6/AbQdoYAq0TEullFdqcMY/PCUZ36xJ9ZJRtQabzMA+Vi7r78+25ZIBosLTOKnUXBSi1Kw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "freebsd" - ], + "node_modules/eslint/node_modules/json-schema-traverse": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", + "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", + "dev": true + }, + "node_modules/eslint/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": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.19.11.tgz", - "integrity": "sha512-3CRkr9+vCV2XJbjwgzjPtO8T0SZUmRZla+UL1jw+XqHZPkPgZiyWvbDvl9rqAN8Zl7qJF0O/9ycMtjU67HN9/Q==", - "cpu": [ - "arm" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12" + "node": "*" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.19.11.tgz", - "integrity": "sha512-LneLg3ypEeveBSMuoa0kwMpCGmpu8XQUh+mL8XXwoYZ6Be2qBnVtcDI5azSvh7vioMDhoJFZzp9GWp9IWpYoUg==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/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": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.19.11.tgz", - "integrity": "sha512-caHy++CsD8Bgq2V5CodbJjFPEiDPq8JJmBdeyZ8GWVQMjRD0sU548nNdwPNvKjVpamYYVL40AORekgfIubwHoA==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/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": { + "p-limit": "^3.0.2" + }, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-loong64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.19.11.tgz", - "integrity": "sha512-ppZSSLVpPrwHccvC6nQVZaSHlFsvCQyjnvirnVjbKSHuE5N24Yl8F3UwYUUR1UEPaFObGD2tSvVKbvR+uT1Nrg==", - "cpu": [ - "loong64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-mips64el": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.19.11.tgz", - "integrity": "sha512-B5x9j0OgjG+v1dF2DkH34lr+7Gmv0kzX6/V0afF41FkPMMqaQ77pH7CrhWeR22aEeHKaeZVtZ6yFwlxOKPVFyg==", - "cpu": [ - "mips64el" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/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": ">=12" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-ppc64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.19.11.tgz", - "integrity": "sha512-MHrZYLeCG8vXblMetWyttkdVRjQlQUb/oMgBNurVEnhj4YWOr4G5lmBfZjHYQHHN0g6yDmCAQRR8MUHldvvRDA==", - "cpu": [ - "ppc64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/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, + "dependencies": { + "has-flag": "^4.0.0" + }, "engines": { - "node": ">=12" + "node": ">=8" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-riscv64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.19.11.tgz", - "integrity": "sha512-f3DY++t94uVg141dozDu4CCUkYW+09rWtaWfnb3bqe4w5NqmZd6nPVBm+qbz7WaHZCoqXqHz5p6CM6qv3qnSSQ==", - "cpu": [ - "riscv64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/eslint/node_modules/yocto-queue": { + "version": "0.1.0", + "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", + "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "dev": true, "engines": { - "node": ">=12" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-s390x": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.19.11.tgz", - "integrity": "sha512-A5xdUoyWJHMMlcSMcPGVLzYzpcY8QP1RtYzX5/bS4dvjBGVxdhuiYyFwp7z74ocV7WDc0n1harxmpq2ePOjI0Q==", - "cpu": [ - "s390x" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/espree": { + "version": "9.6.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "acorn": "^8.9.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^3.4.1" + }, "engines": { - "node": ">=12" + "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" } }, - "node_modules/esbuild/node_modules/@esbuild/linux-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.19.11.tgz", - "integrity": "sha512-grbyMlVCvJSfxFQUndw5mCtWs5LO1gUlwP4CDi4iJBbVpZcqLVT29FxgGuBJGSzyOxotFG4LoO5X+M1350zmPA==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "linux" - ], + "node_modules/esprima": { + "version": "4.0.1", + "license": "BSD-2-Clause", + "bin": { + "esparse": "bin/esparse.js", + "esvalidate": "bin/esvalidate.js" + }, "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/esbuild/node_modules/@esbuild/netbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.19.11.tgz", - "integrity": "sha512-13jvrQZJc3P230OhU8xgwUnDeuC/9egsjTkXN49b3GcS5BKvJqZn86aGM8W9pd14Kd+u7HuFBMVtrNGhh6fHEQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "netbsd" - ], + "node_modules/esquery": { + "version": "1.5.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "estraverse": "^5.1.0" + }, "engines": { - "node": ">=12" + "node": ">=0.10" } }, - "node_modules/esbuild/node_modules/@esbuild/openbsd-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.19.11.tgz", - "integrity": "sha512-ysyOGZuTp6SNKPE11INDUeFVVQFrhcNDVUgSQVDzqsqX38DjhPEPATpid04LCoUr2WXhQTEZ8ct/EgJCUDpyNw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "openbsd" - ], + "node_modules/esquery/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/sunos-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.19.11.tgz", - "integrity": "sha512-Hf+Sad9nVwvtxy4DXCZQqLpgmRTQqyFyhT3bZ4F2XlJCjxGmRFF0Shwn9rzhOYRB61w9VMXUkxlBy56dk9JJiQ==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "sunos" - ], + "node_modules/esrecurse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "estraverse": "^5.2.0" + }, "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-arm64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.19.11.tgz", - "integrity": "sha512-0P58Sbi0LctOMOQbpEOvOL44Ne0sqbS0XWHMvvrg6NE5jQ1xguCSSw9jQeUk2lfrXYsKDdOe6K+oZiwKPilYPQ==", - "cpu": [ - "arm64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/esrecurse/node_modules/estraverse": { + "version": "5.3.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-ia32": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.19.11.tgz", - "integrity": "sha512-6YOrWS+sDJDmshdBIQU+Uoyh7pQKrdykdefC1avn76ss5c+RN6gut3LZA4E2cH5xUEp5/cA0+YxRaVtRAb0xBg==", - "cpu": [ - "ia32" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/estraverse": { + "version": "4.3.0", + "dev": true, + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=4.0" } }, - "node_modules/esbuild/node_modules/@esbuild/win32-x64": { - "version": "0.19.11", - "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.19.11.tgz", - "integrity": "sha512-vfkhltrjCAb603XaFhqhAF4LGDi2M4OrCRrFusyQ+iTLQ/o60QQXxc9cZC/FFpihBI9N1Grn6SMKVJ4KP7Fuiw==", - "cpu": [ - "x64" - ], - "optional": true, - "os": [ - "win32" - ], + "node_modules/estree-walker": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/esutils": { + "version": "2.0.3", + "license": "BSD-2-Clause", "engines": { - "node": ">=12" + "node": ">=0.10.0" } }, - "node_modules/escalade": { - "version": "3.1.1", + "node_modules/eventemitter3": { + "version": "5.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/events": { + "version": "3.3.0", + "dev": true, "license": "MIT", + "peer": true, "engines": { - "node": ">=6" + "node": ">=0.8.x" } }, - "node_modules/escape-string-regexp": { - "version": "5.0.0", + "node_modules/execa": { + "version": "5.1.1", "license": "MIT", + "dependencies": { + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.0", + "human-signals": "^2.1.0", + "is-stream": "^2.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^4.0.1", + "onetime": "^5.1.2", + "signal-exit": "^3.0.3", + "strip-final-newline": "^2.0.0" + }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/escodegen": { - "version": "2.1.0", - "license": "BSD-2-Clause", + "node_modules/exponential-backoff": { + "version": "3.1.1", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/external-editor": { + "version": "3.1.0", + "dev": true, + "license": "MIT", "dependencies": { - "esprima": "^4.0.1", - "estraverse": "^5.2.0", - "esutils": "^2.0.2" - }, - "bin": { - "escodegen": "bin/escodegen.js", - "esgenerate": "bin/esgenerate.js" + "chardet": "^0.7.0", + "iconv-lite": "^0.4.24", + "tmp": "^0.0.33" }, "engines": { - "node": ">=6.0" + "node": ">=4" + } + }, + "node_modules/external-editor/node_modules/tmp": { + "version": "0.0.33", + "dev": true, + "license": "MIT", + "dependencies": { + "os-tmpdir": "~1.0.2" }, - "optionalDependencies": { - "source-map": "~0.6.1" + "engines": { + "node": ">=0.6.0" } }, - "node_modules/escodegen/node_modules/estraverse": { - "version": "5.3.0", - "license": "BSD-2-Clause", + "node_modules/fast-deep-equal": { + "version": "3.1.3", + "license": "MIT" + }, + "node_modules/fast-diff": { + "version": "1.3.0", + "dev": true, + "license": "Apache-2.0" + }, + "node_modules/fast-equals": { + "version": "3.0.3", + "license": "MIT" + }, + "node_modules/fast-fifo": { + "version": "1.3.2", + "license": "MIT" + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "license": "MIT", + "dependencies": { + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" + }, "engines": { - "node": ">=4.0" + "node": ">=8.6.0" + } + }, + "node_modules/fast-json-stable-stringify": { + "version": "2.1.0", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-levenshtein": { + "version": "2.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/fast-safe-stringify": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/fastq": { + "version": "1.15.0", + "license": "ISC", + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/fdir": { + "version": "6.1.1", + "license": "MIT", + "peerDependencies": { + "picomatch": "3.x" + }, + "peerDependenciesMeta": { + "picomatch": { + "optional": true + } } }, - "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", - "dev": true, + "node_modules/fetch-blob": { + "version": "3.2.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "paypal", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.6.1", - "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", - "@humanwhocodes/module-importer": "^1.0.1", - "@nodelib/fs.walk": "^1.2.8", - "@ungap/structured-clone": "^1.2.0", - "ajv": "^6.12.4", - "chalk": "^4.0.0", - "cross-spawn": "^7.0.2", - "debug": "^4.3.2", - "doctrine": "^3.0.0", - "escape-string-regexp": "^4.0.0", - "eslint-scope": "^7.2.2", - "eslint-visitor-keys": "^3.4.3", - "espree": "^9.6.1", - "esquery": "^1.4.2", - "esutils": "^2.0.2", - "fast-deep-equal": "^3.1.3", - "file-entry-cache": "^6.0.1", - "find-up": "^5.0.0", - "glob-parent": "^6.0.2", - "globals": "^13.19.0", - "graphemer": "^1.4.0", - "ignore": "^5.2.0", - "imurmurhash": "^0.1.4", - "is-glob": "^4.0.0", - "is-path-inside": "^3.0.3", - "js-yaml": "^4.1.0", - "json-stable-stringify-without-jsonify": "^1.0.1", - "levn": "^0.4.1", - "lodash.merge": "^4.6.2", - "minimatch": "^3.1.2", - "natural-compare": "^1.4.0", - "optionator": "^0.9.3", - "strip-ansi": "^6.0.1", - "text-table": "^0.2.0" - }, - "bin": { - "eslint": "bin/eslint.js" + "node-domexception": "^1.0.0", + "web-streams-polyfill": "^3.0.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^12.20 || >= 14.13" } }, - "node_modules/eslint-config-prettier": { - "version": "8.10.0", + "node_modules/fetch-node-website": { + "version": "6.1.2", "dev": true, - "license": "MIT", - "bin": { - "eslint-config-prettier": "bin/cli.js" + "license": "Apache-2.0", + "dependencies": { + "cli-progress": "^3.8.2", + "colors-option": "^2.0.1", + "figures": "^3.2.0", + "filter-obj": "^2.0.1", + "got": "^11.8.2", + "jest-validate": "^27.0.2" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "engines": { + "node": ">=12.20.0" } }, - "node_modules/eslint-formatter-pretty": { - "version": "4.1.0", + "node_modules/fetch-node-website/node_modules/@sindresorhus/is": { + "version": "4.6.0", "dev": true, "license": "MIT", - "dependencies": { - "@types/eslint": "^7.2.13", - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.0", - "eslint-rule-docs": "^1.1.5", - "log-symbols": "^4.0.0", - "plur": "^4.0.0", - "string-width": "^4.2.0", - "supports-hyperlinks": "^2.0.0" - }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/is?sponsor=1" } }, - "node_modules/eslint-formatter-pretty/node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/fetch-node-website/node_modules/@szmarczak/http-timer": { + "version": "4.0.6", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.21.3" + "defer-to-connect": "^2.0.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/eslint-formatter-pretty/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/fetch-node-website/node_modules/cacheable-lookup": { + "version": "5.0.4", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10.6.0" } }, - "node_modules/eslint-formatter-pretty/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/fetch-node-website/node_modules/cacheable-request": { + "version": "7.0.4", "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "clone-response": "^1.0.2", + "get-stream": "^5.1.0", + "http-cache-semantics": "^4.0.0", + "keyv": "^4.0.0", + "lowercase-keys": "^2.0.0", + "normalize-url": "^6.0.1", + "responselike": "^2.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/eslint-formatter-pretty/node_modules/chalk": { - "version": "4.1.2", + "node_modules/fetch-node-website/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=0.8.0" } }, - "node_modules/eslint-formatter-pretty/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/fetch-node-website/node_modules/figures": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=7.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-formatter-pretty/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-formatter-pretty/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/fetch-node-website/node_modules/filter-obj": { + "version": "2.0.2", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/eslint-formatter-pretty/node_modules/plur": { - "version": "4.0.0", + "node_modules/fetch-node-website/node_modules/get-stream": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "irregular-plurals": "^3.2.0" + "pump": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-formatter-pretty/node_modules/string-width": { - "version": "4.2.3", + "node_modules/fetch-node-website/node_modules/got": { + "version": "11.8.6", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "@sindresorhus/is": "^4.0.0", + "@szmarczak/http-timer": "^4.0.5", + "@types/cacheable-request": "^6.0.1", + "@types/responselike": "^1.0.0", + "cacheable-lookup": "^5.0.3", + "cacheable-request": "^7.0.2", + "decompress-response": "^6.0.0", + "http2-wrapper": "^1.0.0-beta.5.2", + "lowercase-keys": "^2.0.0", + "p-cancelable": "^2.0.0", + "responselike": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/eslint-formatter-pretty/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/fetch-node-website/node_modules/http2-wrapper": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=10.19.0" } }, - "node_modules/eslint-formatter-pretty/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/fetch-node-website/node_modules/lowercase-keys": { + "version": "2.0.0", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/eslint-formatter-pretty/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/fetch-node-website/node_modules/normalize-url": { + "version": "6.1.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { "node": ">=10" }, @@ -13911,1239 +14307,1157 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-import-resolver-node": { - "version": "0.3.9", - "dev": true, - "license": "MIT", - "dependencies": { - "debug": "^3.2.7", - "is-core-module": "^2.13.0", - "resolve": "^1.22.4" - } - }, - "node_modules/eslint-import-resolver-node/node_modules/debug": { - "version": "3.2.7", + "node_modules/fetch-node-website/node_modules/p-cancelable": { + "version": "2.1.1", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.1.1" + "engines": { + "node": ">=8" } }, - "node_modules/eslint-import-resolver-node/node_modules/resolve": { - "version": "1.22.8", + "node_modules/fetch-node-website/node_modules/responselike": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" + "lowercase-keys": "^2.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-module-utils": { - "version": "2.8.0", - "dev": true, + "node_modules/fflate": { + "version": "0.8.2", + "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", + "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", + "dev": true + }, + "node_modules/figures": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "debug": "^3.2.7" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": ">=4" + "node": ">=14" }, - "peerDependenciesMeta": { - "eslint": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-module-utils/node_modules/debug": { - "version": "3.2.7", + "node_modules/file-entry-cache": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "ms": "^2.1.1" - } - }, - "node_modules/eslint-plugin-import": { - "version": "2.29.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-import/-/eslint-plugin-import-2.29.1.tgz", - "integrity": "sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==", - "dev": true, - "dependencies": { - "array-includes": "^3.1.7", - "array.prototype.findlastindex": "^1.2.3", - "array.prototype.flat": "^1.3.2", - "array.prototype.flatmap": "^1.3.2", - "debug": "^3.2.7", - "doctrine": "^2.1.0", - "eslint-import-resolver-node": "^0.3.9", - "eslint-module-utils": "^2.8.0", - "hasown": "^2.0.0", - "is-core-module": "^2.13.1", - "is-glob": "^4.0.3", - "minimatch": "^3.1.2", - "object.fromentries": "^2.0.7", - "object.groupby": "^1.0.1", - "object.values": "^1.1.7", - "semver": "^6.3.1", - "tsconfig-paths": "^3.15.0" + "flat-cache": "^3.0.4" }, "engines": { - "node": ">=4" - }, - "peerDependencies": { - "eslint": "^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint-plugin-import/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", - "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } + "node_modules/file-uri-to-path": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/eslint-plugin-import/node_modules/debug": { - "version": "3.2.7", - "resolved": "https://registry.npmjs.org/debug/-/debug-3.2.7.tgz", - "integrity": "sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==", + "node_modules/filelist": { + "version": "1.0.4", "dev": true, + "license": "Apache-2.0", "dependencies": { - "ms": "^2.1.1" + "minimatch": "^5.0.1" } }, - "node_modules/eslint-plugin-import/node_modules/doctrine": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/doctrine/-/doctrine-2.1.0.tgz", - "integrity": "sha512-35mSku4ZXK0vfCuHEDAwt55dg2jNajHZ1odvF+8SSr82EsZY4QmXfuWso8oEd8zRhVObSN18aM0CjSdoBX7zIw==", + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", "dev": true, + "license": "ISC", "dependencies": { - "esutils": "^2.0.2" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=0.10.0" + "node": ">=10" } }, - "node_modules/eslint-plugin-import/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, + "node_modules/fill-range": { + "version": "7.0.1", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "to-regex-range": "^5.0.1" }, "engines": { - "node": "*" + "node": ">=8" } }, - "node_modules/eslint-plugin-import/node_modules/semver": { - "version": "6.3.1", - "resolved": "https://registry.npmjs.org/semver/-/semver-6.3.1.tgz", - "integrity": "sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==", - "dev": true, - "bin": { - "semver": "bin/semver.js" + "node_modules/filter-obj": { + "version": "5.1.0", + "license": "MIT", + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-rule-docs": { - "version": "1.1.235", - "dev": true, - "license": "MIT" - }, - "node_modules/eslint-scope": { - "version": "5.1.1", + "node_modules/find-cache-dir": { + "version": "3.3.2", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "commondir": "^1.0.1", + "make-dir": "^3.0.2", + "pkg-dir": "^4.1.0" }, "engines": { - "node": ">=8.0.0" - } - }, - "node_modules/eslint-visitor-keys": { - "version": "3.4.3", - "license": "Apache-2.0", - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=8" }, "funding": { - "url": "https://opencollective.com/eslint" + "url": "https://github.com/avajs/find-cache-dir?sponsor=1" } }, - "node_modules/eslint/node_modules/ajv": { - "version": "6.12.6", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-6.12.6.tgz", - "integrity": "sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==", + "node_modules/find-cache-dir/node_modules/find-up": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=8" } }, - "node_modules/eslint/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==", + "node_modules/find-cache-dir/node_modules/locate-path": { + "version": "5.0.0", "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, "engines": { "node": ">=8" } }, - "node_modules/eslint/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==", + "node_modules/find-cache-dir/node_modules/p-limit": { + "version": "2.3.0", "dev": true, + "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "p-try": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/find-cache-dir/node_modules/p-locate": { + "version": "4.1.0", "dev": true, + "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "p-limit": "^2.2.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/eslint/node_modules/chalk": { - "version": "4.1.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", - "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "node_modules/find-cache-dir/node_modules/path-exists": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/find-cache-dir/node_modules/pkg-dir": { + "version": "4.2.0", "dev": true, + "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "find-up": "^4.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">=8" } }, - "node_modules/eslint/node_modules/color-convert": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", - "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "node_modules/find-replace": { + "version": "3.0.0", "dev": true, + "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "array-back": "^3.0.1" }, "engines": { - "node": ">=7.0.0" + "node": ">=4.0.0" } }, - "node_modules/eslint/node_modules/escape-string-regexp": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz", - "integrity": "sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA==", - "dev": true, + "node_modules/find-up": { + "version": "6.3.0", + "license": "MIT", + "dependencies": { + "locate-path": "^7.1.0", + "path-exists": "^5.0.0" + }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint/node_modules/eslint-scope": { - "version": "7.2.2", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-7.2.2.tgz", - "integrity": "sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==", + "node_modules/flat": { + "version": "5.0.2", + "dev": true, + "license": "BSD-3-Clause", + "bin": { + "flat": "cli.js" + } + }, + "node_modules/flat-cache": { + "version": "3.2.0", "dev": true, + "license": "MIT", "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^5.2.0" + "flatted": "^3.2.9", + "keyv": "^4.5.3", + "rimraf": "^3.0.2" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^10.12.0 || >=12.0.0" } }, - "node_modules/eslint/node_modules/estraverse": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-5.3.0.tgz", - "integrity": "sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA==", + "node_modules/flatted": { + "version": "3.2.9", "dev": true, + "license": "ISC" + }, + "node_modules/follow-redirects": { + "version": "1.15.3", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "license": "MIT", "engines": { "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } } }, - "node_modules/eslint/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==", + "node_modules/for-each": { + "version": "0.3.3", "dev": true, + "license": "MIT", "dependencies": { - "locate-path": "^6.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "is-callable": "^1.1.3" } }, - "node_modules/eslint/node_modules/glob-parent": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", - "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "node_modules/foreground-child": { + "version": "2.0.0", "dev": true, + "license": "ISC", "dependencies": { - "is-glob": "^4.0.3" + "cross-spawn": "^7.0.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=8.0.0" } }, - "node_modules/eslint/node_modules/is-path-inside": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/is-path-inside/-/is-path-inside-3.0.3.tgz", - "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", + "node_modules/form-data": { + "version": "3.0.1", "dev": true, + "license": "MIT", + "dependencies": { + "asynckit": "^0.4.0", + "combined-stream": "^1.0.8", + "mime-types": "^2.1.12" + }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/eslint/node_modules/json-schema-traverse": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz", - "integrity": "sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg==", - "dev": true + "node_modules/form-data-encoder": { + "version": "2.1.4", + "license": "MIT", + "engines": { + "node": ">= 14.17" + } }, - "node_modules/eslint/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, + "node_modules/formdata-polyfill": { + "version": "4.0.10", + "license": "MIT", "dependencies": { - "p-locate": "^5.0.0" + "fetch-blob": "^3.1.2" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.20.0" } }, - "node_modules/eslint/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "node_modules/from2": { + "version": "2.3.0", "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" - }, - "engines": { - "node": "*" + "inherits": "^2.0.1", + "readable-stream": "^2.0.0" } }, - "node_modules/eslint/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==", + "node_modules/from2-string": { + "version": "1.1.0", "dev": true, + "license": "MIT", "dependencies": { - "yocto-queue": "^0.1.0" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "from2": "^2.0.3" } }, - "node_modules/eslint/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==", + "node_modules/from2/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/from2/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, + "license": "MIT", "dependencies": { - "p-limit": "^3.0.2" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/eslint/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/from2/node_modules/safe-buffer": { + "version": "5.1.2", "dev": true, - "engines": { - "node": ">=8" + "license": "MIT" + }, + "node_modules/from2/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, + "license": "MIT", + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/eslint/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==", + "node_modules/fs-constants": { + "version": "1.0.0", "dev": true, + "license": "MIT" + }, + "node_modules/fs-extra": { + "version": "11.2.0", + "dev": true, + "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.14" } }, - "node_modules/eslint/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, + "node_modules/fs-minipass": { + "version": "2.1.0", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/eslint/node_modules/yocto-queue": { - "version": "0.1.0", - "resolved": "https://registry.npmjs.org/yocto-queue/-/yocto-queue-0.1.0.tgz", - "integrity": "sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==", + "node_modules/fs-monkey": { + "version": "1.0.5", "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "Unlicense" }, - "node_modules/espree": { - "version": "9.6.1", + "node_modules/fs.realpath": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/fsevents": { + "version": "2.3.3", "dev": true, - "license": "BSD-2-Clause", - "dependencies": { - "acorn": "^8.9.0", - "acorn-jsx": "^5.3.2", - "eslint-visitor-keys": "^3.4.1" - }, + "license": "MIT", + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "url": "https://opencollective.com/eslint" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/esprima": { - "version": "4.0.1", - "license": "BSD-2-Clause", - "bin": { - "esparse": "bin/esparse.js", - "esvalidate": "bin/esvalidate.js" - }, - "engines": { - "node": ">=4" + "node_modules/function-bind": { + "version": "1.1.2", + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery": { - "version": "1.5.0", + "node_modules/function.prototype.name": { + "version": "1.1.6", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "estraverse": "^5.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "functions-have-names": "^1.2.3" }, "engines": { - "node": ">=0.10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esquery/node_modules/estraverse": { - "version": "5.3.0", + "node_modules/functions-have-names": { + "version": "1.2.3", "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/esrecurse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/gauge": { + "version": "3.0.2", + "license": "ISC", "dependencies": { - "estraverse": "^5.2.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.2", + "console-control-strings": "^1.0.0", + "has-unicode": "^2.0.1", + "object-assign": "^4.1.1", + "signal-exit": "^3.0.0", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.2" }, "engines": { - "node": ">=4.0" - } - }, - "node_modules/esrecurse/node_modules/estraverse": { - "version": "5.3.0", - "dev": true, - "license": "BSD-2-Clause", - "engines": { - "node": ">=4.0" + "node": ">=10" } }, - "node_modules/estraverse": { - "version": "4.3.0", - "dev": true, - "license": "BSD-2-Clause", + "node_modules/gauge/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", "engines": { - "node": ">=4.0" + "node": ">=8" } }, - "node_modules/estree-walker": { - "version": "2.0.2", + "node_modules/gauge/node_modules/emoji-regex": { + "version": "8.0.0", "license": "MIT" }, - "node_modules/esutils": { - "version": "2.0.3", - "license": "BSD-2-Clause", + "node_modules/gauge/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/eventemitter3": { - "version": "5.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/events": { - "version": "3.3.0", - "dev": true, + "node_modules/gauge/node_modules/string-width": { + "version": "4.2.3", "license": "MIT", - "peer": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, "engines": { - "node": ">=0.8.x" + "node": ">=8" } }, - "node_modules/execa": { - "version": "5.1.1", + "node_modules/gauge/node_modules/strip-ansi": { + "version": "6.0.1", "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.0", - "human-signals": "^2.1.0", - "is-stream": "^2.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^4.0.1", - "onetime": "^5.1.2", - "signal-exit": "^3.0.3", - "strip-final-newline": "^2.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=8" } }, - "node_modules/exponential-backoff": { - "version": "3.1.1", + "node_modules/gensync": { + "version": "1.0.0-beta.2", "dev": true, - "license": "Apache-2.0" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=6.9.0" + } }, - "node_modules/external-editor": { - "version": "3.1.0", - "dev": true, + "node_modules/get-amd-module-type": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "chardet": "^0.7.0", - "iconv-lite": "^0.4.24", - "tmp": "^0.0.33" + "ast-module-types": "^5.0.0", + "node-source-walk": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=14" } }, - "node_modules/external-editor/node_modules/tmp": { - "version": "0.0.33", + "node_modules/get-bin-path": { + "version": "6.1.0", "dev": true, - "license": "MIT", + "license": "Apache-2.0", "dependencies": { - "os-tmpdir": "~1.0.2" + "is-plain-obj": "^4.0.0", + "read-pkg-up": "^9.0.0" }, "engines": { - "node": ">=0.6.0" + "node": ">=12.20.0" } }, - "node_modules/fast-deep-equal": { - "version": "3.1.3", - "license": "MIT" + "node_modules/get-caller-file": { + "version": "2.0.5", + "license": "ISC", + "engines": { + "node": "6.* || 8.* || >= 10.*" + } }, - "node_modules/fast-diff": { - "version": "1.3.0", + "node_modules/get-func-name": { + "version": "2.0.2", "dev": true, - "license": "Apache-2.0" - }, - "node_modules/fast-equals": { - "version": "3.0.3", - "license": "MIT" - }, - "node_modules/fast-fifo": { - "version": "1.3.2", - "license": "MIT" + "license": "MIT", + "engines": { + "node": "*" + } }, - "node_modules/fast-glob": { - "version": "3.3.2", + "node_modules/get-intrinsic": { + "version": "1.2.2", "license": "MIT", "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" }, - "engines": { - "node": ">=8.6.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/fast-json-stable-stringify": { - "version": "2.1.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fast-levenshtein": { - "version": "2.0.6", + "node_modules/get-node": { + "version": "12.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/fast-safe-stringify": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/fastq": { - "version": "1.15.0", - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "reusify": "^1.0.4" - } - }, - "node_modules/fdir": { - "version": "6.1.1", - "license": "MIT", - "peerDependencies": { - "picomatch": "3.x" + "del": "^6.0.0", + "execa": "^6.1.0", + "fetch-node-website": "^6.0.0", + "filter-obj": "^3.0.0", + "get-stream": "^6.0.0", + "global-cache-dir": "^3.0.1", + "jest-validate": "^27.4.2", + "jszip": "^3.7.1", + "moize": "^6.1.0", + "move-file": "^3.0.0", + "node-version-alias": "^2.0.0", + "path-exists": "^5.0.0", + "path-key": "^4.0.0", + "preferred-node-version": "^2.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar-fs": "^2.1.1", + "tmp-promise": "^3.0.3" }, - "peerDependenciesMeta": { - "picomatch": { - "optional": true - } + "engines": { + "node": ">=12.20.0" } }, - "node_modules/fetch-blob": { - "version": "3.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "paypal", - "url": "https://paypal.me/jimmywarting" - } - ], + "node_modules/get-node/node_modules/execa": { + "version": "6.1.0", + "dev": true, "license": "MIT", "dependencies": { - "node-domexception": "^1.0.0", - "web-streams-polyfill": "^3.0.3" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": "^12.20 || >= 14.13" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/fetch-node-website": { - "version": "6.1.2", + "node_modules/get-node/node_modules/filter-obj": { + "version": "3.0.0", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "cli-progress": "^3.8.2", - "colors-option": "^2.0.1", - "figures": "^3.2.0", - "filter-obj": "^2.0.1", - "got": "^11.8.2", - "jest-validate": "^27.0.2" + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/get-node/node_modules/human-signals": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", "engines": { "node": ">=12.20.0" } }, - "node_modules/fetch-node-website/node_modules/@sindresorhus/is": { - "version": "4.6.0", + "node_modules/get-node/node_modules/is-stream": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sindresorhus/is?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fetch-node-website/node_modules/@szmarczak/http-timer": { - "version": "4.0.6", + "node_modules/get-node/node_modules/npm-run-path": { + "version": "5.1.0", "dev": true, "license": "MIT", "dependencies": { - "defer-to-connect": "^2.0.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fetch-node-website/node_modules/cacheable-lookup": { - "version": "5.0.4", + "node_modules/get-node/node_modules/onetime": { + "version": "6.0.0", "dev": true, "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, "engines": { - "node": ">=10.6.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fetch-node-website/node_modules/cacheable-request": { - "version": "7.0.4", + "node_modules/get-node/node_modules/strip-final-newline": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "clone-response": "^1.0.2", - "get-stream": "^5.1.0", - "http-cache-semantics": "^4.0.0", - "keyv": "^4.0.0", - "lowercase-keys": "^2.0.0", - "normalize-url": "^6.0.1", - "responselike": "^2.0.0" - }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fetch-node-website/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, + "node_modules/get-package-name": { + "version": "2.2.0", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">= 12.0.0" } }, - "node_modules/fetch-node-website/node_modules/figures": { - "version": "3.2.0", + "node_modules/get-pkg-repo": { + "version": "4.2.1", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "@hutson/parse-repository-url": "^3.0.0", + "hosted-git-info": "^4.0.0", + "through2": "^2.0.0", + "yargs": "^16.2.0" }, - "engines": { - "node": ">=8" + "bin": { + "get-pkg-repo": "src/cli.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=6.9.0" } }, - "node_modules/fetch-node-website/node_modules/filter-obj": { - "version": "2.0.2", + "node_modules/get-pkg-repo/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/fetch-node-website/node_modules/get-stream": { - "version": "5.2.0", + "node_modules/get-pkg-repo/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", - "dependencies": { - "pump": "^3.0.0" - }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fetch-node-website/node_modules/got": { - "version": "11.8.6", + "node_modules/get-pkg-repo/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^4.0.0", - "@szmarczak/http-timer": "^4.0.5", - "@types/cacheable-request": "^6.0.1", - "@types/responselike": "^1.0.0", - "cacheable-lookup": "^5.0.3", - "cacheable-request": "^7.0.2", - "decompress-response": "^6.0.0", - "http2-wrapper": "^1.0.0-beta.5.2", - "lowercase-keys": "^2.0.0", - "p-cancelable": "^2.0.0", - "responselike": "^2.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10.19.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/fetch-node-website/node_modules/http2-wrapper": { - "version": "1.0.3", + "node_modules/get-pkg-repo/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=10.19.0" + "node": ">=8" } }, - "node_modules/fetch-node-website/node_modules/lowercase-keys": { - "version": "2.0.0", + "node_modules/get-pkg-repo/node_modules/yargs": { + "version": "16.2.0", "dev": true, "license": "MIT", + "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": ">=8" + "node": ">=10" } }, - "node_modules/fetch-node-website/node_modules/normalize-url": { - "version": "6.1.0", - "dev": true, + "node_modules/get-port": { + "version": "6.1.2", "license": "MIT", "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fetch-node-website/node_modules/p-cancelable": { - "version": "2.1.1", - "dev": true, + "node_modules/get-stream": { + "version": "6.0.1", "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/fetch-node-website/node_modules/responselike": { - "version": "2.0.1", - "dev": true, - "license": "MIT", - "dependencies": { - "lowercase-keys": "^2.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/fflate": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/fflate/-/fflate-0.8.2.tgz", - "integrity": "sha512-cPJU47OaAoCbg0pBvzsgpTPhmhqI5eJjh/JIu8tPj5q+T7iLvW/JAYUqmE7KOB4R1ZyEhzBaIQpQpardBF5z8A==", - "dev": true - }, - "node_modules/figures": { - "version": "5.0.0", + "node_modules/get-symbol-description": { + "version": "1.0.0", + "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.1" }, "engines": { - "node": ">=14" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/file-entry-cache": { - "version": "6.0.1", + "node_modules/git-raw-commits": { + "version": "2.0.11", "dev": true, "license": "MIT", "dependencies": { - "flat-cache": "^3.0.4" + "dargs": "^7.0.0", + "lodash": "^4.17.15", + "meow": "^8.0.0", + "split2": "^3.0.0", + "through2": "^4.0.0" + }, + "bin": { + "git-raw-commits": "cli.js" }, "engines": { - "node": "^10.12.0 || >=12.0.0" - } - }, - "node_modules/file-uri-to-path": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/filelist": { - "version": "1.0.4", - "dev": true, - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.0.1" + "node": ">=10" } }, - "node_modules/filelist/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/git-raw-commits/node_modules/through2": { + "version": "4.0.2", "dev": true, - "license": "ISC", - "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=10" + "license": "MIT", + "dependencies": { + "readable-stream": "3" } }, - "node_modules/fill-range": { - "version": "7.0.1", + "node_modules/git-remote-origin-url": { + "version": "2.0.0", + "dev": true, "license": "MIT", "dependencies": { - "to-regex-range": "^5.0.1" + "gitconfiglocal": "^1.0.0", + "pify": "^2.3.0" }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/filter-obj": { - "version": "5.1.0", + "node_modules/git-remote-origin-url/node_modules/pify": { + "version": "2.3.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/find-cache-dir": { - "version": "3.3.2", + "node_modules/git-semver-tags": { + "version": "4.1.1", "dev": true, "license": "MIT", "dependencies": { - "commondir": "^1.0.1", - "make-dir": "^3.0.2", - "pkg-dir": "^4.1.0" + "meow": "^8.0.0", + "semver": "^6.0.0" }, - "engines": { - "node": ">=8" + "bin": { + "git-semver-tags": "cli.js" }, - "funding": { - "url": "https://github.com/avajs/find-cache-dir?sponsor=1" + "engines": { + "node": ">=10" } }, - "node_modules/find-cache-dir/node_modules/find-up": { - "version": "4.1.0", + "node_modules/git-semver-tags/node_modules/semver": { + "version": "6.3.1", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver.js" + } + }, + "node_modules/git-up": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "is-ssh": "^1.4.0", + "parse-url": "^8.1.0" } }, - "node_modules/find-cache-dir/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/git-url-parse": { + "version": "13.1.1", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" - }, - "engines": { - "node": ">=8" + "git-up": "^7.0.0" } }, - "node_modules/find-cache-dir/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/gitconfiglocal": { + "version": "1.0.0", "dev": true, - "license": "MIT", + "license": "BSD", "dependencies": { - "p-try": "^2.0.0" + "ini": "^1.3.2" + } + }, + "node_modules/glob": { + "version": "7.2.3", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^3.1.1", + "once": "^1.3.0", + "path-is-absolute": "^1.0.0" }, "engines": { - "node": ">=6" + "node": "*" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/find-cache-dir/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, - "license": "MIT", + "node_modules/glob-parent": { + "version": "5.1.2", + "license": "ISC", "dependencies": { - "p-limit": "^2.2.0" + "is-glob": "^4.0.1" }, "engines": { - "node": ">=8" + "node": ">= 6" } }, - "node_modules/find-cache-dir/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/glob-to-regexp": { + "version": "0.4.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "BSD-2-Clause", + "peer": true }, - "node_modules/find-cache-dir/node_modules/pkg-dir": { - "version": "4.2.0", - "dev": true, + "node_modules/glob/node_modules/brace-expansion": { + "version": "1.1.11", "license": "MIT", "dependencies": { - "find-up": "^4.0.0" - }, - "engines": { - "node": ">=8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/find-replace": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "node_modules/glob/node_modules/minimatch": { + "version": "3.1.2", + "license": "ISC", "dependencies": { - "array-back": "^3.0.1" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=4.0.0" + "node": "*" } }, - "node_modules/find-up": { - "version": "6.3.0", - "license": "MIT", + "node_modules/global-cache-dir": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "locate-path": "^7.1.0", - "path-exists": "^5.0.0" + "cachedir": "^2.3.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=12.20.0" } }, - "node_modules/flat": { - "version": "5.0.2", + "node_modules/global-cache-dir/node_modules/path-exists": { + "version": "4.0.0", "dev": true, - "license": "BSD-3-Clause", - "bin": { - "flat": "cli.js" + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/flat-cache": { - "version": "3.2.0", + "node_modules/global-dirs": { + "version": "0.1.1", "dev": true, "license": "MIT", "dependencies": { - "flatted": "^3.2.9", - "keyv": "^4.5.3", - "rimraf": "^3.0.2" + "ini": "^1.3.4" }, "engines": { - "node": "^10.12.0 || >=12.0.0" + "node": ">=4" } }, - "node_modules/flatted": { - "version": "3.2.9", + "node_modules/globals": { + "version": "13.24.0", "dev": true, - "license": "ISC" - }, - "node_modules/follow-redirects": { - "version": "1.15.3", - "funding": [ - { - "type": "individual", - "url": "https://github.com/sponsors/RubenVerborgh" - } - ], "license": "MIT", + "dependencies": { + "type-fest": "^0.20.2" + }, "engines": { - "node": ">=4.0" + "node": ">=8" }, - "peerDependenciesMeta": { - "debug": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/for-each": { - "version": "0.3.3", + "node_modules/globals/node_modules/type-fest": { + "version": "0.20.2", "dev": true, - "license": "MIT", - "dependencies": { - "is-callable": "^1.1.3" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/foreground-child": { - "version": "2.0.0", + "node_modules/globalthis": { + "version": "1.0.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.0", - "signal-exit": "^3.0.2" + "define-properties": "^1.1.3" }, "engines": { - "node": ">=8.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/form-data": { - "version": "3.0.1", - "dev": true, + "node_modules/globby": { + "version": "13.2.2", "license": "MIT", "dependencies": { - "asynckit": "^0.4.0", - "combined-stream": "^1.0.8", - "mime-types": "^2.1.12" + "dir-glob": "^3.0.1", + "fast-glob": "^3.3.0", + "ignore": "^5.2.4", + "merge2": "^1.4.1", + "slash": "^4.0.0" }, "engines": { - "node": ">= 6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/form-data-encoder": { - "version": "2.1.4", + "node_modules/globby/node_modules/slash": { + "version": "4.0.0", "license": "MIT", "engines": { - "node": ">= 14.17" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/formdata-polyfill": { - "version": "4.0.10", + "node_modules/gonzales-pe": { + "version": "4.3.0", "license": "MIT", "dependencies": { - "fetch-blob": "^3.1.2" + "minimist": "^1.2.5" + }, + "bin": { + "gonzales": "bin/gonzales.js" }, "engines": { - "node": ">=12.20.0" + "node": ">=0.6.0" } }, - "node_modules/from2": { - "version": "2.3.0", - "dev": true, + "node_modules/gopd": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "^2.0.0" + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/from2-string": { - "version": "1.1.0", - "dev": true, + "node_modules/got": { + "version": "12.6.1", "license": "MIT", "dependencies": { - "from2": "^2.0.3" + "@sindresorhus/is": "^5.2.0", + "@szmarczak/http-timer": "^5.0.1", + "cacheable-lookup": "^7.0.0", + "cacheable-request": "^10.2.8", + "decompress-response": "^6.0.0", + "form-data-encoder": "^2.1.2", + "get-stream": "^6.0.1", + "http2-wrapper": "^2.1.10", + "lowercase-keys": "^3.0.0", + "p-cancelable": "^3.0.0", + "responselike": "^3.0.0" + }, + "engines": { + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sindresorhus/got?sponsor=1" } }, - "node_modules/from2/node_modules/isarray": { - "version": "1.0.0", + "node_modules/graceful-fs": { + "version": "4.2.11", + "license": "ISC" + }, + "node_modules/graphemer": { + "version": "1.4.0", "dev": true, "license": "MIT" }, - "node_modules/from2/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/handlebars": { + "version": "4.7.8", "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "minimist": "^1.2.5", + "neo-async": "^2.6.2", + "source-map": "^0.6.1", + "wordwrap": "^1.0.0" + }, + "bin": { + "handlebars": "bin/handlebars" + }, + "engines": { + "node": ">=0.4.7" + }, + "optionalDependencies": { + "uglify-js": "^3.1.4" } }, - "node_modules/from2/node_modules/safe-buffer": { - "version": "5.1.2", - "dev": true, - "license": "MIT" - }, - "node_modules/from2/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/hard-rejection": { + "version": "2.1.0", "dev": true, "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": ">=6" } }, - "node_modules/fs-constants": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/fs-extra": { - "version": "11.2.0", + "node_modules/has-ansi": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=14.14" - } - }, - "node_modules/fs-minipass": { - "version": "2.1.0", - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" + "node": ">=12" }, - "engines": { - "node": ">= 8" + "funding": { + "url": "https://github.com/chalk/has-ansi?sponsor=1" } }, - "node_modules/fs-monkey": { - "version": "1.0.5", + "node_modules/has-bigints": { + "version": "1.0.2", "dev": true, - "license": "Unlicense" - }, - "node_modules/fs.realpath": { - "version": "1.0.0", - "license": "ISC" + "license": "MIT", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } }, - "node_modules/fsevents": { - "version": "2.3.3", - "dev": true, + "node_modules/has-flag": { + "version": "4.0.0", "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "node": ">=8" } }, - "node_modules/function-bind": { - "version": "1.1.2", + "node_modules/has-property-descriptors": { + "version": "1.0.1", "license": "MIT", + "dependencies": { + "get-intrinsic": "^1.2.2" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/function.prototype.name": { - "version": "1.1.6", - "dev": true, + "node_modules/has-proto": { + "version": "1.0.1", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "functions-have-names": "^1.2.3" - }, "engines": { "node": ">= 0.4" }, @@ -15151,565 +15465,579 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/functions-have-names": { - "version": "1.2.3", - "dev": true, + "node_modules/has-symbols": { + "version": "1.0.3", "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge": { - "version": "3.0.2", - "license": "ISC", + "node_modules/has-tostringtag": { + "version": "1.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.2", - "console-control-strings": "^1.0.0", - "has-unicode": "^2.0.1", - "object-assign": "^4.1.1", - "signal-exit": "^3.0.0", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.2" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=10" - } - }, - "node_modules/gauge/node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", - "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gauge/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" + "node_modules/has-unicode": { + "version": "2.0.1", + "license": "ISC" }, - "node_modules/gauge/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/hasown": { + "version": "2.0.0", "license": "MIT", + "dependencies": { + "function-bind": "^1.1.2" + }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/gauge/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", + "node_modules/hosted-git-info": { + "version": "4.1.0", + "license": "ISC", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "lru-cache": "^6.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/gauge/node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", + "node_modules/hosted-git-info/node_modules/lru-cache": { + "version": "6.0.0", + "license": "ISC", "dependencies": { - "ansi-regex": "^5.0.1" + "yallist": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/gensync": { - "version": "1.0.0-beta.2", - "dev": true, + "node_modules/hot-shots": { + "version": "10.0.0", "license": "MIT", - "peer": true, "engines": { - "node": ">=6.9.0" + "node": ">=10.0.0" + }, + "optionalDependencies": { + "unix-dgram": "2.x" } }, - "node_modules/get-amd-module-type": { - "version": "5.0.1", + "node_modules/html-escaper": { + "version": "2.0.2", + "dev": true, + "license": "MIT" + }, + "node_modules/http-cache-semantics": { + "version": "4.1.1", + "license": "BSD-2-Clause" + }, + "node_modules/http-proxy-agent": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "ast-module-types": "^5.0.0", - "node-source-walk": "^6.0.1" + "@tootallnate/once": "2", + "agent-base": "6", + "debug": "4" }, "engines": { - "node": ">=14" + "node": ">= 6" } }, - "node_modules/get-bin-path": { - "version": "6.1.0", - "dev": true, - "license": "Apache-2.0", + "node_modules/http2-wrapper": { + "version": "2.2.1", + "license": "MIT", "dependencies": { - "is-plain-obj": "^4.0.0", - "read-pkg-up": "^9.0.0" + "quick-lru": "^5.1.1", + "resolve-alpn": "^1.2.0" }, "engines": { - "node": ">=12.20.0" + "node": ">=10.19.0" } }, - "node_modules/get-caller-file": { - "version": "2.0.5", - "license": "ISC", + "node_modules/https-proxy-agent": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "agent-base": "6", + "debug": "4" + }, "engines": { - "node": "6.* || 8.* || >= 10.*" + "node": ">= 6" } }, - "node_modules/get-func-name": { - "version": "2.0.2", - "dev": true, - "license": "MIT", + "node_modules/human-signals": { + "version": "2.1.0", + "license": "Apache-2.0", "engines": { - "node": "*" + "node": ">=10.17.0" } }, - "node_modules/get-intrinsic": { - "version": "1.2.2", + "node_modules/humanize-ms": { + "version": "1.2.1", + "dev": true, "license": "MIT", "dependencies": { - "function-bind": "^1.1.2", - "has-proto": "^1.0.1", - "has-symbols": "^1.0.3", - "hasown": "^2.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "ms": "^2.0.0" } }, - "node_modules/get-node": { - "version": "12.1.0", + "node_modules/husky": { + "version": "8.0.3", "dev": true, - "license": "Apache-2.0", - "dependencies": { - "del": "^6.0.0", - "execa": "^6.1.0", - "fetch-node-website": "^6.0.0", - "filter-obj": "^3.0.0", - "get-stream": "^6.0.0", - "global-cache-dir": "^3.0.1", - "jest-validate": "^27.4.2", - "jszip": "^3.7.1", - "moize": "^6.1.0", - "move-file": "^3.0.0", - "node-version-alias": "^2.0.0", - "path-exists": "^5.0.0", - "path-key": "^4.0.0", - "preferred-node-version": "^2.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar-fs": "^2.1.1", - "tmp-promise": "^3.0.3" + "license": "MIT", + "bin": { + "husky": "lib/bin.js" }, "engines": { - "node": ">=12.20.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/typicode" } }, - "node_modules/get-node/node_modules/execa": { - "version": "6.1.0", + "node_modules/iconv-lite": { + "version": "0.4.24", "dev": true, "license": "MIT", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "safer-buffer": ">= 2.1.2 < 3" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">=0.10.0" } }, - "node_modules/get-node/node_modules/filter-obj": { - "version": "3.0.0", + "node_modules/ieee754": { + "version": "1.2.1", "dev": true, + "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": "BSD-3-Clause" + }, + "node_modules/ignore": { + "version": "5.3.0", "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/get-node/node_modules/human-signals": { - "version": "3.0.1", + "node_modules/ignore-by-default": { + "version": "2.1.0", "dev": true, - "license": "Apache-2.0", + "license": "ISC", "engines": { - "node": ">=12.20.0" + "node": ">=10 <11 || >=12 <13 || >=14" } }, - "node_modules/get-node/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/ignore-walk": { + "version": "5.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "license": "ISC", + "dependencies": { + "minimatch": "^5.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/get-node/node_modules/npm-run-path": { - "version": "5.1.0", + "node_modules/ignore-walk/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "path-key": "^4.0.0" + "brace-expansion": "^2.0.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/get-node/node_modules/onetime": { - "version": "6.0.0", + "node_modules/immediate": { + "version": "3.0.6", + "dev": true, + "license": "MIT" + }, + "node_modules/import-fresh": { + "version": "3.3.0", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "parent-module": "^1.0.0", + "resolve-from": "^4.0.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-node/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/import-fresh/node_modules/resolve-from": { + "version": "4.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/get-package-name": { - "version": "2.2.0", - "license": "MIT", - "engines": { - "node": ">= 12.0.0" + "node_modules/import-in-the-middle": { + "version": "1.7.1", + "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz", + "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==", + "dependencies": { + "acorn": "^8.8.2", + "acorn-import-assertions": "^1.9.0", + "cjs-module-lexer": "^1.2.2", + "module-details-from-path": "^1.0.3" } }, - "node_modules/get-pkg-repo": { - "version": "4.2.1", + "node_modules/import-local": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "@hutson/parse-repository-url": "^3.0.0", - "hosted-git-info": "^4.0.0", - "through2": "^2.0.0", - "yargs": "^16.2.0" + "pkg-dir": "^4.2.0", + "resolve-cwd": "^3.0.0" }, "bin": { - "get-pkg-repo": "src/cli.js" + "import-local-fixture": "fixtures/cli.js" }, "engines": { - "node": ">=6.9.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/import-local/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/get-pkg-repo/node_modules/emoji-regex": { - "version": "8.0.0", + "node_modules/import-local/node_modules/locate-path": { + "version": "5.0.0", "dev": true, - "license": "MIT" + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" + }, + "engines": { + "node": ">=8" + } }, - "node_modules/get-pkg-repo/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/import-local/node_modules/p-limit": { + "version": "2.3.0", "dev": true, "license": "MIT", + "dependencies": { + "p-try": "^2.0.0" + }, "engines": { - "node": ">=8" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-pkg-repo/node_modules/string-width": { - "version": "4.2.3", + "node_modules/import-local/node_modules/p-locate": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "p-limit": "^2.2.0" }, "engines": { "node": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/import-local/node_modules/path-exists": { + "version": "4.0.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { "node": ">=8" } }, - "node_modules/get-pkg-repo/node_modules/yargs": { - "version": "16.2.0", + "node_modules/import-local/node_modules/pkg-dir": { + "version": "4.2.0", "dev": true, "license": "MIT", "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" + "find-up": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/get-port": { - "version": "6.1.2", + "node_modules/imurmurhash": { + "version": "0.1.4", + "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.8.19" } }, - "node_modules/get-stream": { - "version": "6.0.1", + "node_modules/indent-string": { + "version": "5.0.0", "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/get-symbol-description": { - "version": "1.0.0", + "node_modules/infer-owner": { + "version": "1.0.4", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/inflight": { + "version": "1.0.6", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "once": "^1.3.0", + "wrappy": "1" } }, - "node_modules/git-raw-commits": { - "version": "2.0.11", + "node_modules/inherits": { + "version": "2.0.4", + "license": "ISC" + }, + "node_modules/ini": { + "version": "1.3.8", "dev": true, - "license": "MIT", + "license": "ISC" + }, + "node_modules/init-package-json": { + "version": "3.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "dargs": "^7.0.0", - "lodash": "^4.17.15", - "meow": "^8.0.0", - "split2": "^3.0.0", - "through2": "^4.0.0" - }, - "bin": { - "git-raw-commits": "cli.js" + "npm-package-arg": "^9.0.1", + "promzard": "^0.3.0", + "read": "^1.0.7", + "read-package-json": "^5.0.0", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/git-raw-commits/node_modules/through2": { - "version": "4.0.2", + "node_modules/init-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "readable-stream": "3" + "lru-cache": "^7.5.1" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/git-remote-origin-url": { - "version": "2.0.0", + "node_modules/init-package-json/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "gitconfiglocal": "^1.0.0", - "pify": "^2.3.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/git-remote-origin-url/node_modules/pify": { - "version": "2.3.0", + "node_modules/inquirer": { + "version": "8.2.6", "dev": true, "license": "MIT", + "dependencies": { + "ansi-escapes": "^4.2.1", + "chalk": "^4.1.1", + "cli-cursor": "^3.1.0", + "cli-width": "^3.0.0", + "external-editor": "^3.0.3", + "figures": "^3.0.0", + "lodash": "^4.17.21", + "mute-stream": "0.0.8", + "ora": "^5.4.1", + "run-async": "^2.4.0", + "rxjs": "^7.5.5", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0", + "through": "^2.3.6", + "wrap-ansi": "^6.0.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.0.0" } }, - "node_modules/git-semver-tags": { - "version": "4.1.1", + "node_modules/inquirer/node_modules/ansi-escapes": { + "version": "4.3.2", "dev": true, "license": "MIT", "dependencies": { - "meow": "^8.0.0", - "semver": "^6.0.0" - }, - "bin": { - "git-semver-tags": "cli.js" + "type-fest": "^0.21.3" }, "engines": { - "node": ">=10" - } - }, - "node_modules/git-semver-tags/node_modules/semver": { - "version": "6.3.1", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver.js" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/git-up": { - "version": "7.0.0", + "node_modules/inquirer/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "is-ssh": "^1.4.0", - "parse-url": "^8.1.0" + "engines": { + "node": ">=8" } }, - "node_modules/git-url-parse": { - "version": "13.1.1", + "node_modules/inquirer/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "git-up": "^7.0.0" + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/gitconfiglocal": { - "version": "1.0.0", + "node_modules/inquirer/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "BSD", - "dependencies": { - "ini": "^1.3.2" - } - }, - "node_modules/glob": { - "version": "7.2.3", - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^3.1.1", - "once": "^1.3.0", - "path-is-absolute": "^1.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "*" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/glob-parent": { - "version": "5.1.2", - "license": "ISC", + "node_modules/inquirer/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "is-glob": "^4.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 6" + "node": ">=7.0.0" } }, - "node_modules/glob-to-regexp": { - "version": "0.4.1", + "node_modules/inquirer/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "BSD-2-Clause", - "peer": true + "license": "MIT" }, - "node_modules/glob/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/inquirer/node_modules/escape-string-regexp": { + "version": "1.0.5", + "dev": true, "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" - } - }, - "node_modules/glob/node_modules/minimatch": { - "version": "3.1.2", - "license": "ISC", - "dependencies": { - "brace-expansion": "^1.1.7" - }, "engines": { - "node": "*" + "node": ">=0.8.0" } }, - "node_modules/global-cache-dir": { - "version": "3.0.1", + "node_modules/inquirer/node_modules/figures": { + "version": "3.2.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "cachedir": "^2.3.0", - "path-exists": "^4.0.0" + "escape-string-regexp": "^1.0.5" }, "engines": { - "node": ">=12.20.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/global-cache-dir/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/inquirer/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/global-dirs": { - "version": "0.1.1", + "node_modules/inquirer/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "ini": "^1.3.4" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/globals": { - "version": "13.24.0", + "node_modules/inquirer/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.20.2" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" + } + }, + "node_modules/inquirer/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, + "license": "MIT", + "dependencies": { + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/globals/node_modules/type-fest": { - "version": "0.20.2", + "node_modules/inquirer/node_modules/type-fest": { + "version": "0.21.3", "dev": true, "license": "(MIT OR CC0-1.0)", "engines": { @@ -15719,182 +16047,138 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/globalthis": { - "version": "1.0.3", + "node_modules/internal-slot": { + "version": "1.0.6", "dev": true, "license": "MIT", "dependencies": { - "define-properties": "^1.1.3" + "get-intrinsic": "^1.2.2", + "hasown": "^2.0.0", + "side-channel": "^1.0.4" }, "engines": { "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/globby": { - "version": "13.2.2", - "license": "MIT", - "dependencies": { - "dir-glob": "^3.0.1", - "fast-glob": "^3.3.0", - "ignore": "^5.2.4", - "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/ip": { + "version": "2.0.0", + "dev": true, + "license": "MIT" }, - "node_modules/globby/node_modules/slash": { - "version": "4.0.0", + "node_modules/irregular-plurals": { + "version": "3.5.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/gonzales-pe": { - "version": "4.3.0", + "node_modules/is-array-buffer": { + "version": "3.0.2", + "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5" - }, - "bin": { - "gonzales": "bin/gonzales.js" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.0", + "is-typed-array": "^1.1.10" }, - "engines": { - "node": ">=0.6.0" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/gopd": { - "version": "1.0.1", + "node_modules/is-arrayish": { + "version": "0.2.1", + "license": "MIT" + }, + "node_modules/is-bigint": { + "version": "1.0.4", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.1.3" + "has-bigints": "^1.0.1" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/got": { - "version": "12.6.1", + "node_modules/is-binary-path": { + "version": "2.1.0", + "dev": true, "license": "MIT", "dependencies": { - "@sindresorhus/is": "^5.2.0", - "@szmarczak/http-timer": "^5.0.1", - "cacheable-lookup": "^7.0.0", - "cacheable-request": "^10.2.8", - "decompress-response": "^6.0.0", - "form-data-encoder": "^2.1.2", - "get-stream": "^6.0.1", - "http2-wrapper": "^2.1.10", - "lowercase-keys": "^3.0.0", - "p-cancelable": "^3.0.0", - "responselike": "^3.0.0" + "binary-extensions": "^2.0.0" }, "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sindresorhus/got?sponsor=1" + "node": ">=8" } }, - "node_modules/graceful-fs": { - "version": "4.2.11", - "license": "ISC" - }, - "node_modules/graphemer": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/handlebars": { - "version": "4.7.8", + "node_modules/is-boolean-object": { + "version": "1.1.2", "dev": true, "license": "MIT", "dependencies": { - "minimist": "^1.2.5", - "neo-async": "^2.6.2", - "source-map": "^0.6.1", - "wordwrap": "^1.0.0" - }, - "bin": { - "handlebars": "bin/handlebars" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">=0.4.7" + "node": ">= 0.4" }, - "optionalDependencies": { - "uglify-js": "^3.1.4" - } - }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-ansi": { - "version": "5.0.1", - "dev": true, + "node_modules/is-builtin-module": { + "version": "3.2.1", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "builtin-modules": "^3.3.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { - "url": "https://github.com/chalk/has-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-bigints": { - "version": "1.0.2", + "node_modules/is-callable": { + "version": "1.2.7", "dev": true, "license": "MIT", + "engines": { + "node": ">= 0.4" + }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-flag": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=8" - } - }, - "node_modules/has-property-descriptors": { - "version": "1.0.1", + "node_modules/is-ci": { + "version": "3.0.1", + "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2" + "ci-info": "^3.2.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "is-ci": "bin.js" } }, - "node_modules/has-proto": { - "version": "1.0.1", + "node_modules/is-core-module": { + "version": "2.13.1", "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "hasown": "^2.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-symbols": { - "version": "1.0.3", + "node_modules/is-date-object": { + "version": "1.0.5", + "dev": true, "license": "MIT", + "dependencies": { + "has-tostringtag": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -15902,458 +16186,406 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/has-tostringtag": { - "version": "1.0.0", + "node_modules/is-docker": { + "version": "2.2.1", "dev": true, "license": "MIT", - "dependencies": { - "has-symbols": "^1.0.2" + "bin": { + "is-docker": "cli.js" }, "engines": { - "node": ">= 0.4" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/has-unicode": { - "version": "2.0.1", - "license": "ISC" + "node_modules/is-error": { + "version": "2.2.2", + "dev": true, + "license": "MIT" }, - "node_modules/hasown": { - "version": "2.0.0", + "node_modules/is-extglob": { + "version": "2.1.1", "license": "MIT", - "dependencies": { - "function-bind": "^1.1.2" - }, "engines": { - "node": ">= 0.4" + "node": ">=0.10.0" } }, - "node_modules/hosted-git-info": { - "version": "4.1.0", - "license": "ISC", - "dependencies": { - "lru-cache": "^6.0.0" - }, + "node_modules/is-fullwidth-code-point": { + "version": "4.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/hosted-git-info/node_modules/lru-cache": { - "version": "6.0.0", - "license": "ISC", + "node_modules/is-glob": { + "version": "4.0.3", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "is-extglob": "^2.1.1" }, "engines": { - "node": ">=10" + "node": ">=0.10.0" } }, - "node_modules/hot-shots": { - "version": "10.0.0", + "node_modules/is-interactive": { + "version": "1.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=10.0.0" - }, - "optionalDependencies": { - "unix-dgram": "2.x" + "node": ">=8" } }, - "node_modules/html-escaper": { - "version": "2.0.2", + "node_modules/is-lambda": { + "version": "1.0.1", "dev": true, "license": "MIT" }, - "node_modules/http-cache-semantics": { - "version": "4.1.1", - "license": "BSD-2-Clause" - }, - "node_modules/http-proxy-agent": { - "version": "5.0.0", + "node_modules/is-negative-zero": { + "version": "2.0.2", "dev": true, "license": "MIT", - "dependencies": { - "@tootallnate/once": "2", - "agent-base": "6", - "debug": "4" - }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/http2-wrapper": { - "version": "2.2.1", + "node_modules/is-number": { + "version": "7.0.0", "license": "MIT", - "dependencies": { - "quick-lru": "^5.1.1", - "resolve-alpn": "^1.2.0" - }, "engines": { - "node": ">=10.19.0" + "node": ">=0.12.0" } }, - "node_modules/https-proxy-agent": { - "version": "5.0.1", + "node_modules/is-number-object": { + "version": "1.0.7", + "dev": true, "license": "MIT", "dependencies": { - "agent-base": "6", - "debug": "4" + "has-tostringtag": "^1.0.0" }, "engines": { - "node": ">= 6" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/human-signals": { - "version": "2.1.0", - "license": "Apache-2.0", + "node_modules/is-obj": { + "version": "2.0.0", + "dev": true, + "license": "MIT", "engines": { - "node": ">=10.17.0" + "node": ">=8" } }, - "node_modules/humanize-ms": { - "version": "1.2.1", + "node_modules/is-path-cwd": { + "version": "2.2.0", "dev": true, "license": "MIT", - "dependencies": { - "ms": "^2.0.0" + "engines": { + "node": ">=6" } }, - "node_modules/husky": { - "version": "8.0.3", - "dev": true, + "node_modules/is-path-inside": { + "version": "4.0.0", "license": "MIT", - "bin": { - "husky": "lib/bin.js" - }, "engines": { - "node": ">=14" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/typicode" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/iconv-lite": { - "version": "0.4.24", - "dev": true, + "node_modules/is-plain-obj": { + "version": "4.1.0", "license": "MIT", - "dependencies": { - "safer-buffer": ">= 2.1.2 < 3" - }, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ieee754": { - "version": "1.2.1", + "node_modules/is-plain-object": { + "version": "5.0.0", "dev": true, - "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": "BSD-3-Clause" - }, - "node_modules/ignore": { - "version": "5.3.0", "license": "MIT", "engines": { - "node": ">= 4" + "node": ">=0.10.0" } }, - "node_modules/ignore-by-default": { - "version": "2.1.0", + "node_modules/is-promise": { + "version": "4.0.0", "dev": true, - "license": "ISC", - "engines": { - "node": ">=10 <11 || >=12 <13 || >=14" - } + "license": "MIT" }, - "node_modules/ignore-walk": { - "version": "5.0.1", + "node_modules/is-regex": { + "version": "1.1.4", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "minimatch": "^5.0.1" + "call-bind": "^1.0.2", + "has-tostringtag": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/ignore-walk/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/is-shared-array-buffer": { + "version": "1.0.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "call-bind": "^1.0.2" }, - "engines": { - "node": ">=10" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/immediate": { - "version": "3.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/import-fresh": { - "version": "3.3.0", + "node_modules/is-ssh": { + "version": "1.4.0", "dev": true, "license": "MIT", "dependencies": { - "parent-module": "^1.0.0", - "resolve-from": "^4.0.0" - }, + "protocols": "^2.0.1" + } + }, + "node_modules/is-stream": { + "version": "2.0.1", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-fresh/node_modules/resolve-from": { - "version": "4.0.0", + "node_modules/is-string": { + "version": "1.0.7", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" - } - }, - "node_modules/import-in-the-middle": { - "version": "1.7.1", - "resolved": "https://registry.npmjs.org/import-in-the-middle/-/import-in-the-middle-1.7.1.tgz", - "integrity": "sha512-1LrZPDtW+atAxH42S6288qyDFNQ2YCty+2mxEPRtfazH6Z5QwkaBSTS2ods7hnVJioF6rkRfNoA6A/MstpFXLg==", "dependencies": { - "acorn": "^8.8.2", - "acorn-import-assertions": "^1.9.0", - "cjs-module-lexer": "^1.2.2", - "module-details-from-path": "^1.0.3" + "has-tostringtag": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local": { - "version": "3.1.0", + "node_modules/is-symbol": { + "version": "1.0.4", "dev": true, "license": "MIT", "dependencies": { - "pkg-dir": "^4.2.0", - "resolve-cwd": "^3.0.0" - }, - "bin": { - "import-local-fixture": "fixtures/cli.js" + "has-symbols": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">= 0.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local/node_modules/find-up": { - "version": "4.1.0", + "node_modules/is-text-path": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" + "text-extensions": "^1.0.0" }, "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/import-local/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/is-typed-array": { + "version": "1.1.12", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "which-typed-array": "^1.1.11" }, "engines": { - "node": ">=8" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/is-typedarray": { + "version": "1.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "p-try": "^2.0.0" - }, + "license": "MIT" + }, + "node_modules/is-unicode-supported": { + "version": "1.3.0", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/p-locate": { - "version": "4.1.0", - "dev": true, + "node_modules/is-url": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/is-url-superb": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "p-limit": "^2.2.0" - }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-local/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/is-weakref": { + "version": "1.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "call-bind": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/import-local/node_modules/pkg-dir": { - "version": "4.2.0", + "node_modules/is-wsl": { + "version": "2.2.0", "dev": true, "license": "MIT", "dependencies": { - "find-up": "^4.0.0" + "is-docker": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/imurmurhash": { - "version": "0.1.4", + "node_modules/isarray": { + "version": "2.0.5", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.19" - } + "license": "MIT" }, - "node_modules/indent-string": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/iserror": { + "version": "0.0.2", + "license": "MIT" }, - "node_modules/infer-owner": { - "version": "1.0.4", - "dev": true, + "node_modules/isexe": { + "version": "2.0.0", "license": "ISC" }, - "node_modules/inflight": { - "version": "1.0.6", - "license": "ISC", - "dependencies": { - "once": "^1.3.0", - "wrappy": "1" + "node_modules/isobject": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/inherits": { - "version": "2.0.4", - "license": "ISC" - }, - "node_modules/ini": { - "version": "1.3.8", + "node_modules/istanbul-lib-coverage": { + "version": "3.2.2", "dev": true, - "license": "ISC" + "license": "BSD-3-Clause", + "engines": { + "node": ">=8" + } }, - "node_modules/init-package-json": { - "version": "3.0.2", + "node_modules/istanbul-lib-report": { + "version": "3.0.1", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", "dependencies": { - "npm-package-arg": "^9.0.1", - "promzard": "^0.3.0", - "read": "^1.0.7", - "read-package-json": "^5.0.0", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4", - "validate-npm-package-name": "^4.0.0" + "istanbul-lib-coverage": "^3.0.0", + "make-dir": "^4.0.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/init-package-json/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/istanbul-lib-report/node_modules/make-dir": { + "version": "4.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^7.5.1" + "semver": "^7.5.3" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/init-package-json/node_modules/npm-package-arg": { - "version": "9.1.2", + "node_modules/istanbul-lib-report/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/inquirer": { - "version": "8.2.6", + "node_modules/istanbul-lib-source-maps": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/istanbul-lib-source-maps/-/istanbul-lib-source-maps-4.0.1.tgz", + "integrity": "sha512-n3s8EwkdFIJCG3BPKBYvskgXGoy88ARzvegkitk60NxRdwltLOTaH7CUiMRXvwYorl0Q712iEjcWB+fK/MrWVw==", "dev": true, - "license": "MIT", "dependencies": { - "ansi-escapes": "^4.2.1", - "chalk": "^4.1.1", - "cli-cursor": "^3.1.0", - "cli-width": "^3.0.0", - "external-editor": "^3.0.3", - "figures": "^3.0.0", - "lodash": "^4.17.21", - "mute-stream": "0.0.8", - "ora": "^5.4.1", - "run-async": "^2.4.0", - "rxjs": "^7.5.5", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0", - "through": "^2.3.6", - "wrap-ansi": "^6.0.1" + "debug": "^4.1.1", + "istanbul-lib-coverage": "^3.0.0", + "source-map": "^0.6.1" }, "engines": { - "node": ">=12.0.0" + "node": ">=10" } }, - "node_modules/inquirer/node_modules/ansi-escapes": { - "version": "4.3.2", + "node_modules/istanbul-reports": { + "version": "3.1.6", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "type-fest": "^0.21.3" + "html-escaper": "^2.0.0", + "istanbul-lib-report": "^3.0.0" }, "engines": { "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/inquirer/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/jake": { + "version": "10.8.7", "dev": true, - "license": "MIT", + "license": "Apache-2.0", + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/inquirer/node_modules/ansi-styles": { + "node_modules/jake/node_modules/ansi-styles": { "version": "4.3.0", "dev": true, "license": "MIT", @@ -16367,7 +16599,16 @@ "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/chalk": { + "node_modules/jake/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, + "license": "MIT", + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/jake/node_modules/chalk": { "version": "4.1.2", "dev": true, "license": "MIT", @@ -16382,7 +16623,7 @@ "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/inquirer/node_modules/color-convert": { + "node_modules/jake/node_modules/color-convert": { "version": "2.0.1", "dev": true, "license": "MIT", @@ -16393,1576 +16634,1607 @@ "node": ">=7.0.0" } }, - "node_modules/inquirer/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/inquirer/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/inquirer/node_modules/figures": { - "version": "3.2.0", + "node_modules/jake/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "escape-string-regexp": "^1.0.5" - }, - "engines": { - "node": ">=8" + "brace-expansion": "^1.1.7" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/inquirer/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/inquirer/node_modules/string-width": { - "version": "4.2.3", + "node_modules/jake/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/inquirer/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/jest-diff": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "chalk": "^4.0.0", + "diff-sequences": "^29.6.3", + "jest-get-type": "^29.6.3", + "pretty-format": "^29.7.0" }, "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/inquirer/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/jest-diff/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "color-convert": "^2.0.1" }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/inquirer/node_modules/type-fest": { - "version": "0.21.3", + "node_modules/jest-diff/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/internal-slot": { - "version": "1.0.6", + "node_modules/jest-diff/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "get-intrinsic": "^1.2.2", - "hasown": "^2.0.0", - "side-channel": "^1.0.4" + "color-name": "~1.1.4" }, "engines": { - "node": ">= 0.4" + "node": ">=7.0.0" } }, - "node_modules/ip": { - "version": "2.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/irregular-plurals": { - "version": "3.5.0", + "node_modules/jest-diff/node_modules/jest-get-type": { + "version": "29.6.3", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-array-buffer": { - "version": "3.0.2", + "node_modules/jest-diff/node_modules/pretty-format": { + "version": "29.7.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.0", - "is-typed-array": "^1.1.10" + "@jest/schemas": "^29.6.3", + "ansi-styles": "^5.0.0", + "react-is": "^18.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" } }, - "node_modules/is-arrayish": { - "version": "0.2.1", - "license": "MIT" - }, - "node_modules/is-bigint": { - "version": "1.0.4", + "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "dev": true, "license": "MIT", - "dependencies": { - "has-bigints": "^1.0.1" + "engines": { + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-binary-path": { - "version": "2.1.0", + "node_modules/jest-diff/node_modules/react-is": { + "version": "18.2.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jest-diff/node_modules/supports-color": { + "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "binary-extensions": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/is-boolean-object": { - "version": "1.1.2", - "dev": true, + "node_modules/jest-get-type": { + "version": "27.5.1", + "license": "MIT", + "engines": { + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + } + }, + "node_modules/jest-validate": { + "version": "27.5.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "@jest/types": "^27.5.1", + "camelcase": "^6.2.0", + "chalk": "^4.0.0", + "jest-get-type": "^27.5.1", + "leven": "^3.1.0", + "pretty-format": "^27.5.1" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/is-builtin-module": { - "version": "3.2.1", + "node_modules/jest-validate/node_modules/ansi-styles": { + "version": "4.3.0", "license": "MIT", "dependencies": { - "builtin-modules": "^3.3.0" + "color-convert": "^2.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/is-callable": { - "version": "1.2.7", - "dev": true, + "node_modules/jest-validate/node_modules/chalk": { + "version": "4.1.2", "license": "MIT", + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/is-ci": { - "version": "3.0.1", - "dev": true, + "node_modules/jest-validate/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", "dependencies": { - "ci-info": "^3.2.0" + "color-name": "~1.1.4" }, - "bin": { - "is-ci": "bin.js" + "engines": { + "node": ">=7.0.0" } }, - "node_modules/is-core-module": { - "version": "2.13.1", + "node_modules/jest-validate/node_modules/supports-color": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "hasown": "^2.0.0" + "has-flag": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/is-date-object": { - "version": "1.0.5", + "node_modules/jest-worker": { + "version": "27.5.1", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "has-tostringtag": "^1.0.0" + "@types/node": "*", + "merge-stream": "^2.0.0", + "supports-color": "^8.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 10.13.0" } }, - "node_modules/is-docker": { - "version": "2.2.1", + "node_modules/jest-worker/node_modules/supports-color": { + "version": "8.1.1", "dev": true, "license": "MIT", - "bin": { - "is-docker": "cli.js" + "peer": true, + "dependencies": { + "has-flag": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/is-error": { - "version": "2.2.2", + "node_modules/js-string-escape": { + "version": "1.0.1", "dev": true, - "license": "MIT" - }, - "node_modules/is-extglob": { - "version": "2.1.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">= 0.8" } }, - "node_modules/is-fullwidth-code-point": { + "node_modules/js-tokens": { "version": "4.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "license": "MIT" }, - "node_modules/is-glob": { - "version": "4.0.3", + "node_modules/js-yaml": { + "version": "4.1.0", "license": "MIT", "dependencies": { - "is-extglob": "^2.1.1" + "argparse": "^2.0.1" }, - "engines": { - "node": ">=0.10.0" + "bin": { + "js-yaml": "bin/js-yaml.js" } }, - "node_modules/is-interactive": { - "version": "1.0.0", + "node_modules/jsesc": { + "version": "2.5.2", "dev": true, "license": "MIT", + "peer": true, + "bin": { + "jsesc": "bin/jsesc" + }, "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/is-lambda": { - "version": "1.0.1", - "dev": true, + "node_modules/json-buffer": { + "version": "3.0.1", "license": "MIT" }, - "node_modules/is-negative-zero": { - "version": "2.0.2", + "node_modules/json-parse-better-errors": { + "version": "1.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } + "license": "MIT" }, - "node_modules/is-number": { - "version": "7.0.0", - "license": "MIT", - "engines": { - "node": ">=0.12.0" - } + "node_modules/json-parse-even-better-errors": { + "version": "2.3.1", + "license": "MIT" }, - "node_modules/is-number-object": { - "version": "1.0.7", + "node_modules/json-schema-traverse": { + "version": "1.0.0", + "license": "MIT" + }, + "node_modules/json-stable-stringify-without-jsonify": { + "version": "1.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "has-tostringtag": "^1.0.0" - }, - "engines": { - "node": ">= 0.4" - }, + "license": "MIT" + }, + "node_modules/json-stringify-nice": { + "version": "1.1.4", + "dev": true, + "license": "ISC", "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/is-obj": { - "version": "2.0.0", + "node_modules/json-stringify-safe": { + "version": "5.0.1", "dev": true, - "license": "MIT", - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/is-path-cwd": { - "version": "2.2.0", + "node_modules/json5": { + "version": "2.2.3", "dev": true, "license": "MIT", + "bin": { + "json5": "lib/cli.js" + }, "engines": { "node": ">=6" } }, - "node_modules/is-path-inside": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/jsonc-parser": { + "version": "3.2.0", + "license": "MIT" }, - "node_modules/is-plain-obj": { - "version": "4.1.0", + "node_modules/jsonfile": { + "version": "6.1.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "universalify": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "graceful-fs": "^4.1.6" } }, - "node_modules/is-plain-object": { - "version": "5.0.0", + "node_modules/jsonparse": { + "version": "1.3.1", "dev": true, + "engines": [ + "node >= 0.2.0" + ], + "license": "MIT" + }, + "node_modules/jsonpointer": { + "version": "5.0.1", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/is-promise": { - "version": "4.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/is-regex": { - "version": "1.1.4", + "node_modules/JSONStream": { + "version": "1.3.5", "dev": true, - "license": "MIT", + "license": "(MIT OR Apache-2.0)", "dependencies": { - "call-bind": "^1.0.2", - "has-tostringtag": "^1.0.0" + "jsonparse": "^1.2.0", + "through": ">=2.2.7 <3" }, - "engines": { - "node": ">= 0.4" + "bin": { + "JSONStream": "bin.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "*" } }, - "node_modules/is-shared-array-buffer": { - "version": "1.0.2", + "node_modules/jszip": { + "version": "3.10.1", + "dev": true, + "license": "(MIT OR GPL-3.0-or-later)", + "dependencies": { + "lie": "~3.3.0", + "pako": "~1.0.2", + "readable-stream": "~2.3.6", + "setimmediate": "^1.0.5" + } + }, + "node_modules/jszip/node_modules/isarray": { + "version": "1.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/jszip/node_modules/readable-stream": { + "version": "2.3.8", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/is-ssh": { - "version": "1.4.0", + "node_modules/jszip/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/jszip/node_modules/string_decoder": { + "version": "1.1.1", "dev": true, "license": "MIT", "dependencies": { - "protocols": "^2.0.1" + "safe-buffer": "~5.1.0" } }, - "node_modules/is-stream": { - "version": "2.0.1", + "node_modules/junk": { + "version": "4.0.1", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/is-string": { - "version": "1.0.7", + "node_modules/just-diff": { + "version": "5.2.0", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/just-diff-apply": { + "version": "5.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/just-extend": { + "version": "4.2.1", + "dev": true, + "license": "MIT" + }, + "node_modules/keep-func-props": { + "version": "4.0.1", + "license": "Apache-2.0", "dependencies": { - "has-tostringtag": "^1.0.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=12.20.0" } }, - "node_modules/is-symbol": { - "version": "1.0.4", - "dev": true, + "node_modules/keyv": { + "version": "4.5.4", "license": "MIT", "dependencies": { - "has-symbols": "^1.0.2" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "json-buffer": "3.0.1" } }, - "node_modules/is-text-path": { - "version": "1.0.1", + "node_modules/kind-of": { + "version": "6.0.3", "dev": true, "license": "MIT", - "dependencies": { - "text-extensions": "^1.0.0" - }, "engines": { "node": ">=0.10.0" } }, - "node_modules/is-typed-array": { - "version": "1.1.12", - "dev": true, + "node_modules/lazystream": { + "version": "1.0.1", "license": "MIT", "dependencies": { - "which-typed-array": "^1.1.11" + "readable-stream": "^2.0.5" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">= 0.6.3" } }, - "node_modules/is-typedarray": { + "node_modules/lazystream/node_modules/isarray": { "version": "1.0.0", - "dev": true, "license": "MIT" }, - "node_modules/is-unicode-supported": { - "version": "1.3.0", + "node_modules/lazystream/node_modules/readable-stream": { + "version": "2.3.8", "license": "MIT", - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/is-url": { - "version": "1.2.4", + "node_modules/lazystream/node_modules/safe-buffer": { + "version": "5.1.2", "license": "MIT" }, - "node_modules/is-url-superb": { - "version": "4.0.0", + "node_modules/lazystream/node_modules/string_decoder": { + "version": "1.1.1", "license": "MIT", - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "safe-buffer": "~5.1.0" } }, - "node_modules/is-weakref": { - "version": "1.0.2", + "node_modules/lerna": { + "version": "5.6.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2" + "@lerna/add": "5.6.2", + "@lerna/bootstrap": "5.6.2", + "@lerna/changed": "5.6.2", + "@lerna/clean": "5.6.2", + "@lerna/cli": "5.6.2", + "@lerna/command": "5.6.2", + "@lerna/create": "5.6.2", + "@lerna/diff": "5.6.2", + "@lerna/exec": "5.6.2", + "@lerna/import": "5.6.2", + "@lerna/info": "5.6.2", + "@lerna/init": "5.6.2", + "@lerna/link": "5.6.2", + "@lerna/list": "5.6.2", + "@lerna/publish": "5.6.2", + "@lerna/run": "5.6.2", + "@lerna/version": "5.6.2", + "@nrwl/devkit": ">=14.8.1 < 16", + "import-local": "^3.0.2", + "inquirer": "^8.2.4", + "npmlog": "^6.0.2", + "nx": ">=14.8.1 < 16", + "typescript": "^3 || ^4" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "lerna": "cli.js" + }, + "engines": { + "node": "^14.15.0 || >=16.0.0" } }, - "node_modules/is-wsl": { - "version": "2.2.0", + "node_modules/lerna/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "is-docker": "^2.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/isarray": { - "version": "2.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/iserror": { - "version": "0.0.2", - "license": "MIT" - }, - "node_modules/isexe": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/isobject": { + "node_modules/lerna/node_modules/are-we-there-yet": { "version": "3.0.1", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" + }, "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/istanbul-lib-coverage": { - "version": "3.2.2", + "node_modules/lerna/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=8" - } + "license": "MIT" }, - "node_modules/istanbul-lib-report": { - "version": "3.0.1", + "node_modules/lerna/node_modules/gauge": { + "version": "4.0.4", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "istanbul-lib-coverage": "^3.0.0", - "make-dir": "^4.0.0", - "supports-color": "^7.1.0" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/istanbul-lib-report/node_modules/make-dir": { - "version": "4.0.0", + "node_modules/lerna/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/lerna/node_modules/npmlog": { + "version": "6.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "semver": "^7.5.3" + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/istanbul-lib-report/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/lerna/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/istanbul-reports": { - "version": "3.1.6", + "node_modules/lerna/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "html-escaper": "^2.0.0", - "istanbul-lib-report": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { "node": ">=8" } }, - "node_modules/jake": { - "version": "10.8.7", + "node_modules/lerna/node_modules/typescript": { + "version": "4.9.5", "dev": true, "license": "Apache-2.0", - "dependencies": { - "async": "^3.2.3", - "chalk": "^4.0.2", - "filelist": "^1.0.4", - "minimatch": "^3.1.2" - }, "bin": { - "jake": "bin/cli.js" + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" }, "engines": { - "node": ">=10" + "node": ">=4.2.0" } }, - "node_modules/jake/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "node_modules/leven": { + "version": "3.1.0", "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" - } - }, - "node_modules/jake/node_modules/brace-expansion": { - "version": "1.1.11", - "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "node": ">=6" } }, - "node_modules/jake/node_modules/chalk": { - "version": "4.1.2", + "node_modules/levn": { + "version": "0.4.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "prelude-ls": "^1.2.1", + "type-check": "~0.4.0" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": ">= 0.8.0" } }, - "node_modules/jake/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/libnpmaccess": { + "version": "6.0.4", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "aproba": "^2.0.0", + "minipass": "^3.1.1", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jake/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/libnpmaccess/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "lru-cache": "^7.5.1" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jake/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/libnpmaccess/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-diff": { - "version": "29.7.0", + "node_modules/libnpmpublish": { + "version": "6.0.5", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "chalk": "^4.0.0", - "diff-sequences": "^29.6.3", - "jest-get-type": "^29.6.3", - "pretty-format": "^29.7.0" + "normalize-package-data": "^4.0.0", + "npm-package-arg": "^9.0.1", + "npm-registry-fetch": "^13.0.0", + "semver": "^7.3.7", + "ssri": "^9.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-diff/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/libnpmpublish/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-convert": "^2.0.1" + "lru-cache": "^7.5.1" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-diff/node_modules/chalk": { - "version": "4.1.2", + "node_modules/libnpmpublish/node_modules/normalize-package-data": { + "version": "4.0.1", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-diff/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/libnpmpublish/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "color-name": "~1.1.4" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/jest-diff/node_modules/jest-get-type": { - "version": "29.6.3", + "node_modules/lie": { + "version": "3.3.0", "dev": true, "license": "MIT", - "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "dependencies": { + "immediate": "~3.0.5" } }, - "node_modules/jest-diff/node_modules/pretty-format": { - "version": "29.7.0", + "node_modules/lilconfig": { + "version": "2.1.0", "dev": true, "license": "MIT", - "dependencies": { - "@jest/schemas": "^29.6.3", - "ansi-styles": "^5.0.0", - "react-is": "^18.0.0" - }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": ">=10" } }, - "node_modules/jest-diff/node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", + "node_modules/lines-and-columns": { + "version": "1.2.4", + "license": "MIT" + }, + "node_modules/lint-staged": { + "version": "13.3.0", "dev": true, "license": "MIT", + "dependencies": { + "chalk": "5.3.0", + "commander": "11.0.0", + "debug": "4.3.4", + "execa": "7.2.0", + "lilconfig": "2.1.0", + "listr2": "6.6.1", + "micromatch": "4.0.5", + "pidtree": "0.6.0", + "string-argv": "0.3.2", + "yaml": "2.3.1" + }, + "bin": { + "lint-staged": "bin/lint-staged.js" + }, "engines": { - "node": ">=10" + "node": "^16.14.0 || >=18.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://opencollective.com/lint-staged" } }, - "node_modules/jest-diff/node_modules/react-is": { - "version": "18.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/jest-diff/node_modules/supports-color": { + "node_modules/lint-staged/node_modules/execa": { "version": "7.2.0", "dev": true, "license": "MIT", "dependencies": { - "has-flag": "^4.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^4.3.0", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^14.18.0 || ^16.14.0 || >=18.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/jest-get-type": { - "version": "27.5.1", - "license": "MIT", + "node_modules/lint-staged/node_modules/human-signals": { + "version": "4.3.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=14.18.0" } }, - "node_modules/jest-validate": { - "version": "27.5.1", + "node_modules/lint-staged/node_modules/is-stream": { + "version": "3.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "@jest/types": "^27.5.1", - "camelcase": "^6.2.0", - "chalk": "^4.0.0", - "jest-get-type": "^27.5.1", - "leven": "^3.1.0", - "pretty-format": "^27.5.1" - }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/lint-staged/node_modules/npm-run-path": { + "version": "5.1.0", + "dev": true, "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/chalk": { - "version": "4.1.2", + "node_modules/lint-staged/node_modules/onetime": { + "version": "6.0.0", + "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/lint-staged/node_modules/strip-final-newline": { + "version": "3.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jest-validate/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "node_modules/lint-staged/node_modules/yaml": { + "version": "2.3.1", + "dev": true, + "license": "ISC", "engines": { - "node": ">=8" + "node": ">= 14" } }, - "node_modules/jest-worker": { - "version": "27.5.1", + "node_modules/listr2": { + "version": "6.6.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "@types/node": "*", - "merge-stream": "^2.0.0", - "supports-color": "^8.0.0" + "cli-truncate": "^3.1.0", + "colorette": "^2.0.20", + "eventemitter3": "^5.0.1", + "log-update": "^5.0.1", + "rfdc": "^1.3.0", + "wrap-ansi": "^8.1.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=16.0.0" + }, + "peerDependencies": { + "enquirer": ">= 2.3.0 < 3" + }, + "peerDependenciesMeta": { + "enquirer": { + "optional": true + } } }, - "node_modules/jest-worker/node_modules/supports-color": { - "version": "8.1.1", + "node_modules/listr2/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "has-flag": "^4.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/js-string-escape": { - "version": "1.0.1", + "node_modules/load-json-file": { + "version": "6.2.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.8" - } - }, - "node_modules/js-tokens": { - "version": "4.0.0", - "license": "MIT" - }, - "node_modules/js-yaml": { - "version": "4.1.0", - "license": "MIT", "dependencies": { - "argparse": "^2.0.1" - }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/jsesc": { - "version": "2.5.2", - "dev": true, - "license": "MIT", - "peer": true, - "bin": { - "jsesc": "bin/jsesc" + "graceful-fs": "^4.1.15", + "parse-json": "^5.0.0", + "strip-bom": "^4.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=4" + "node": ">=8" } }, - "node_modules/json-buffer": { - "version": "3.0.1", - "license": "MIT" - }, - "node_modules/json-parse-better-errors": { - "version": "1.0.2", - "dev": true, - "license": "MIT" - }, - "node_modules/json-parse-even-better-errors": { - "version": "2.3.1", - "license": "MIT" - }, - "node_modules/json-schema-traverse": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/json-stable-stringify-without-jsonify": { - "version": "1.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/json-stringify-nice": { - "version": "1.1.4", + "node_modules/load-json-file/node_modules/type-fest": { + "version": "0.6.0", "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "license": "(MIT OR CC0-1.0)", + "engines": { + "node": ">=8" } }, - "node_modules/json-stringify-safe": { - "version": "5.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/json5": { - "version": "2.2.3", + "node_modules/loader-runner": { + "version": "4.3.0", "dev": true, "license": "MIT", - "bin": { - "json5": "lib/cli.js" - }, + "peer": true, "engines": { - "node": ">=6" + "node": ">=6.11.5" } - }, - "node_modules/jsonc-parser": { - "version": "3.2.0", - "license": "MIT" - }, - "node_modules/jsonfile": { - "version": "6.1.0", + }, + "node_modules/loader-utils": { + "version": "2.0.4", "dev": true, "license": "MIT", "dependencies": { - "universalify": "^2.0.0" + "big.js": "^5.2.2", + "emojis-list": "^3.0.0", + "json5": "^2.1.2" }, - "optionalDependencies": { - "graceful-fs": "^4.1.6" + "engines": { + "node": ">=8.9.0" } }, - "node_modules/jsonparse": { - "version": "1.3.1", + "node_modules/local-pkg": { + "version": "0.4.3", "dev": true, - "engines": [ - "node >= 0.2.0" - ], - "license": "MIT" - }, - "node_modules/jsonpointer": { - "version": "5.0.1", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/JSONStream": { - "version": "1.3.5", - "dev": true, - "license": "(MIT OR Apache-2.0)", + "node_modules/locate-path": { + "version": "7.2.0", + "license": "MIT", "dependencies": { - "jsonparse": "^1.2.0", - "through": ">=2.2.7 <3" - }, - "bin": { - "JSONStream": "bin.js" + "p-locate": "^6.0.0" }, "engines": { - "node": "*" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/jszip": { - "version": "3.10.1", + "node_modules/lodash": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash-es": { + "version": "4.17.21", + "license": "MIT" + }, + "node_modules/lodash.camelcase": { + "version": "4.3.0", + "license": "MIT" + }, + "node_modules/lodash.defaults": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/lodash.defaults/-/lodash.defaults-4.2.0.tgz", + "integrity": "sha512-qjxPLHd3r5DnsdGacqOMU6pb/avJzdh9tFX2ymgoZE27BmjXrNy/y4LoaiTeAb+O3gL8AfpJGtqfX/ae2leYYQ==", + "dev": true + }, + "node_modules/lodash.difference": { + "version": "4.5.0", + "resolved": "https://registry.npmjs.org/lodash.difference/-/lodash.difference-4.5.0.tgz", + "integrity": "sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==", + "dev": true + }, + "node_modules/lodash.flatten": { + "version": "4.4.0", + "resolved": "https://registry.npmjs.org/lodash.flatten/-/lodash.flatten-4.4.0.tgz", + "integrity": "sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==", + "dev": true + }, + "node_modules/lodash.get": { + "version": "4.4.2", "dev": true, - "license": "(MIT OR GPL-3.0-or-later)", - "dependencies": { - "lie": "~3.3.0", - "pako": "~1.0.2", - "readable-stream": "~2.3.6", - "setimmediate": "^1.0.5" - } + "license": "MIT" }, - "node_modules/jszip/node_modules/isarray": { - "version": "1.0.0", + "node_modules/lodash.isfunction": { + "version": "3.0.9", "dev": true, "license": "MIT" }, - "node_modules/jszip/node_modules/readable-stream": { - "version": "2.3.8", + "node_modules/lodash.ismatch": { + "version": "4.4.0", "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" - } + "license": "MIT" }, - "node_modules/jszip/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/lodash.isplainobject": { + "version": "4.0.6", "dev": true, "license": "MIT" }, - "node_modules/jszip/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/lodash.kebabcase": { + "version": "4.1.1", "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" - } + "license": "MIT" }, - "node_modules/junk": { - "version": "4.0.1", - "license": "MIT", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/lodash.merge": { + "version": "4.6.2", + "license": "MIT" }, - "node_modules/just-diff": { - "version": "5.2.0", + "node_modules/lodash.mergewith": { + "version": "4.6.2", "dev": true, "license": "MIT" }, - "node_modules/just-diff-apply": { - "version": "5.5.0", + "node_modules/lodash.snakecase": { + "version": "4.1.1", "dev": true, "license": "MIT" }, - "node_modules/just-extend": { - "version": "4.2.1", + "node_modules/lodash.startcase": { + "version": "4.4.0", "dev": true, "license": "MIT" }, - "node_modules/keep-func-props": { - "version": "4.0.1", + "node_modules/lodash.union": { + "version": "4.6.0", + "resolved": "https://registry.npmjs.org/lodash.union/-/lodash.union-4.6.0.tgz", + "integrity": "sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==", + "dev": true + }, + "node_modules/lodash.uniq": { + "version": "4.5.0", + "dev": true, + "license": "MIT" + }, + "node_modules/lodash.upperfirst": { + "version": "4.3.1", + "dev": true, + "license": "MIT" + }, + "node_modules/log-process-errors": { + "version": "8.0.0", "license": "Apache-2.0", "dependencies": { - "mimic-fn": "^4.0.0" + "colors-option": "^3.0.0", + "figures": "^4.0.0", + "filter-obj": "^3.0.0", + "jest-validate": "^27.4.2", + "map-obj": "^5.0.0", + "moize": "^6.1.0", + "semver": "^7.3.5" }, "engines": { "node": ">=12.20.0" } }, - "node_modules/keyv": { - "version": "4.5.4", - "license": "MIT", + "node_modules/log-process-errors/node_modules/colors-option": { + "version": "3.0.0", + "license": "Apache-2.0", "dependencies": { - "json-buffer": "3.0.1" - } - }, - "node_modules/kind-of": { - "version": "6.0.3", - "dev": true, - "license": "MIT", + "chalk": "^5.0.0", + "filter-obj": "^3.0.0", + "is-plain-obj": "^4.0.0", + "jest-validate": "^27.3.1" + }, "engines": { - "node": ">=0.10.0" + "node": ">=12.20.0" } }, - "node_modules/lazystream": { - "version": "1.0.1", + "node_modules/log-process-errors/node_modules/figures": { + "version": "4.0.1", "license": "MIT", "dependencies": { - "readable-stream": "^2.0.5" + "escape-string-regexp": "^5.0.0", + "is-unicode-supported": "^1.2.0" }, "engines": { - "node": ">= 0.6.3" - } - }, - "node_modules/lazystream/node_modules/isarray": { - "version": "1.0.0", - "license": "MIT" - }, - "node_modules/lazystream/node_modules/readable-stream": { - "version": "2.3.8", - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lazystream/node_modules/safe-buffer": { - "version": "5.1.2", - "license": "MIT" - }, - "node_modules/lazystream/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/log-process-errors/node_modules/filter-obj": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna": { - "version": "5.6.2", - "dev": true, - "license": "MIT", - "dependencies": { - "@lerna/add": "5.6.2", - "@lerna/bootstrap": "5.6.2", - "@lerna/changed": "5.6.2", - "@lerna/clean": "5.6.2", - "@lerna/cli": "5.6.2", - "@lerna/command": "5.6.2", - "@lerna/create": "5.6.2", - "@lerna/diff": "5.6.2", - "@lerna/exec": "5.6.2", - "@lerna/import": "5.6.2", - "@lerna/info": "5.6.2", - "@lerna/init": "5.6.2", - "@lerna/link": "5.6.2", - "@lerna/list": "5.6.2", - "@lerna/publish": "5.6.2", - "@lerna/run": "5.6.2", - "@lerna/version": "5.6.2", - "@nrwl/devkit": ">=14.8.1 < 16", - "import-local": "^3.0.2", - "inquirer": "^8.2.4", - "npmlog": "^6.0.2", - "nx": ">=14.8.1 < 16", - "typescript": "^3 || ^4" - }, - "bin": { - "lerna": "cli.js" + "node_modules/log-symbols": { + "version": "4.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "chalk": "^4.1.0", + "is-unicode-supported": "^0.1.0" }, "engines": { - "node": "^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/log-symbols/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/lerna/node_modules/are-we-there-yet": { - "version": "3.0.1", + "node_modules/log-symbols/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/lerna/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lerna/node_modules/gauge": { - "version": "4.0.4", + "node_modules/log-symbols/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", - "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", - "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/lerna/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/log-symbols/node_modules/is-unicode-supported": { + "version": "0.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/npmlog": { - "version": "6.0.2", + "node_modules/log-symbols/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/lerna/node_modules/string-width": { - "version": "4.2.3", + "node_modules/log-update": { + "version": "5.0.1", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-escapes": "^5.0.0", + "cli-cursor": "^4.0.0", + "slice-ansi": "^5.0.0", + "strip-ansi": "^7.0.1", + "wrap-ansi": "^8.0.1" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/log-update/node_modules/ansi-escapes": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "type-fest": "^1.0.2" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lerna/node_modules/typescript": { - "version": "4.9.5", + "node_modules/log-update/node_modules/cli-cursor": { + "version": "4.0.0", "dev": true, - "license": "Apache-2.0", - "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "license": "MIT", + "dependencies": { + "restore-cursor": "^4.0.0" }, "engines": { - "node": ">=4.2.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/leven": { - "version": "3.1.0", + "node_modules/log-update/node_modules/restore-cursor": { + "version": "4.0.0", + "dev": true, "license": "MIT", + "dependencies": { + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" + }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/levn": { - "version": "0.4.1", + "node_modules/log-update/node_modules/type-fest": { + "version": "1.4.0", "dev": true, - "license": "MIT", - "dependencies": { - "prelude-ls": "^1.2.1", - "type-check": "~0.4.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 0.8.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/libnpmaccess": { - "version": "6.0.4", + "node_modules/log-update/node_modules/wrap-ansi": { + "version": "8.1.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "aproba": "^2.0.0", - "minipass": "^3.1.1", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0" + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/libnpmaccess/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/long": { + "version": "5.2.3", + "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", + "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" + }, + "node_modules/loupe": { + "version": "2.3.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^7.5.1" - }, + "get-func-name": "^2.0.1" + } + }, + "node_modules/lowercase-keys": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/libnpmaccess/node_modules/npm-package-arg": { - "version": "9.1.2", + "node_modules/lru-cache": { + "version": "7.18.3", "dev": true, "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12" } }, - "node_modules/libnpmpublish": { - "version": "6.0.5", + "node_modules/luxon": { + "version": "3.4.4", + "license": "MIT", + "engines": { + "node": ">=12" + } + }, + "node_modules/macos-release": { + "version": "3.2.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/magic-string": { + "version": "0.25.9", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "normalize-package-data": "^4.0.0", - "npm-package-arg": "^9.0.1", - "npm-registry-fetch": "^13.0.0", - "semver": "^7.3.7", - "ssri": "^9.0.0" + "sourcemap-codec": "^1.4.8" + } + }, + "node_modules/make-dir": { + "version": "3.1.0", + "license": "MIT", + "dependencies": { + "semver": "^6.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/make-dir/node_modules/semver": { + "version": "6.3.1", + "license": "ISC", + "bin": { + "semver": "bin/semver.js" } }, - "node_modules/libnpmpublish/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/make-error": { + "version": "1.3.6", + "license": "ISC" + }, + "node_modules/make-fetch-happen": { + "version": "10.2.1", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^7.5.1" + "agentkeepalive": "^4.2.1", + "cacache": "^16.1.0", + "http-cache-semantics": "^4.1.0", + "http-proxy-agent": "^5.0.0", + "https-proxy-agent": "^5.0.0", + "is-lambda": "^1.0.1", + "lru-cache": "^7.7.1", + "minipass": "^3.1.6", + "minipass-collect": "^1.0.2", + "minipass-fetch": "^2.0.3", + "minipass-flush": "^1.0.5", + "minipass-pipeline": "^1.2.4", + "negotiator": "^0.6.3", + "promise-retry": "^2.0.1", + "socks-proxy-agent": "^7.0.0", + "ssri": "^9.0.0" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/libnpmpublish/node_modules/normalize-package-data": { - "version": "4.0.1", + "node_modules/map-age-cleaner": { + "version": "0.1.3", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "p-defer": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" } }, - "node_modules/libnpmpublish/node_modules/npm-package-arg": { - "version": "9.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, + "node_modules/map-obj": { + "version": "5.0.2", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lie": { - "version": "3.3.0", + "node_modules/matcher": { + "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "immediate": "~3.0.5" + "escape-string-regexp": "^5.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lilconfig": { - "version": "2.1.0", + "node_modules/md5-hex": { + "version": "3.0.1", "dev": true, "license": "MIT", + "dependencies": { + "blueimp-md5": "^2.10.0" + }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/lines-and-columns": { - "version": "1.2.4", - "license": "MIT" - }, - "node_modules/lint-staged": { - "version": "13.3.0", + "node_modules/mem": { + "version": "9.0.2", "dev": true, "license": "MIT", "dependencies": { - "chalk": "5.3.0", - "commander": "11.0.0", - "debug": "4.3.4", - "execa": "7.2.0", - "lilconfig": "2.1.0", - "listr2": "6.6.1", - "micromatch": "4.0.5", - "pidtree": "0.6.0", - "string-argv": "0.3.2", - "yaml": "2.3.1" - }, - "bin": { - "lint-staged": "bin/lint-staged.js" + "map-age-cleaner": "^0.1.3", + "mimic-fn": "^4.0.0" }, "engines": { - "node": "^16.14.0 || >=18.0.0" + "node": ">=12.20" }, "funding": { - "url": "https://opencollective.com/lint-staged" + "url": "https://github.com/sindresorhus/mem?sponsor=1" } }, - "node_modules/lint-staged/node_modules/execa": { - "version": "7.2.0", + "node_modules/memfs": { + "version": "3.5.3", "dev": true, - "license": "MIT", + "license": "Unlicense", "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^4.3.0", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "fs-monkey": "^1.0.4" }, "engines": { - "node": "^14.18.0 || ^16.14.0 || >=18.0.0" - }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" + "node": ">= 4.0.0" } }, - "node_modules/lint-staged/node_modules/human-signals": { - "version": "4.3.1", + "node_modules/memoize-one": { + "version": "6.0.0", + "license": "MIT" + }, + "node_modules/memorystream": { + "version": "0.3.1", "dev": true, - "license": "Apache-2.0", "engines": { - "node": ">=14.18.0" + "node": ">= 0.10.0" } }, - "node_modules/lint-staged/node_modules/is-stream": { - "version": "3.0.0", + "node_modules/meow": { + "version": "8.1.2", "dev": true, "license": "MIT", + "dependencies": { + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/npm-run-path": { - "version": "5.1.0", + "node_modules/meow/node_modules/find-up": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=8" + } + }, + "node_modules/meow/node_modules/hosted-git-info": { + "version": "2.8.9", + "dev": true, + "license": "ISC" + }, + "node_modules/meow/node_modules/locate-path": { + "version": "5.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "p-locate": "^4.1.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/onetime": { - "version": "6.0.0", + "node_modules/meow/node_modules/p-limit": { + "version": "2.3.0", "dev": true, "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=12" + "node": ">=6" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/lint-staged/node_modules/strip-final-newline": { - "version": "3.0.0", + "node_modules/meow/node_modules/p-locate": { + "version": "4.1.0", "dev": true, "license": "MIT", - "engines": { - "node": ">=12" + "dependencies": { + "p-limit": "^2.2.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/lint-staged/node_modules/yaml": { - "version": "2.3.1", + "node_modules/meow/node_modules/path-exists": { + "version": "4.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": ">= 14" + "node": ">=8" } }, - "node_modules/listr2": { - "version": "6.6.1", + "node_modules/meow/node_modules/read-pkg": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "cli-truncate": "^3.1.0", - "colorette": "^2.0.20", - "eventemitter3": "^5.0.1", - "log-update": "^5.0.1", - "rfdc": "^1.3.0", - "wrap-ansi": "^8.1.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=16.0.0" - }, - "peerDependencies": { - "enquirer": ">= 2.3.0 < 3" - }, - "peerDependenciesMeta": { - "enquirer": { - "optional": true - } + "node": ">=8" } }, - "node_modules/listr2/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/meow/node_modules/read-pkg-up": { + "version": "7.0.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" }, "engines": { - "node": ">=12" + "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/load-json-file": { - "version": "6.2.0", + "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { + "version": "0.8.1", "dev": true, - "license": "MIT", - "dependencies": { - "graceful-fs": "^4.1.15", - "parse-json": "^5.0.0", - "strip-bom": "^4.0.0", - "type-fest": "^0.6.0" - }, + "license": "(MIT OR CC0-1.0)", "engines": { "node": ">=8" } }, - "node_modules/load-json-file/node_modules/type-fest": { + "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { + "version": "2.5.0", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" + } + }, + "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { "version": "0.6.0", "dev": true, "license": "(MIT OR CC0-1.0)", @@ -17970,154 +18242,118 @@ "node": ">=8" } }, - "node_modules/loader-runner": { - "version": "4.3.0", + "node_modules/meow/node_modules/resolve": { + "version": "1.22.8", "dev": true, "license": "MIT", - "peer": true, - "engines": { - "node": ">=6.11.5" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/loader-utils": { - "version": "2.0.4", + "node_modules/meow/node_modules/semver": { + "version": "5.7.2", "dev": true, - "license": "MIT", - "dependencies": { - "big.js": "^5.2.2", - "emojis-list": "^3.0.0", - "json5": "^2.1.2" - }, - "engines": { - "node": ">=8.9.0" + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/local-pkg": { - "version": "0.4.3", + "node_modules/meow/node_modules/type-fest": { + "version": "0.18.1", "dev": true, - "license": "MIT", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=14" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/antfu" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/locate-path": { - "version": "7.2.0", + "node_modules/merge-options": { + "version": "3.0.4", "license": "MIT", "dependencies": { - "p-locate": "^6.0.0" + "is-plain-obj": "^2.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/lodash": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash-es": { - "version": "4.17.21", - "license": "MIT" - }, - "node_modules/lodash.camelcase": { - "version": "4.3.0", - "license": "MIT" - }, - "node_modules/lodash.get": { - "version": "4.4.2", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isfunction": { - "version": "3.0.9", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.ismatch": { - "version": "4.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.isplainobject": { - "version": "4.0.6", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.kebabcase": { - "version": "4.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/lodash.merge": { - "version": "4.6.2", - "license": "MIT" - }, - "node_modules/lodash.mergewith": { - "version": "4.6.2", - "dev": true, - "license": "MIT" + "node_modules/merge-options/node_modules/is-plain-obj": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/lodash.snakecase": { - "version": "4.1.1", - "dev": true, + "node_modules/merge-stream": { + "version": "2.0.0", "license": "MIT" }, - "node_modules/lodash.startcase": { - "version": "4.4.0", - "dev": true, - "license": "MIT" + "node_modules/merge2": { + "version": "1.4.1", + "license": "MIT", + "engines": { + "node": ">= 8" + } }, - "node_modules/lodash.uniq": { - "version": "4.5.0", - "dev": true, - "license": "MIT" + "node_modules/micro-api-client": { + "version": "3.3.0", + "license": "ISC" }, - "node_modules/lodash.upperfirst": { - "version": "4.3.1", - "dev": true, + "node_modules/micro-memoize": { + "version": "4.1.2", "license": "MIT" }, - "node_modules/log-process-errors": { - "version": "8.0.0", - "license": "Apache-2.0", + "node_modules/micromatch": { + "version": "4.0.5", + "license": "MIT", "dependencies": { - "colors-option": "^3.0.0", - "figures": "^4.0.0", - "filter-obj": "^3.0.0", - "jest-validate": "^27.4.2", - "map-obj": "^5.0.0", - "moize": "^6.1.0", - "semver": "^7.3.5" + "braces": "^3.0.2", + "picomatch": "^2.3.1" }, "engines": { - "node": ">=12.20.0" + "node": ">=8.6" } }, - "node_modules/log-process-errors/node_modules/colors-option": { - "version": "3.0.0", - "license": "Apache-2.0", - "dependencies": { - "chalk": "^5.0.0", - "filter-obj": "^3.0.0", - "is-plain-obj": "^4.0.0", - "jest-validate": "^27.3.1" + "node_modules/micromatch/node_modules/picomatch": { + "version": "2.3.1", + "license": "MIT", + "engines": { + "node": ">=8.6" }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "license": "MIT", "engines": { - "node": ">=12.20.0" + "node": ">= 0.6" } }, - "node_modules/log-process-errors/node_modules/figures": { - "version": "4.0.1", + "node_modules/mime-types": { + "version": "2.1.35", "license": "MIT", "dependencies": { - "escape-string-regexp": "^5.0.0", - "is-unicode-supported": "^1.2.0" + "mime-db": "1.52.0" }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mimic-fn": { + "version": "4.0.0", + "license": "MIT", "engines": { "node": ">=12" }, @@ -18125,8 +18361,8 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-process-errors/node_modules/filter-obj": { - "version": "3.0.0", + "node_modules/mimic-response": { + "version": "4.0.0", "license": "MIT", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -18135,291 +18371,234 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/log-symbols": { - "version": "4.1.0", + "node_modules/min-indent": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "chalk": "^4.1.0", - "is-unicode-supported": "^0.1.0" - }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=4" } }, - "node_modules/log-symbols/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, - "license": "MIT", + "node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", "dependencies": { - "color-convert": "^2.0.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/log-symbols/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/minimist": { + "version": "1.2.8", "license": "MIT", - "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" - }, - "engines": { - "node": ">=10" - }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/log-symbols/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/minimist-options": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "arrify": "^1.0.1", + "is-plain-obj": "^1.1.0", + "kind-of": "^6.0.3" }, "engines": { - "node": ">=7.0.0" + "node": ">= 6" } }, - "node_modules/log-symbols/node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/minimist-options/node_modules/arrify": { + "version": "1.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.10.0" } }, - "node_modules/log-symbols/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/minimist-options/node_modules/is-plain-obj": { + "version": "1.1.0", "dev": true, "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/minipass": { + "version": "3.3.6", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "yallist": "^4.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/log-update": { - "version": "5.0.1", + "node_modules/minipass-collect": { + "version": "1.0.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-escapes": "^5.0.0", - "cli-cursor": "^4.0.0", - "slice-ansi": "^5.0.0", - "strip-ansi": "^7.0.1", - "wrap-ansi": "^8.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/log-update/node_modules/ansi-escapes": { - "version": "5.0.0", + "node_modules/minipass-fetch": { + "version": "2.1.2", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^1.0.2" + "minipass": "^3.1.6", + "minipass-sized": "^1.0.3", + "minizlib": "^2.1.2" }, "engines": { - "node": ">=12" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "encoding": "^0.1.13" } }, - "node_modules/log-update/node_modules/cli-cursor": { - "version": "4.0.0", + "node_modules/minipass-flush": { + "version": "1.0.5", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "restore-cursor": "^4.0.0" + "minipass": "^3.0.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 8" } }, - "node_modules/log-update/node_modules/restore-cursor": { - "version": "4.0.0", + "node_modules/minipass-json-stream": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "jsonparse": "^1.3.1", + "minipass": "^3.0.0" } }, - "node_modules/log-update/node_modules/type-fest": { - "version": "1.4.0", + "node_modules/minipass-pipeline": { + "version": "1.2.4", "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "license": "ISC", + "dependencies": { + "minipass": "^3.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=8" } }, - "node_modules/log-update/node_modules/wrap-ansi": { - "version": "8.1.0", + "node_modules/minipass-sized": { + "version": "1.0.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "ansi-styles": "^6.1.0", - "string-width": "^5.0.1", - "strip-ansi": "^7.0.1" + "minipass": "^3.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/long": { - "version": "5.2.3", - "resolved": "https://registry.npmjs.org/long/-/long-5.2.3.tgz", - "integrity": "sha512-lcHwpNoggQTObv5apGNCTdJrO69eHOZMi4BNC+rTLER8iHAqGrUVeLh/irVIM7zTw2bOXA8T6uNPeujwOLg/2Q==" - }, - "node_modules/loupe": { - "version": "2.3.7", - "dev": true, + "node_modules/minizlib": { + "version": "2.1.2", "license": "MIT", "dependencies": { - "get-func-name": "^2.0.1" + "minipass": "^3.0.0", + "yallist": "^4.0.0" + }, + "engines": { + "node": ">= 8" } }, - "node_modules/lowercase-keys": { - "version": "3.0.0", + "node_modules/mkdirp": { + "version": "1.0.4", "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bin": { + "mkdirp": "bin/cmd.js" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=10" } }, - "node_modules/lru-cache": { - "version": "7.18.3", + "node_modules/mkdirp-classic": { + "version": "0.5.3", "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" - } + "license": "MIT" }, - "node_modules/luxon": { - "version": "3.4.4", - "license": "MIT", + "node_modules/mkdirp-infer-owner": { + "version": "2.0.0", + "dev": true, + "license": "ISC", + "dependencies": { + "chownr": "^2.0.0", + "infer-owner": "^1.0.4", + "mkdirp": "^1.0.3" + }, "engines": { - "node": ">=12" + "node": ">=10" } }, - "node_modules/macos-release": { - "version": "3.2.0", + "node_modules/mlly": { + "version": "1.4.2", + "dev": true, "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "dependencies": { + "acorn": "^8.10.0", + "pathe": "^1.1.1", + "pkg-types": "^1.0.3", + "ufo": "^1.3.0" } }, - "node_modules/magic-string": { - "version": "0.25.9", + "node_modules/modify-values": { + "version": "1.0.1", "dev": true, "license": "MIT", - "dependencies": { - "sourcemap-codec": "^1.4.8" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/make-dir": { - "version": "3.1.0", + "node_modules/module-definition": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "semver": "^6.0.0" - }, - "engines": { - "node": ">=8" + "ast-module-types": "^5.0.0", + "node-source-walk": "^6.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/make-dir/node_modules/semver": { - "version": "6.3.1", - "license": "ISC", "bin": { - "semver": "bin/semver.js" - } - }, - "node_modules/make-error": { - "version": "1.3.6", - "license": "ISC" - }, - "node_modules/make-fetch-happen": { - "version": "10.2.1", - "dev": true, - "license": "ISC", - "dependencies": { - "agentkeepalive": "^4.2.1", - "cacache": "^16.1.0", - "http-cache-semantics": "^4.1.0", - "http-proxy-agent": "^5.0.0", - "https-proxy-agent": "^5.0.0", - "is-lambda": "^1.0.1", - "lru-cache": "^7.7.1", - "minipass": "^3.1.6", - "minipass-collect": "^1.0.2", - "minipass-fetch": "^2.0.3", - "minipass-flush": "^1.0.5", - "minipass-pipeline": "^1.2.4", - "negotiator": "^0.6.3", - "promise-retry": "^2.0.1", - "socks-proxy-agent": "^7.0.0", - "ssri": "^9.0.0" + "module-definition": "bin/cli.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=14" } }, - "node_modules/map-age-cleaner": { - "version": "0.1.3", - "dev": true, + "node_modules/module-details-from-path": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", + "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" + }, + "node_modules/moize": { + "version": "6.1.6", "license": "MIT", "dependencies": { - "p-defer": "^1.0.0" - }, - "engines": { - "node": ">=6" + "fast-equals": "^3.0.1", + "micro-memoize": "^4.1.2" } }, - "node_modules/map-obj": { - "version": "5.0.2", + "node_modules/move-file": { + "version": "3.1.0", "license": "MIT", + "dependencies": { + "path-exists": "^5.0.0" + }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -18427,1929 +18606,1964 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/matcher": { + "node_modules/mrmime": { + "version": "1.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=10" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "dev": true, + "license": "MIT" + }, + "node_modules/multimatch": { "version": "5.0.0", "dev": true, "license": "MIT", "dependencies": { - "escape-string-regexp": "^5.0.0" + "@types/minimatch": "^3.0.3", + "array-differ": "^3.0.0", + "array-union": "^2.1.0", + "arrify": "^2.0.1", + "minimatch": "^3.0.4" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/md5-hex": { - "version": "3.0.1", + "node_modules/multimatch/node_modules/arrify": { + "version": "2.0.1", "dev": true, "license": "MIT", - "dependencies": { - "blueimp-md5": "^2.10.0" - }, "engines": { "node": ">=8" } }, - "node_modules/mem": { - "version": "9.0.2", + "node_modules/multimatch/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, "license": "MIT", "dependencies": { - "map-age-cleaner": "^0.1.3", - "mimic-fn": "^4.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/multimatch/node_modules/minimatch": { + "version": "3.1.2", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sindresorhus/mem?sponsor=1" + "node": "*" } }, - "node_modules/memfs": { - "version": "3.5.3", + "node_modules/mute-stream": { + "version": "0.0.8", "dev": true, - "license": "Unlicense", - "dependencies": { - "fs-monkey": "^1.0.4" + "license": "ISC" + }, + "node_modules/nan": { + "version": "2.18.0", + "license": "MIT", + "optional": true + }, + "node_modules/nanoid": { + "version": "3.3.7", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "license": "MIT", + "bin": { + "nanoid": "bin/nanoid.cjs" }, "engines": { - "node": ">= 4.0.0" + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" } }, - "node_modules/memoize-one": { - "version": "6.0.0", + "node_modules/natural-compare": { + "version": "1.4.0", + "dev": true, "license": "MIT" }, - "node_modules/memorystream": { - "version": "0.3.1", + "node_modules/natural-compare-lite": { + "version": "1.4.0", + "dev": true, + "license": "MIT" + }, + "node_modules/negotiator": { + "version": "0.6.3", "dev": true, + "license": "MIT", "engines": { - "node": ">= 0.10.0" + "node": ">= 0.6" } }, - "node_modules/meow": { - "version": "8.1.2", + "node_modules/neo-async": { + "version": "2.6.2", "dev": true, - "license": "MIT", + "license": "MIT" + }, + "node_modules/nested-error-stacks": { + "version": "2.1.1", + "license": "MIT" + }, + "node_modules/netlify": { + "resolved": "packages/js-client", + "link": true + }, + "node_modules/netlify-headers-parser": { + "resolved": "packages/headers-parser", + "link": true + }, + "node_modules/netlify-redirect-parser": { + "resolved": "packages/redirect-parser", + "link": true + }, + "node_modules/nise": { + "version": "5.1.5", + "dev": true, + "license": "BSD-3-Clause", "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "@sinonjs/commons": "^2.0.0", + "@sinonjs/fake-timers": "^10.0.2", + "@sinonjs/text-encoding": "^0.7.1", + "just-extend": "^4.0.2", + "path-to-regexp": "^1.7.0" } }, - "node_modules/meow/node_modules/find-up": { - "version": "4.1.0", + "node_modules/nise/node_modules/@sinonjs/commons": { + "version": "2.0.0", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause", "dependencies": { - "locate-path": "^5.0.0", - "path-exists": "^4.0.0" - }, - "engines": { - "node": ">=8" + "type-detect": "4.0.8" } }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "2.8.9", + "node_modules/nise/node_modules/@sinonjs/fake-timers": { + "version": "10.3.0", "dev": true, - "license": "ISC" + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^3.0.0" + } }, - "node_modules/meow/node_modules/locate-path": { - "version": "5.0.0", + "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { + "version": "3.0.0", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "type-detect": "4.0.8" + } + }, + "node_modules/nock": { + "version": "13.4.0", "dev": true, "license": "MIT", "dependencies": { - "p-locate": "^4.1.0" + "debug": "^4.1.0", + "json-stringify-safe": "^5.0.1", + "propagate": "^2.0.0" }, "engines": { - "node": ">=8" + "node": ">= 10.13" } }, - "node_modules/meow/node_modules/p-limit": { - "version": "2.3.0", + "node_modules/node-addon-api": { + "version": "3.2.1", "dev": true, + "license": "MIT" + }, + "node_modules/node-domexception": { + "version": "1.0.0", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/jimmywarting" + }, + { + "type": "github", + "url": "https://paypal.me/jimmywarting" + } + ], + "license": "MIT", + "engines": { + "node": ">=10.5.0" + } + }, + "node_modules/node-fetch": { + "version": "3.3.2", "license": "MIT", "dependencies": { - "p-try": "^2.0.0" + "data-uri-to-buffer": "^4.0.0", + "fetch-blob": "^3.1.4", + "formdata-polyfill": "^4.0.10" }, "engines": { - "node": ">=6" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/node-fetch" } }, - "node_modules/meow/node_modules/p-locate": { - "version": "4.1.0", + "node_modules/node-gyp": { + "version": "9.4.1", "dev": true, "license": "MIT", "dependencies": { - "p-limit": "^2.2.0" + "env-paths": "^2.2.0", + "exponential-backoff": "^3.1.1", + "glob": "^7.1.4", + "graceful-fs": "^4.2.6", + "make-fetch-happen": "^10.0.3", + "nopt": "^6.0.0", + "npmlog": "^6.0.0", + "rimraf": "^3.0.2", + "semver": "^7.3.5", + "tar": "^6.1.2", + "which": "^2.0.2" + }, + "bin": { + "node-gyp": "bin/node-gyp.js" }, "engines": { - "node": ">=8" + "node": "^12.13 || ^14.13 || >=16" } }, - "node_modules/meow/node_modules/path-exists": { - "version": "4.0.0", - "dev": true, + "node_modules/node-gyp-build": { + "version": "4.7.1", "license": "MIT", - "engines": { - "node": ">=8" + "bin": { + "node-gyp-build": "bin.js", + "node-gyp-build-optional": "optional.js", + "node-gyp-build-test": "build-test.js" } }, - "node_modules/meow/node_modules/read-pkg": { - "version": "5.2.0", + "node_modules/node-gyp/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" - }, "engines": { "node": ">=8" } }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "7.0.1", + "node_modules/node-gyp/node_modules/are-we-there-yet": { + "version": "3.0.1", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" + "delegates": "^1.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/read-pkg-up/node_modules/type-fest": { - "version": "0.8.1", + "node_modules/node-gyp/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT" + }, + "node_modules/node-gyp/node_modules/env-paths": { + "version": "2.2.1", + "dev": true, + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/meow/node_modules/read-pkg/node_modules/normalize-package-data": { - "version": "2.5.0", + "node_modules/node-gyp/node_modules/gauge": { + "version": "4.0.4", "dev": true, - "license": "BSD-2-Clause", + "license": "ISC", "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "aproba": "^1.0.3 || ^2.0.0", + "color-support": "^1.1.3", + "console-control-strings": "^1.1.0", + "has-unicode": "^2.0.1", + "signal-exit": "^3.0.7", + "string-width": "^4.2.3", + "strip-ansi": "^6.0.1", + "wide-align": "^1.1.5" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/read-pkg/node_modules/type-fest": { - "version": "0.6.0", + "node_modules/node-gyp/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/meow/node_modules/resolve": { - "version": "1.22.8", + "node_modules/node-gyp/node_modules/nopt": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "abbrev": "^1.0.0" }, "bin": { - "resolve": "bin/resolve" + "nopt": "bin/nopt.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/meow/node_modules/semver": { - "version": "5.7.2", + "node_modules/node-gyp/node_modules/npmlog": { + "version": "6.0.2", "dev": true, "license": "ISC", - "bin": { - "semver": "bin/semver" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "0.18.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=10" + "dependencies": { + "are-we-there-yet": "^3.0.0", + "console-control-strings": "^1.1.0", + "gauge": "^4.0.3", + "set-blocking": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/merge-options": { - "version": "3.0.4", + "node_modules/node-gyp/node_modules/string-width": { + "version": "4.2.3", + "dev": true, "license": "MIT", "dependencies": { - "is-plain-obj": "^2.1.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/merge-options/node_modules/is-plain-obj": { - "version": "2.1.0", + "node_modules/node-gyp/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, "license": "MIT", + "dependencies": { + "ansi-regex": "^5.0.1" + }, "engines": { "node": ">=8" } }, - "node_modules/merge-stream": { - "version": "2.0.0", - "license": "MIT" - }, - "node_modules/merge2": { - "version": "1.4.1", + "node_modules/node-releases": { + "version": "2.0.14", + "dev": true, "license": "MIT", - "engines": { - "node": ">= 8" - } - }, - "node_modules/micro-api-client": { - "version": "3.3.0", - "license": "ISC" - }, - "node_modules/micro-memoize": { - "version": "4.1.2", - "license": "MIT" + "peer": true }, - "node_modules/micromatch": { - "version": "4.0.5", + "node_modules/node-source-walk": { + "version": "6.0.2", "license": "MIT", "dependencies": { - "braces": "^3.0.2", - "picomatch": "^2.3.1" + "@babel/parser": "^7.21.8" }, "engines": { - "node": ">=8.6" + "node": ">=14" } }, - "node_modules/micromatch/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/node-stream-zip": { + "version": "1.15.0", "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">=0.12.0" }, "funding": { - "url": "https://github.com/sponsors/jonschlinkert" - } - }, - "node_modules/mime-db": { - "version": "1.52.0", - "license": "MIT", - "engines": { - "node": ">= 0.6" + "type": "github", + "url": "https://github.com/sponsors/antelle" } }, - "node_modules/mime-types": { - "version": "2.1.35", - "license": "MIT", + "node_modules/node-version-alias": { + "version": "2.0.0", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "mime-db": "1.52.0" + "all-node-versions": "^9.0.0", + "filter-obj": "^2.0.1", + "jest-validate": "^27.0.2", + "normalize-node-version": "^11.0.0", + "path-exists": "^4.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">= 0.6" + "node": ">=12.20.0" } }, - "node_modules/mimic-fn": { - "version": "4.0.0", + "node_modules/node-version-alias/node_modules/filter-obj": { + "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/mimic-response": { + "node_modules/node-version-alias/node_modules/path-exists": { "version": "4.0.0", + "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/min-indent": { - "version": "1.0.1", + "node_modules/nofilter": { + "version": "3.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">=12.19" } }, - "node_modules/minimatch": { - "version": "9.0.4", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", - "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "node_modules/noms": { + "version": "0.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "brace-expansion": "^2.0.1" - }, - "engines": { - "node": ">=16 || 14 >=14.17" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } - }, - "node_modules/minimist": { - "version": "1.2.8", - "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "inherits": "^2.0.1", + "readable-stream": "~1.0.31" } }, - "node_modules/minimist-options": { - "version": "4.1.0", + "node_modules/noms/node_modules/isarray": { + "version": "0.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } + "license": "MIT" }, - "node_modules/minimist-options/node_modules/arrify": { - "version": "1.0.1", + "node_modules/noms/node_modules/readable-stream": { + "version": "1.0.34", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10.0" + "dependencies": { + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, - "node_modules/minimist-options/node_modules/is-plain-obj": { - "version": "1.1.0", + "node_modules/noms/node_modules/string_decoder": { + "version": "0.10.31", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" - } + "license": "MIT" }, - "node_modules/minipass": { - "version": "3.3.6", + "node_modules/nopt": { + "version": "5.0.0", "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "abbrev": "1" + }, + "bin": { + "nopt": "bin/nopt.js" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/minipass-collect": { - "version": "1.0.2", + "node_modules/normalize-node-version": { + "version": "11.0.0", "dev": true, - "license": "ISC", + "license": "Apache-2.0", "dependencies": { - "minipass": "^3.0.0" + "all-node-versions": "^9.0.0", + "filter-obj": "^2.0.1", + "jest-validate": "^27.0.2", + "semver": "^7.3.5" }, "engines": { - "node": ">= 8" + "node": ">=12.20.0" } }, - "node_modules/minipass-fetch": { - "version": "2.1.2", + "node_modules/normalize-node-version/node_modules/filter-obj": { + "version": "2.0.2", "dev": true, "license": "MIT", - "dependencies": { - "minipass": "^3.1.6", - "minipass-sized": "^1.0.3", - "minizlib": "^2.1.2" - }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - }, - "optionalDependencies": { - "encoding": "^0.1.13" + "node": ">=8" } }, - "node_modules/minipass-flush": { - "version": "1.0.5", - "dev": true, - "license": "ISC", + "node_modules/normalize-package-data": { + "version": "3.0.3", + "license": "BSD-2-Clause", "dependencies": { - "minipass": "^3.0.0" + "hosted-git-info": "^4.0.1", + "is-core-module": "^2.5.0", + "semver": "^7.3.4", + "validate-npm-package-license": "^3.0.1" }, "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/minipass-json-stream": { - "version": "1.0.1", - "dev": true, + "node_modules/normalize-path": { + "version": "3.0.0", "license": "MIT", - "dependencies": { - "jsonparse": "^1.3.1", - "minipass": "^3.0.0" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/minipass-pipeline": { - "version": "1.2.4", - "dev": true, - "license": "ISC", - "dependencies": { - "minipass": "^3.0.0" - }, + "node_modules/normalize-url": { + "version": "8.0.0", + "license": "MIT", "engines": { - "node": ">=8" + "node": ">=14.16" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/minipass-sized": { - "version": "1.0.3", + "node_modules/npm-bundled": { + "version": "1.1.2", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.0.0" - }, - "engines": { - "node": ">=8" + "npm-normalize-package-bin": "^1.0.1" } }, - "node_modules/minizlib": { - "version": "2.1.2", - "license": "MIT", + "node_modules/npm-install-checks": { + "version": "5.0.0", + "dev": true, + "license": "BSD-2-Clause", "dependencies": { - "minipass": "^3.0.0", - "yallist": "^4.0.0" + "semver": "^7.1.1" }, "engines": { - "node": ">= 8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/mkdirp": { - "version": "1.0.4", - "license": "MIT", - "bin": { - "mkdirp": "bin/cmd.js" + "node_modules/npm-normalize-package-bin": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/npm-package-arg": { + "version": "8.1.1", + "dev": true, + "license": "ISC", + "dependencies": { + "hosted-git-info": "^3.0.6", + "semver": "^7.0.0", + "validate-npm-package-name": "^3.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/mkdirp-classic": { - "version": "0.5.3", + "node_modules/npm-package-arg/node_modules/builtins": { + "version": "1.0.3", "dev": true, "license": "MIT" }, - "node_modules/mkdirp-infer-owner": { - "version": "2.0.0", + "node_modules/npm-package-arg/node_modules/hosted-git-info": { + "version": "3.0.8", "dev": true, "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "infer-owner": "^1.0.4", - "mkdirp": "^1.0.3" + "lru-cache": "^6.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/mlly": { - "version": "1.4.2", + "node_modules/npm-package-arg/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "acorn": "^8.10.0", - "pathe": "^1.1.1", - "pkg-types": "^1.0.3", - "ufo": "^1.3.0" + "yallist": "^4.0.0" + }, + "engines": { + "node": ">=10" } }, - "node_modules/modify-values": { - "version": "1.0.1", + "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { + "version": "3.0.0", "dev": true, - "license": "MIT", - "engines": { - "node": ">=0.10.0" + "license": "ISC", + "dependencies": { + "builtins": "^1.0.3" } }, - "node_modules/module-definition": { - "version": "5.0.1", - "license": "MIT", + "node_modules/npm-packlist": { + "version": "5.1.3", + "dev": true, + "license": "ISC", "dependencies": { - "ast-module-types": "^5.0.0", - "node-source-walk": "^6.0.1" + "glob": "^8.0.1", + "ignore-walk": "^5.0.1", + "npm-bundled": "^2.0.0", + "npm-normalize-package-bin": "^2.0.0" }, "bin": { - "module-definition": "bin/cli.js" + "npm-packlist": "bin/index.js" }, "engines": { - "node": ">=14" - } - }, - "node_modules/module-details-from-path": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/module-details-from-path/-/module-details-from-path-1.0.3.tgz", - "integrity": "sha512-ySViT69/76t8VhE1xXHK6Ch4NcDd26gx0MzKXLO+F7NOtnqH68d9zF94nT8ZWSxXh8ELOERsnJO/sWt1xZYw5A==" - }, - "node_modules/moize": { - "version": "6.1.6", - "license": "MIT", - "dependencies": { - "fast-equals": "^3.0.1", - "micro-memoize": "^4.1.2" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/move-file": { - "version": "3.1.0", - "license": "MIT", + "node_modules/npm-packlist/node_modules/glob": { + "version": "8.1.0", + "dev": true, + "license": "ISC", "dependencies": { - "path-exists": "^5.0.0" + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/mrmime": { - "version": "1.0.1", + "node_modules/npm-packlist/node_modules/minimatch": { + "version": "5.1.6", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { "node": ">=10" } }, - "node_modules/ms": { - "version": "2.1.3", + "node_modules/npm-packlist/node_modules/npm-bundled": { + "version": "2.0.1", "dev": true, - "license": "MIT" + "license": "ISC", + "dependencies": { + "npm-normalize-package-bin": "^2.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } }, - "node_modules/multimatch": { - "version": "5.0.0", + "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", "dev": true, - "license": "MIT", + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + } + }, + "node_modules/npm-pick-manifest": { + "version": "7.0.2", + "dev": true, + "license": "ISC", "dependencies": { - "@types/minimatch": "^3.0.3", - "array-differ": "^3.0.0", - "array-union": "^2.1.0", - "arrify": "^2.0.1", - "minimatch": "^3.0.4" + "npm-install-checks": "^5.0.0", + "npm-normalize-package-bin": "^2.0.0", + "npm-package-arg": "^9.0.0", + "semver": "^7.3.5" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", + "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/multimatch/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", "dev": true, - "license": "MIT", - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "ISC", + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/multimatch/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/mute-stream": { - "version": "0.0.8", + "node_modules/npm-registry-fetch": { + "version": "13.3.1", "dev": true, - "license": "ISC" - }, - "node_modules/nan": { - "version": "2.18.0", - "license": "MIT", - "optional": true - }, - "node_modules/nanoid": { - "version": "3.3.7", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], - "license": "MIT", - "bin": { - "nanoid": "bin/nanoid.cjs" + "license": "ISC", + "dependencies": { + "make-fetch-happen": "^10.0.6", + "minipass": "^3.1.6", + "minipass-fetch": "^2.0.3", + "minipass-json-stream": "^1.0.1", + "minizlib": "^2.1.2", + "npm-package-arg": "^9.0.1", + "proc-log": "^2.0.0" }, "engines": { - "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/natural-compare": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/natural-compare-lite": { - "version": "1.4.0", - "dev": true, - "license": "MIT" - }, - "node_modules/negotiator": { - "version": "0.6.3", + "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": ">= 0.6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/neo-async": { - "version": "2.6.2", - "dev": true, - "license": "MIT" - }, - "node_modules/nested-error-stacks": { - "version": "2.1.1", - "license": "MIT" - }, - "node_modules/netlify": { - "resolved": "packages/js-client", - "link": true - }, - "node_modules/netlify-headers-parser": { - "resolved": "packages/headers-parser", - "link": true - }, - "node_modules/netlify-redirect-parser": { - "resolved": "packages/redirect-parser", - "link": true - }, - "node_modules/nise": { - "version": "5.1.5", + "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, - "license": "BSD-3-Clause", + "license": "ISC", "dependencies": { - "@sinonjs/commons": "^2.0.0", - "@sinonjs/fake-timers": "^10.0.2", - "@sinonjs/text-encoding": "^0.7.1", - "just-extend": "^4.0.2", - "path-to-regexp": "^1.7.0" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" + }, + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nise/node_modules/@sinonjs/commons": { - "version": "2.0.0", + "node_modules/npm-run-all2": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-5.0.2.tgz", + "integrity": "sha512-S2G6FWZ3pNWAAKm2PFSOtEAG/N+XO/kz3+9l6V91IY+Y3XFSt7Lp7DV92KCgEboEW0hRTu0vFaMe4zXDZYaOyA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "type-detect": "4.0.8" + "ansi-styles": "^5.0.0", + "cross-spawn": "^7.0.3", + "memorystream": "^0.3.1", + "minimatch": "^3.0.4", + "pidtree": "^0.5.0", + "read-pkg": "^5.2.0", + "shell-quote": "^1.6.1" + }, + "bin": { + "npm-run-all": "bin/npm-run-all/index.js", + "run-p": "bin/run-p/index.js", + "run-s": "bin/run-s/index.js" + }, + "engines": { + "node": ">= 10" } }, - "node_modules/nise/node_modules/@sinonjs/fake-timers": { - "version": "10.3.0", + "node_modules/npm-run-all2/node_modules/ansi-styles": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", + "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", "dev": true, - "license": "BSD-3-Clause", - "dependencies": { - "@sinonjs/commons": "^3.0.0" + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/nise/node_modules/@sinonjs/fake-timers/node_modules/@sinonjs/commons": { - "version": "3.0.0", + "node_modules/npm-run-all2/node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", "dev": true, - "license": "BSD-3-Clause", "dependencies": { - "type-detect": "4.0.8" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/nock": { - "version": "13.4.0", + "node_modules/npm-run-all2/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 + }, + "node_modules/npm-run-all2/node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", "dev": true, - "license": "MIT", "dependencies": { - "debug": "^4.1.0", - "json-stringify-safe": "^5.0.1", - "propagate": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">= 10.13" + "node": "*" } }, - "node_modules/node-addon-api": { - "version": "3.2.1", + "node_modules/npm-run-all2/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": "MIT" - }, - "node_modules/node-domexception": { - "version": "1.0.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/jimmywarting" - }, - { - "type": "github", - "url": "https://paypal.me/jimmywarting" - } - ], - "license": "MIT", - "engines": { - "node": ">=10.5.0" + "dependencies": { + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/node-fetch": { - "version": "3.3.2", - "license": "MIT", - "dependencies": { - "data-uri-to-buffer": "^4.0.0", - "fetch-blob": "^3.1.4", - "formdata-polyfill": "^4.0.10" + "node_modules/npm-run-all2/node_modules/pidtree": { + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", + "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", + "dev": true, + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/node-fetch" + "node": ">=0.10" } }, - "node_modules/node-gyp": { - "version": "9.4.1", + "node_modules/npm-run-all2/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": { - "env-paths": "^2.2.0", - "exponential-backoff": "^3.1.1", - "glob": "^7.1.4", - "graceful-fs": "^4.2.6", - "make-fetch-happen": "^10.0.3", - "nopt": "^6.0.0", - "npmlog": "^6.0.0", - "rimraf": "^3.0.2", - "semver": "^7.3.5", - "tar": "^6.1.2", - "which": "^2.0.2" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/npm-run-all2/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, "bin": { - "node-gyp": "bin/node-gyp.js" + "resolve": "bin/resolve" }, - "engines": { - "node": "^12.13 || ^14.13 || >=16" + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/node-gyp-build": { - "version": "4.7.1", - "license": "MIT", + "node_modules/npm-run-all2/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, "bin": { - "node-gyp-build": "bin.js", - "node-gyp-build-optional": "optional.js", - "node-gyp-build-test": "build-test.js" + "semver": "bin/semver" } }, - "node_modules/node-gyp/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/npm-run-all2/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", "engines": { "node": ">=8" } }, - "node_modules/node-gyp/node_modules/are-we-there-yet": { - "version": "3.0.1", - "dev": true, - "license": "ISC", + "node_modules/npm-run-path": { + "version": "4.0.1", + "license": "MIT", "dependencies": { - "delegates": "^1.0.0", - "readable-stream": "^3.6.0" + "path-key": "^3.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/node-gyp/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/node-gyp/node_modules/env-paths": { - "version": "2.2.1", - "dev": true, + "node_modules/npm-run-path/node_modules/path-key": { + "version": "3.1.1", "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/node-gyp/node_modules/gauge": { - "version": "4.0.4", - "dev": true, + "node_modules/npmlog": { + "version": "5.0.1", "license": "ISC", "dependencies": { - "aproba": "^1.0.3 || ^2.0.0", - "color-support": "^1.1.3", + "are-we-there-yet": "^2.0.0", "console-control-strings": "^1.1.0", - "has-unicode": "^2.0.1", - "signal-exit": "^3.0.7", + "gauge": "^3.0.0", + "set-blocking": "^2.0.0" + } + }, + "node_modules/nx": { + "version": "14.8.9", + "dev": true, + "hasInstallScript": true, + "license": "MIT", + "dependencies": { + "@nrwl/cli": "14.8.9", + "@nrwl/tao": "14.8.9", + "@parcel/watcher": "2.0.4", + "@yarnpkg/lockfile": "^1.1.0", + "@yarnpkg/parsers": "^3.0.0-rc.18", + "@zkochan/js-yaml": "0.0.6", + "axios": "^1.0.0", + "chalk": "4.1.0", + "chokidar": "^3.5.1", + "cli-cursor": "3.1.0", + "cli-spinners": "2.6.1", + "cliui": "^7.0.2", + "dotenv": "~10.0.0", + "enquirer": "~2.3.6", + "fast-glob": "3.2.7", + "figures": "3.2.0", + "flat": "^5.0.2", + "fs-extra": "^10.1.0", + "glob": "7.1.4", + "ignore": "^5.0.4", + "js-yaml": "4.1.0", + "jsonc-parser": "3.2.0", + "minimatch": "3.0.5", + "npm-run-path": "^4.0.1", + "open": "^8.4.0", + "semver": "7.3.4", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "wide-align": "^1.1.5" + "strong-log-transformer": "^2.1.0", + "tar-stream": "~2.2.0", + "tmp": "~0.2.1", + "tsconfig-paths": "^3.9.0", + "tslib": "^2.3.0", + "v8-compile-cache": "2.3.0", + "yargs": "^17.4.0", + "yargs-parser": "21.0.1" }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "bin": { + "nx": "bin/nx.js" + }, + "peerDependencies": { + "@swc-node/register": "^1.4.2", + "@swc/core": "^1.2.173" + }, + "peerDependenciesMeta": { + "@swc-node/register": { + "optional": true + }, + "@swc/core": { + "optional": true + } } }, - "node_modules/node-gyp/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/nx/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/node-gyp/node_modules/nopt": { - "version": "6.0.0", + "node_modules/nx/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "^1.0.0" - }, - "bin": { - "nopt": "bin/nopt.js" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/node-gyp/node_modules/npmlog": { - "version": "6.0.2", + "node_modules/nx/node_modules/brace-expansion": { + "version": "1.1.11", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^3.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^4.0.3", - "set-blocking": "^2.0.0" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/node-gyp/node_modules/string-width": { - "version": "4.2.3", + "node_modules/nx/node_modules/chalk": { + "version": "4.1.0", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": ">=8" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/node-gyp/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/nx/node_modules/color-convert": { + "version": "2.0.1", "dev": true, "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "color-name": "~1.1.4" }, "engines": { - "node": ">=8" + "node": ">=7.0.0" } }, - "node_modules/node-releases": { - "version": "2.0.14", + "node_modules/nx/node_modules/emoji-regex": { + "version": "8.0.0", + "dev": true, + "license": "MIT" + }, + "node_modules/nx/node_modules/escape-string-regexp": { + "version": "1.0.5", "dev": true, "license": "MIT", - "peer": true + "engines": { + "node": ">=0.8.0" + } }, - "node_modules/node-source-walk": { - "version": "6.0.2", + "node_modules/nx/node_modules/fast-glob": { + "version": "3.2.7", + "dev": true, "license": "MIT", "dependencies": { - "@babel/parser": "^7.21.8" + "@nodelib/fs.stat": "^2.0.2", + "@nodelib/fs.walk": "^1.2.3", + "glob-parent": "^5.1.2", + "merge2": "^1.3.0", + "micromatch": "^4.0.4" }, "engines": { - "node": ">=14" + "node": ">=8" } }, - "node_modules/node-stream-zip": { - "version": "1.15.0", + "node_modules/nx/node_modules/figures": { + "version": "3.2.0", + "dev": true, "license": "MIT", + "dependencies": { + "escape-string-regexp": "^1.0.5" + }, "engines": { - "node": ">=0.12.0" + "node": ">=8" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/antelle" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/node-version-alias": { - "version": "2.0.0", + "node_modules/nx/node_modules/fs-extra": { + "version": "10.1.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "all-node-versions": "^9.0.0", - "filter-obj": "^2.0.1", - "jest-validate": "^27.0.2", - "normalize-node-version": "^11.0.0", - "path-exists": "^4.0.0", - "semver": "^7.3.5" + "graceful-fs": "^4.2.0", + "jsonfile": "^6.0.1", + "universalify": "^2.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/nx/node_modules/glob": { + "version": "7.1.4", + "dev": 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": ">=12.20.0" + "node": "*" } }, - "node_modules/node-version-alias/node_modules/filter-obj": { - "version": "2.0.2", + "node_modules/nx/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/node-version-alias/node_modules/path-exists": { - "version": "4.0.0", + "node_modules/nx/node_modules/lru-cache": { + "version": "6.0.0", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "yallist": "^4.0.0" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/nofilter": { - "version": "3.1.0", + "node_modules/nx/node_modules/minimatch": { + "version": "3.0.5", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "brace-expansion": "^1.1.7" + }, "engines": { - "node": ">=12.19" + "node": "*" } }, - "node_modules/noms": { - "version": "0.0.0", + "node_modules/nx/node_modules/semver": { + "version": "7.3.4", "dev": true, "license": "ISC", "dependencies": { - "inherits": "^2.0.1", - "readable-stream": "~1.0.31" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" + }, + "engines": { + "node": ">=10" } }, - "node_modules/noms/node_modules/isarray": { - "version": "0.0.1", - "dev": true, - "license": "MIT" - }, - "node_modules/noms/node_modules/readable-stream": { - "version": "1.0.34", + "node_modules/nx/node_modules/string-width": { + "version": "4.2.3", "dev": true, "license": "MIT", "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/noms/node_modules/string_decoder": { - "version": "0.10.31", + "node_modules/nx/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, - "license": "MIT" - }, - "node_modules/nopt": { - "version": "5.0.0", - "license": "ISC", + "license": "MIT", "dependencies": { - "abbrev": "1" - }, - "bin": { - "nopt": "bin/nopt.js" + "ansi-regex": "^5.0.1" }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/normalize-node-version": { - "version": "11.0.0", + "node_modules/nx/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "all-node-versions": "^9.0.0", - "filter-obj": "^2.0.1", - "jest-validate": "^27.0.2", - "semver": "^7.3.5" + "has-flag": "^4.0.0" }, "engines": { - "node": ">=12.20.0" + "node": ">=8" } }, - "node_modules/normalize-node-version/node_modules/filter-obj": { - "version": "2.0.2", + "node_modules/nx/node_modules/tar-stream": { + "version": "2.2.0", "dev": true, "license": "MIT", + "dependencies": { + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" + }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/normalize-package-data": { - "version": "3.0.3", - "license": "BSD-2-Clause", - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, + "node_modules/nx/node_modules/yargs-parser": { + "version": "21.0.1", + "dev": true, + "license": "ISC", "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/normalize-path": { - "version": "3.0.0", + "node_modules/object-assign": { + "version": "4.1.1", "license": "MIT", "engines": { "node": ">=0.10.0" } }, - "node_modules/normalize-url": { - "version": "8.0.0", + "node_modules/object-inspect": { + "version": "1.13.1", "license": "MIT", - "engines": { - "node": ">=14.16" - }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-bundled": { - "version": "1.1.2", + "node_modules/object-keys": { + "version": "1.1.1", "dev": true, - "license": "ISC", - "dependencies": { - "npm-normalize-package-bin": "^1.0.1" + "license": "MIT", + "engines": { + "node": ">= 0.4" } }, - "node_modules/npm-install-checks": { - "version": "5.0.0", + "node_modules/object.assign": { + "version": "4.1.5", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "semver": "^7.1.1" + "call-bind": "^1.0.5", + "define-properties": "^1.2.1", + "has-symbols": "^1.0.3", + "object-keys": "^1.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-normalize-package-bin": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/npm-package-arg": { - "version": "8.1.1", + "node_modules/object.fromentries": { + "version": "2.0.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^3.0.6", - "semver": "^7.0.0", - "validate-npm-package-name": "^3.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-package-arg/node_modules/builtins": { - "version": "1.0.3", - "dev": true, - "license": "MIT" - }, - "node_modules/npm-package-arg/node_modules/hosted-git-info": { - "version": "3.0.8", + "node_modules/object.groupby": { + "version": "1.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1", + "get-intrinsic": "^1.2.1" } }, - "node_modules/npm-package-arg/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/object.values": { + "version": "1.1.7", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" }, "engines": { - "node": ">=10" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/npm-package-arg/node_modules/validate-npm-package-name": { - "version": "3.0.0", - "dev": true, + "node_modules/omit.js": { + "version": "2.0.2", + "license": "MIT" + }, + "node_modules/once": { + "version": "1.4.0", "license": "ISC", "dependencies": { - "builtins": "^1.0.3" + "wrappy": "1" } }, - "node_modules/npm-packlist": { - "version": "5.1.3", - "dev": true, - "license": "ISC", + "node_modules/onetime": { + "version": "5.1.2", + "license": "MIT", "dependencies": { - "glob": "^8.0.1", - "ignore-walk": "^5.0.1", - "npm-bundled": "^2.0.0", - "npm-normalize-package-bin": "^2.0.0" - }, - "bin": { - "npm-packlist": "bin/index.js" + "mimic-fn": "^2.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-packlist/node_modules/glob": { - "version": "8.1.0", + "node_modules/onetime/node_modules/mimic-fn": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/open": { + "version": "8.4.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "define-lazy-prop": "^2.0.0", + "is-docker": "^2.1.1", + "is-wsl": "^2.2.0" }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-packlist/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/optionator": { + "version": "0.9.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@aashutoshrathi/word-wrap": "^1.2.3", + "deep-is": "^0.1.3", + "fast-levenshtein": "^2.0.6", + "levn": "^0.4.1", + "prelude-ls": "^1.2.1", + "type-check": "^0.4.0" }, "engines": { - "node": ">=10" + "node": ">= 0.8.0" } }, - "node_modules/npm-packlist/node_modules/npm-bundled": { - "version": "2.0.1", + "node_modules/ora": { + "version": "5.4.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-normalize-package-bin": "^2.0.0" + "bl": "^4.1.0", + "chalk": "^4.1.0", + "cli-cursor": "^3.1.0", + "cli-spinners": "^2.5.0", + "is-interactive": "^1.0.0", + "is-unicode-supported": "^0.1.0", + "log-symbols": "^4.1.0", + "strip-ansi": "^6.0.0", + "wcwidth": "^1.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-packlist/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", + "node_modules/ora/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/npm-pick-manifest": { - "version": "7.0.2", + "node_modules/ora/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "npm-install-checks": "^5.0.0", - "npm-normalize-package-bin": "^2.0.0", - "npm-package-arg": "^9.0.0", - "semver": "^7.3.5" + "color-convert": "^2.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/npm-pick-manifest/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/ora/node_modules/chalk": { + "version": "4.1.2", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^7.5.1" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/npm-pick-manifest/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "node_modules/npm-pick-manifest/node_modules/npm-package-arg": { - "version": "9.1.2", + "node_modules/ora/node_modules/color-convert": { + "version": "2.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "color-name": "~1.1.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=7.0.0" } }, - "node_modules/npm-registry-fetch": { - "version": "13.3.1", + "node_modules/ora/node_modules/is-unicode-supported": { + "version": "0.1.0", "dev": true, - "license": "ISC", - "dependencies": { - "make-fetch-happen": "^10.0.6", - "minipass": "^3.1.6", - "minipass-fetch": "^2.0.3", - "minipass-json-stream": "^1.0.1", - "minizlib": "^2.1.2", - "npm-package-arg": "^9.0.1", - "proc-log": "^2.0.0" - }, + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-registry-fetch/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/ora/node_modules/strip-ansi": { + "version": "6.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "lru-cache": "^7.5.1" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/npm-registry-fetch/node_modules/npm-package-arg": { - "version": "9.1.2", + "node_modules/ora/node_modules/supports-color": { + "version": "7.2.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/npm-run-all2": { - "version": "5.0.2", - "resolved": "https://registry.npmjs.org/npm-run-all2/-/npm-run-all2-5.0.2.tgz", - "integrity": "sha512-S2G6FWZ3pNWAAKm2PFSOtEAG/N+XO/kz3+9l6V91IY+Y3XFSt7Lp7DV92KCgEboEW0hRTu0vFaMe4zXDZYaOyA==", - "dev": true, + "node_modules/os-name": { + "version": "5.1.0", + "license": "MIT", "dependencies": { - "ansi-styles": "^5.0.0", - "cross-spawn": "^7.0.3", - "memorystream": "^0.3.1", - "minimatch": "^3.0.4", - "pidtree": "^0.5.0", - "read-pkg": "^5.2.0", - "shell-quote": "^1.6.1" - }, - "bin": { - "npm-run-all": "bin/npm-run-all/index.js", - "run-p": "bin/run-p/index.js", - "run-s": "bin/run-s/index.js" + "macos-release": "^3.1.0", + "windows-release": "^5.0.1" }, "engines": { - "node": ">= 10" - } - }, - "node_modules/npm-run-all2/node_modules/ansi-styles": { - "version": "5.2.0", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-5.2.0.tgz", - "integrity": "sha512-Cxwpt2SfTzTtXcfOlzGEee8O+c+MmUgGrNiBcXnuWxuFJHe6a5Hz7qwhwe5OgaSYI0IJvkLqWX1ASG+cJOkEiA==", - "dev": true, - "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all2/node_modules/brace-expansion": { - "version": "1.1.11", - "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", - "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "node_modules/os-tmpdir": { + "version": "1.0.2", "dev": true, - "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "license": "MIT", + "engines": { + "node": ">=0.10.0" } }, - "node_modules/npm-run-all2/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 - }, - "node_modules/npm-run-all2/node_modules/minimatch": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", - "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", - "dev": true, - "dependencies": { - "brace-expansion": "^1.1.7" - }, + "node_modules/p-cancelable": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": "*" + "node": ">=12.20" } }, - "node_modules/npm-run-all2/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==", + "node_modules/p-defer": { + "version": "1.0.0", "dev": true, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "license": "MIT", + "engines": { + "node": ">=4" } }, - "node_modules/npm-run-all2/node_modules/pidtree": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/pidtree/-/pidtree-0.5.0.tgz", - "integrity": "sha512-9nxspIM7OpZuhBxPg73Zvyq7j1QMPMPsGKTqRc2XOaFQauDvoNz9fM1Wdkjmeo7l9GXOZiRs97sPkuayl39wjA==", - "dev": true, - "bin": { - "pidtree": "bin/pidtree.js" + "node_modules/p-event": { + "version": "5.0.1", + "license": "MIT", + "dependencies": { + "p-timeout": "^5.0.2" }, "engines": { - "node": ">=0.10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } - }, - "node_modules/npm-run-all2/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, + }, + "node_modules/p-every": { + "version": "2.0.0", + "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "p-map": "^2.0.0" }, "engines": { "node": ">=8" } }, - "node_modules/npm-run-all2/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", - "dev": true, + "node_modules/p-every/node_modules/p-map": { + "version": "2.1.0", + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/p-filter": { + "version": "3.0.0", + "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "p-map": "^5.1.0" }, - "bin": { - "resolve": "bin/resolve" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/npm-run-all2/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", - "dev": true, - "bin": { - "semver": "bin/semver" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-all2/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, + "node_modules/p-filter/node_modules/aggregate-error": { + "version": "4.0.1", + "license": "MIT", + "dependencies": { + "clean-stack": "^4.0.0", + "indent-string": "^5.0.0" + }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path": { - "version": "4.0.1", + "node_modules/p-filter/node_modules/p-map": { + "version": "5.5.0", "license": "MIT", "dependencies": { - "path-key": "^3.0.0" + "aggregate-error": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/npm-run-path/node_modules/path-key": { - "version": "3.1.1", + "node_modules/p-finally": { + "version": "1.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4" } }, - "node_modules/npmlog": { - "version": "5.0.1", - "license": "ISC", + "node_modules/p-limit": { + "version": "4.0.0", + "license": "MIT", "dependencies": { - "are-we-there-yet": "^2.0.0", - "console-control-strings": "^1.1.0", - "gauge": "^3.0.0", - "set-blocking": "^2.0.0" + "yocto-queue": "^1.0.0" + }, + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx": { - "version": "14.8.9", - "dev": true, - "hasInstallScript": true, + "node_modules/p-locate": { + "version": "6.0.0", "license": "MIT", "dependencies": { - "@nrwl/cli": "14.8.9", - "@nrwl/tao": "14.8.9", - "@parcel/watcher": "2.0.4", - "@yarnpkg/lockfile": "^1.1.0", - "@yarnpkg/parsers": "^3.0.0-rc.18", - "@zkochan/js-yaml": "0.0.6", - "axios": "^1.0.0", - "chalk": "4.1.0", - "chokidar": "^3.5.1", - "cli-cursor": "3.1.0", - "cli-spinners": "2.6.1", - "cliui": "^7.0.2", - "dotenv": "~10.0.0", - "enquirer": "~2.3.6", - "fast-glob": "3.2.7", - "figures": "3.2.0", - "flat": "^5.0.2", - "fs-extra": "^10.1.0", - "glob": "7.1.4", - "ignore": "^5.0.4", - "js-yaml": "4.1.0", - "jsonc-parser": "3.2.0", - "minimatch": "3.0.5", - "npm-run-path": "^4.0.1", - "open": "^8.4.0", - "semver": "7.3.4", - "string-width": "^4.2.3", - "strong-log-transformer": "^2.1.0", - "tar-stream": "~2.2.0", - "tmp": "~0.2.1", - "tsconfig-paths": "^3.9.0", - "tslib": "^2.3.0", - "v8-compile-cache": "2.3.0", - "yargs": "^17.4.0", - "yargs-parser": "21.0.1" + "p-limit": "^4.0.0" }, - "bin": { - "nx": "bin/nx.js" + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "peerDependencies": { - "@swc-node/register": "^1.4.2", - "@swc/core": "^1.2.173" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/p-map": { + "version": "6.0.0", + "license": "MIT", + "engines": { + "node": ">=16" }, - "peerDependenciesMeta": { - "@swc-node/register": { - "optional": true - }, - "@swc/core": { - "optional": true - } + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/p-map-series": { + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/nx/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/p-pipe": { + "version": "3.1.0", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { "node": ">=8" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/p-queue": { + "version": "6.6.2", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "eventemitter3": "^4.0.4", + "p-timeout": "^3.2.0" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/chalk": { - "version": "4.1.0", + "node_modules/p-queue/node_modules/eventemitter3": { + "version": "4.0.7", + "dev": true, + "license": "MIT" + }, + "node_modules/p-queue/node_modules/p-timeout": { + "version": "3.2.0", "dev": true, "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "p-finally": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">=8" + } + }, + "node_modules/p-reduce": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=12" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "node_modules/p-retry": { + "version": "5.1.2", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "@types/retry": "0.12.1", + "retry": "^0.13.1" }, "engines": { - "node": ">=7.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/nx/node_modules/escape-string-regexp": { - "version": "1.0.5", - "dev": true, + "node_modules/p-timeout": { + "version": "5.1.0", "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/fast-glob": { - "version": "3.2.7", + "node_modules/p-try": { + "version": "2.2.0", "dev": true, "license": "MIT", - "dependencies": { - "@nodelib/fs.stat": "^2.0.2", - "@nodelib/fs.walk": "^1.2.3", - "glob-parent": "^5.1.2", - "merge2": "^1.3.0", - "micromatch": "^4.0.4" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/nx/node_modules/figures": { - "version": "3.2.0", - "dev": true, + "node_modules/p-wait-for": { + "version": "4.1.0", "license": "MIT", "dependencies": { - "escape-string-regexp": "^1.0.5" + "p-timeout": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/fs-extra": { - "version": "10.1.0", + "node_modules/p-waterfall": { + "version": "2.1.1", "dev": true, "license": "MIT", "dependencies": { - "graceful-fs": "^4.2.0", - "jsonfile": "^6.0.1", - "universalify": "^2.0.0" + "p-reduce": "^2.0.0" }, "engines": { - "node": ">=12" - } - }, - "node_modules/nx/node_modules/glob": { - "version": "7.1.4", - "dev": 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" + "node": ">=8" }, - "engines": { - "node": "*" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/nx/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", + "node_modules/p-waterfall/node_modules/p-reduce": { + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/nx/node_modules/lru-cache": { - "version": "6.0.0", + "node_modules/pacote": { + "version": "13.6.2", "dev": true, "license": "ISC", "dependencies": { - "yallist": "^4.0.0" + "@npmcli/git": "^3.0.0", + "@npmcli/installed-package-contents": "^1.0.7", + "@npmcli/promise-spawn": "^3.0.0", + "@npmcli/run-script": "^4.1.0", + "cacache": "^16.0.0", + "chownr": "^2.0.0", + "fs-minipass": "^2.1.0", + "infer-owner": "^1.0.4", + "minipass": "^3.1.6", + "mkdirp": "^1.0.4", + "npm-package-arg": "^9.0.0", + "npm-packlist": "^5.1.0", + "npm-pick-manifest": "^7.0.0", + "npm-registry-fetch": "^13.0.1", + "proc-log": "^2.0.0", + "promise-retry": "^2.0.1", + "read-package-json": "^5.0.0", + "read-package-json-fast": "^2.0.3", + "rimraf": "^3.0.2", + "ssri": "^9.0.0", + "tar": "^6.1.11" + }, + "bin": { + "pacote": "lib/bin.js" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nx/node_modules/minimatch": { - "version": "3.0.5", + "node_modules/pacote/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, "license": "ISC", "dependencies": { - "brace-expansion": "^1.1.7" + "lru-cache": "^7.5.1" }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nx/node_modules/semver": { - "version": "7.3.4", + "node_modules/pacote/node_modules/npm-package-arg": { + "version": "9.1.2", "dev": true, "license": "ISC", "dependencies": { - "lru-cache": "^6.0.0" - }, - "bin": { - "semver": "bin/semver.js" + "hosted-git-info": "^5.0.0", + "proc-log": "^2.0.1", + "semver": "^7.3.5", + "validate-npm-package-name": "^4.0.0" }, "engines": { - "node": ">=10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nx/node_modules/string-width": { - "version": "4.2.3", + "node_modules/pako": { + "version": "1.0.11", + "dev": true, + "license": "(MIT AND Zlib)" + }, + "node_modules/parent-module": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "callsites": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/nx/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/parent-module/node_modules/callsites": { + "version": "3.1.0", "dev": true, "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/nx/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/parse-conflict-json": { + "version": "2.0.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "has-flag": "^4.0.0" + "json-parse-even-better-errors": "^2.3.1", + "just-diff": "^5.0.1", + "just-diff-apply": "^5.2.0" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/nx/node_modules/tar-stream": { - "version": "2.2.0", - "dev": true, + "node_modules/parse-json": { + "version": "5.2.0", "license": "MIT", "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" + "@babel/code-frame": "^7.0.0", + "error-ex": "^1.3.1", + "json-parse-even-better-errors": "^2.3.0", + "lines-and-columns": "^1.1.6" }, "engines": { - "node": ">=6" - } - }, - "node_modules/nx/node_modules/yargs-parser": { - "version": "21.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": ">=12" + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-assign": { - "version": "4.1.1", + "node_modules/parse-ms": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/object-inspect": { - "version": "1.13.1", - "license": "MIT", + "node": ">=12" + }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/object-keys": { - "version": "1.1.1", + "node_modules/parse-path": { + "version": "7.0.0", "dev": true, "license": "MIT", - "engines": { - "node": ">= 0.4" + "dependencies": { + "protocols": "^2.0.0" } }, - "node_modules/object.assign": { - "version": "4.1.5", + "node_modules/parse-url": { + "version": "8.1.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.5", - "define-properties": "^1.2.1", - "has-symbols": "^1.0.3", - "object-keys": "^1.1.1" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "parse-path": "^7.0.0" } }, - "node_modules/object.fromentries": { - "version": "2.0.7", + "node_modules/path-browserify": { + "version": "1.0.1", "dev": true, + "license": "MIT" + }, + "node_modules/path-exists": { + "version": "5.0.0", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/object.groupby": { + "node_modules/path-is-absolute": { "version": "1.0.1", - "dev": true, "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "get-intrinsic": "^1.2.1" + "engines": { + "node": ">=0.10.0" } }, - "node_modules/object.values": { - "version": "1.1.7", - "dev": true, + "node_modules/path-key": { + "version": "4.0.0", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, "engines": { - "node": ">= 0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/omit.js": { - "version": "2.0.2", + "node_modules/path-parse": { + "version": "1.0.7", "license": "MIT" }, - "node_modules/once": { - "version": "1.4.0", - "license": "ISC", + "node_modules/path-to-regexp": { + "version": "1.8.0", + "dev": true, + "license": "MIT", "dependencies": { - "wrappy": "1" + "isarray": "0.0.1" } }, - "node_modules/onetime": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "mimic-fn": "^2.1.0" - }, + "node_modules/path-to-regexp/node_modules/isarray": { + "version": "0.0.1", + "dev": true, + "license": "MIT" + }, + "node_modules/path-type": { + "version": "5.0.0", + "license": "MIT", "engines": { - "node": ">=6" + "node": ">=12" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/onetime/node_modules/mimic-fn": { - "version": "2.1.0", + "node_modules/pathe": { + "version": "1.1.1", + "dev": true, + "license": "MIT" + }, + "node_modules/pathval": { + "version": "1.1.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": "*" } }, - "node_modules/open": { - "version": "8.4.2", - "dev": true, + "node_modules/picocolors": { + "version": "1.0.0", + "license": "ISC" + }, + "node_modules/picomatch": { + "version": "3.0.1", "license": "MIT", - "dependencies": { - "define-lazy-prop": "^2.0.0", - "is-docker": "^2.1.1", - "is-wsl": "^2.2.0" - }, + "optional": true, + "peer": true, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/optionator": { - "version": "0.9.3", + "node_modules/pidtree": { + "version": "0.6.0", "dev": true, "license": "MIT", - "dependencies": { - "@aashutoshrathi/word-wrap": "^1.2.3", - "deep-is": "^0.1.3", - "fast-levenshtein": "^2.0.6", - "levn": "^0.4.1", - "prelude-ls": "^1.2.1", - "type-check": "^0.4.0" + "bin": { + "pidtree": "bin/pidtree.js" }, "engines": { - "node": ">= 0.8.0" + "node": ">=0.10" } }, - "node_modules/ora": { - "version": "5.4.1", + "node_modules/pify": { + "version": "5.0.0", "dev": true, "license": "MIT", - "dependencies": { - "bl": "^4.1.0", - "chalk": "^4.1.0", - "cli-cursor": "^3.1.0", - "cli-spinners": "^2.5.0", - "is-interactive": "^1.0.0", - "is-unicode-supported": "^0.1.0", - "log-symbols": "^4.1.0", - "strip-ansi": "^6.0.0", - "wcwidth": "^1.0.1" - }, "engines": { "node": ">=10" }, @@ -20357,93 +20571,104 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/pkg-conf": { + "version": "4.0.0", "dev": true, "license": "MIT", + "dependencies": { + "find-up": "^6.0.0", + "load-json-file": "^7.0.0" + }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/ansi-styles": { - "version": "4.3.0", + "node_modules/pkg-conf/node_modules/load-json-file": { + "version": "7.0.1", "dev": true, "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/chalk": { - "version": "4.1.2", - "dev": true, + "node_modules/pkg-dir": { + "version": "7.0.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.1.0", - "supports-color": "^7.1.0" + "find-up": "^6.3.0" }, "engines": { - "node": ">=10" + "node": ">=14.16" }, "funding": { - "url": "https://github.com/chalk/chalk?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/ora/node_modules/color-convert": { - "version": "2.0.1", + "node_modules/pkg-types": { + "version": "1.0.3", "dev": true, "license": "MIT", "dependencies": { - "color-name": "~1.1.4" - }, - "engines": { - "node": ">=7.0.0" + "jsonc-parser": "^3.2.0", + "mlly": "^1.2.0", + "pathe": "^1.1.0" } }, - "node_modules/ora/node_modules/is-unicode-supported": { - "version": "0.1.0", + "node_modules/playwright": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", + "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", "dev": true, - "license": "MIT", + "dependencies": { + "playwright-core": "1.41.2" + }, + "bin": { + "playwright": "cli.js" + }, "engines": { - "node": ">=10" + "node": ">=16" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "fsevents": "2.3.2" } }, - "node_modules/ora/node_modules/strip-ansi": { - "version": "6.0.1", + "node_modules/playwright-core": { + "version": "1.41.2", + "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", + "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", "dev": true, - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "bin": { + "playwright-core": "cli.js" }, "engines": { - "node": ">=8" + "node": ">=16" } }, - "node_modules/ora/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/playwright/node_modules/fsevents": { + "version": "2.3.2", "dev": true, "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, + "optional": true, + "os": [ + "darwin" + ], + "peer": true, "engines": { - "node": ">=8" + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" } }, - "node_modules/os-name": { + "node_modules/plur": { "version": "5.1.0", + "dev": true, "license": "MIT", "dependencies": { - "macos-release": "^3.1.0", - "windows-release": "^5.0.1" + "irregular-plurals": "^3.3.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -20452,208 +20677,219 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/os-tmpdir": { - "version": "1.0.2", - "dev": true, + "node_modules/postcss": { + "version": "8.4.32", + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.0.2" + }, "engines": { - "node": ">=0.10.0" + "node": "^10 || ^12 || >=14" } }, - "node_modules/p-cancelable": { - "version": "3.0.0", - "license": "MIT", + "node_modules/postcss-values-parser": { + "version": "6.0.2", + "license": "MPL-2.0", + "dependencies": { + "color-name": "^1.1.4", + "is-url-superb": "^4.0.0", + "quote-unquote": "^1.0.0" + }, "engines": { - "node": ">=12.20" + "node": ">=10" + }, + "peerDependencies": { + "postcss": "^8.2.9" } }, - "node_modules/p-defer": { - "version": "1.0.0", - "dev": true, + "node_modules/precinct": { + "version": "11.0.5", "license": "MIT", + "dependencies": { + "@dependents/detective-less": "^4.1.0", + "commander": "^10.0.1", + "detective-amd": "^5.0.2", + "detective-cjs": "^5.0.1", + "detective-es6": "^4.0.1", + "detective-postcss": "^6.1.3", + "detective-sass": "^5.0.3", + "detective-scss": "^4.0.3", + "detective-stylus": "^4.0.0", + "detective-typescript": "^11.1.0", + "module-definition": "^5.0.1", + "node-source-walk": "^6.0.2" + }, + "bin": { + "precinct": "bin/cli.js" + }, "engines": { - "node": ">=4" + "node": "^14.14.0 || >=16.0.0" } }, - "node_modules/p-event": { - "version": "5.0.1", + "node_modules/precinct/node_modules/commander": { + "version": "10.0.1", "license": "MIT", - "dependencies": { - "p-timeout": "^5.0.2" - }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14" } }, - "node_modules/p-every": { + "node_modules/preferred-node-version": { "version": "2.0.0", - "license": "MIT", + "dev": true, + "license": "Apache-2.0", "dependencies": { - "p-map": "^2.0.0" + "filter-obj": "^2.0.1", + "is-plain-obj": "^4.0.0", + "jest-validate": "^27.0.2", + "node-version-alias": "^2.0.0", + "p-locate": "^5.0.0", + "path-type": "^5.0.0" }, "engines": { - "node": ">=8" + "node": ">=12.20.0" } }, - "node_modules/p-every/node_modules/p-map": { - "version": "2.1.0", + "node_modules/preferred-node-version/node_modules/filter-obj": { + "version": "2.0.2", + "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/p-filter": { - "version": "3.0.0", + "node_modules/preferred-node-version/node_modules/p-limit": { + "version": "3.1.0", + "dev": true, "license": "MIT", "dependencies": { - "p-map": "^5.1.0" + "yocto-queue": "^0.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-filter/node_modules/aggregate-error": { - "version": "4.0.1", + "node_modules/preferred-node-version/node_modules/p-locate": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "clean-stack": "^4.0.0", - "indent-string": "^5.0.0" + "p-limit": "^3.0.2" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-filter/node_modules/p-map": { - "version": "5.5.0", + "node_modules/preferred-node-version/node_modules/yocto-queue": { + "version": "0.1.0", + "dev": true, "license": "MIT", - "dependencies": { - "aggregate-error": "^4.0.0" - }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-finally": { - "version": "1.0.0", + "node_modules/prelude-ls": { + "version": "1.2.1", + "dev": true, "license": "MIT", "engines": { - "node": ">=4" + "node": ">= 0.8.0" } }, - "node_modules/p-limit": { - "version": "4.0.0", + "node_modules/prettier": { + "version": "2.8.8", + "dev": true, "license": "MIT", - "dependencies": { - "yocto-queue": "^1.0.0" + "bin": { + "prettier": "bin-prettier.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/prettier/prettier?sponsor=1" } }, - "node_modules/p-locate": { - "version": "6.0.0", + "node_modules/pretty-format": { + "version": "27.5.1", "license": "MIT", "dependencies": { - "p-limit": "^4.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "ansi-regex": "^5.0.1", + "ansi-styles": "^5.0.0", + "react-is": "^17.0.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/p-map": { - "version": "6.0.0", - "license": "MIT", "engines": { - "node": ">=16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" } }, - "node_modules/p-map-series": { - "version": "2.1.0", - "dev": true, + "node_modules/pretty-format/node_modules/ansi-regex": { + "version": "5.0.1", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/p-pipe": { - "version": "3.1.0", - "dev": true, + "node_modules/pretty-format/node_modules/ansi-styles": { + "version": "5.2.0", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/p-queue": { - "version": "6.6.2", - "dev": true, + "node_modules/pretty-ms": { + "version": "8.0.0", "license": "MIT", "dependencies": { - "eventemitter3": "^4.0.4", - "p-timeout": "^3.2.0" + "parse-ms": "^3.0.0" }, "engines": { - "node": ">=8" + "node": ">=14.16" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-queue/node_modules/eventemitter3": { - "version": "4.0.7", - "dev": true, - "license": "MIT" - }, - "node_modules/p-queue/node_modules/p-timeout": { - "version": "3.2.0", + "node_modules/proc-log": { + "version": "2.0.1", "dev": true, - "license": "MIT", - "dependencies": { - "p-finally": "^1.0.0" - }, - "engines": { - "node": ">=8" - } - }, - "node_modules/p-reduce": { - "version": "3.0.0", - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/p-retry": { - "version": "5.1.2", + "node_modules/process-exists": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "@types/retry": "0.12.1", - "retry": "^0.13.1" + "ps-list": "^8.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -20662,311 +20898,330 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/p-timeout": { - "version": "5.1.0", - "license": "MIT", - "engines": { - "node": ">=12" - }, + "node_modules/process-nextick-args": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/promise-all-reject-late": { + "version": "1.0.1", + "dev": true, + "license": "ISC", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/p-try": { - "version": "2.2.0", + "node_modules/promise-call-limit": { + "version": "1.0.2", "dev": true, - "license": "MIT", - "engines": { - "node": ">=6" + "license": "ISC", + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/p-wait-for": { - "version": "4.1.0", + "node_modules/promise-inflight": { + "version": "1.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/promise-retry": { + "version": "2.0.1", + "dev": true, "license": "MIT", "dependencies": { - "p-timeout": "^5.0.0" + "err-code": "^2.0.2", + "retry": "^0.12.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=10" } }, - "node_modules/p-waterfall": { - "version": "2.1.1", + "node_modules/promise-retry/node_modules/retry": { + "version": "0.12.0", "dev": true, "license": "MIT", - "dependencies": { - "p-reduce": "^2.0.0" - }, "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 4" } }, - "node_modules/p-waterfall/node_modules/p-reduce": { - "version": "2.1.0", + "node_modules/promzard": { + "version": "0.3.0", + "dev": true, + "license": "ISC", + "dependencies": { + "read": "1" + } + }, + "node_modules/propagate": { + "version": "2.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">= 8" } }, - "node_modules/pacote": { - "version": "13.6.2", + "node_modules/proto-list": { + "version": "1.2.4", "dev": true, - "license": "ISC", + "license": "ISC" + }, + "node_modules/protobufjs": { + "version": "7.2.6", + "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", + "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", + "hasInstallScript": true, "dependencies": { - "@npmcli/git": "^3.0.0", - "@npmcli/installed-package-contents": "^1.0.7", - "@npmcli/promise-spawn": "^3.0.0", - "@npmcli/run-script": "^4.1.0", - "cacache": "^16.0.0", - "chownr": "^2.0.0", - "fs-minipass": "^2.1.0", - "infer-owner": "^1.0.4", - "minipass": "^3.1.6", - "mkdirp": "^1.0.4", - "npm-package-arg": "^9.0.0", - "npm-packlist": "^5.1.0", - "npm-pick-manifest": "^7.0.0", - "npm-registry-fetch": "^13.0.1", - "proc-log": "^2.0.0", - "promise-retry": "^2.0.1", - "read-package-json": "^5.0.0", - "read-package-json-fast": "^2.0.3", - "rimraf": "^3.0.2", - "ssri": "^9.0.0", - "tar": "^6.1.11" - }, - "bin": { - "pacote": "lib/bin.js" + "@protobufjs/aspromise": "^1.1.2", + "@protobufjs/base64": "^1.1.2", + "@protobufjs/codegen": "^2.0.4", + "@protobufjs/eventemitter": "^1.1.0", + "@protobufjs/fetch": "^1.1.0", + "@protobufjs/float": "^1.0.2", + "@protobufjs/inquire": "^1.1.0", + "@protobufjs/path": "^1.1.2", + "@protobufjs/pool": "^1.1.0", + "@protobufjs/utf8": "^1.1.0", + "@types/node": ">=13.7.0", + "long": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=12.0.0" } }, - "node_modules/pacote/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/protocols": { + "version": "2.0.1", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } + "license": "MIT" }, - "node_modules/pacote/node_modules/npm-package-arg": { - "version": "9.1.2", - "dev": true, - "license": "ISC", - "dependencies": { - "hosted-git-info": "^5.0.0", - "proc-log": "^2.0.1", - "semver": "^7.3.5", - "validate-npm-package-name": "^4.0.0" - }, + "node_modules/proxy-from-env": { + "version": "1.1.0", + "license": "MIT" + }, + "node_modules/ps-list": { + "version": "8.1.1", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pako": { - "version": "1.0.11", - "dev": true, - "license": "(MIT AND Zlib)" - }, - "node_modules/parent-module": { - "version": "1.0.1", - "dev": true, + "node_modules/pump": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "callsites": "^3.0.0" - }, - "engines": { - "node": ">=6" + "end-of-stream": "^1.1.0", + "once": "^1.3.1" } }, - "node_modules/parent-module/node_modules/callsites": { - "version": "3.1.0", - "dev": true, + "node_modules/punycode": { + "version": "2.3.1", "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/parse-conflict-json": { - "version": "2.0.2", + "node_modules/q": { + "version": "1.5.1", "dev": true, - "license": "ISC", - "dependencies": { - "json-parse-even-better-errors": "^2.3.1", - "just-diff": "^5.0.1", - "just-diff-apply": "^5.2.0" - }, + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=0.6.0", + "teleport": ">=0.2.0" } }, - "node_modules/parse-json": { - "version": "5.2.0", - "license": "MIT", + "node_modules/qs": { + "version": "6.11.2", + "license": "BSD-3-Clause", "dependencies": { - "@babel/code-frame": "^7.0.0", - "error-ex": "^1.3.1", - "json-parse-even-better-errors": "^2.3.0", - "lines-and-columns": "^1.1.6" + "side-channel": "^1.0.4" }, "engines": { - "node": ">=8" + "node": ">=0.6" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/parse-ms": { - "version": "3.0.0", + "node_modules/queue-microtask": { + "version": "1.2.3", + "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/queue-tick": { + "version": "1.0.1", + "license": "MIT" + }, + "node_modules/quick-lru": { + "version": "5.1.1", "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/parse-path": { - "version": "7.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "protocols": "^2.0.0" - } + "node_modules/quote-unquote": { + "version": "1.0.0", + "license": "MIT" }, - "node_modules/parse-url": { - "version": "8.1.0", + "node_modules/randombytes": { + "version": "2.1.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "parse-path": "^7.0.0" + "safe-buffer": "^5.1.0" } }, - "node_modules/path-browserify": { - "version": "1.0.1", - "dev": true, + "node_modules/react-is": { + "version": "17.0.2", "license": "MIT" }, - "node_modules/path-exists": { - "version": "5.0.0", - "license": "MIT", + "node_modules/read": { + "version": "1.0.7", + "dev": true, + "license": "ISC", + "dependencies": { + "mute-stream": "~0.0.4" + }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=0.8" } }, - "node_modules/path-is-absolute": { - "version": "1.0.1", - "license": "MIT", + "node_modules/read-cmd-shim": { + "version": "3.0.1", + "dev": true, + "license": "ISC", "engines": { - "node": ">=0.10.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/path-key": { - "version": "4.0.0", - "license": "MIT", - "engines": { - "node": ">=12" + "node_modules/read-package-json": { + "version": "5.0.2", + "dev": true, + "license": "ISC", + "dependencies": { + "glob": "^8.0.1", + "json-parse-even-better-errors": "^2.3.1", + "normalize-package-data": "^4.0.0", + "npm-normalize-package-bin": "^2.0.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/path-parse": { - "version": "1.0.7", - "license": "MIT" - }, - "node_modules/path-to-regexp": { - "version": "1.8.0", + "node_modules/read-package-json-fast": { + "version": "2.0.3", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "isarray": "0.0.1" + "json-parse-even-better-errors": "^2.3.0", + "npm-normalize-package-bin": "^1.0.1" + }, + "engines": { + "node": ">=10" } }, - "node_modules/path-to-regexp/node_modules/isarray": { - "version": "0.0.1", + "node_modules/read-package-json/node_modules/glob": { + "version": "8.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/path-type": { - "version": "5.0.0", - "license": "MIT", + "license": "ISC", + "dependencies": { + "fs.realpath": "^1.0.0", + "inflight": "^1.0.4", + "inherits": "2", + "minimatch": "^5.0.1", + "once": "^1.3.0" + }, "engines": { "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/pathe": { - "version": "1.1.1", - "dev": true, - "license": "MIT" - }, - "node_modules/pathval": { - "version": "1.1.1", + "node_modules/read-package-json/node_modules/hosted-git-info": { + "version": "5.2.1", "dev": true, - "license": "MIT", + "license": "ISC", + "dependencies": { + "lru-cache": "^7.5.1" + }, "engines": { - "node": "*" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/picocolors": { - "version": "1.0.0", - "license": "ISC" - }, - "node_modules/picomatch": { - "version": "3.0.1", - "license": "MIT", - "optional": true, - "peer": true, + "node_modules/read-package-json/node_modules/minimatch": { + "version": "5.1.6", + "dev": true, + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" + }, "engines": { "node": ">=10" + } + }, + "node_modules/read-package-json/node_modules/normalize-package-data": { + "version": "4.0.1", + "dev": true, + "license": "BSD-2-Clause", + "dependencies": { + "hosted-git-info": "^5.0.0", + "is-core-module": "^2.8.1", + "semver": "^7.3.5", + "validate-npm-package-license": "^3.0.4" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pidtree": { - "version": "0.6.0", + "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { + "version": "2.0.0", "dev": true, - "license": "MIT", - "bin": { - "pidtree": "bin/pidtree.js" - }, + "license": "ISC", "engines": { - "node": ">=0.10" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/pify": { - "version": "5.0.0", - "dev": true, + "node_modules/read-pkg": { + "version": "7.1.0", "license": "MIT", + "dependencies": { + "@types/normalize-package-data": "^2.4.1", + "normalize-package-data": "^3.0.2", + "parse-json": "^5.2.0", + "type-fest": "^2.0.0" + }, "engines": { - "node": ">=10" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf": { - "version": "4.0.0", - "dev": true, + "node_modules/read-pkg-up": { + "version": "9.1.0", "license": "MIT", "dependencies": { - "find-up": "^6.0.0", - "load-json-file": "^7.0.0" + "find-up": "^6.3.0", + "read-pkg": "^7.1.0", + "type-fest": "^2.5.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -20975,288 +21230,234 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-conf/node_modules/load-json-file": { - "version": "7.0.1", - "dev": true, - "license": "MIT", + "node_modules/read-pkg-up/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-dir": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "find-up": "^6.3.0" - }, + "node_modules/read-pkg/node_modules/type-fest": { + "version": "2.19.0", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=14.16" + "node": ">=12.20" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/pkg-types": { - "version": "1.0.3", - "dev": true, + "node_modules/readable-stream": { + "version": "3.6.2", "license": "MIT", "dependencies": { - "jsonc-parser": "^3.2.0", - "mlly": "^1.2.0", - "pathe": "^1.1.0" + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" } }, - "node_modules/playwright": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright/-/playwright-1.41.2.tgz", - "integrity": "sha512-v0bOa6H2GJChDL8pAeLa/LZC4feoAMbSQm1/jF/ySsWWoaNItvrMP7GEkvEEFyCTUYKMxjQKaTSg5up7nR6/8A==", - "dev": true, + "node_modules/readdir-glob": { + "version": "1.1.3", + "license": "Apache-2.0", "dependencies": { - "playwright-core": "1.41.2" - }, - "bin": { - "playwright": "cli.js" - }, - "engines": { - "node": ">=16" - }, - "optionalDependencies": { - "fsevents": "2.3.2" + "minimatch": "^5.1.0" } }, - "node_modules/playwright-core": { - "version": "1.41.2", - "resolved": "https://registry.npmjs.org/playwright-core/-/playwright-core-1.41.2.tgz", - "integrity": "sha512-VaTvwCA4Y8kxEe+kfm2+uUUw5Lubf38RxF7FpBxLPmGe5sdNkSg5e3ChEigaGrX7qdqT3pt2m/98LiyvU2x6CA==", - "dev": true, - "bin": { - "playwright-core": "cli.js" + "node_modules/readdir-glob/node_modules/minimatch": { + "version": "5.1.6", + "license": "ISC", + "dependencies": { + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16" + "node": ">=10" } }, - "node_modules/playwright/node_modules/fsevents": { - "version": "2.3.2", + "node_modules/readdir-scoped-modules": { + "version": "1.1.0", "dev": true, - "license": "MIT", - "optional": true, - "os": [ - "darwin" - ], - "peer": true, - "engines": { - "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + "license": "ISC", + "dependencies": { + "debuglog": "^1.0.1", + "dezalgo": "^1.0.0", + "graceful-fs": "^4.1.2", + "once": "^1.3.0" } }, - "node_modules/plur": { - "version": "5.1.0", - "dev": true, + "node_modules/readdirp": { + "version": "3.6.0", "license": "MIT", "dependencies": { - "irregular-plurals": "^3.3.0" + "picomatch": "^2.2.1" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.10.0" } }, - "node_modules/postcss": { - "version": "8.4.32", - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/postcss" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], + "node_modules/readdirp/node_modules/picomatch": { + "version": "2.3.1", "license": "MIT", - "dependencies": { - "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" - }, "engines": { - "node": "^10 || ^12 || >=14" + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" } }, - "node_modules/postcss-values-parser": { - "version": "6.0.2", - "license": "MPL-2.0", + "node_modules/redent": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "dependencies": { - "color-name": "^1.1.4", - "is-url-superb": "^4.0.0", - "quote-unquote": "^1.0.0" + "indent-string": "^4.0.0", + "strip-indent": "^3.0.0" }, "engines": { - "node": ">=10" - }, - "peerDependencies": { - "postcss": "^8.2.9" + "node": ">=8" } }, - "node_modules/precinct": { - "version": "11.0.5", + "node_modules/redent/node_modules/indent-string": { + "version": "4.0.0", + "dev": true, "license": "MIT", - "dependencies": { - "@dependents/detective-less": "^4.1.0", - "commander": "^10.0.1", - "detective-amd": "^5.0.2", - "detective-cjs": "^5.0.1", - "detective-es6": "^4.0.1", - "detective-postcss": "^6.1.3", - "detective-sass": "^5.0.3", - "detective-scss": "^4.0.3", - "detective-stylus": "^4.0.0", - "detective-typescript": "^11.1.0", - "module-definition": "^5.0.1", - "node-source-walk": "^6.0.2" - }, - "bin": { - "precinct": "bin/cli.js" - }, "engines": { - "node": "^14.14.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/precinct/node_modules/commander": { - "version": "10.0.1", + "node_modules/reduce-flatten": { + "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=14" + "node": ">=6" } }, - "node_modules/preferred-node-version": { - "version": "2.0.0", + "node_modules/regexp.prototype.flags": { + "version": "1.5.1", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "filter-obj": "^2.0.1", - "is-plain-obj": "^4.0.0", - "jest-validate": "^27.0.2", - "node-version-alias": "^2.0.0", - "p-locate": "^5.0.0", - "path-type": "^5.0.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "set-function-name": "^2.0.0" }, "engines": { - "node": ">=12.20.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/preferred-node-version/node_modules/filter-obj": { - "version": "2.0.2", - "dev": true, + "node_modules/remove-trailing-separator": { + "version": "1.1.0", + "license": "ISC" + }, + "node_modules/require-directory": { + "version": "2.1.1", "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10.0" } }, - "node_modules/preferred-node-version/node_modules/p-limit": { - "version": "3.1.0", - "dev": true, + "node_modules/require-from-string": { + "version": "2.0.2", "license": "MIT", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/require-in-the-middle": { + "version": "7.2.1", + "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.1.tgz", + "integrity": "sha512-u5XngygsJ+XV2dBV/Pl4SrcNpUXQfmYmXtuFeHDXfzk4i4NnGnret6xKWkkJHjMHS/16yMV9pEAlAunqmjllkA==", "dependencies": { - "yocto-queue": "^0.1.0" + "debug": "^4.1.1", + "module-details-from-path": "^1.0.3", + "resolve": "^1.22.1" }, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8.6.0" } }, - "node_modules/preferred-node-version/node_modules/p-locate": { - "version": "5.0.0", - "dev": true, - "license": "MIT", + "node_modules/require-in-the-middle/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", "dependencies": { - "p-limit": "^3.0.2" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=10" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/preferred-node-version/node_modules/yocto-queue": { - "version": "0.1.0", - "dev": true, + "node_modules/require-package-name": { + "version": "2.0.1", + "license": "MIT" + }, + "node_modules/resolve": { + "version": "2.0.0-next.5", "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/prelude-ls": { + "node_modules/resolve-alpn": { "version": "1.2.1", - "dev": true, - "license": "MIT", - "engines": { - "node": ">= 0.8.0" - } + "license": "MIT" }, - "node_modules/prettier": { - "version": "2.8.8", + "node_modules/resolve-cwd": { + "version": "3.0.0", "dev": true, "license": "MIT", - "bin": { - "prettier": "bin-prettier.js" - }, - "engines": { - "node": ">=10.13.0" - }, - "funding": { - "url": "https://github.com/prettier/prettier?sponsor=1" - } - }, - "node_modules/pretty-format": { - "version": "27.5.1", - "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1", - "ansi-styles": "^5.0.0", - "react-is": "^17.0.1" + "resolve-from": "^5.0.0" }, "engines": { - "node": "^10.13.0 || ^12.13.0 || ^14.15.0 || >=15.0.0" + "node": ">=8" } }, - "node_modules/pretty-format/node_modules/ansi-regex": { - "version": "5.0.1", + "node_modules/resolve-from": { + "version": "5.0.0", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/pretty-format/node_modules/ansi-styles": { - "version": "5.2.0", + "node_modules/resolve-global": { + "version": "1.0.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "global-dirs": "^0.1.1" }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "engines": { + "node": ">=8" } }, - "node_modules/pretty-ms": { - "version": "8.0.0", + "node_modules/responselike": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "parse-ms": "^3.0.0" + "lowercase-keys": "^3.0.0" }, "engines": { "node": ">=14.16" @@ -21265,175 +21466,158 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/proc-log": { - "version": "2.0.1", - "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" - } - }, - "node_modules/process-exists": { - "version": "5.0.0", + "node_modules/restore-cursor": { + "version": "3.1.0", "dev": true, "license": "MIT", "dependencies": { - "ps-list": "^8.0.0" + "onetime": "^5.1.0", + "signal-exit": "^3.0.2" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=8" } }, - "node_modules/process-nextick-args": { - "version": "2.0.1", - "license": "MIT" + "node_modules/retry": { + "version": "0.13.1", + "license": "MIT", + "engines": { + "node": ">= 4" + } }, - "node_modules/promise-all-reject-late": { - "version": "1.0.1", - "dev": true, - "license": "ISC", - "funding": { - "url": "https://github.com/sponsors/isaacs" + "node_modules/reusify": { + "version": "1.0.4", + "license": "MIT", + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" } }, - "node_modules/promise-call-limit": { - "version": "1.0.2", - "dev": true, + "node_modules/rfdc": { + "version": "1.3.1", + "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", + "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + }, + "node_modules/rimraf": { + "version": "3.0.2", "license": "ISC", + "dependencies": { + "glob": "^7.1.3" + }, + "bin": { + "rimraf": "bin.js" + }, "funding": { "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/promise-inflight": { - "version": "1.0.1", - "dev": true, - "license": "ISC" - }, - "node_modules/promise-retry": { - "version": "2.0.1", + "node_modules/rollup": { + "version": "3.29.4", "dev": true, "license": "MIT", - "dependencies": { - "err-code": "^2.0.2", - "retry": "^0.12.0" + "bin": { + "rollup": "dist/bin/rollup" }, "engines": { - "node": ">=10" + "node": ">=14.18.0", + "npm": ">=8.0.0" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" } }, - "node_modules/promise-retry/node_modules/retry": { - "version": "0.12.0", + "node_modules/rollup-plugin-inject": { + "version": "3.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">= 4" + "dependencies": { + "estree-walker": "^0.6.1", + "magic-string": "^0.25.3", + "rollup-pluginutils": "^2.8.1" } }, - "node_modules/promzard": { - "version": "0.3.0", + "node_modules/rollup-plugin-inject/node_modules/estree-walker": { + "version": "0.6.1", "dev": true, - "license": "ISC", - "dependencies": { - "read": "1" - } + "license": "MIT" }, - "node_modules/propagate": { - "version": "2.0.1", + "node_modules/rollup-plugin-node-polyfills": { + "version": "0.2.1", "dev": true, "license": "MIT", - "engines": { - "node": ">= 8" + "dependencies": { + "rollup-plugin-inject": "^3.0.0" } }, - "node_modules/proto-list": { - "version": "1.2.4", + "node_modules/rollup-pluginutils": { + "version": "2.8.2", "dev": true, - "license": "ISC" - }, - "node_modules/protobufjs": { - "version": "7.2.6", - "resolved": "https://registry.npmjs.org/protobufjs/-/protobufjs-7.2.6.tgz", - "integrity": "sha512-dgJaEDDL6x8ASUZ1YqWciTRrdOuYNzoOf27oHNfdyvKqHr5i0FV7FSLU+aIeFjyFgVxrpTOtQUi0BLLBymZaBw==", - "hasInstallScript": true, + "license": "MIT", "dependencies": { - "@protobufjs/aspromise": "^1.1.2", - "@protobufjs/base64": "^1.1.2", - "@protobufjs/codegen": "^2.0.4", - "@protobufjs/eventemitter": "^1.1.0", - "@protobufjs/fetch": "^1.1.0", - "@protobufjs/float": "^1.0.2", - "@protobufjs/inquire": "^1.1.0", - "@protobufjs/path": "^1.1.2", - "@protobufjs/pool": "^1.1.0", - "@protobufjs/utf8": "^1.1.0", - "@types/node": ">=13.7.0", - "long": "^5.0.0" - }, - "engines": { - "node": ">=12.0.0" + "estree-walker": "^0.6.1" } }, - "node_modules/protocols": { - "version": "2.0.1", + "node_modules/rollup-pluginutils/node_modules/estree-walker": { + "version": "0.6.1", "dev": true, "license": "MIT" }, - "node_modules/proxy-from-env": { - "version": "1.1.0", - "license": "MIT" - }, - "node_modules/ps-list": { - "version": "8.1.1", + "node_modules/run-async": { + "version": "2.4.1", + "dev": true, "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=0.12.0" } }, - "node_modules/pump": { - "version": "3.0.0", + "node_modules/run-parallel": { + "version": "1.2.0", + "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", "dependencies": { - "end-of-stream": "^1.1.0", - "once": "^1.3.1" + "queue-microtask": "^1.2.2" } }, - "node_modules/punycode": { - "version": "2.3.1", - "license": "MIT", - "engines": { - "node": ">=6" + "node_modules/rxjs": { + "version": "7.8.1", + "dev": true, + "license": "Apache-2.0", + "dependencies": { + "tslib": "^2.1.0" } }, - "node_modules/q": { - "version": "1.5.1", + "node_modules/safe-array-concat": { + "version": "1.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.6.0", - "teleport": ">=0.2.0" - } - }, - "node_modules/qs": { - "version": "6.11.2", - "license": "BSD-3-Clause", "dependencies": { - "side-channel": "^1.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "has-symbols": "^1.0.3", + "isarray": "^2.0.5" }, "engines": { - "node": ">=0.6" + "node": ">=0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/queue-microtask": { - "version": "1.2.3", + "node_modules/safe-buffer": { + "version": "5.2.1", "funding": [ { "type": "github", @@ -21450,1436 +21634,1480 @@ ], "license": "MIT" }, - "node_modules/queue-tick": { - "version": "1.0.1", + "node_modules/safe-json-stringify": { + "version": "1.2.0", "license": "MIT" }, - "node_modules/quick-lru": { - "version": "5.1.1", + "node_modules/safe-regex-test": { + "version": "1.0.0", + "dev": true, "license": "MIT", - "engines": { - "node": ">=10" + "dependencies": { + "call-bind": "^1.0.2", + "get-intrinsic": "^1.1.3", + "is-regex": "^1.1.4" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/quote-unquote": { - "version": "1.0.0", + "node_modules/safer-buffer": { + "version": "2.1.2", + "devOptional": true, "license": "MIT" }, - "node_modules/randombytes": { - "version": "2.1.0", + "node_modules/schema-utils": { + "version": "2.7.1", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "safe-buffer": "^5.1.0" + "@types/json-schema": "^7.0.5", + "ajv": "^6.12.4", + "ajv-keywords": "^3.5.2" + }, + "engines": { + "node": ">= 8.9.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/react-is": { - "version": "17.0.2", - "license": "MIT" - }, - "node_modules/read": { - "version": "1.0.7", + "node_modules/schema-utils/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "mute-stream": "~0.0.4" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, - "engines": { - "node": ">=0.8" + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/read-cmd-shim": { - "version": "3.0.1", + "node_modules/schema-utils/node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, - "license": "ISC", - "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "license": "MIT", + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/read-package-json": { - "version": "5.0.2", + "node_modules/schema-utils/node_modules/json-schema-traverse": { + "version": "0.4.1", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/semver": { + "version": "7.6.0", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", + "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", "dependencies": { - "glob": "^8.0.1", - "json-parse-even-better-errors": "^2.3.1", - "normalize-package-data": "^4.0.0", - "npm-normalize-package-bin": "^2.0.0" + "lru-cache": "^6.0.0" + }, + "bin": { + "semver": "bin/semver.js" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" } }, - "node_modules/read-package-json-fast": { - "version": "2.0.3", - "dev": true, - "license": "ISC", + "node_modules/semver/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==", "dependencies": { - "json-parse-even-better-errors": "^2.3.0", - "npm-normalize-package-bin": "^1.0.1" + "yallist": "^4.0.0" }, "engines": { "node": ">=10" } }, - "node_modules/read-package-json/node_modules/glob": { - "version": "8.1.0", + "node_modules/serialize-error": { + "version": "7.0.1", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "fs.realpath": "^1.0.0", - "inflight": "^1.0.4", - "inherits": "2", - "minimatch": "^5.0.1", - "once": "^1.3.0" + "type-fest": "^0.13.1" }, "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/isaacs" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-json/node_modules/hosted-git-info": { - "version": "5.2.1", + "node_modules/serialize-error/node_modules/type-fest": { + "version": "0.13.1", "dev": true, - "license": "ISC", - "dependencies": { - "lru-cache": "^7.5.1" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/read-package-json/node_modules/minimatch": { - "version": "5.1.6", + "node_modules/serialize-javascript": { + "version": "6.0.1", "dev": true, - "license": "ISC", + "license": "BSD-3-Clause", + "peer": true, "dependencies": { - "brace-expansion": "^2.0.1" + "randombytes": "^2.1.0" + } + }, + "node_modules/set-blocking": { + "version": "2.0.0", + "license": "ISC" + }, + "node_modules/set-function-length": { + "version": "1.1.1", + "license": "MIT", + "dependencies": { + "define-data-property": "^1.1.1", + "get-intrinsic": "^1.2.1", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": ">=10" + "node": ">= 0.4" } }, - "node_modules/read-package-json/node_modules/normalize-package-data": { - "version": "4.0.1", + "node_modules/set-function-name": { + "version": "2.0.1", "dev": true, - "license": "BSD-2-Clause", + "license": "MIT", "dependencies": { - "hosted-git-info": "^5.0.0", - "is-core-module": "^2.8.1", - "semver": "^7.3.5", - "validate-npm-package-license": "^3.0.4" + "define-data-property": "^1.0.1", + "functions-have-names": "^1.2.3", + "has-property-descriptors": "^1.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">= 0.4" } }, - "node_modules/read-package-json/node_modules/npm-normalize-package-bin": { - "version": "2.0.0", + "node_modules/setimmediate": { + "version": "1.0.5", "dev": true, - "license": "ISC", + "license": "MIT" + }, + "node_modules/shallow-clone": { + "version": "3.0.1", + "dev": true, + "license": "MIT", + "dependencies": { + "kind-of": "^6.0.2" + }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/read-pkg": { - "version": "7.1.0", + "node_modules/shebang-command": { + "version": "2.0.0", "license": "MIT", "dependencies": { - "@types/normalize-package-data": "^2.4.1", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^2.0.0" + "shebang-regex": "^3.0.0" }, "engines": { - "node": ">=12.20" - }, + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.1", + "dev": true, + "license": "MIT", "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg-up": { - "version": "9.1.0", + "node_modules/shimmer": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", + "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" + }, + "node_modules/side-channel": { + "version": "1.0.4", "license": "MIT", "dependencies": { - "find-up": "^6.3.0", - "read-pkg": "^7.1.0", - "type-fest": "^2.5.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "call-bind": "^1.0.0", + "get-intrinsic": "^1.0.2", + "object-inspect": "^1.9.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/read-pkg-up/node_modules/type-fest": { - "version": "2.19.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } + "node_modules/siginfo": { + "version": "2.0.0", + "dev": true, + "license": "ISC" }, - "node_modules/read-pkg/node_modules/type-fest": { - "version": "2.19.0", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=12.20" + "node_modules/signal-exit": { + "version": "3.0.7", + "license": "ISC" + }, + "node_modules/sinon": { + "version": "13.0.2", + "dev": true, + "license": "BSD-3-Clause", + "dependencies": { + "@sinonjs/commons": "^1.8.3", + "@sinonjs/fake-timers": "^9.1.2", + "@sinonjs/samsam": "^6.1.1", + "diff": "^5.0.0", + "nise": "^5.1.1", + "supports-color": "^7.2.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "opencollective", + "url": "https://opencollective.com/sinon" } }, - "node_modules/readable-stream": { - "version": "3.6.2", + "node_modules/sinon/node_modules/supports-color": { + "version": "7.2.0", + "dev": true, "license": "MIT", "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 6" - } - }, - "node_modules/readdir-glob": { - "version": "1.1.3", - "license": "Apache-2.0", - "dependencies": { - "minimatch": "^5.1.0" + "node": ">=8" } }, - "node_modules/readdir-glob/node_modules/minimatch": { - "version": "5.1.6", - "license": "ISC", + "node_modules/sirv": { + "version": "2.0.3", + "dev": true, + "license": "MIT", "dependencies": { - "brace-expansion": "^2.0.1" + "@polka/url": "^1.0.0-next.20", + "mrmime": "^1.0.0", + "totalist": "^3.0.0" }, "engines": { - "node": ">=10" + "node": ">= 10" } }, - "node_modules/readdir-scoped-modules": { - "version": "1.1.0", - "dev": true, - "license": "ISC", - "dependencies": { - "debuglog": "^1.0.1", - "dezalgo": "^1.0.0", - "graceful-fs": "^4.1.2", - "once": "^1.3.0" + "node_modules/slash": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/readdirp": { - "version": "3.6.0", + "node_modules/slice-ansi": { + "version": "5.0.0", + "dev": true, "license": "MIT", "dependencies": { - "picomatch": "^2.2.1" + "ansi-styles": "^6.0.0", + "is-fullwidth-code-point": "^4.0.0" }, "engines": { - "node": ">=8.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/slice-ansi?sponsor=1" } }, - "node_modules/readdirp/node_modules/picomatch": { - "version": "2.3.1", + "node_modules/smart-buffer": { + "version": "4.2.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=8.6" + "node": ">= 6.0.0", + "npm": ">= 3.0.0" + } + }, + "node_modules/socks": { + "version": "2.7.1", + "dev": true, + "license": "MIT", + "dependencies": { + "ip": "^2.0.0", + "smart-buffer": "^4.2.0" }, - "funding": { - "url": "https://github.com/sponsors/jonschlinkert" + "engines": { + "node": ">= 10.13.0", + "npm": ">= 3.0.0" } }, - "node_modules/redent": { - "version": "3.0.0", + "node_modules/socks-proxy-agent": { + "version": "7.0.0", "dev": true, "license": "MIT", "dependencies": { - "indent-string": "^4.0.0", - "strip-indent": "^3.0.0" + "agent-base": "^6.0.2", + "debug": "^4.3.3", + "socks": "^2.6.2" }, "engines": { - "node": ">=8" + "node": ">= 10" } }, - "node_modules/redent/node_modules/indent-string": { - "version": "4.0.0", + "node_modules/sort-keys": { + "version": "4.2.0", "dev": true, "license": "MIT", + "dependencies": { + "is-plain-obj": "^2.0.0" + }, "engines": { "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/reduce-flatten": { - "version": "2.0.0", + "node_modules/sort-keys/node_modules/is-plain-obj": { + "version": "2.1.0", "dev": true, "license": "MIT", "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/regexp.prototype.flags": { - "version": "1.5.1", + "node_modules/sort-on": { + "version": "5.2.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "set-function-name": "^2.0.0" + "dot-prop": "^7.2.0" }, "engines": { - "node": ">= 0.4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/remove-trailing-separator": { - "version": "1.1.0", - "license": "ISC" - }, - "node_modules/require-directory": { - "version": "2.1.1", - "license": "MIT", + "node_modules/source-map": { + "version": "0.6.1", + "devOptional": true, + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-from-string": { - "version": "2.0.2", - "license": "MIT", + "node_modules/source-map-js": { + "version": "1.0.2", + "license": "BSD-3-Clause", "engines": { "node": ">=0.10.0" } }, - "node_modules/require-in-the-middle": { - "version": "7.2.1", - "resolved": "https://registry.npmjs.org/require-in-the-middle/-/require-in-the-middle-7.2.1.tgz", - "integrity": "sha512-u5XngygsJ+XV2dBV/Pl4SrcNpUXQfmYmXtuFeHDXfzk4i4NnGnret6xKWkkJHjMHS/16yMV9pEAlAunqmjllkA==", + "node_modules/source-map-support": { + "version": "0.5.21", + "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "debug": "^4.1.1", - "module-details-from-path": "^1.0.3", - "resolve": "^1.22.1" - }, - "engines": { - "node": ">=8.6.0" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" } }, - "node_modules/require-in-the-middle/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/sourcemap-codec": { + "version": "1.4.8", + "dev": true, + "license": "MIT" + }, + "node_modules/spdx-correct": { + "version": "3.2.0", + "license": "Apache-2.0", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "spdx-expression-parse": "^3.0.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/require-package-name": { - "version": "2.0.1", - "license": "MIT" + "node_modules/spdx-exceptions": { + "version": "2.3.0", + "license": "CC-BY-3.0" }, - "node_modules/resolve": { - "version": "2.0.0-next.5", + "node_modules/spdx-expression-parse": { + "version": "3.0.1", "license": "MIT", "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" - }, - "bin": { - "resolve": "bin/resolve" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" } }, - "node_modules/resolve-alpn": { - "version": "1.2.1", - "license": "MIT" + "node_modules/spdx-license-ids": { + "version": "3.0.16", + "license": "CC0-1.0" }, - "node_modules/resolve-cwd": { - "version": "3.0.0", + "node_modules/split": { + "version": "1.0.1", "dev": true, "license": "MIT", "dependencies": { - "resolve-from": "^5.0.0" + "through": "2" }, "engines": { - "node": ">=8" + "node": "*" } }, - "node_modules/resolve-from": { - "version": "5.0.0", - "license": "MIT", - "engines": { - "node": ">=8" + "node_modules/split2": { + "version": "3.2.2", + "dev": true, + "license": "ISC", + "dependencies": { + "readable-stream": "^3.0.0" } }, - "node_modules/resolve-global": { - "version": "1.0.0", + "node_modules/sprintf-js": { + "version": "1.0.3", "dev": true, - "license": "MIT", + "license": "BSD-3-Clause" + }, + "node_modules/ssri": { + "version": "9.0.1", + "dev": true, + "license": "ISC", "dependencies": { - "global-dirs": "^0.1.1" + "minipass": "^3.1.1" }, "engines": { - "node": ">=8" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/responselike": { - "version": "3.0.0", + "node_modules/stack-generator": { + "version": "2.0.10", "license": "MIT", "dependencies": { - "lowercase-keys": "^3.0.0" - }, - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "stackframe": "^1.3.4" } }, - "node_modules/restore-cursor": { - "version": "3.1.0", + "node_modules/stack-utils": { + "version": "2.0.6", "dev": true, "license": "MIT", "dependencies": { - "onetime": "^5.1.0", - "signal-exit": "^3.0.2" + "escape-string-regexp": "^2.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/retry": { - "version": "0.13.1", - "license": "MIT", - "engines": { - "node": ">= 4" + "node": ">=10" } }, - "node_modules/reusify": { - "version": "1.0.4", + "node_modules/stack-utils/node_modules/escape-string-regexp": { + "version": "2.0.0", + "dev": true, "license": "MIT", "engines": { - "iojs": ">=1.0.0", - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/rfdc": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/rfdc/-/rfdc-1.3.1.tgz", - "integrity": "sha512-r5a3l5HzYlIC68TpmYKlxWjmOP6wiPJ1vWv2HeLhNsRZMrCkxeqxiHlQ21oXmQ4F3SiryXBHhAD7JZqvOJjFmg==" + "node_modules/stackback": { + "version": "0.0.2", + "dev": true, + "license": "MIT" }, - "node_modules/rimraf": { - "version": "3.0.2", - "license": "ISC", - "dependencies": { - "glob": "^7.1.3" - }, - "bin": { - "rimraf": "bin.js" - }, - "funding": { - "url": "https://github.com/sponsors/isaacs" - } + "node_modules/stackframe": { + "version": "1.3.4", + "license": "MIT" }, - "node_modules/rollup": { - "version": "3.29.4", + "node_modules/std-env": { + "version": "3.6.0", "dev": true, + "license": "MIT" + }, + "node_modules/streamx": { + "version": "2.15.6", "license": "MIT", - "bin": { - "rollup": "dist/bin/rollup" - }, - "engines": { - "node": ">=14.18.0", - "npm": ">=8.0.0" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" + "dependencies": { + "fast-fifo": "^1.1.0", + "queue-tick": "^1.0.1" } }, - "node_modules/rollup-plugin-inject": { - "version": "3.0.2", - "dev": true, + "node_modules/string_decoder": { + "version": "1.3.0", "license": "MIT", "dependencies": { - "estree-walker": "^0.6.1", - "magic-string": "^0.25.3", - "rollup-pluginutils": "^2.8.1" + "safe-buffer": "~5.2.0" } }, - "node_modules/rollup-plugin-inject/node_modules/estree-walker": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/rollup-plugin-node-polyfills": { - "version": "0.2.1", + "node_modules/string-argv": { + "version": "0.3.2", "dev": true, "license": "MIT", - "dependencies": { - "rollup-plugin-inject": "^3.0.0" + "engines": { + "node": ">=0.6.19" } }, - "node_modules/rollup-pluginutils": { - "version": "2.8.2", - "dev": true, + "node_modules/string-width": { + "version": "5.1.2", "license": "MIT", "dependencies": { - "estree-walker": "^0.6.1" + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/rollup-pluginutils/node_modules/estree-walker": { - "version": "0.6.1", - "dev": true, - "license": "MIT" - }, - "node_modules/run-async": { - "version": "2.4.1", + "node_modules/string.prototype.trim": { + "version": "1.2.8", "dev": true, "license": "MIT", + "dependencies": { + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, "engines": { - "node": ">=0.12.0" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/run-parallel": { - "version": "1.2.0", - "funding": [ - { - "type": "github", - "url": "https://github.com/sponsors/feross" - }, - { - "type": "patreon", - "url": "https://www.patreon.com/feross" - }, - { - "type": "consulting", - "url": "https://feross.org/support" - } - ], + "node_modules/string.prototype.trimend": { + "version": "1.0.7", + "dev": true, "license": "MIT", "dependencies": { - "queue-microtask": "^1.2.2" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/rxjs": { - "version": "7.8.1", + "node_modules/string.prototype.trimstart": { + "version": "1.0.7", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "tslib": "^2.1.0" + "call-bind": "^1.0.2", + "define-properties": "^1.2.0", + "es-abstract": "^1.22.1" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/safe-array-concat": { - "version": "1.0.1", - "dev": true, + "node_modules/strip-ansi": { + "version": "7.1.0", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "has-symbols": "^1.0.3", - "isarray": "^2.0.5" + "ansi-regex": "^6.0.1" }, "engines": { - "node": ">=0.4" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/chalk/strip-ansi?sponsor=1" } }, - "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/strip-bom": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/safe-json-stringify": { - "version": "1.2.0", - "license": "MIT" + "node_modules/strip-final-newline": { + "version": "2.0.0", + "license": "MIT", + "engines": { + "node": ">=6" + } }, - "node_modules/safe-regex-test": { - "version": "1.0.0", + "node_modules/strip-indent": { + "version": "3.0.0", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.1.3", - "is-regex": "^1.1.4" + "min-indent": "^1.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=8" } }, - "node_modules/safer-buffer": { - "version": "2.1.2", - "devOptional": true, - "license": "MIT" - }, - "node_modules/schema-utils": { - "version": "2.7.1", + "node_modules/strip-json-comments": { + "version": "3.1.1", "dev": true, "license": "MIT", - "dependencies": { - "@types/json-schema": "^7.0.5", - "ajv": "^6.12.4", - "ajv-keywords": "^3.5.2" - }, "engines": { - "node": ">= 8.9.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/schema-utils/node_modules/ajv": { - "version": "6.12.6", + "node_modules/strip-literal": { + "version": "1.3.0", "dev": true, "license": "MIT", "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "acorn": "^8.10.0" }, "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" - } - }, - "node_modules/schema-utils/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, - "license": "MIT", - "peerDependencies": { - "ajv": "^6.9.1" + "url": "https://github.com/sponsors/antfu" } }, - "node_modules/schema-utils/node_modules/json-schema-traverse": { - "version": "0.4.1", + "node_modules/strong-log-transformer": { + "version": "2.1.0", "dev": true, - "license": "MIT" - }, - "node_modules/semver": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.0.tgz", - "integrity": "sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg==", + "license": "Apache-2.0", "dependencies": { - "lru-cache": "^6.0.0" + "duplexer": "^0.1.1", + "minimist": "^1.2.0", + "through": "^2.3.4" }, "bin": { - "semver": "bin/semver.js" + "sl-log-transformer": "bin/sl-log-transformer.js" }, "engines": { - "node": ">=10" + "node": ">=4" } }, - "node_modules/semver/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==", + "node_modules/supertap": { + "version": "3.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "yallist": "^4.0.0" + "indent-string": "^5.0.0", + "js-yaml": "^3.14.1", + "serialize-error": "^7.0.1", + "strip-ansi": "^7.0.1" }, "engines": { - "node": ">=10" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" } }, - "node_modules/serialize-error": { - "version": "7.0.1", + "node_modules/supertap/node_modules/argparse": { + "version": "1.0.10", "dev": true, "license": "MIT", "dependencies": { - "type-fest": "^0.13.1" - }, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "sprintf-js": "~1.0.2" } }, - "node_modules/serialize-error/node_modules/type-fest": { - "version": "0.13.1", + "node_modules/supertap/node_modules/js-yaml": { + "version": "3.14.1", "dev": true, - "license": "(MIT OR CC0-1.0)", + "license": "MIT", + "dependencies": { + "argparse": "^1.0.7", + "esprima": "^4.0.0" + }, + "bin": { + "js-yaml": "bin/js-yaml.js" + } + }, + "node_modules/supports-color": { + "version": "9.4.0", + "license": "MIT", "engines": { - "node": ">=10" + "node": ">=12" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/supports-color?sponsor=1" } }, - "node_modules/serialize-javascript": { - "version": "6.0.1", - "dev": true, - "license": "BSD-3-Clause", - "peer": true, + "node_modules/supports-hyperlinks": { + "version": "2.3.0", + "license": "MIT", "dependencies": { - "randombytes": "^2.1.0" + "has-flag": "^4.0.0", + "supports-color": "^7.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/set-blocking": { - "version": "2.0.0", - "license": "ISC" - }, - "node_modules/set-function-length": { - "version": "1.1.1", + "node_modules/supports-hyperlinks/node_modules/supports-color": { + "version": "7.2.0", "license": "MIT", "dependencies": { - "define-data-property": "^1.1.1", - "get-intrinsic": "^1.2.1", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": ">= 0.4" + "node": ">=8" } }, - "node_modules/set-function-name": { - "version": "2.0.1", - "dev": true, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "define-data-property": "^1.0.1", - "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" - }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/setimmediate": { - "version": "1.0.5", - "dev": true, - "license": "MIT" - }, - "node_modules/shallow-clone": { - "version": "3.0.1", + "node_modules/table-layout": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "kind-of": "^6.0.2" + "array-back": "^4.0.1", + "deep-extend": "~0.6.0", + "typical": "^5.2.0", + "wordwrapjs": "^4.0.0" }, "engines": { - "node": ">=8" + "node": ">=8.0.0" } }, - "node_modules/shebang-command": { - "version": "2.0.0", + "node_modules/table-layout/node_modules/array-back": { + "version": "4.0.2", + "dev": true, "license": "MIT", - "dependencies": { - "shebang-regex": "^3.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/shebang-regex": { - "version": "3.0.0", + "node_modules/table-layout/node_modules/typical": { + "version": "5.2.0", + "dev": true, "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/shell-quote": { - "version": "1.8.1", + "node_modules/tapable": { + "version": "2.2.1", "dev": true, "license": "MIT", - "funding": { - "url": "https://github.com/sponsors/ljharb" + "peer": true, + "engines": { + "node": ">=6" } }, - "node_modules/shimmer": { - "version": "1.2.1", - "resolved": "https://registry.npmjs.org/shimmer/-/shimmer-1.2.1.tgz", - "integrity": "sha512-sQTKC1Re/rM6XyFM6fIAGHRPVGvyXfgzIDvzoq608vM+jeyVD0Tu1E6Np0Kc2zAIFWIj963V2800iF/9LPieQw==" - }, - "node_modules/side-channel": { - "version": "1.0.4", - "license": "MIT", + "node_modules/tar": { + "version": "6.2.0", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.0", - "get-intrinsic": "^1.0.2", - "object-inspect": "^1.9.0" + "chownr": "^2.0.0", + "fs-minipass": "^2.0.0", + "minipass": "^5.0.0", + "minizlib": "^2.1.1", + "mkdirp": "^1.0.3", + "yallist": "^4.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=10" } }, - "node_modules/siginfo": { - "version": "2.0.0", - "dev": true, - "license": "ISC" - }, - "node_modules/signal-exit": { - "version": "3.0.7", - "license": "ISC" - }, - "node_modules/sinon": { - "version": "13.0.2", + "node_modules/tar-fs": { + "version": "2.1.1", "dev": true, - "license": "BSD-3-Clause", + "license": "MIT", "dependencies": { - "@sinonjs/commons": "^1.8.3", - "@sinonjs/fake-timers": "^9.1.2", - "@sinonjs/samsam": "^6.1.1", - "diff": "^5.0.0", - "nise": "^5.1.1", - "supports-color": "^7.2.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/sinon" + "chownr": "^1.1.1", + "mkdirp-classic": "^0.5.2", + "pump": "^3.0.0", + "tar-stream": "^2.1.4" } }, - "node_modules/sinon/node_modules/supports-color": { - "version": "7.2.0", + "node_modules/tar-fs/node_modules/chownr": { + "version": "1.1.4", "dev": true, - "license": "MIT", - "dependencies": { - "has-flag": "^4.0.0" - }, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/sirv": { - "version": "2.0.3", + "node_modules/tar-fs/node_modules/tar-stream": { + "version": "2.2.0", "dev": true, "license": "MIT", "dependencies": { - "@polka/url": "^1.0.0-next.20", - "mrmime": "^1.0.0", - "totalist": "^3.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, "engines": { - "node": ">= 10" + "node": ">=6" } }, - "node_modules/slash": { - "version": "3.0.0", + "node_modules/tar-stream": { + "version": "3.1.6", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "b4a": "^1.6.4", + "fast-fifo": "^1.2.0", + "streamx": "^2.15.0" } }, - "node_modules/slice-ansi": { + "node_modules/tar/node_modules/minipass": { "version": "5.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "ansi-styles": "^6.0.0", - "is-fullwidth-code-point": "^4.0.0" - }, + "license": "ISC", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/slice-ansi?sponsor=1" + "node": ">=8" } }, - "node_modules/smart-buffer": { - "version": "4.2.0", + "node_modules/temp-dir": { + "version": "2.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">= 6.0.0", - "npm": ">= 3.0.0" + "node": ">=8" } }, - "node_modules/socks": { - "version": "2.7.1", - "dev": true, + "node_modules/terminal-link": { + "version": "3.0.0", "license": "MIT", "dependencies": { - "ip": "^2.0.0", - "smart-buffer": "^4.2.0" + "ansi-escapes": "^5.0.0", + "supports-hyperlinks": "^2.2.0" }, "engines": { - "node": ">= 10.13.0", - "npm": ">= 3.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/socks-proxy-agent": { - "version": "7.0.0", - "dev": true, + "node_modules/terminal-link/node_modules/ansi-escapes": { + "version": "5.0.0", "license": "MIT", "dependencies": { - "agent-base": "^6.0.2", - "debug": "^4.3.3", - "socks": "^2.6.2" + "type-fest": "^1.0.2" }, "engines": { - "node": ">= 10" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sort-keys": { - "version": "4.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^2.0.0" - }, + "node_modules/terminal-link/node_modules/type-fest": { + "version": "1.4.0", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=8" + "node": ">=10" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/sort-keys/node_modules/is-plain-obj": { - "version": "2.1.0", + "node_modules/terser": { + "version": "5.26.0", "dev": true, - "license": "MIT", + "license": "BSD-2-Clause", + "peer": true, + "dependencies": { + "@jridgewell/source-map": "^0.3.3", + "acorn": "^8.8.2", + "commander": "^2.20.0", + "source-map-support": "~0.5.20" + }, + "bin": { + "terser": "bin/terser" + }, "engines": { - "node": ">=8" + "node": ">=10" } }, - "node_modules/sort-on": { - "version": "5.2.0", + "node_modules/terser-webpack-plugin": { + "version": "5.3.9", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "dot-prop": "^7.2.0" + "@jridgewell/trace-mapping": "^0.3.17", + "jest-worker": "^27.4.5", + "schema-utils": "^3.1.1", + "serialize-javascript": "^6.0.1", + "terser": "^5.16.8" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">= 10.13.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/source-map": { - "version": "0.6.1", - "devOptional": true, - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/source-map-js": { - "version": "1.0.2", - "license": "BSD-3-Clause", - "engines": { - "node": ">=0.10.0" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependencies": { + "webpack": "^5.1.0" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "esbuild": { + "optional": true + }, + "uglify-js": { + "optional": true + } } }, - "node_modules/source-map-support": { - "version": "0.5.21", + "node_modules/terser-webpack-plugin/node_modules/ajv": { + "version": "6.12.6", "dev": true, "license": "MIT", "peer": true, "dependencies": { - "buffer-from": "^1.0.0", - "source-map": "^0.6.0" + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/sourcemap-codec": { - "version": "1.4.8", + "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, - "license": "MIT" - }, - "node_modules/spdx-correct": { - "version": "3.2.0", - "license": "Apache-2.0", - "dependencies": { - "spdx-expression-parse": "^3.0.0", - "spdx-license-ids": "^3.0.0" - } - }, - "node_modules/spdx-exceptions": { - "version": "2.3.0", - "license": "CC-BY-3.0" - }, - "node_modules/spdx-expression-parse": { - "version": "3.0.1", "license": "MIT", - "dependencies": { - "spdx-exceptions": "^2.1.0", - "spdx-license-ids": "^3.0.0" + "peer": true, + "peerDependencies": { + "ajv": "^6.9.1" } }, - "node_modules/spdx-license-ids": { - "version": "3.0.16", - "license": "CC0-1.0" + "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/split": { - "version": "1.0.1", + "node_modules/terser-webpack-plugin/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "through": "2" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": "*" - } - }, - "node_modules/split2": { - "version": "3.2.2", - "dev": true, - "license": "ISC", - "dependencies": { - "readable-stream": "^3.0.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/sprintf-js": { - "version": "1.0.3", + "node_modules/terser/node_modules/commander": { + "version": "2.20.3", "dev": true, - "license": "BSD-3-Clause" + "license": "MIT", + "peer": true }, - "node_modules/ssri": { - "version": "9.0.1", + "node_modules/test-exclude": { + "version": "6.0.0", "dev": true, "license": "ISC", "dependencies": { - "minipass": "^3.1.1" + "@istanbuljs/schema": "^0.1.2", + "glob": "^7.1.4", + "minimatch": "^3.0.4" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/stack-generator": { - "version": "2.0.10", + "node_modules/test-exclude/node_modules/brace-expansion": { + "version": "1.1.11", + "dev": true, "license": "MIT", "dependencies": { - "stackframe": "^1.3.4" + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" } }, - "node_modules/stack-utils": { - "version": "2.0.6", + "node_modules/test-exclude/node_modules/minimatch": { + "version": "3.1.2", "dev": true, - "license": "MIT", + "license": "ISC", "dependencies": { - "escape-string-regexp": "^2.0.0" + "brace-expansion": "^1.1.7" }, "engines": { - "node": ">=10" + "node": "*" } }, - "node_modules/stack-utils/node_modules/escape-string-regexp": { - "version": "2.0.0", + "node_modules/text-extensions": { + "version": "1.9.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=0.10" } }, - "node_modules/stackback": { - "version": "0.0.2", + "node_modules/text-table": { + "version": "0.2.0", "dev": true, "license": "MIT" }, - "node_modules/stackframe": { - "version": "1.3.4", + "node_modules/through": { + "version": "2.3.8", + "dev": true, "license": "MIT" }, - "node_modules/std-env": { - "version": "3.6.0", + "node_modules/through2": { + "version": "2.0.5", + "dev": true, + "license": "MIT", + "dependencies": { + "readable-stream": "~2.3.6", + "xtend": "~4.0.1" + } + }, + "node_modules/through2/node_modules/isarray": { + "version": "1.0.0", "dev": true, "license": "MIT" }, - "node_modules/streamx": { - "version": "2.15.6", + "node_modules/through2/node_modules/readable-stream": { + "version": "2.3.8", + "dev": true, "license": "MIT", "dependencies": { - "fast-fifo": "^1.1.0", - "queue-tick": "^1.0.1" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "node_modules/string_decoder": { - "version": "1.3.0", + "node_modules/through2/node_modules/safe-buffer": { + "version": "5.1.2", + "dev": true, + "license": "MIT" + }, + "node_modules/through2/node_modules/string_decoder": { + "version": "1.1.1", + "dev": true, "license": "MIT", "dependencies": { - "safe-buffer": "~5.2.0" + "safe-buffer": "~5.1.0" } }, - "node_modules/string-argv": { - "version": "0.3.2", + "node_modules/time-zone": { + "version": "1.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=0.6.19" + "node": ">=4" } }, - "node_modules/string-width": { - "version": "5.1.2", - "license": "MIT", - "dependencies": { - "eastasianwidth": "^0.2.0", - "emoji-regex": "^9.2.2", - "strip-ansi": "^7.0.1" - }, + "node_modules/tinybench": { + "version": "2.5.1", + "dev": true, + "license": "MIT" + }, + "node_modules/tinypool": { + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", + "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "dev": true, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=14.0.0" } }, - "node_modules/string.prototype.trim": { - "version": "1.2.8", + "node_modules/tinyspy": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", + "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", "dev": true, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/tmp": { + "version": "0.2.1", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" + "rimraf": "^3.0.0" }, "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "node": ">=8.17.0" } }, - "node_modules/string.prototype.trimend": { - "version": "1.0.7", - "dev": true, + "node_modules/tmp-promise": { + "version": "3.0.3", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "tmp": "^0.2.0" } }, - "node_modules/string.prototype.trimstart": { - "version": "1.0.7", - "dev": true, + "node_modules/to-fast-properties": { + "version": "2.0.0", "license": "MIT", - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "engines": { + "node": ">=4" } }, - "node_modules/strip-ansi": { - "version": "7.1.0", + "node_modules/to-regex-range": { + "version": "5.0.1", "license": "MIT", "dependencies": { - "ansi-regex": "^6.0.1" + "is-number": "^7.0.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/chalk/strip-ansi?sponsor=1" + "node": ">=8.0" } }, - "node_modules/strip-bom": { - "version": "4.0.0", + "node_modules/toml": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/tomlify-j0.4": { + "version": "3.0.0", + "license": "MIT" + }, + "node_modules/tools": { + "resolved": "tools", + "link": true + }, + "node_modules/totalist": { + "version": "3.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=6" } }, - "node_modules/strip-final-newline": { + "node_modules/tr46": { + "version": "0.0.3", + "license": "MIT" + }, + "node_modules/treeverse": { "version": "2.0.0", - "license": "MIT", + "dev": true, + "license": "ISC", "engines": { - "node": ">=6" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/strip-indent": { - "version": "3.0.0", + "node_modules/trim-newlines": { + "version": "3.0.1", "dev": true, "license": "MIT", - "dependencies": { - "min-indent": "^1.0.0" - }, "engines": { "node": ">=8" } }, - "node_modules/strip-json-comments": { - "version": "3.1.1", - "dev": true, + "node_modules/ts-node": { + "version": "10.9.2", "license": "MIT", - "engines": { - "node": ">=8" + "dependencies": { + "@cspotcode/source-map-support": "^0.8.0", + "@tsconfig/node10": "^1.0.7", + "@tsconfig/node12": "^1.0.7", + "@tsconfig/node14": "^1.0.0", + "@tsconfig/node16": "^1.0.2", + "acorn": "^8.4.1", + "acorn-walk": "^8.1.1", + "arg": "^4.1.0", + "create-require": "^1.1.0", + "diff": "^4.0.1", + "make-error": "^1.1.1", + "v8-compile-cache-lib": "^3.0.1", + "yn": "3.1.1" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "bin": { + "ts-node": "dist/bin.js", + "ts-node-cwd": "dist/bin-cwd.js", + "ts-node-esm": "dist/bin-esm.js", + "ts-node-script": "dist/bin-script.js", + "ts-node-transpile-only": "dist/bin-transpile.js", + "ts-script": "dist/bin-script-deprecated.js" + }, + "peerDependencies": { + "@swc/core": ">=1.2.50", + "@swc/wasm": ">=1.2.50", + "@types/node": "*", + "typescript": ">=2.7" + }, + "peerDependenciesMeta": { + "@swc/core": { + "optional": true + }, + "@swc/wasm": { + "optional": true + } } }, - "node_modules/strip-literal": { - "version": "1.3.0", + "node_modules/ts-node/node_modules/diff": { + "version": "4.0.2", + "license": "BSD-3-Clause", + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/tsconfig-paths": { + "version": "3.15.0", + "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", + "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", "dev": true, - "license": "MIT", "dependencies": { - "acorn": "^8.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/antfu" + "@types/json5": "^0.0.29", + "json5": "^1.0.2", + "minimist": "^1.2.6", + "strip-bom": "^3.0.0" } }, - "node_modules/strong-log-transformer": { - "version": "2.1.0", + "node_modules/tsconfig-paths/node_modules/json5": { + "version": "1.0.2", "dev": true, - "license": "Apache-2.0", + "license": "MIT", "dependencies": { - "duplexer": "^0.1.1", - "minimist": "^1.2.0", - "through": "^2.3.4" + "minimist": "^1.2.0" }, "bin": { - "sl-log-transformer": "bin/sl-log-transformer.js" - }, + "json5": "lib/cli.js" + } + }, + "node_modules/tsconfig-paths/node_modules/strip-bom": { + "version": "3.0.0", + "dev": true, + "license": "MIT", "engines": { "node": ">=4" } }, - "node_modules/supertap": { - "version": "3.0.1", + "node_modules/tsd": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.30.7.tgz", + "integrity": "sha512-oTiJ28D6B/KXoU3ww/Eji+xqHJojiuPVMwA12g4KYX1O72N93Nb6P3P3h2OAhhf92Xl8NIhb/xFmBZd5zw/xUw==", "dev": true, - "license": "MIT", "dependencies": { - "indent-string": "^5.0.0", - "js-yaml": "^3.14.1", - "serialize-error": "^7.0.1", - "strip-ansi": "^7.0.1" + "@tsd/typescript": "~5.3.3", + "eslint-formatter-pretty": "^4.1.0", + "globby": "^11.0.1", + "jest-diff": "^29.0.3", + "meow": "^9.0.0", + "path-exists": "^4.0.0", + "read-pkg-up": "^7.0.0" + }, + "bin": { + "tsd": "dist/cli.js" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=14.16" } }, - "node_modules/supertap/node_modules/argparse": { - "version": "1.0.10", + "node_modules/tsd/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, - "license": "MIT", "dependencies": { - "sprintf-js": "~1.0.2" + "locate-path": "^5.0.0", + "path-exists": "^4.0.0" + }, + "engines": { + "node": ">=8" } }, - "node_modules/supertap/node_modules/js-yaml": { - "version": "3.14.1", + "node_modules/tsd/node_modules/globby": { + "version": "11.1.0", + "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", + "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", "dev": true, - "license": "MIT", "dependencies": { - "argparse": "^1.0.7", - "esprima": "^4.0.0" + "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" }, - "bin": { - "js-yaml": "bin/js-yaml.js" - } - }, - "node_modules/supports-color": { - "version": "9.4.0", - "license": "MIT", "engines": { - "node": ">=12" + "node": ">=10" }, "funding": { - "url": "https://github.com/chalk/supports-color?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/supports-hyperlinks": { - "version": "2.3.0", - "license": "MIT", + "node_modules/tsd/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 + }, + "node_modules/tsd/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": { - "has-flag": "^4.0.0", - "supports-color": "^7.0.0" + "p-locate": "^4.1.0" }, "engines": { "node": ">=8" } }, - "node_modules/supports-hyperlinks/node_modules/supports-color": { - "version": "7.2.0", - "license": "MIT", + "node_modules/tsd/node_modules/meow": { + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", + "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "dev": true, "dependencies": { - "has-flag": "^4.0.0" + "@types/minimist": "^1.2.0", + "camelcase-keys": "^6.2.2", + "decamelize": "^1.2.0", + "decamelize-keys": "^1.1.0", + "hard-rejection": "^2.1.0", + "minimist-options": "4.1.0", + "normalize-package-data": "^3.0.0", + "read-pkg-up": "^7.0.1", + "redent": "^3.0.0", + "trim-newlines": "^3.0.0", + "type-fest": "^0.18.0", + "yargs-parser": "^20.2.3" }, "engines": { - "node": ">=8" - } - }, - "node_modules/supports-preserve-symlinks-flag": { - "version": "1.0.0", - "license": "MIT", - "engines": { - "node": ">= 0.4" + "node": ">=10" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table-layout": { - "version": "1.0.2", + "node_modules/tsd/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, - "license": "MIT", "dependencies": { - "array-back": "^4.0.1", - "deep-extend": "~0.6.0", - "typical": "^5.2.0", - "wordwrapjs": "^4.0.0" + "p-try": "^2.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=6" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/table-layout/node_modules/array-back": { - "version": "4.0.2", + "node_modules/tsd/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, - "license": "MIT", + "dependencies": { + "p-limit": "^2.2.0" + }, "engines": { "node": ">=8" } }, - "node_modules/table-layout/node_modules/typical": { - "version": "5.2.0", + "node_modules/tsd/node_modules/path-exists": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", + "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/tapable": { - "version": "2.2.1", + "node_modules/tsd/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", - "peer": true, - "engines": { - "node": ">=6" - } - }, - "node_modules/tar": { - "version": "6.2.0", - "license": "ISC", "dependencies": { - "chownr": "^2.0.0", - "fs-minipass": "^2.0.0", - "minipass": "^5.0.0", - "minizlib": "^2.1.1", - "mkdirp": "^1.0.3", - "yallist": "^4.0.0" + "@types/normalize-package-data": "^2.4.0", + "normalize-package-data": "^2.5.0", + "parse-json": "^5.0.0", + "type-fest": "^0.6.0" }, "engines": { - "node": ">=10" + "node": ">=8" } }, - "node_modules/tar-fs": { - "version": "2.1.1", + "node_modules/tsd/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": { - "chownr": "^1.1.1", - "mkdirp-classic": "^0.5.2", - "pump": "^3.0.0", - "tar-stream": "^2.1.4" + "find-up": "^4.1.0", + "read-pkg": "^5.2.0", + "type-fest": "^0.8.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/tar-fs/node_modules/chownr": { - "version": "1.1.4", - "dev": true, - "license": "ISC" - }, - "node_modules/tar-fs/node_modules/tar-stream": { - "version": "2.2.0", + "node_modules/tsd/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", - "dependencies": { - "bl": "^4.0.3", - "end-of-stream": "^1.4.1", - "fs-constants": "^1.0.0", - "inherits": "^2.0.3", - "readable-stream": "^3.1.1" - }, "engines": { - "node": ">=6" + "node": ">=8" } }, - "node_modules/tar-stream": { - "version": "3.1.6", - "license": "MIT", + "node_modules/tsd/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, "dependencies": { - "b4a": "^1.6.4", - "fast-fifo": "^1.2.0", - "streamx": "^2.15.0" - } - }, - "node_modules/tar/node_modules/minipass": { - "version": "5.0.0", - "license": "ISC", - "engines": { - "node": ">=8" + "hosted-git-info": "^2.1.4", + "resolve": "^1.10.0", + "semver": "2 || 3 || 4 || 5", + "validate-npm-package-license": "^3.0.1" } }, - "node_modules/temp-dir": { - "version": "2.0.0", + "node_modules/tsd/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", "engines": { "node": ">=8" } }, - "node_modules/terminal-link": { - "version": "3.0.0", - "license": "MIT", + "node_modules/tsd/node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, "dependencies": { - "ansi-escapes": "^5.0.0", - "supports-hyperlinks": "^2.2.0" + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" }, - "engines": { - "node": ">=12" + "bin": { + "resolve": "bin/resolve" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/terminal-link/node_modules/ansi-escapes": { - "version": "5.0.0", - "license": "MIT", - "dependencies": { - "type-fest": "^1.0.2" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/tsd/node_modules/semver": { + "version": "5.7.2", + "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", + "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "dev": true, + "bin": { + "semver": "bin/semver" } }, - "node_modules/terminal-link/node_modules/type-fest": { - "version": "1.4.0", - "license": "(MIT OR CC0-1.0)", + "node_modules/tsd/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, "engines": { "node": ">=10" }, @@ -22887,714 +23115,787 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser": { - "version": "5.26.0", + "node_modules/tslib": { + "version": "2.6.2", "dev": true, - "license": "BSD-2-Clause", - "peer": true, - "dependencies": { - "@jridgewell/source-map": "^0.3.3", - "acorn": "^8.8.2", - "commander": "^2.20.0", - "source-map-support": "~0.5.20" - }, - "bin": { - "terser": "bin/terser" - }, - "engines": { - "node": ">=10" - } + "license": "0BSD" }, - "node_modules/terser-webpack-plugin": { - "version": "5.3.9", - "dev": true, + "node_modules/tsutils": { + "version": "3.21.0", "license": "MIT", - "peer": true, "dependencies": { - "@jridgewell/trace-mapping": "^0.3.17", - "jest-worker": "^27.4.5", - "schema-utils": "^3.1.1", - "serialize-javascript": "^6.0.1", - "terser": "^5.16.8" + "tslib": "^1.8.1" }, "engines": { - "node": ">= 10.13.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "node": ">= 6" }, "peerDependencies": { - "webpack": "^5.1.0" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "esbuild": { - "optional": true - }, - "uglify-js": { - "optional": true - } + "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" } }, - "node_modules/terser-webpack-plugin/node_modules/ajv": { - "version": "6.12.6", + "node_modules/tsutils/node_modules/tslib": { + "version": "1.14.1", + "license": "0BSD" + }, + "node_modules/type-check": { + "version": "0.4.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "prelude-ls": "^1.2.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">= 0.8.0" } }, - "node_modules/terser-webpack-plugin/node_modules/ajv-keywords": { - "version": "3.5.2", + "node_modules/type-detect": { + "version": "4.0.8", "dev": true, "license": "MIT", - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" + "engines": { + "node": ">=4" } }, - "node_modules/terser-webpack-plugin/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/terser-webpack-plugin/node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, - "license": "MIT", - "peer": true, - "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" - }, + "node_modules/type-fest": { + "version": "3.13.1", + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">= 10.13.0" + "node": ">=14.16" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/terser/node_modules/commander": { - "version": "2.20.3", + "node_modules/typed-array-buffer": { + "version": "1.0.0", "dev": true, "license": "MIT", - "peer": true - }, - "node_modules/test-exclude": { - "version": "6.0.0", - "dev": true, - "license": "ISC", "dependencies": { - "@istanbuljs/schema": "^0.1.2", - "glob": "^7.1.4", - "minimatch": "^3.0.4" + "call-bind": "^1.0.2", + "get-intrinsic": "^1.2.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": ">=8" + "node": ">= 0.4" } }, - "node_modules/test-exclude/node_modules/brace-expansion": { - "version": "1.1.11", + "node_modules/typed-array-byte-length": { + "version": "1.0.0", "dev": true, "license": "MIT", "dependencies": { - "balanced-match": "^1.0.0", - "concat-map": "0.0.1" + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/test-exclude/node_modules/minimatch": { - "version": "3.1.2", + "node_modules/typed-array-byte-offset": { + "version": "1.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "brace-expansion": "^1.1.7" + "available-typed-arrays": "^1.0.5", + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "has-proto": "^1.0.1", + "is-typed-array": "^1.1.10" }, "engines": { - "node": "*" + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-extensions": { - "version": "1.9.0", + "node_modules/typed-array-length": { + "version": "1.0.4", "dev": true, "license": "MIT", - "engines": { - "node": ">=0.10" + "dependencies": { + "call-bind": "^1.0.2", + "for-each": "^0.3.3", + "is-typed-array": "^1.1.9" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/text-table": { - "version": "0.2.0", - "dev": true, - "license": "MIT" - }, - "node_modules/through": { - "version": "2.3.8", + "node_modules/typedarray": { + "version": "0.0.6", "dev": true, "license": "MIT" }, - "node_modules/through2": { - "version": "2.0.5", + "node_modules/typedarray-to-buffer": { + "version": "3.1.5", "dev": true, "license": "MIT", "dependencies": { - "readable-stream": "~2.3.6", - "xtend": "~4.0.1" + "is-typedarray": "^1.0.0" } }, - "node_modules/through2/node_modules/isarray": { - "version": "1.0.0", - "dev": true, - "license": "MIT" + "node_modules/typescript": { + "version": "5.3.3", + "license": "Apache-2.0", + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } }, - "node_modules/through2/node_modules/readable-stream": { - "version": "2.3.8", - "dev": true, - "license": "MIT", - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.3", - "isarray": "~1.0.0", - "process-nextick-args": "~2.0.0", - "safe-buffer": "~5.1.1", - "string_decoder": "~1.1.1", - "util-deprecate": "~1.0.1" + "node_modules/typical": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" } }, - "node_modules/through2/node_modules/safe-buffer": { - "version": "5.1.2", + "node_modules/ufo": { + "version": "1.3.2", "dev": true, "license": "MIT" }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.1.1", + "node_modules/uglify-js": { + "version": "3.17.4", "dev": true, - "license": "MIT", - "dependencies": { - "safe-buffer": "~5.1.0" + "license": "BSD-2-Clause", + "optional": true, + "bin": { + "uglifyjs": "bin/uglifyjs" + }, + "engines": { + "node": ">=0.8.0" } }, - "node_modules/time-zone": { - "version": "1.0.0", + "node_modules/unbox-primitive": { + "version": "1.0.2", "dev": true, "license": "MIT", - "engines": { - "node": ">=4" + "dependencies": { + "call-bind": "^1.0.2", + "has-bigints": "^1.0.2", + "has-symbols": "^1.0.3", + "which-boxed-primitive": "^1.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/tinybench": { - "version": "2.5.1", - "dev": true, - "license": "MIT" - }, - "node_modules/tinypool": { - "version": "0.7.0", - "resolved": "https://registry.npmjs.org/tinypool/-/tinypool-0.7.0.tgz", - "integrity": "sha512-zSYNUlYSMhJ6Zdou4cJwo/p7w5nmAH17GRfU/ui3ctvjXFErXXkruT4MWW6poDeXgCaIBlGLrfU6TbTXxyGMww==", + "node_modules/unionfs": { + "version": "4.5.4", + "resolved": "https://registry.npmjs.org/unionfs/-/unionfs-4.5.4.tgz", + "integrity": "sha512-qI3RvJwwdFcWUdZz1dWgAyLSfGlY2fS2pstvwkZBUTnkxjcnIvzriBLtqJTKz9FtArAvJeiVCqHlxhOw8Syfyw==", "dev": true, - "engines": { - "node": ">=14.0.0" + "dependencies": { + "fs-monkey": "^1.0.0" } }, - "node_modules/tinyspy": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/tinyspy/-/tinyspy-2.2.1.tgz", - "integrity": "sha512-KYad6Vy5VDWV4GH3fjpseMQ/XU2BhIYP7Vzd0LG44qRWm/Yt2WCOTicFdvmgo6gWaqooMQCawTtILVQJupKu7A==", + "node_modules/unique-filename": { + "version": "2.0.1", "dev": true, + "license": "ISC", + "dependencies": { + "unique-slug": "^3.0.0" + }, "engines": { - "node": ">=14.0.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/tmp": { - "version": "0.2.1", - "license": "MIT", + "node_modules/unique-slug": { + "version": "3.0.0", + "dev": true, + "license": "ISC", "dependencies": { - "rimraf": "^3.0.0" + "imurmurhash": "^0.1.4" }, "engines": { - "node": ">=8.17.0" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/tmp-promise": { - "version": "3.0.3", + "node_modules/universal-user-agent": { + "version": "6.0.1", + "dev": true, + "license": "ISC" + }, + "node_modules/universalify": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "dependencies": { - "tmp": "^0.2.0" + "engines": { + "node": ">= 10.0.0" } }, - "node_modules/to-fast-properties": { - "version": "2.0.0", - "license": "MIT", + "node_modules/unix-dgram": { + "version": "2.0.6", + "hasInstallScript": true, + "license": "ISC", + "optional": true, + "dependencies": { + "bindings": "^1.5.0", + "nan": "^2.16.0" + }, "engines": { - "node": ">=4" + "node": ">=0.10.48" } }, - "node_modules/to-regex-range": { - "version": "5.0.1", + "node_modules/unixify": { + "version": "1.0.0", "license": "MIT", "dependencies": { - "is-number": "^7.0.0" + "normalize-path": "^2.1.1" }, "engines": { - "node": ">=8.0" + "node": ">=0.10.0" } }, - "node_modules/toml": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/tomlify-j0.4": { - "version": "3.0.0", - "license": "MIT" - }, - "node_modules/tools": { - "resolved": "tools", - "link": true - }, - "node_modules/totalist": { - "version": "3.0.1", - "dev": true, + "node_modules/unixify/node_modules/normalize-path": { + "version": "2.1.1", "license": "MIT", + "dependencies": { + "remove-trailing-separator": "^1.0.1" + }, "engines": { - "node": ">=6" + "node": ">=0.10.0" } }, - "node_modules/tr46": { - "version": "0.0.3", - "license": "MIT" - }, - "node_modules/treeverse": { - "version": "2.0.0", + "node_modules/untildify": { + "version": "4.0.0", "dev": true, - "license": "ISC", + "license": "MIT", "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/trim-newlines": { - "version": "3.0.1", + "node_modules/upath": { + "version": "2.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=4", + "yarn": "*" } }, - "node_modules/ts-node": { - "version": "10.9.2", + "node_modules/update-browserslist-db": { + "version": "1.0.13", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "license": "MIT", + "peer": true, "dependencies": { - "@cspotcode/source-map-support": "^0.8.0", - "@tsconfig/node10": "^1.0.7", - "@tsconfig/node12": "^1.0.7", - "@tsconfig/node14": "^1.0.0", - "@tsconfig/node16": "^1.0.2", - "acorn": "^8.4.1", - "acorn-walk": "^8.1.1", - "arg": "^4.1.0", - "create-require": "^1.1.0", - "diff": "^4.0.1", - "make-error": "^1.1.1", - "v8-compile-cache-lib": "^3.0.1", - "yn": "3.1.1" + "escalade": "^3.1.1", + "picocolors": "^1.0.0" }, "bin": { - "ts-node": "dist/bin.js", - "ts-node-cwd": "dist/bin-cwd.js", - "ts-node-esm": "dist/bin-esm.js", - "ts-node-script": "dist/bin-script.js", - "ts-node-transpile-only": "dist/bin-transpile.js", - "ts-script": "dist/bin-script-deprecated.js" + "update-browserslist-db": "cli.js" }, "peerDependencies": { - "@swc/core": ">=1.2.50", - "@swc/wasm": ">=1.2.50", - "@types/node": "*", - "typescript": ">=2.7" - }, - "peerDependenciesMeta": { - "@swc/core": { - "optional": true - }, - "@swc/wasm": { - "optional": true - } + "browserslist": ">= 4.21.0" } }, - "node_modules/ts-node/node_modules/diff": { - "version": "4.0.2", - "license": "BSD-3-Clause", + "node_modules/uri-js": { + "version": "4.4.1", + "license": "BSD-2-Clause", + "dependencies": { + "punycode": "^2.1.0" + } + }, + "node_modules/urlpattern-polyfill": { + "version": "8.0.2", + "license": "MIT" + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "license": "MIT" + }, + "node_modules/uuid": { + "version": "9.0.1", + "funding": [ + "https://github.com/sponsors/broofa", + "https://github.com/sponsors/ctavan" + ], + "license": "MIT", + "bin": { + "uuid": "dist/bin/uuid" + } + }, + "node_modules/v8-compile-cache": { + "version": "2.3.0", + "dev": true, + "license": "MIT" + }, + "node_modules/v8-compile-cache-lib": { + "version": "3.0.1", + "license": "MIT" + }, + "node_modules/v8-to-istanbul": { + "version": "9.2.0", + "dev": true, + "license": "ISC", + "dependencies": { + "@jridgewell/trace-mapping": "^0.3.12", + "@types/istanbul-lib-coverage": "^2.0.1", + "convert-source-map": "^2.0.0" + }, "engines": { - "node": ">=0.3.1" + "node": ">=10.12.0" } }, - "node_modules/tsconfig-paths": { - "version": "3.15.0", - "resolved": "https://registry.npmjs.org/tsconfig-paths/-/tsconfig-paths-3.15.0.tgz", - "integrity": "sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==", - "dev": true, + "node_modules/validate-npm-package-license": { + "version": "3.0.4", + "license": "Apache-2.0", "dependencies": { - "@types/json5": "^0.0.29", - "json5": "^1.0.2", - "minimist": "^1.2.6", - "strip-bom": "^3.0.0" + "spdx-correct": "^3.0.0", + "spdx-expression-parse": "^3.0.0" } }, - "node_modules/tsconfig-paths/node_modules/json5": { - "version": "1.0.2", - "dev": true, - "license": "MIT", + "node_modules/validate-npm-package-name": { + "version": "4.0.0", + "license": "ISC", "dependencies": { - "minimist": "^1.2.0" + "builtins": "^5.0.0" }, - "bin": { - "json5": "lib/cli.js" - } - }, - "node_modules/tsconfig-paths/node_modules/strip-bom": { - "version": "3.0.0", - "dev": true, - "license": "MIT", "engines": { - "node": ">=4" + "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/tsd": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/tsd/-/tsd-0.30.7.tgz", - "integrity": "sha512-oTiJ28D6B/KXoU3ww/Eji+xqHJojiuPVMwA12g4KYX1O72N93Nb6P3P3h2OAhhf92Xl8NIhb/xFmBZd5zw/xUw==", + "node_modules/vite": { + "version": "4.5.3", + "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", + "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", "dev": true, "dependencies": { - "@tsd/typescript": "~5.3.3", - "eslint-formatter-pretty": "^4.1.0", - "globby": "^11.0.1", - "jest-diff": "^29.0.3", - "meow": "^9.0.0", - "path-exists": "^4.0.0", - "read-pkg-up": "^7.0.0" + "esbuild": "^0.18.10", + "postcss": "^8.4.27", + "rollup": "^3.27.1" }, "bin": { - "tsd": "dist/cli.js" + "vite": "bin/vite.js" }, "engines": { - "node": ">=14.16" - } - }, - "node_modules/tsd/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" + "node": "^14.18.0 || >=16.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/vitejs/vite?sponsor=1" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + }, + "peerDependencies": { + "@types/node": ">= 14", + "less": "*", + "lightningcss": "^1.21.0", + "sass": "*", + "stylus": "*", + "sugarss": "*", + "terser": "^5.4.0" + }, + "peerDependenciesMeta": { + "@types/node": { + "optional": true + }, + "less": { + "optional": true + }, + "lightningcss": { + "optional": true + }, + "sass": { + "optional": true + }, + "stylus": { + "optional": true + }, + "sugarss": { + "optional": true + }, + "terser": { + "optional": true + } } }, - "node_modules/tsd/node_modules/globby": { - "version": "11.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-11.1.0.tgz", - "integrity": "sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==", + "node_modules/vite-node": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", + "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", "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" + "cac": "^6.7.14", + "debug": "^4.3.4", + "mlly": "^1.4.0", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" + }, + "bin": { + "vite-node": "vite-node.mjs" }, "engines": { - "node": ">=10" + "node": ">=v14.18.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://opencollective.com/vitest" } }, - "node_modules/tsd/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 - }, - "node_modules/tsd/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==", + "node_modules/vite/node_modules/@esbuild/darwin-arm64": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", + "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", + "cpu": [ + "arm64" + ], "dev": true, - "dependencies": { - "p-locate": "^4.1.0" - }, + "optional": true, + "os": [ + "darwin" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/tsd/node_modules/meow": { - "version": "9.0.0", - "resolved": "https://registry.npmjs.org/meow/-/meow-9.0.0.tgz", - "integrity": "sha512-+obSblOQmRhcyBt62furQqRAQpNyWXo8BuQ5bN7dG8wmwQ+vwHKp/rCFD4CrTP8CsDQD1sjoZ94K417XEUk8IQ==", + "node_modules/vite/node_modules/esbuild": { + "version": "0.18.20", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", + "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", "dev": true, - "dependencies": { - "@types/minimist": "^1.2.0", - "camelcase-keys": "^6.2.2", - "decamelize": "^1.2.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.0", - "read-pkg-up": "^7.0.1", - "redent": "^3.0.0", - "trim-newlines": "^3.0.0", - "type-fest": "^0.18.0", - "yargs-parser": "^20.2.3" + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" }, "engines": { - "node": ">=10" + "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/android-arm": "0.18.20", + "@esbuild/android-arm64": "0.18.20", + "@esbuild/android-x64": "0.18.20", + "@esbuild/darwin-arm64": "0.18.20", + "@esbuild/darwin-x64": "0.18.20", + "@esbuild/freebsd-arm64": "0.18.20", + "@esbuild/freebsd-x64": "0.18.20", + "@esbuild/linux-arm": "0.18.20", + "@esbuild/linux-arm64": "0.18.20", + "@esbuild/linux-ia32": "0.18.20", + "@esbuild/linux-loong64": "0.18.20", + "@esbuild/linux-mips64el": "0.18.20", + "@esbuild/linux-ppc64": "0.18.20", + "@esbuild/linux-riscv64": "0.18.20", + "@esbuild/linux-s390x": "0.18.20", + "@esbuild/linux-x64": "0.18.20", + "@esbuild/netbsd-x64": "0.18.20", + "@esbuild/openbsd-x64": "0.18.20", + "@esbuild/sunos-x64": "0.18.20", + "@esbuild/win32-arm64": "0.18.20", + "@esbuild/win32-ia32": "0.18.20", + "@esbuild/win32-x64": "0.18.20" } }, - "node_modules/tsd/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==", + "node_modules/vitest": { + "version": "0.34.6", + "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", + "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", "dev": true, "dependencies": { - "p-try": "^2.0.0" + "@types/chai": "^4.3.5", + "@types/chai-subset": "^1.3.3", + "@types/node": "*", + "@vitest/expect": "0.34.6", + "@vitest/runner": "0.34.6", + "@vitest/snapshot": "0.34.6", + "@vitest/spy": "0.34.6", + "@vitest/utils": "0.34.6", + "acorn": "^8.9.0", + "acorn-walk": "^8.2.0", + "cac": "^6.7.14", + "chai": "^4.3.10", + "debug": "^4.3.4", + "local-pkg": "^0.4.3", + "magic-string": "^0.30.1", + "pathe": "^1.1.1", + "picocolors": "^1.0.0", + "std-env": "^3.3.3", + "strip-literal": "^1.0.1", + "tinybench": "^2.5.0", + "tinypool": "^0.7.0", + "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", + "vite-node": "0.34.6", + "why-is-node-running": "^2.2.2" + }, + "bin": { + "vitest": "vitest.mjs" }, "engines": { - "node": ">=6" + "node": ">=v14.18.0" + }, + "funding": { + "url": "https://opencollective.com/vitest" + }, + "peerDependencies": { + "@edge-runtime/vm": "*", + "@vitest/browser": "*", + "@vitest/ui": "*", + "happy-dom": "*", + "jsdom": "*", + "playwright": "*", + "safaridriver": "*", + "webdriverio": "*" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "peerDependenciesMeta": { + "@edge-runtime/vm": { + "optional": true + }, + "@vitest/browser": { + "optional": true + }, + "@vitest/ui": { + "optional": true + }, + "happy-dom": { + "optional": true + }, + "jsdom": { + "optional": true + }, + "playwright": { + "optional": true + }, + "safaridriver": { + "optional": true + }, + "webdriverio": { + "optional": true + } } }, - "node_modules/tsd/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==", + "node_modules/vitest/node_modules/magic-string": { + "version": "0.30.7", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", + "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", "dev": true, "dependencies": { - "p-limit": "^2.2.0" + "@jridgewell/sourcemap-codec": "^1.4.15" }, "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/tsd/node_modules/path-exists": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/path-exists/-/path-exists-4.0.0.tgz", - "integrity": "sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==", + "node_modules/walk-up-path": { + "version": "1.0.0", "dev": true, - "engines": { - "node": ">=8" - } + "license": "ISC" }, - "node_modules/tsd/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==", + "node_modules/watchpack": { + "version": "2.4.0", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^2.5.0", - "parse-json": "^5.0.0", - "type-fest": "^0.6.0" + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.1.2" }, "engines": { - "node": ">=8" + "node": ">=10.13.0" } }, - "node_modules/tsd/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==", + "node_modules/wcwidth": { + "version": "1.0.1", "dev": true, + "license": "MIT", "dependencies": { - "find-up": "^4.1.0", - "read-pkg": "^5.2.0", - "type-fest": "^0.8.1" - }, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "defaults": "^1.0.3" } }, - "node_modules/tsd/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, + "node_modules/web-streams-polyfill": { + "version": "3.2.1", + "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/tsd/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, - "dependencies": { - "hosted-git-info": "^2.1.4", - "resolve": "^1.10.0", - "semver": "2 || 3 || 4 || 5", - "validate-npm-package-license": "^3.0.1" + "node": ">= 8" } }, - "node_modules/tsd/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, - "engines": { - "node": ">=8" - } + "node_modules/webidl-conversions": { + "version": "3.0.1", + "license": "BSD-2-Clause" }, - "node_modules/tsd/node_modules/resolve": { - "version": "1.22.8", - "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", - "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "node_modules/webpack": { + "version": "5.89.0", "dev": true, + "license": "MIT", + "peer": true, "dependencies": { - "is-core-module": "^2.13.0", - "path-parse": "^1.0.7", - "supports-preserve-symlinks-flag": "^1.0.0" + "@types/eslint-scope": "^3.7.3", + "@types/estree": "^1.0.0", + "@webassemblyjs/ast": "^1.11.5", + "@webassemblyjs/wasm-edit": "^1.11.5", + "@webassemblyjs/wasm-parser": "^1.11.5", + "acorn": "^8.7.1", + "acorn-import-assertions": "^1.9.0", + "browserslist": "^4.14.5", + "chrome-trace-event": "^1.0.2", + "enhanced-resolve": "^5.15.0", + "es-module-lexer": "^1.2.1", + "eslint-scope": "5.1.1", + "events": "^3.2.0", + "glob-to-regexp": "^0.4.1", + "graceful-fs": "^4.2.9", + "json-parse-even-better-errors": "^2.3.1", + "loader-runner": "^4.2.0", + "mime-types": "^2.1.27", + "neo-async": "^2.6.2", + "schema-utils": "^3.2.0", + "tapable": "^2.1.1", + "terser-webpack-plugin": "^5.3.7", + "watchpack": "^2.4.0", + "webpack-sources": "^3.2.3" }, "bin": { - "resolve": "bin/resolve" + "webpack": "bin/webpack.js" + }, + "engines": { + "node": ">=10.13.0" }, "funding": { - "url": "https://github.com/sponsors/ljharb" + "type": "opencollective", + "url": "https://opencollective.com/webpack" + }, + "peerDependenciesMeta": { + "webpack-cli": { + "optional": true + } } }, - "node_modules/tsd/node_modules/semver": { - "version": "5.7.2", - "resolved": "https://registry.npmjs.org/semver/-/semver-5.7.2.tgz", - "integrity": "sha512-cBznnQ9KjJqU67B52RMC65CMarK2600WFnbkcaiwWq3xy/5haFJlshgnpjovMVJ+Hff49d8GEn0b87C5pDQ10g==", + "node_modules/webpack-sources": { + "version": "3.2.3", "dev": true, - "bin": { - "semver": "bin/semver" + "license": "MIT", + "peer": true, + "engines": { + "node": ">=10.13.0" } }, - "node_modules/tsd/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==", + "node_modules/webpack/node_modules/ajv": { + "version": "6.12.6", "dev": true, - "engines": { - "node": ">=10" + "license": "MIT", + "peer": true, + "dependencies": { + "fast-deep-equal": "^3.1.1", + "fast-json-stable-stringify": "^2.0.0", + "json-schema-traverse": "^0.4.1", + "uri-js": "^4.2.2" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "type": "github", + "url": "https://github.com/sponsors/epoberezkin" } }, - "node_modules/tslib": { - "version": "2.6.2", + "node_modules/webpack/node_modules/ajv-keywords": { + "version": "3.5.2", "dev": true, - "license": "0BSD" - }, - "node_modules/tsutils": { - "version": "3.21.0", "license": "MIT", - "dependencies": { - "tslib": "^1.8.1" - }, - "engines": { - "node": ">= 6" - }, + "peer": true, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "ajv": "^6.9.1" } }, - "node_modules/tsutils/node_modules/tslib": { - "version": "1.14.1", - "license": "0BSD" + "node_modules/webpack/node_modules/json-schema-traverse": { + "version": "0.4.1", + "dev": true, + "license": "MIT", + "peer": true }, - "node_modules/type-check": { - "version": "0.4.0", + "node_modules/webpack/node_modules/schema-utils": { + "version": "3.3.0", "dev": true, "license": "MIT", + "peer": true, "dependencies": { - "prelude-ls": "^1.2.1" + "@types/json-schema": "^7.0.8", + "ajv": "^6.12.5", + "ajv-keywords": "^3.5.2" }, "engines": { - "node": ">= 0.8.0" + "node": ">= 10.13.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" } }, - "node_modules/type-detect": { - "version": "4.0.8", + "node_modules/well-known-symbols": { + "version": "2.0.0", "dev": true, - "license": "MIT", + "license": "ISC", "engines": { - "node": ">=4" + "node": ">=6" } }, - "node_modules/type-fest": { - "version": "3.13.1", - "license": "(MIT OR CC0-1.0)", - "engines": { - "node": ">=14.16" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node_modules/whatwg-url": { + "version": "5.0.0", + "license": "MIT", + "dependencies": { + "tr46": "~0.0.3", + "webidl-conversions": "^3.0.0" } }, - "node_modules/typed-array-buffer": { - "version": "1.0.0", - "dev": true, - "license": "MIT", + "node_modules/which": { + "version": "2.0.2", + "license": "ISC", "dependencies": { - "call-bind": "^1.0.2", - "get-intrinsic": "^1.2.1", - "is-typed-array": "^1.1.10" + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" }, "engines": { - "node": ">= 0.4" + "node": ">= 8" } }, - "node_modules/typed-array-byte-length": { - "version": "1.0.0", + "node_modules/which-boxed-primitive": { + "version": "1.0.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" - }, - "engines": { - "node": ">= 0.4" + "is-bigint": "^1.0.1", + "is-boolean-object": "^1.1.0", + "is-number-object": "^1.0.4", + "is-string": "^1.0.5", + "is-symbol": "^1.0.3" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-byte-offset": { - "version": "1.0.0", + "node_modules/which-typed-array": { + "version": "1.1.13", "dev": true, "license": "MIT", "dependencies": { "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "call-bind": "^1.0.4", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-tostringtag": "^1.0.0" }, "engines": { "node": ">= 0.4" @@ -23603,763 +23904,725 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/typed-array-length": { - "version": "1.0.4", + "node_modules/why-is-node-running": { + "version": "2.2.2", "dev": true, "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "siginfo": "^2.0.0", + "stackback": "0.0.2" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/typedarray": { - "version": "0.0.6", - "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": "5.3.3", - "license": "Apache-2.0", "bin": { - "tsc": "bin/tsc", - "tsserver": "bin/tsserver" + "why-is-node-running": "cli.js" }, "engines": { - "node": ">=14.17" + "node": ">=8" } }, - "node_modules/typical": { - "version": "4.0.0", - "dev": true, + "node_modules/wide-align": { + "version": "1.1.5", + "license": "ISC", + "dependencies": { + "string-width": "^1.0.2 || 2 || 3 || 4" + } + }, + "node_modules/wide-align/node_modules/ansi-regex": { + "version": "5.0.1", "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/ufo": { - "version": "1.3.2", - "dev": true, + "node_modules/wide-align/node_modules/emoji-regex": { + "version": "8.0.0", "license": "MIT" }, - "node_modules/uglify-js": { - "version": "3.17.4", - "dev": true, - "license": "BSD-2-Clause", - "optional": true, - "bin": { - "uglifyjs": "bin/uglifyjs" - }, + "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", "engines": { - "node": ">=0.8.0" + "node": ">=8" } }, - "node_modules/unbox-primitive": { - "version": "1.0.2", - "dev": true, + "node_modules/wide-align/node_modules/string-width": { + "version": "4.2.3", "license": "MIT", "dependencies": { - "call-bind": "^1.0.2", - "has-bigints": "^1.0.2", - "has-symbols": "^1.0.3", - "which-boxed-primitive": "^1.0.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/unionfs": { - "version": "4.5.4", - "resolved": "https://registry.npmjs.org/unionfs/-/unionfs-4.5.4.tgz", - "integrity": "sha512-qI3RvJwwdFcWUdZz1dWgAyLSfGlY2fS2pstvwkZBUTnkxjcnIvzriBLtqJTKz9FtArAvJeiVCqHlxhOw8Syfyw==", - "dev": true, - "dependencies": { - "fs-monkey": "^1.0.0" + "engines": { + "node": ">=8" } }, - "node_modules/unique-filename": { - "version": "2.0.1", - "dev": true, - "license": "ISC", + "node_modules/wide-align/node_modules/strip-ansi": { + "version": "6.0.1", + "license": "MIT", "dependencies": { - "unique-slug": "^3.0.0" + "ansi-regex": "^5.0.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": ">=8" } }, - "node_modules/unique-slug": { - "version": "3.0.0", - "dev": true, - "license": "ISC", + "node_modules/windows-release": { + "version": "5.1.1", + "license": "MIT", "dependencies": { - "imurmurhash": "^0.1.4" + "execa": "^5.1.1" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/universal-user-agent": { - "version": "6.0.1", + "node_modules/wordwrap": { + "version": "1.0.0", "dev": true, - "license": "ISC" + "license": "MIT" }, - "node_modules/universalify": { - "version": "2.0.1", + "node_modules/wordwrapjs": { + "version": "4.0.1", "dev": true, "license": "MIT", - "engines": { - "node": ">= 10.0.0" - } - }, - "node_modules/unix-dgram": { - "version": "2.0.6", - "hasInstallScript": true, - "license": "ISC", - "optional": true, "dependencies": { - "bindings": "^1.5.0", - "nan": "^2.16.0" + "reduce-flatten": "^2.0.0", + "typical": "^5.2.0" }, "engines": { - "node": ">=0.10.48" + "node": ">=8.0.0" } }, - "node_modules/unixify": { - "version": "1.0.0", + "node_modules/wordwrapjs/node_modules/typical": { + "version": "5.2.0", + "dev": true, "license": "MIT", - "dependencies": { - "normalize-path": "^2.1.1" - }, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, - "node_modules/unixify/node_modules/normalize-path": { - "version": "2.1.1", + "node_modules/wrap-ansi": { + "version": "6.2.0", + "dev": true, "license": "MIT", "dependencies": { - "remove-trailing-separator": "^1.0.1" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/untildify": { - "version": "4.0.0", - "dev": true, - "license": "MIT", "engines": { "node": ">=8" } }, - "node_modules/upath": { - "version": "2.0.1", + "node_modules/wrap-ansi/node_modules/ansi-regex": { + "version": "5.0.1", "dev": true, "license": "MIT", "engines": { - "node": ">=4", - "yarn": "*" + "node": ">=8" } }, - "node_modules/update-browserslist-db": { - "version": "1.0.13", + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "4.3.0", "dev": true, - "funding": [ - { - "type": "opencollective", - "url": "https://opencollective.com/browserslist" - }, - { - "type": "tidelift", - "url": "https://tidelift.com/funding/github/npm/browserslist" - }, - { - "type": "github", - "url": "https://github.com/sponsors/ai" - } - ], "license": "MIT", - "peer": true, "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" - }, - "bin": { - "update-browserslist-db": "cli.js" + "color-convert": "^2.0.1" }, - "peerDependencies": { - "browserslist": ">= 4.21.0" - } - }, - "node_modules/uri-js": { - "version": "4.4.1", - "license": "BSD-2-Clause", - "dependencies": { - "punycode": "^2.1.0" + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/urlpattern-polyfill": { - "version": "8.0.2", - "license": "MIT" - }, - "node_modules/util-deprecate": { - "version": "1.0.2", - "license": "MIT" - }, - "node_modules/uuid": { - "version": "9.0.1", - "funding": [ - "https://github.com/sponsors/broofa", - "https://github.com/sponsors/ctavan" - ], + "node_modules/wrap-ansi/node_modules/color-convert": { + "version": "2.0.1", + "dev": true, "license": "MIT", - "bin": { - "uuid": "dist/bin/uuid" + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" } }, - "node_modules/v8-compile-cache": { - "version": "2.3.0", + "node_modules/wrap-ansi/node_modules/emoji-regex": { + "version": "8.0.0", "dev": true, "license": "MIT" }, - "node_modules/v8-compile-cache-lib": { - "version": "3.0.1", - "license": "MIT" + "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } }, - "node_modules/v8-to-istanbul": { - "version": "9.2.0", + "node_modules/wrap-ansi/node_modules/string-width": { + "version": "4.2.3", "dev": true, - "license": "ISC", + "license": "MIT", "dependencies": { - "@jridgewell/trace-mapping": "^0.3.12", - "@types/istanbul-lib-coverage": "^2.0.1", - "convert-source-map": "^2.0.0" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, "engines": { - "node": ">=10.12.0" + "node": ">=8" } }, - "node_modules/validate-npm-package-license": { - "version": "3.0.4", - "license": "Apache-2.0", + "node_modules/wrap-ansi/node_modules/strip-ansi": { + "version": "6.0.1", + "dev": true, + "license": "MIT", "dependencies": { - "spdx-correct": "^3.0.0", - "spdx-expression-parse": "^3.0.0" + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/validate-npm-package-name": { - "version": "4.0.0", + "node_modules/wrappy": { + "version": "1.0.2", + "license": "ISC" + }, + "node_modules/write-file-atomic": { + "version": "4.0.2", + "dev": true, "license": "ISC", "dependencies": { - "builtins": "^5.0.0" + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.7" }, "engines": { "node": "^12.13.0 || ^14.15.0 || >=16.0.0" } }, - "node_modules/vite": { - "version": "4.5.3", - "resolved": "https://registry.npmjs.org/vite/-/vite-4.5.3.tgz", - "integrity": "sha512-kQL23kMeX92v3ph7IauVkXkikdDRsYMGTVl5KY2E9OY4ONLvkHf04MDTbnfo6NKxZiDLWzVpP5oTa8hQD8U3dg==", + "node_modules/write-json-file": { + "version": "4.3.0", "dev": true, + "license": "MIT", "dependencies": { - "esbuild": "^0.18.10", - "postcss": "^8.4.27", - "rollup": "^3.27.1" - }, - "bin": { - "vite": "bin/vite.js" + "detect-indent": "^6.0.0", + "graceful-fs": "^4.1.15", + "is-plain-obj": "^2.0.0", + "make-dir": "^3.0.0", + "sort-keys": "^4.0.0", + "write-file-atomic": "^3.0.0" }, "engines": { - "node": "^14.18.0 || >=16.0.0" + "node": ">=8.3" }, "funding": { - "url": "https://github.com/vitejs/vite?sponsor=1" - }, - "optionalDependencies": { - "fsevents": "~2.3.2" - }, - "peerDependencies": { - "@types/node": ">= 14", - "less": "*", - "lightningcss": "^1.21.0", - "sass": "*", - "stylus": "*", - "sugarss": "*", - "terser": "^5.4.0" - }, - "peerDependenciesMeta": { - "@types/node": { - "optional": true - }, - "less": { - "optional": true - }, - "lightningcss": { - "optional": true - }, - "sass": { - "optional": true - }, - "stylus": { - "optional": true - }, - "sugarss": { - "optional": true - }, - "terser": { - "optional": true - } + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/vite-node": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vite-node/-/vite-node-0.34.6.tgz", - "integrity": "sha512-nlBMJ9x6n7/Amaz6F3zJ97EBwR2FkzhBRxF5e+jE6LA3yi6Wtc2lyTij1OnDMIr34v5g/tVQtsVAzhT0jc5ygA==", + "node_modules/write-json-file/node_modules/is-plain-obj": { + "version": "2.1.0", "dev": true, + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/write-json-file/node_modules/write-file-atomic": { + "version": "3.0.3", + "dev": true, + "license": "ISC", "dependencies": { - "cac": "^6.7.14", - "debug": "^4.3.4", - "mlly": "^1.4.0", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "vite": "^3.0.0 || ^4.0.0 || ^5.0.0-0" - }, - "bin": { - "vite-node": "vite-node.mjs" + "imurmurhash": "^0.1.4", + "is-typedarray": "^1.0.0", + "signal-exit": "^3.0.2", + "typedarray-to-buffer": "^3.1.5" + } + }, + "node_modules/write-pkg": { + "version": "4.0.0", + "dev": true, + "license": "MIT", + "dependencies": { + "sort-keys": "^2.0.0", + "type-fest": "^0.4.1", + "write-json-file": "^3.2.0" }, "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" + "node": ">=8" } }, - "node_modules/vite/node_modules/@esbuild/darwin-arm64": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.18.20.tgz", - "integrity": "sha512-bxRHW5kHU38zS2lPTPOyuyTm+S+eobPUnTNkdJEfAddYgEcll4xkT8DB9d2008DtTbl7uJag2HuE5NZAZgnNEA==", - "cpu": [ - "arm64" - ], + "node_modules/write-pkg/node_modules/detect-indent": { + "version": "5.0.0", "dev": true, - "optional": true, - "os": [ - "darwin" - ], + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=4" } }, - "node_modules/vite/node_modules/esbuild": { - "version": "0.18.20", - "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.18.20.tgz", - "integrity": "sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==", + "node_modules/write-pkg/node_modules/is-plain-obj": { + "version": "1.1.0", "dev": true, - "hasInstallScript": true, - "bin": { - "esbuild": "bin/esbuild" - }, + "license": "MIT", "engines": { - "node": ">=12" + "node": ">=0.10.0" + } + }, + "node_modules/write-pkg/node_modules/make-dir": { + "version": "2.1.0", + "dev": true, + "license": "MIT", + "dependencies": { + "pify": "^4.0.1", + "semver": "^5.6.0" }, - "optionalDependencies": { - "@esbuild/android-arm": "0.18.20", - "@esbuild/android-arm64": "0.18.20", - "@esbuild/android-x64": "0.18.20", - "@esbuild/darwin-arm64": "0.18.20", - "@esbuild/darwin-x64": "0.18.20", - "@esbuild/freebsd-arm64": "0.18.20", - "@esbuild/freebsd-x64": "0.18.20", - "@esbuild/linux-arm": "0.18.20", - "@esbuild/linux-arm64": "0.18.20", - "@esbuild/linux-ia32": "0.18.20", - "@esbuild/linux-loong64": "0.18.20", - "@esbuild/linux-mips64el": "0.18.20", - "@esbuild/linux-ppc64": "0.18.20", - "@esbuild/linux-riscv64": "0.18.20", - "@esbuild/linux-s390x": "0.18.20", - "@esbuild/linux-x64": "0.18.20", - "@esbuild/netbsd-x64": "0.18.20", - "@esbuild/openbsd-x64": "0.18.20", - "@esbuild/sunos-x64": "0.18.20", - "@esbuild/win32-arm64": "0.18.20", - "@esbuild/win32-ia32": "0.18.20", - "@esbuild/win32-x64": "0.18.20" + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/pify": { + "version": "4.0.1", + "dev": true, + "license": "MIT", + "engines": { + "node": ">=6" + } + }, + "node_modules/write-pkg/node_modules/semver": { + "version": "5.7.2", + "dev": true, + "license": "ISC", + "bin": { + "semver": "bin/semver" } }, - "node_modules/vitest": { - "version": "0.34.6", - "resolved": "https://registry.npmjs.org/vitest/-/vitest-0.34.6.tgz", - "integrity": "sha512-+5CALsOvbNKnS+ZHMXtuUC7nL8/7F1F2DnHGjSsszX8zCjWSSviphCb/NuS9Nzf4Q03KyyDRBAXhF/8lffME4Q==", + "node_modules/write-pkg/node_modules/sort-keys": { + "version": "2.0.0", "dev": true, + "license": "MIT", "dependencies": { - "@types/chai": "^4.3.5", - "@types/chai-subset": "^1.3.3", - "@types/node": "*", - "@vitest/expect": "0.34.6", - "@vitest/runner": "0.34.6", - "@vitest/snapshot": "0.34.6", - "@vitest/spy": "0.34.6", - "@vitest/utils": "0.34.6", - "acorn": "^8.9.0", - "acorn-walk": "^8.2.0", - "cac": "^6.7.14", - "chai": "^4.3.10", - "debug": "^4.3.4", - "local-pkg": "^0.4.3", - "magic-string": "^0.30.1", - "pathe": "^1.1.1", - "picocolors": "^1.0.0", - "std-env": "^3.3.3", - "strip-literal": "^1.0.1", - "tinybench": "^2.5.0", - "tinypool": "^0.7.0", - "vite": "^3.1.0 || ^4.0.0 || ^5.0.0-0", - "vite-node": "0.34.6", - "why-is-node-running": "^2.2.2" - }, - "bin": { - "vitest": "vitest.mjs" + "is-plain-obj": "^1.0.0" }, "engines": { - "node": ">=v14.18.0" - }, - "funding": { - "url": "https://opencollective.com/vitest" - }, - "peerDependencies": { - "@edge-runtime/vm": "*", - "@vitest/browser": "*", - "@vitest/ui": "*", - "happy-dom": "*", - "jsdom": "*", - "playwright": "*", - "safaridriver": "*", - "webdriverio": "*" - }, - "peerDependenciesMeta": { - "@edge-runtime/vm": { - "optional": true - }, - "@vitest/browser": { - "optional": true - }, - "@vitest/ui": { - "optional": true - }, - "happy-dom": { - "optional": true - }, - "jsdom": { - "optional": true - }, - "playwright": { - "optional": true - }, - "safaridriver": { - "optional": true - }, - "webdriverio": { - "optional": true - } + "node": ">=4" } }, - "node_modules/vitest/node_modules/magic-string": { - "version": "0.30.7", - "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.7.tgz", - "integrity": "sha512-8vBuFF/I/+OSLRmdf2wwFCJCz+nSn0m6DPvGH1fS/KiQoSaR+sETbov0eIk9KhEKy8CYqIkIAnbohxT/4H0kuA==", + "node_modules/write-pkg/node_modules/type-fest": { + "version": "0.4.1", "dev": true, - "dependencies": { - "@jridgewell/sourcemap-codec": "^1.4.15" - }, + "license": "(MIT OR CC0-1.0)", "engines": { - "node": ">=12" + "node": ">=6" } }, - "node_modules/walk-up-path": { - "version": "1.0.0", + "node_modules/write-pkg/node_modules/write-file-atomic": { + "version": "2.4.3", "dev": true, - "license": "ISC" + "license": "ISC", + "dependencies": { + "graceful-fs": "^4.1.11", + "imurmurhash": "^0.1.4", + "signal-exit": "^3.0.2" + } }, - "node_modules/watchpack": { - "version": "2.4.0", + "node_modules/write-pkg/node_modules/write-json-file": { + "version": "3.2.0", "dev": true, "license": "MIT", - "peer": true, "dependencies": { - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.1.2" + "detect-indent": "^5.0.0", + "graceful-fs": "^4.1.15", + "make-dir": "^2.1.0", + "pify": "^4.0.1", + "sort-keys": "^2.0.0", + "write-file-atomic": "^2.4.2" }, "engines": { - "node": ">=10.13.0" + "node": ">=6" } }, - "node_modules/wcwidth": { - "version": "1.0.1", + "node_modules/xtend": { + "version": "4.0.2", "dev": true, "license": "MIT", - "dependencies": { - "defaults": "^1.0.3" + "engines": { + "node": ">=0.4" } }, - "node_modules/web-streams-polyfill": { - "version": "3.2.1", - "license": "MIT", + "node_modules/y18n": { + "version": "5.0.8", + "license": "ISC", "engines": { - "node": ">= 8" + "node": ">=10" } }, - "node_modules/webidl-conversions": { - "version": "3.0.1", - "license": "BSD-2-Clause" + "node_modules/yallist": { + "version": "4.0.0", + "license": "ISC" }, - "node_modules/webpack": { - "version": "5.89.0", - "dev": true, + "node_modules/yaml": { + "version": "2.3.4", + "license": "ISC", + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", "license": "MIT", - "peer": true, "dependencies": { - "@types/eslint-scope": "^3.7.3", - "@types/estree": "^1.0.0", - "@webassemblyjs/ast": "^1.11.5", - "@webassemblyjs/wasm-edit": "^1.11.5", - "@webassemblyjs/wasm-parser": "^1.11.5", - "acorn": "^8.7.1", - "acorn-import-assertions": "^1.9.0", - "browserslist": "^4.14.5", - "chrome-trace-event": "^1.0.2", - "enhanced-resolve": "^5.15.0", - "es-module-lexer": "^1.2.1", - "eslint-scope": "5.1.1", - "events": "^3.2.0", - "glob-to-regexp": "^0.4.1", - "graceful-fs": "^4.2.9", - "json-parse-even-better-errors": "^2.3.1", - "loader-runner": "^4.2.0", - "mime-types": "^2.1.27", - "neo-async": "^2.6.2", - "schema-utils": "^3.2.0", - "tapable": "^2.1.1", - "terser-webpack-plugin": "^5.3.7", - "watchpack": "^2.4.0", - "webpack-sources": "^3.2.3" + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" }, - "bin": { - "webpack": "bin/webpack.js" + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "20.2.9", + "dev": true, + "license": "ISC", + "engines": { + "node": ">=10" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/ansi-styles": { + "version": "4.3.0", + "license": "MIT", + "dependencies": { + "color-convert": "^2.0.1" }, "engines": { - "node": ">=10.13.0" + "node": ">=8" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/yargs/node_modules/cliui": { + "version": "8.0.1", + "license": "ISC", + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" }, - "peerDependenciesMeta": { - "webpack-cli": { - "optional": true - } + "engines": { + "node": ">=12" } }, - "node_modules/webpack-sources": { - "version": "3.2.3", - "dev": true, + "node_modules/yargs/node_modules/color-convert": { + "version": "2.0.1", "license": "MIT", - "peer": true, + "dependencies": { + "color-name": "~1.1.4" + }, "engines": { - "node": ">=10.13.0" + "node": ">=7.0.0" } }, - "node_modules/webpack/node_modules/ajv": { - "version": "6.12.6", - "dev": true, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "license": "MIT" + }, + "node_modules/yargs/node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", "license": "MIT", - "peer": true, "dependencies": { - "fast-deep-equal": "^3.1.1", - "fast-json-stable-stringify": "^2.0.0", - "json-schema-traverse": "^0.4.1", - "uri-js": "^4.2.2" + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" }, - "funding": { - "type": "github", - "url": "https://github.com/sponsors/epoberezkin" + "engines": { + "node": ">=8" } }, - "node_modules/webpack/node_modules/ajv-keywords": { - "version": "3.5.2", - "dev": true, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", "license": "MIT", - "peer": true, - "peerDependencies": { - "ajv": "^6.9.1" + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" } }, - "node_modules/webpack/node_modules/json-schema-traverse": { - "version": "0.4.1", - "dev": true, - "license": "MIT", - "peer": true - }, - "node_modules/webpack/node_modules/schema-utils": { - "version": "3.3.0", - "dev": true, + "node_modules/yargs/node_modules/wrap-ansi": { + "version": "7.0.0", "license": "MIT", - "peer": true, "dependencies": { - "@types/json-schema": "^7.0.8", - "ajv": "^6.12.5", - "ajv-keywords": "^3.5.2" + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" }, "engines": { - "node": ">= 10.13.0" + "node": ">=10" }, "funding": { - "type": "opencollective", - "url": "https://opencollective.com/webpack" + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" } }, - "node_modules/well-known-symbols": { - "version": "2.0.0", - "dev": true, + "node_modules/yargs/node_modules/yargs-parser": { + "version": "21.1.1", "license": "ISC", + "engines": { + "node": ">=12" + } + }, + "node_modules/yarn": { + "version": "1.22.21", + "dev": true, + "hasInstallScript": true, + "license": "BSD-2-Clause", + "bin": { + "yarn": "bin/yarn.js", + "yarnpkg": "bin/yarn.js" + }, + "engines": { + "node": ">=4.0.0" + } + }, + "node_modules/yn": { + "version": "3.1.1", + "license": "MIT", "engines": { "node": ">=6" } }, - "node_modules/whatwg-url": { - "version": "5.0.0", + "node_modules/yocto-queue": { + "version": "1.0.0", "license": "MIT", - "dependencies": { - "tr46": "~0.0.3", - "webidl-conversions": "^3.0.0" + "engines": { + "node": ">=12.20" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/which": { - "version": "2.0.2", - "license": "ISC", + "node_modules/zip-stream": { + "version": "5.0.1", + "license": "MIT", "dependencies": { - "isexe": "^2.0.0" - }, - "bin": { - "node-which": "bin/node-which" + "archiver-utils": "^4.0.1", + "compress-commons": "^5.0.1", + "readable-stream": "^3.6.0" }, "engines": { - "node": ">= 8" + "node": ">= 12.0.0" } }, - "node_modules/which-boxed-primitive": { - "version": "1.0.2", - "dev": true, + "packages/build": { + "name": "@netlify/build", + "version": "29.40.0", "license": "MIT", "dependencies": { - "is-bigint": "^1.0.1", - "is-boolean-object": "^1.1.0", - "is-number-object": "^1.0.4", - "is-string": "^1.0.5", - "is-symbol": "^1.0.3" + "@bugsnag/js": "^7.0.0", + "@netlify/blobs": "^7.3.0", + "@netlify/cache-utils": "^5.1.5", + "@netlify/config": "^20.12.1", + "@netlify/edge-bundler": "11.4.0", + "@netlify/framework-info": "^9.8.11", + "@netlify/functions-utils": "^5.2.54", + "@netlify/git-utils": "^5.1.1", + "@netlify/opentelemetry-utils": "^1.1.0", + "@netlify/plugins-list": "^6.77.0", + "@netlify/run-utils": "^5.1.1", + "@netlify/zip-it-and-ship-it": "9.31.3", + "@sindresorhus/slugify": "^2.0.0", + "ansi-escapes": "^6.0.0", + "chalk": "^5.0.0", + "clean-stack": "^4.0.0", + "execa": "^6.0.0", + "fdir": "^6.0.1", + "figures": "^5.0.0", + "filter-obj": "^5.0.0", + "got": "^12.0.0", + "hot-shots": "10.0.0", + "indent-string": "^5.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "keep-func-props": "^4.0.0", + "locate-path": "^7.0.0", + "log-process-errors": "^8.0.0", + "map-obj": "^5.0.0", + "memoize-one": "^6.0.0", + "minimatch": "^9.0.4", + "node-fetch": "^3.3.2", + "os-name": "^5.0.0", + "p-event": "^5.0.0", + "p-every": "^2.0.0", + "p-filter": "^3.0.0", + "p-locate": "^6.0.0", + "p-map": "^6.0.0", + "p-reduce": "^3.0.0", + "path-exists": "^5.0.0", + "path-type": "^5.0.0", + "pkg-dir": "^7.0.0", + "pretty-ms": "^8.0.0", + "ps-list": "^8.0.0", + "read-pkg-up": "^9.0.0", + "readdirp": "^3.4.0", + "resolve": "^2.0.0-next.1", + "rfdc": "^1.3.0", + "safe-json-stringify": "^1.2.0", + "semver": "^7.3.8", + "string-width": "^5.0.0", + "strip-ansi": "^7.0.0", + "supports-color": "^9.0.0", + "terminal-link": "^3.0.0", + "ts-node": "^10.9.1", + "typescript": "^5.0.0", + "uuid": "^9.0.0", + "yargs": "^17.6.0" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "bin": { + "netlify-build": "bin.js" + }, + "devDependencies": { + "@netlify/nock-udp": "^3.1.2", + "@opentelemetry/api": "~1.8.0", + "@opentelemetry/sdk-trace-base": "~1.22.0", + "@types/node": "^14.18.53", + "@vitest/coverage-c8": "^0.33.0", + "atob": "^2.1.2", + "ava": "^4.0.0", + "c8": "^7.12.0", + "copyfiles": "^2.4.1", + "cpy": "^9.0.0", + "fast-safe-stringify": "^2.0.7", + "get-bin-path": "^6.0.0", + "get-node": "^12.0.0", + "get-port": "^6.0.0", + "get-stream": "^6.0.0", + "has-ansi": "^5.0.0", + "moize": "^6.0.0", + "npm-run-all2": "^5.0.0", + "path-key": "^4.0.0", + "process-exists": "^5.0.0", + "sinon": "^13.0.0", + "tmp-promise": "^3.0.2", + "tsd": "^0.30.0", + "vitest": "^0.34.0", + "yarn": "^1.22.4" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" + }, + "peerDependencies": { + "@netlify/opentelemetry-sdk-setup": "^1.1.0", + "@opentelemetry/api": "~1.8.0" + }, + "peerDependenciesMeta": { + "@netlify/opentelemetry-sdk-setup": { + "optional": true + } } }, - "node_modules/which-typed-array": { - "version": "1.1.13", - "dev": true, + "packages/build-info": { + "name": "@netlify/build-info", + "version": "7.13.2", "license": "MIT", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.4", - "for-each": "^0.3.3", - "gopd": "^1.0.1", - "has-tostringtag": "^1.0.0" + "@bugsnag/js": "^7.20.0", + "@iarna/toml": "^2.2.5", + "dot-prop": "^7.2.0", + "find-up": "^6.3.0", + "minimatch": "^9.0.0", + "read-pkg": "^7.1.0", + "semver": "^7.3.8", + "yaml": "^2.1.3", + "yargs": "^17.6.0" }, - "engines": { - "node": ">= 0.4" + "bin": { + "build-info": "bin.js" }, - "funding": { - "url": "https://github.com/sponsors/ljharb" + "devDependencies": { + "@bugsnag/source-maps": "^2.3.1", + "@playwright/test": "^1.30.0", + "@types/node": "^14.18.53", + "@types/semver": "^7.3.13", + "@vitest/coverage-c8": "^0.33.0", + "@vitest/ui": "^0.34.0", + "execa": "^6.0.0", + "memfs": "^3.4.7", + "node-fetch": "^3.3.1", + "typescript": "^5.0.0", + "unionfs": "^4.4.0", + "vite": "^4.0.4", + "vitest": "^0.34.0" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" } }, - "node_modules/why-is-node-running": { - "version": "2.2.2", + "packages/build-info/node_modules/execa": { + "version": "6.1.0", "dev": true, "license": "MIT", "dependencies": { - "siginfo": "^2.0.0", - "stackback": "0.0.2" - }, - "bin": { - "why-is-node-running": "cli.js" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align": { - "version": "1.1.5", - "license": "ISC", - "dependencies": { - "string-width": "^1.0.2 || 2 || 3 || 4" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/wide-align/node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", + "packages/build-info/node_modules/human-signals": { + "version": "3.0.1", + "dev": true, + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=12.20.0" } }, - "node_modules/wide-align/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/wide-align/node_modules/is-fullwidth-code-point": { + "packages/build-info/node_modules/is-stream": { "version": "3.0.0", + "dev": true, "license": "MIT", "engines": { - "node": ">=8" - } - }, - "node_modules/wide-align/node_modules/string-width": { - "version": "4.2.3", - "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/wide-align/node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, - "engines": { - "node": ">=8" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/windows-release": { - "version": "5.1.1", + "packages/build-info/node_modules/npm-run-path": { + "version": "5.1.0", + "dev": true, "license": "MIT", "dependencies": { - "execa": "^5.1.1" + "path-key": "^4.0.0" }, "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" @@ -24368,686 +24631,807 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wordwrap": { - "version": "1.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wordwrapjs": { - "version": "4.0.1", + "packages/build-info/node_modules/onetime": { + "version": "6.0.0", "dev": true, "license": "MIT", "dependencies": { - "reduce-flatten": "^2.0.0", - "typical": "^5.2.0" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=8.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wordwrapjs/node_modules/typical": { - "version": "5.2.0", + "packages/build-info/node_modules/strip-final-newline": { + "version": "3.0.0", "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi": { - "version": "6.2.0", - "dev": true, + "packages/build/node_modules/execa": { + "version": "6.1.0", "license": "MIT", "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/wrap-ansi/node_modules/ansi-regex": { - "version": "5.0.1", - "dev": true, + "packages/build/node_modules/human-signals": { + "version": "3.0.1", + "license": "Apache-2.0", + "engines": { + "node": ">=12.20.0" + } + }, + "packages/build/node_modules/is-stream": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/ansi-styles": { - "version": "4.3.0", - "dev": true, + "packages/build/node_modules/npm-run-path": { + "version": "5.1.0", "license": "MIT", "dependencies": { - "color-convert": "^2.0.1" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/color-convert": { - "version": "2.0.1", - "dev": true, + "packages/build/node_modules/onetime": { + "version": "6.0.0", "license": "MIT", "dependencies": { - "color-name": "~1.1.4" + "mimic-fn": "^4.0.0" }, "engines": { - "node": ">=7.0.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/emoji-regex": { - "version": "8.0.0", - "dev": true, - "license": "MIT" - }, - "node_modules/wrap-ansi/node_modules/is-fullwidth-code-point": { + "packages/build/node_modules/strip-final-newline": { "version": "3.0.0", - "dev": true, "license": "MIT", "engines": { - "node": ">=8" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/wrap-ansi/node_modules/string-width": { - "version": "4.2.3", - "dev": true, + "packages/cache-utils": { + "name": "@netlify/cache-utils", + "version": "5.1.5", "license": "MIT", "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" + "cpy": "^9.0.0", + "get-stream": "^6.0.0", + "globby": "^13.0.0", + "junk": "^4.0.0", + "locate-path": "^7.0.0", + "move-file": "^3.0.0", + "path-exists": "^5.0.0", + "readdirp": "^3.4.0" + }, + "devDependencies": { + "@types/node": "^14.18.53", + "tmp-promise": "^3.0.0", + "typescript": "^5.0.0", + "vitest": "^0.34.0" }, "engines": { - "node": ">=8" + "node": "^14.16.0 || >=16.0.0" } }, - "node_modules/wrap-ansi/node_modules/strip-ansi": { - "version": "6.0.1", - "dev": true, + "packages/config": { + "name": "@netlify/config", + "version": "20.12.1", "license": "MIT", "dependencies": { - "ansi-regex": "^5.0.1" + "@iarna/toml": "^2.2.5", + "chalk": "^5.0.0", + "cron-parser": "^4.1.0", + "deepmerge": "^4.2.2", + "dot-prop": "^7.0.0", + "execa": "^6.0.0", + "fast-safe-stringify": "^2.0.7", + "figures": "^5.0.0", + "filter-obj": "^5.0.0", + "find-up": "^6.0.0", + "indent-string": "^5.0.0", + "is-plain-obj": "^4.0.0", + "js-yaml": "^4.0.0", + "map-obj": "^5.0.0", + "netlify": "^13.1.14", + "netlify-headers-parser": "^7.1.4", + "netlify-redirect-parser": "^14.2.2", + "node-fetch": "^3.3.1", + "omit.js": "^2.0.2", + "p-locate": "^6.0.0", + "path-type": "^5.0.0", + "tomlify-j0.4": "^3.0.0", + "validate-npm-package-name": "^4.0.0", + "yargs": "^17.6.0" }, - "engines": { - "node": ">=8" - } - }, - "node_modules/wrappy": { - "version": "1.0.2", - "license": "ISC" - }, - "node_modules/write-file-atomic": { - "version": "4.0.2", - "dev": true, - "license": "ISC", - "dependencies": { - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.7" + "bin": { + "netlify-config": "bin.js" + }, + "devDependencies": { + "@types/node": "^14.18.53", + "ava": "^4.0.0", + "c8": "^7.12.0", + "has-ansi": "^5.0.0", + "is-ci": "^3.0.0", + "tmp-promise": "^3.0.2", + "typescript": "^5.0.0" }, "engines": { - "node": "^12.13.0 || ^14.15.0 || >=16.0.0" + "node": "^14.16.0 || >=16.0.0" } }, - "node_modules/write-json-file": { - "version": "4.3.0", - "dev": true, + "packages/config/node_modules/execa": { + "version": "6.1.0", "license": "MIT", "dependencies": { - "detect-indent": "^6.0.0", - "graceful-fs": "^4.1.15", - "is-plain-obj": "^2.0.0", - "make-dir": "^3.0.0", - "sort-keys": "^4.0.0", - "write-file-atomic": "^3.0.0" + "cross-spawn": "^7.0.3", + "get-stream": "^6.0.1", + "human-signals": "^3.0.1", + "is-stream": "^3.0.0", + "merge-stream": "^2.0.0", + "npm-run-path": "^5.1.0", + "onetime": "^6.0.0", + "signal-exit": "^3.0.7", + "strip-final-newline": "^3.0.0" }, "engines": { - "node": ">=8.3" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "node_modules/write-json-file/node_modules/is-plain-obj": { - "version": "2.1.0", - "dev": true, - "license": "MIT", + "packages/config/node_modules/human-signals": { + "version": "3.0.1", + "license": "Apache-2.0", "engines": { - "node": ">=8" + "node": ">=12.20.0" } }, - "node_modules/write-json-file/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" + "packages/config/node_modules/is-stream": { + "version": "3.0.0", + "license": "MIT", + "engines": { + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/write-pkg": { - "version": "4.0.0", - "dev": true, + "packages/config/node_modules/npm-run-path": { + "version": "5.1.0", "license": "MIT", "dependencies": { - "sort-keys": "^2.0.0", - "type-fest": "^0.4.1", - "write-json-file": "^3.2.0" + "path-key": "^4.0.0" }, "engines": { - "node": ">=8" + "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/write-pkg/node_modules/detect-indent": { - "version": "5.0.0", - "dev": true, + "packages/config/node_modules/onetime": { + "version": "6.0.0", "license": "MIT", + "dependencies": { + "mimic-fn": "^4.0.0" + }, "engines": { - "node": ">=4" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/write-pkg/node_modules/is-plain-obj": { - "version": "1.1.0", - "dev": true, + "packages/config/node_modules/strip-final-newline": { + "version": "3.0.0", "license": "MIT", "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/write-pkg/node_modules/make-dir": { - "version": "2.1.0", - "dev": true, + "packages/edge-bundler": { + "version": "11.4.0", "license": "MIT", "dependencies": { - "pify": "^4.0.1", - "semver": "^5.6.0" + "@import-maps/resolve": "^1.0.1", + "@vercel/nft": "^0.26.0", + "ajv": "^8.11.2", + "ajv-errors": "^3.0.0", + "better-ajv-errors": "^1.2.0", + "common-path-prefix": "^3.0.0", + "env-paths": "^3.0.0", + "esbuild": "0.20.2", + "execa": "^6.0.0", + "find-up": "^6.3.0", + "get-package-name": "^2.2.0", + "get-port": "^6.1.2", + "is-path-inside": "^4.0.0", + "jsonc-parser": "^3.2.0", + "node-fetch": "^3.1.1", + "node-stream-zip": "^1.15.0", + "p-retry": "^5.1.1", + "p-wait-for": "^4.1.0", + "path-key": "^4.0.0", + "semver": "^7.3.8", + "tmp-promise": "^3.0.3", + "urlpattern-polyfill": "8.0.2", + "uuid": "^9.0.0" + }, + "devDependencies": { + "@types/glob-to-regexp": "^0.4.1", + "@types/node": "^14.18.32", + "@types/semver": "^7.3.9", + "@types/uuid": "^9.0.0", + "@vitest/coverage-v8": "^0.34.0", + "archiver": "^5.3.1", + "chalk": "^4.1.2", + "cpy": "^9.0.1", + "cross-env": "^7.0.3", + "nock": "^13.2.4", + "tar": "^6.1.11", + "typescript": "^5.0.0", + "vitest": "^0.34.0" }, "engines": { - "node": ">=6" + "node": "^14.16.0 || >=16.0.0" } }, - "node_modules/write-pkg/node_modules/pify": { - "version": "4.0.1", - "dev": true, - "license": "MIT", + "packages/edge-bundler/node_modules/@esbuild/aix-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.20.2.tgz", + "integrity": "sha512-D+EBOJHXdNZcLJRBkhENNG8Wji2kgc9AZ9KiPr1JuZjsNtyHzrsfLRrY0tk2H2aoFu6RANO1y1iPPUCDYWkb5g==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "aix" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/write-pkg/node_modules/semver": { - "version": "5.7.2", - "dev": true, - "license": "ISC", - "bin": { - "semver": "bin/semver" + "packages/edge-bundler/node_modules/@esbuild/android-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.20.2.tgz", + "integrity": "sha512-t98Ra6pw2VaDhqNWO2Oph2LXbz/EJcnLmKLGBJwEwXX/JAN83Fym1rU8l0JUWK6HkIbWONCSSatf4sf2NBRx/w==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=12" } }, - "node_modules/write-pkg/node_modules/sort-keys": { - "version": "2.0.0", - "dev": true, - "license": "MIT", - "dependencies": { - "is-plain-obj": "^1.0.0" - }, + "packages/edge-bundler/node_modules/@esbuild/android-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.20.2.tgz", + "integrity": "sha512-mRzjLacRtl/tWU0SvD8lUEwb61yP9cqQo6noDZP/O8VkwafSYwZ4yWy24kan8jE/IMERpYncRt2dw438LP3Xmg==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=4" + "node": ">=12" } }, - "node_modules/write-pkg/node_modules/type-fest": { - "version": "0.4.1", - "dev": true, - "license": "(MIT OR CC0-1.0)", + "packages/edge-bundler/node_modules/@esbuild/android-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.20.2.tgz", + "integrity": "sha512-btzExgV+/lMGDDa194CcUQm53ncxzeBrWJcncOBxuC6ndBkKxnHdFJn86mCIgTELsooUmwUm9FkhSp5HYu00Rg==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "android" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/write-pkg/node_modules/write-file-atomic": { - "version": "2.4.3", - "dev": true, - "license": "ISC", - "dependencies": { - "graceful-fs": "^4.1.11", - "imurmurhash": "^0.1.4", - "signal-exit": "^3.0.2" + "packages/edge-bundler/node_modules/@esbuild/darwin-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.20.2.tgz", + "integrity": "sha512-4J6IRT+10J3aJH3l1yzEg9y3wkTDgDk7TSDFX+wKFiWjqWp/iCfLIYzGyasx9l0SAFPT1HwSCR+0w/h1ES/MjA==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" } }, - "node_modules/write-pkg/node_modules/write-json-file": { - "version": "3.2.0", - "dev": true, - "license": "MIT", - "dependencies": { - "detect-indent": "^5.0.0", - "graceful-fs": "^4.1.15", - "make-dir": "^2.1.0", - "pify": "^4.0.1", - "sort-keys": "^2.0.0", - "write-file-atomic": "^2.4.2" - }, + "packages/edge-bundler/node_modules/@esbuild/darwin-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.20.2.tgz", + "integrity": "sha512-tBcXp9KNphnNH0dfhv8KYkZhjc+H3XBkF5DKtswJblV7KlT9EI2+jeA8DgBjp908WEuYll6pF+UStUCfEpdysA==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=12" + } + }, + "packages/edge-bundler/node_modules/@esbuild/freebsd-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.20.2.tgz", + "integrity": "sha512-d3qI41G4SuLiCGCFGUrKsSeTXyWG6yem1KcGZVS+3FYlYhtNoNgYrWcvkOoaqMhwXSMrZRl69ArHsGJ9mYdbbw==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/xtend": { - "version": "4.0.2", - "dev": true, - "license": "MIT", + "packages/edge-bundler/node_modules/@esbuild/freebsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.20.2.tgz", + "integrity": "sha512-d+DipyvHRuqEeM5zDivKV1KuXn9WeRX6vqSqIDgwIfPQtwMP4jaDsQsDncjTDDsExT4lR/91OLjRo8bmC1e+Cw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "freebsd" + ], "engines": { - "node": ">=0.4" + "node": ">=12" } }, - "node_modules/y18n": { - "version": "5.0.8", - "license": "ISC", + "packages/edge-bundler/node_modules/@esbuild/linux-arm": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.20.2.tgz", + "integrity": "sha512-VhLPeR8HTMPccbuWWcEUD1Az68TqaTYyj6nfE4QByZIQEQVWBB8vup8PpR7y1QHL3CpcF6xd5WVBU/+SBEvGTg==", + "cpu": [ + "arm" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/yallist": { - "version": "4.0.0", - "license": "ISC" - }, - "node_modules/yaml": { - "version": "2.3.4", - "license": "ISC", + "packages/edge-bundler/node_modules/@esbuild/linux-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.20.2.tgz", + "integrity": "sha512-9pb6rBjGvTFNira2FLIWqDk/uaf42sSyLE8j1rnUpuzsODBq7FvpwHYZxQ/It/8b+QOS1RYfqgGFNLRI+qlq2A==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">= 14" + "node": ">=12" } }, - "node_modules/yargs": { - "version": "17.7.2", - "license": "MIT", - "dependencies": { - "cliui": "^8.0.1", - "escalade": "^3.1.1", - "get-caller-file": "^2.0.5", - "require-directory": "^2.1.1", - "string-width": "^4.2.3", - "y18n": "^5.0.5", - "yargs-parser": "^21.1.1" - }, + "packages/edge-bundler/node_modules/@esbuild/linux-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.20.2.tgz", + "integrity": "sha512-o10utieEkNPFDZFQm9CoP7Tvb33UutoJqg3qKf1PWVeeJhJw0Q347PxMvBgVVFgouYLGIhFYG0UGdBumROyiig==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "node_modules/yargs-parser": { - "version": "20.2.9", - "dev": true, - "license": "ISC", + "packages/edge-bundler/node_modules/@esbuild/linux-loong64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.20.2.tgz", + "integrity": "sha512-PR7sp6R/UC4CFVomVINKJ80pMFlfDfMQMYynX7t1tNTeivQ6XdX5r2XovMmha/VjR1YN/HgHWsVcTRIMkymrgQ==", + "cpu": [ + "loong64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=10" + "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-regex": { - "version": "5.0.1", - "license": "MIT", + "packages/edge-bundler/node_modules/@esbuild/linux-mips64el": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.20.2.tgz", + "integrity": "sha512-4BlTqeutE/KnOiTG5Y6Sb/Hw6hsBOZapOVF6njAESHInhlQAghVVZL1ZpIctBOoTFbQyGW+LsVYZ8lSSB3wkjA==", + "cpu": [ + "mips64el" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/yargs/node_modules/ansi-styles": { - "version": "4.3.0", - "license": "MIT", - "dependencies": { - "color-convert": "^2.0.1" - }, + "packages/edge-bundler/node_modules/@esbuild/linux-ppc64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.20.2.tgz", + "integrity": "sha512-rD3KsaDprDcfajSKdn25ooz5J5/fWBylaaXkuotBDGnMnDP1Uv5DLAN/45qfnf3JDYyJv/ytGHQaziHUdyzaAg==", + "cpu": [ + "ppc64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/chalk/ansi-styles?sponsor=1" + "node": ">=12" } }, - "node_modules/yargs/node_modules/cliui": { - "version": "8.0.1", - "license": "ISC", - "dependencies": { - "string-width": "^4.2.0", - "strip-ansi": "^6.0.1", - "wrap-ansi": "^7.0.0" - }, + "packages/edge-bundler/node_modules/@esbuild/linux-riscv64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.20.2.tgz", + "integrity": "sha512-snwmBKacKmwTMmhLlz/3aH1Q9T8v45bKYGE3j26TsaOVtjIag4wLfWSiZykXzXuE1kbCE+zJRmwp+ZbIHinnVg==", + "cpu": [ + "riscv64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { "node": ">=12" } }, - "node_modules/yargs/node_modules/color-convert": { - "version": "2.0.1", - "license": "MIT", - "dependencies": { - "color-name": "~1.1.4" - }, + "packages/edge-bundler/node_modules/@esbuild/linux-s390x": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.20.2.tgz", + "integrity": "sha512-wcWISOobRWNm3cezm5HOZcYz1sKoHLd8VL1dl309DiixxVFoFe/o8HnwuIwn6sXre88Nwj+VwZUvJf4AFxkyrQ==", + "cpu": [ + "s390x" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=7.0.0" + "node": ">=12" } }, - "node_modules/yargs/node_modules/emoji-regex": { - "version": "8.0.0", - "license": "MIT" - }, - "node_modules/yargs/node_modules/is-fullwidth-code-point": { - "version": "3.0.0", - "license": "MIT", + "packages/edge-bundler/node_modules/@esbuild/linux-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.20.2.tgz", + "integrity": "sha512-1MdwI6OOTsfQfek8sLwgyjOXAu+wKhLEoaOLTjbijk6E2WONYpH9ZU2mNtR+lZ2B4uwr+usqGuVfFT9tMtGvGw==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "linux" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/yargs/node_modules/string-width": { - "version": "4.2.3", - "license": "MIT", - "dependencies": { - "emoji-regex": "^8.0.0", - "is-fullwidth-code-point": "^3.0.0", - "strip-ansi": "^6.0.1" - }, + "packages/edge-bundler/node_modules/@esbuild/netbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.20.2.tgz", + "integrity": "sha512-K8/DhBxcVQkzYc43yJXDSyjlFeHQJBiowJ0uVL6Tor3jGQfSGHNNJcWxNbOI8v5k82prYqzPuwkzHt3J1T1iZQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "netbsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/yargs/node_modules/strip-ansi": { - "version": "6.0.1", - "license": "MIT", - "dependencies": { - "ansi-regex": "^5.0.1" - }, + "packages/edge-bundler/node_modules/@esbuild/openbsd-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.20.2.tgz", + "integrity": "sha512-eMpKlV0SThJmmJgiVyN9jTPJ2VBPquf6Kt/nAoo6DgHAoN57K15ZghiHaMvqjCye/uU4X5u3YSMgVBI1h3vKrQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "openbsd" + ], "engines": { - "node": ">=8" + "node": ">=12" } }, - "node_modules/yargs/node_modules/wrap-ansi": { - "version": "7.0.0", - "license": "MIT", - "dependencies": { - "ansi-styles": "^4.0.0", - "string-width": "^4.1.0", - "strip-ansi": "^6.0.0" - }, + "packages/edge-bundler/node_modules/@esbuild/sunos-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.20.2.tgz", + "integrity": "sha512-2UyFtRC6cXLyejf/YEld4Hajo7UHILetzE1vsRcGL3earZEW77JxrFjH4Ez2qaTiEfMgAXxfAZCm1fvM/G/o8w==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "sunos" + ], "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + "node": ">=12" } }, - "node_modules/yargs/node_modules/yargs-parser": { - "version": "21.1.1", - "license": "ISC", + "packages/edge-bundler/node_modules/@esbuild/win32-arm64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.20.2.tgz", + "integrity": "sha512-GRibxoawM9ZCnDxnP3usoUDO9vUkpAxIIZ6GQI+IlVmr5kP3zUq+l17xELTHMWTWzjxa2guPNyrpq1GWmPvcGQ==", + "cpu": [ + "arm64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { "node": ">=12" } }, - "node_modules/yarn": { - "version": "1.22.21", - "dev": true, - "hasInstallScript": true, - "license": "BSD-2-Clause", - "bin": { - "yarn": "bin/yarn.js", - "yarnpkg": "bin/yarn.js" - }, + "packages/edge-bundler/node_modules/@esbuild/win32-ia32": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.20.2.tgz", + "integrity": "sha512-HfLOfn9YWmkSKRQqovpnITazdtquEW8/SoHW7pWpuEeguaZI4QnCRW6b+oZTztdBnZOS2hqJ6im/D5cPzBTTlQ==", + "cpu": [ + "ia32" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=4.0.0" + "node": ">=12" } }, - "node_modules/yn": { - "version": "3.1.1", - "license": "MIT", + "packages/edge-bundler/node_modules/@esbuild/win32-x64": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.20.2.tgz", + "integrity": "sha512-N49X4lJX27+l9jbLKSqZ6bKNjzQvHaT8IIFUy+YIqmXQdjYCToGWwOItDrfby14c78aDd5NHQl29xingXfCdLQ==", + "cpu": [ + "x64" + ], + "optional": true, + "os": [ + "win32" + ], "engines": { - "node": ">=6" + "node": ">=12" } }, - "node_modules/yocto-queue": { - "version": "1.0.0", - "license": "MIT", + "packages/edge-bundler/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, + "dependencies": { + "color-convert": "^2.0.1" + }, "engines": { - "node": ">=12.20" + "node": ">=8" }, "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "url": "https://github.com/chalk/ansi-styles?sponsor=1" } }, - "node_modules/zip-stream": { - "version": "5.0.1", - "license": "MIT", + "packages/edge-bundler/node_modules/archiver": { + "version": "5.3.2", + "resolved": "https://registry.npmjs.org/archiver/-/archiver-5.3.2.tgz", + "integrity": "sha512-+25nxyyznAXF7Nef3y0EbBeqmGZgeN/BxHX29Rs39djAfaFalmQ89SE6CWyDCHzGL0yt/ycBtNOmGTW0FyGWNw==", + "dev": true, "dependencies": { - "archiver-utils": "^4.0.1", - "compress-commons": "^5.0.1", - "readable-stream": "^3.6.0" + "archiver-utils": "^2.1.0", + "async": "^3.2.4", + "buffer-crc32": "^0.2.1", + "readable-stream": "^3.6.0", + "readdir-glob": "^1.1.2", + "tar-stream": "^2.2.0", + "zip-stream": "^4.1.0" }, "engines": { - "node": ">= 12.0.0" + "node": ">= 10" } }, - "packages/build": { - "name": "@netlify/build", - "version": "29.40.0", - "license": "MIT", + "packages/edge-bundler/node_modules/archiver-utils": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-2.1.0.tgz", + "integrity": "sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==", + "dev": true, "dependencies": { - "@bugsnag/js": "^7.0.0", - "@netlify/blobs": "^7.3.0", - "@netlify/cache-utils": "^5.1.5", - "@netlify/config": "^20.12.1", - "@netlify/edge-bundler": "11.4.0", - "@netlify/framework-info": "^9.8.11", - "@netlify/functions-utils": "^5.2.54", - "@netlify/git-utils": "^5.1.1", - "@netlify/opentelemetry-utils": "^1.1.0", - "@netlify/plugins-list": "^6.77.0", - "@netlify/run-utils": "^5.1.1", - "@netlify/zip-it-and-ship-it": "9.31.3", - "@sindresorhus/slugify": "^2.0.0", - "ansi-escapes": "^6.0.0", - "chalk": "^5.0.0", - "clean-stack": "^4.0.0", - "execa": "^6.0.0", - "fdir": "^6.0.1", - "figures": "^5.0.0", - "filter-obj": "^5.0.0", - "got": "^12.0.0", - "hot-shots": "10.0.0", - "indent-string": "^5.0.0", - "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", - "keep-func-props": "^4.0.0", - "locate-path": "^7.0.0", - "log-process-errors": "^8.0.0", - "map-obj": "^5.0.0", - "memoize-one": "^6.0.0", - "minimatch": "^9.0.4", - "node-fetch": "^3.3.2", - "os-name": "^5.0.0", - "p-event": "^5.0.0", - "p-every": "^2.0.0", - "p-filter": "^3.0.0", - "p-locate": "^6.0.0", - "p-map": "^6.0.0", - "p-reduce": "^3.0.0", - "path-exists": "^5.0.0", - "path-type": "^5.0.0", - "pkg-dir": "^7.0.0", - "pretty-ms": "^8.0.0", - "ps-list": "^8.0.0", - "read-pkg-up": "^9.0.0", - "readdirp": "^3.4.0", - "resolve": "^2.0.0-next.1", - "rfdc": "^1.3.0", - "safe-json-stringify": "^1.2.0", - "semver": "^7.3.8", - "string-width": "^5.0.0", - "strip-ansi": "^7.0.0", - "supports-color": "^9.0.0", - "terminal-link": "^3.0.0", - "ts-node": "^10.9.1", - "typescript": "^5.0.0", - "uuid": "^9.0.0", - "yargs": "^17.6.0" - }, - "bin": { - "netlify-build": "bin.js" - }, - "devDependencies": { - "@netlify/nock-udp": "^3.1.2", - "@opentelemetry/api": "~1.8.0", - "@opentelemetry/sdk-trace-base": "~1.22.0", - "@types/node": "^14.18.53", - "@vitest/coverage-c8": "^0.33.0", - "atob": "^2.1.2", - "ava": "^4.0.0", - "c8": "^7.12.0", - "copyfiles": "^2.4.1", - "cpy": "^9.0.0", - "fast-safe-stringify": "^2.0.7", - "get-bin-path": "^6.0.0", - "get-node": "^12.0.0", - "get-port": "^6.0.0", - "get-stream": "^6.0.0", - "has-ansi": "^5.0.0", - "moize": "^6.0.0", - "npm-run-all2": "^5.0.0", - "path-key": "^4.0.0", - "process-exists": "^5.0.0", - "sinon": "^13.0.0", - "tmp-promise": "^3.0.2", - "tsd": "^0.30.0", - "vitest": "^0.34.0", - "yarn": "^1.22.4" + "glob": "^7.1.4", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^2.0.0" }, "engines": { - "node": "^14.16.0 || >=16.0.0" - }, - "peerDependencies": { - "@netlify/opentelemetry-sdk-setup": "^1.1.0", - "@opentelemetry/api": "~1.8.0" - }, - "peerDependenciesMeta": { - "@netlify/opentelemetry-sdk-setup": { - "optional": true - } + "node": ">= 6" } }, - "packages/build-info": { - "name": "@netlify/build-info", - "version": "7.13.2", - "license": "MIT", + "packages/edge-bundler/node_modules/archiver-utils/node_modules/readable-stream": { + "version": "2.3.8", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-2.3.8.tgz", + "integrity": "sha512-8p0AUk4XODgIewSi0l8Epjs+EVnWiK7NoDIEGU0HhE7+ZyY8D1IMY7odu5lRrFXGg71L15KG8QrPmum45RTtdA==", + "dev": true, "dependencies": { - "@bugsnag/js": "^7.20.0", - "@iarna/toml": "^2.2.5", - "dot-prop": "^7.2.0", - "find-up": "^6.3.0", - "minimatch": "^9.0.0", - "read-pkg": "^7.1.0", - "semver": "^7.3.8", - "yaml": "^2.1.3", - "yargs": "^17.6.0" - }, - "bin": { - "build-info": "bin.js" - }, - "devDependencies": { - "@bugsnag/source-maps": "^2.3.1", - "@playwright/test": "^1.30.0", - "@types/node": "^14.18.53", - "@types/semver": "^7.3.13", - "@vitest/coverage-c8": "^0.33.0", - "@vitest/ui": "^0.34.0", - "execa": "^6.0.0", - "memfs": "^3.4.7", - "node-fetch": "^3.3.1", - "typescript": "^5.0.0", - "unionfs": "^4.4.0", - "vite": "^4.0.4", - "vitest": "^0.34.0" - }, - "engines": { - "node": "^14.16.0 || >=16.0.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.3", + "isarray": "~1.0.0", + "process-nextick-args": "~2.0.0", + "safe-buffer": "~5.1.1", + "string_decoder": "~1.1.1", + "util-deprecate": "~1.0.1" } }, - "packages/build-info/node_modules/execa": { - "version": "6.1.0", + "packages/edge-bundler/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": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "node": ">=10" }, "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "packages/build-info/node_modules/human-signals": { - "version": "3.0.1", - "dev": true, - "license": "Apache-2.0", - "engines": { - "node": ">=12.20.0" + "url": "https://github.com/chalk/chalk?sponsor=1" } }, - "packages/build-info/node_modules/is-stream": { - "version": "3.0.0", - "dev": true, - "license": "MIT", - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "packages/edge-bundler/node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "engines": { + "node": ">=7.0.0" } }, - "packages/build-info/node_modules/npm-run-path": { - "version": "5.1.0", + "packages/edge-bundler/node_modules/compress-commons": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/compress-commons/-/compress-commons-4.1.2.tgz", + "integrity": "sha512-D3uMHtGc/fcO1Gt1/L7i1e33VOvD4A9hfQLP+6ewd+BvG/gQ84Yh4oftEhAdjSMgBgwGL+jsppT7JYNpo6MHHg==", "dev": true, - "license": "MIT", "dependencies": { - "path-key": "^4.0.0" + "buffer-crc32": "^0.2.13", + "crc32-stream": "^4.0.2", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "packages/build-info/node_modules/onetime": { - "version": "6.0.0", + "packages/edge-bundler/node_modules/crc32-stream": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/crc32-stream/-/crc32-stream-4.0.3.tgz", + "integrity": "sha512-NT7w2JVU7DFroFdYkeq8cywxrgjPHWkdX1wjpRQXPX5Asews3tA+Ght6lddQO5Mkumffp3X7GEqku3epj2toIw==", "dev": true, - "license": "MIT", "dependencies": { - "mimic-fn": "^4.0.0" + "crc-32": "^1.2.0", + "readable-stream": "^3.4.0" }, "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "packages/build-info/node_modules/strip-final-newline": { - "version": "3.0.0", - "dev": true, - "license": "MIT", + "packages/edge-bundler/node_modules/esbuild": { + "version": "0.20.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.20.2.tgz", + "integrity": "sha512-WdOOppmUNU+IbZ0PaDiTst80zjnrOkyJNHoKupIcVyU8Lvla3Ugx94VzkQ32Ijqd7UhHJy75gNWDMUekcrSJ6g==", + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, "engines": { "node": ">=12" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.20.2", + "@esbuild/android-arm": "0.20.2", + "@esbuild/android-arm64": "0.20.2", + "@esbuild/android-x64": "0.20.2", + "@esbuild/darwin-arm64": "0.20.2", + "@esbuild/darwin-x64": "0.20.2", + "@esbuild/freebsd-arm64": "0.20.2", + "@esbuild/freebsd-x64": "0.20.2", + "@esbuild/linux-arm": "0.20.2", + "@esbuild/linux-arm64": "0.20.2", + "@esbuild/linux-ia32": "0.20.2", + "@esbuild/linux-loong64": "0.20.2", + "@esbuild/linux-mips64el": "0.20.2", + "@esbuild/linux-ppc64": "0.20.2", + "@esbuild/linux-riscv64": "0.20.2", + "@esbuild/linux-s390x": "0.20.2", + "@esbuild/linux-x64": "0.20.2", + "@esbuild/netbsd-x64": "0.20.2", + "@esbuild/openbsd-x64": "0.20.2", + "@esbuild/sunos-x64": "0.20.2", + "@esbuild/win32-arm64": "0.20.2", + "@esbuild/win32-ia32": "0.20.2", + "@esbuild/win32-x64": "0.20.2" } }, - "packages/build/node_modules/execa": { + "packages/edge-bundler/node_modules/execa": { "version": "6.1.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/execa/-/execa-6.1.0.tgz", + "integrity": "sha512-QVWlX2e50heYJcCPG0iWtf8r0xjEYfz/OYLGDYH+IyjWezzPNxz63qNFOu0l4YftGWuizFVZHHs8PrLU5p2IDA==", "dependencies": { "cross-spawn": "^7.0.3", "get-stream": "^6.0.1", @@ -25066,16 +25450,18 @@ "url": "https://github.com/sindresorhus/execa?sponsor=1" } }, - "packages/build/node_modules/human-signals": { + "packages/edge-bundler/node_modules/human-signals": { "version": "3.0.1", - "license": "Apache-2.0", + "resolved": "https://registry.npmjs.org/human-signals/-/human-signals-3.0.1.tgz", + "integrity": "sha512-rQLskxnM/5OCldHo+wNXbpVgDn5A17CUoKX+7Sokwaknlq7CdSnphy0W39GU8dw59XiCXmFXDg4fRuckQRKewQ==", "engines": { "node": ">=12.20.0" } }, - "packages/build/node_modules/is-stream": { + "packages/edge-bundler/node_modules/is-stream": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/is-stream/-/is-stream-3.0.0.tgz", + "integrity": "sha512-LnQR4bZ9IADDRSkvpqMGvt/tEJWclzklNgSw48V5EAaAeDd6qGvN8ei6k5p0tvxSR171VmGyHuTiAOfxAbr8kA==", "engines": { "node": "^12.20.0 || ^14.13.1 || >=16.0.0" }, @@ -25083,9 +25469,16 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/build/node_modules/npm-run-path": { - "version": "5.1.0", - "license": "MIT", + "packages/edge-bundler/node_modules/isarray": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/isarray/-/isarray-1.0.0.tgz", + "integrity": "sha512-VLghIWNM6ELQzo7zwmcg0NmTVyWKYjvIeM83yjp0wRDTmUnrM678fQbcKBo6n2CJEF0szoG//ytg+TKla89ALQ==", + "dev": true + }, + "packages/edge-bundler/node_modules/npm-run-path": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/npm-run-path/-/npm-run-path-5.3.0.tgz", + "integrity": "sha512-ppwTtiJZq0O/ai0z7yfudtBpWIoxM8yE6nHi1X47eFR2EWORqfbu6CnPlNsjeN683eT0qG6H/Pyf9fCcvjnnnQ==", "dependencies": { "path-key": "^4.0.0" }, @@ -25096,9 +25489,10 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/build/node_modules/onetime": { + "packages/edge-bundler/node_modules/onetime": { "version": "6.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/onetime/-/onetime-6.0.0.tgz", + "integrity": "sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==", "dependencies": { "mimic-fn": "^4.0.0" }, @@ -25109,9 +25503,25 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/build/node_modules/strip-final-newline": { + "packages/edge-bundler/node_modules/safe-buffer": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.1.2.tgz", + "integrity": "sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==", + "dev": true + }, + "packages/edge-bundler/node_modules/string_decoder": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.1.1.tgz", + "integrity": "sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg==", + "dev": true, + "dependencies": { + "safe-buffer": "~5.1.0" + } + }, + "packages/edge-bundler/node_modules/strip-final-newline": { "version": "3.0.0", - "license": "MIT", + "resolved": "https://registry.npmjs.org/strip-final-newline/-/strip-final-newline-3.0.0.tgz", + "integrity": "sha512-dOESqjYr96iWYylGObzd39EuNTa5VJxyvVAEm5Jnh7KGo75V43Hk1odPQkNDyXNmUR6k+gEiDVXnjB8HJ3crXw==", "engines": { "node": ">=12" }, @@ -25119,148 +25529,67 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "packages/cache-utils": { - "name": "@netlify/cache-utils", - "version": "5.1.5", - "license": "MIT", - "dependencies": { - "cpy": "^9.0.0", - "get-stream": "^6.0.0", - "globby": "^13.0.0", - "junk": "^4.0.0", - "locate-path": "^7.0.0", - "move-file": "^3.0.0", - "path-exists": "^5.0.0", - "readdirp": "^3.4.0" - }, - "devDependencies": { - "@types/node": "^14.18.53", - "tmp-promise": "^3.0.0", - "typescript": "^5.0.0", - "vitest": "^0.34.0" - }, - "engines": { - "node": "^14.16.0 || >=16.0.0" - } - }, - "packages/config": { - "name": "@netlify/config", - "version": "20.12.1", - "license": "MIT", + "packages/edge-bundler/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, "dependencies": { - "@iarna/toml": "^2.2.5", - "chalk": "^5.0.0", - "cron-parser": "^4.1.0", - "deepmerge": "^4.2.2", - "dot-prop": "^7.0.0", - "execa": "^6.0.0", - "fast-safe-stringify": "^2.0.7", - "figures": "^5.0.0", - "filter-obj": "^5.0.0", - "find-up": "^6.0.0", - "indent-string": "^5.0.0", - "is-plain-obj": "^4.0.0", - "js-yaml": "^4.0.0", - "map-obj": "^5.0.0", - "netlify": "^13.1.14", - "netlify-headers-parser": "^7.1.4", - "netlify-redirect-parser": "^14.2.2", - "node-fetch": "^3.3.1", - "omit.js": "^2.0.2", - "p-locate": "^6.0.0", - "path-type": "^5.0.0", - "tomlify-j0.4": "^3.0.0", - "validate-npm-package-name": "^4.0.0", - "yargs": "^17.6.0" - }, - "bin": { - "netlify-config": "bin.js" - }, - "devDependencies": { - "@types/node": "^14.18.53", - "ava": "^4.0.0", - "c8": "^7.12.0", - "has-ansi": "^5.0.0", - "is-ci": "^3.0.0", - "tmp-promise": "^3.0.2", - "typescript": "^5.0.0" + "has-flag": "^4.0.0" }, "engines": { - "node": "^14.16.0 || >=16.0.0" + "node": ">=8" } }, - "packages/config/node_modules/execa": { - "version": "6.1.0", - "license": "MIT", + "packages/edge-bundler/node_modules/tar-stream": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/tar-stream/-/tar-stream-2.2.0.tgz", + "integrity": "sha512-ujeqbceABgwMZxEJnk2HDY2DlnUZ+9oEcb1KzTVfYHio0UE6dG71n60d8D2I4qNvleWrrXpmjpt7vZeF1LnMZQ==", + "dev": true, "dependencies": { - "cross-spawn": "^7.0.3", - "get-stream": "^6.0.1", - "human-signals": "^3.0.1", - "is-stream": "^3.0.0", - "merge-stream": "^2.0.0", - "npm-run-path": "^5.1.0", - "onetime": "^6.0.0", - "signal-exit": "^3.0.7", - "strip-final-newline": "^3.0.0" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" + "bl": "^4.0.3", + "end-of-stream": "^1.4.1", + "fs-constants": "^1.0.0", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1" }, - "funding": { - "url": "https://github.com/sindresorhus/execa?sponsor=1" - } - }, - "packages/config/node_modules/human-signals": { - "version": "3.0.1", - "license": "Apache-2.0", - "engines": { - "node": ">=12.20.0" - } - }, - "packages/config/node_modules/is-stream": { - "version": "3.0.0", - "license": "MIT", "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">=6" } }, - "packages/config/node_modules/npm-run-path": { - "version": "5.1.0", - "license": "MIT", + "packages/edge-bundler/node_modules/zip-stream": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/zip-stream/-/zip-stream-4.1.1.tgz", + "integrity": "sha512-9qv4rlDiopXg4E69k+vMHjNN63YFMe9sZMrdlvKnCjlCRWeCBswPPMPUfx+ipsAWq1LXHe70RcbaHdJJpS6hyQ==", + "dev": true, "dependencies": { - "path-key": "^4.0.0" + "archiver-utils": "^3.0.4", + "compress-commons": "^4.1.2", + "readable-stream": "^3.6.0" }, "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, - "packages/config/node_modules/onetime": { - "version": "6.0.0", - "license": "MIT", + "packages/edge-bundler/node_modules/zip-stream/node_modules/archiver-utils": { + "version": "3.0.4", + "resolved": "https://registry.npmjs.org/archiver-utils/-/archiver-utils-3.0.4.tgz", + "integrity": "sha512-KVgf4XQVrTjhyWmx6cte4RxonPLR9onExufI1jhvw/MQ4BB6IsZD5gT8Lq+u/+pRkWna/6JoHpiQioaqFP5Rzw==", + "dev": true, "dependencies": { - "mimic-fn": "^4.0.0" - }, - "engines": { - "node": ">=12" + "glob": "^7.2.3", + "graceful-fs": "^4.2.0", + "lazystream": "^1.0.0", + "lodash.defaults": "^4.2.0", + "lodash.difference": "^4.5.0", + "lodash.flatten": "^4.4.0", + "lodash.isplainobject": "^4.0.6", + "lodash.union": "^4.6.0", + "normalize-path": "^3.0.0", + "readable-stream": "^3.6.0" }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "packages/config/node_modules/strip-final-newline": { - "version": "3.0.0", - "license": "MIT", "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" + "node": ">= 10" } }, "packages/framework-info": { diff --git a/packages/build/tests/monitor/snapshots/tests.js.md b/packages/build/tests/monitor/snapshots/tests.js.md index 3425b002d3..69de434afa 100644 --- a/packages/build/tests/monitor/snapshots/tests.js.md +++ b/packages/build/tests/monitor/snapshots/tests.js.md @@ -1620,7 +1620,7 @@ Generated by [AVA](https://avajs.dev). ────────────────────────────────────────────────────────────────␊ ␊ Error message␊ - Command failed with exit code 1: deno run --allow-all --no-config --import-map=/node_module/path --quiet /node_module/path {"basePath":"packages/build/tests/monitor/fixtures/edge_function_error","destPath":"packages/build/tests/monitor/fixtures/edge_function_error/.netlify/edge-functions-dist/HEXADECIMAL_ID.eszip","externals":[],"functions":[{"name":"trouble","path":"packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/trouble.ts"}],"importMapData":"{/"imports/":{/"@netlify/edge-functions/":/"https://edge.netlify.com/v1.0.0/index.ts/",/"netlify:edge/":/"https://edge.netlify.com/v1.0.0/index.ts?v=legacy/"},/"scopes/":{}}"}␊ + Command failed with exit code 1: deno run --allow-all --no-config --import-map=packages/edge-bundler/deno/vendor/import_map.json --quiet packages/edge-bundler/deno/bundle.ts {"basePath":"packages/build/tests/monitor/fixtures/edge_function_error","destPath":"packages/build/tests/monitor/fixtures/edge_function_error/.netlify/edge-functions-dist/HEXADECIMAL_ID.eszip","externals":[],"functions":[{"name":"trouble","path":"packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/trouble.ts"}],"importMapData":"{/"imports/":{/"@netlify/edge-functions/":/"https://edge.netlify.com/v1.0.0/index.ts/",/"netlify:edge/":/"https://edge.netlify.com/v1.0.0/index.ts?v=legacy/"},/"scopes/":{}}"}␊ error: Uncaught (in promise) Error: Error: Could not find file: packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/file.ts␊ const ret = new Error(getStringFromWasm0(arg0, arg1));␊ ^␊ @@ -1638,7 +1638,7 @@ Generated by [AVA](https://avajs.dev). Error monitoring payload:␊ {␊ "errorClass": "functionsBundling",␊ - "errorMessage": "Command failed with exit code 1: deno run --allow-all --no-config --import-map=/node_module/path --quiet /node_module/path {/"basePath/":/"packages/build/tests/monitor/fixtures/edge_function_error",/"destPath/":/"packages/build/tests/monitor/fixtures/edge_function_error/.netlify/edge-functions-dist/HEXADECIMAL_ID.eszip",/"externals/":[],/"functions/":[{/"name/":/"trouble/",/"path/":/"packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/trouble.ts"}],/"importMapData/":/"{//"imports//":{//"@netlify/edge-functions//"://"https://edge.netlify.com/v1.0.0/index.ts//",//"netlify:edge//"://"https://edge.netlify.com/v1.0.0/index.ts?v=legacy//"},//"scopes//":{}}/"}/nerror: Uncaught (in promise) Error: Error: Could not find file: packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/file.ts/n const ret = new Error(getStringFromWasm0(arg0, arg1));/n ^/n at __wbg_new_HEXADECIMAL_ID (/node_module/path)/n at (/node_module/path)/n at (/node_module/path)/n at (/node_module/path)/n at __wbg_adapter_40 (/node_module/path)/n at real (/node_module/path)/n at eventLoopTick (ext:core/01_core.js:80:80)",␊ + "errorMessage": "Command failed with exit code 1: deno run --allow-all --no-config --import-map=packages/edge-bundler/deno/vendor/import_map.json --quiet packages/edge-bundler/deno/bundle.ts {/"basePath/":/"packages/build/tests/monitor/fixtures/edge_function_error",/"destPath/":/"packages/build/tests/monitor/fixtures/edge_function_error/.netlify/edge-functions-dist/HEXADECIMAL_ID.eszip",/"externals/":[],/"functions/":[{/"name/":/"trouble/",/"path/":/"packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/trouble.ts"}],/"importMapData/":/"{//"imports//":{//"@netlify/edge-functions//"://"https://edge.netlify.com/v1.0.0/index.ts//",//"netlify:edge//"://"https://edge.netlify.com/v1.0.0/index.ts?v=legacy//"},//"scopes//":{}}/"}/nerror: Uncaught (in promise) Error: Error: Could not find file: packages/build/tests/monitor/fixtures/edge_function_error/netlify/edge-functions/file.ts/n const ret = new Error(getStringFromWasm0(arg0, arg1));/n ^/n at __wbg_new_HEXADECIMAL_ID (packages/edge-bundler/deno/vendor/deno.land/x/eszip@v1.0.0/eszip_wasm.generated.js:80:80)/n at (packages/edge-bundler/deno/vendor/deno.land/x/eszip@v1.0.0/eszip_wasm_bg.wasm:1:80)/n at (packages/edge-bundler/deno/vendor/deno.land/x/eszip@v1.0.0/eszip_wasm_bg.wasm:1:80)/n at (packages/edge-bundler/deno/vendor/deno.land/x/eszip@v1.0.0/eszip_wasm_bg.wasm:1:80)/n at __wbg_adapter_40 (packages/edge-bundler/deno/vendor/deno.land/x/eszip@v1.0.0/eszip_wasm.generated.js:80:8)/n at real (packages/edge-bundler/deno/vendor/deno.land/x/eszip@v1.0.0/eszip_wasm.generated.js:80:80)/n at eventLoopTick (ext:core/01_core.js:80:7)",␊ "context": "Bundling of edge function failed",␊ "groupingHash": "Bundling of edge function failed/nCommand failed with exit code 0: deno run --allow-all --no-config /external/path --quiet /external/path {/"/":/"/",/"/":/"/",/"/":[],/"/":[{/"/":/"/",/"/":/"/"}],/"/":/"/"/external/path"/"/external/path"/"/external/path"/"/external/path"/"/external/path"/"/external/path"/"}/nerror: Uncaught (in promise) Error: Error: Could not find file: /external/path const ret = new Error(getStringFromWasm0(arg0, arg0));/n ^/n at __wbg_new_hex /external/path at /external/path at /external/path at /external/path at __wbg_adapter_0 /external/path at real /external/path at eventLoopTick /external/path",␊ "severity": "info",␊ diff --git a/packages/build/tests/monitor/snapshots/tests.js.snap b/packages/build/tests/monitor/snapshots/tests.js.snap index 089c80d248..76397297d4 100644 Binary files a/packages/build/tests/monitor/snapshots/tests.js.snap and b/packages/build/tests/monitor/snapshots/tests.js.snap differ diff --git a/packages/edge-bundler/.github/workflows/release-please.yml b/packages/edge-bundler/.github/workflows/release-please.yml new file mode 100644 index 0000000000..822da45b01 --- /dev/null +++ b/packages/edge-bundler/.github/workflows/release-please.yml @@ -0,0 +1,42 @@ +name: release-please +on: + push: + branches: + - main +jobs: + release-please: + runs-on: ubuntu-latest + permissions: + id-token: write + contents: write + pull-requests: write + steps: + - uses: navikt/github-app-token-generator@a8ae52448279d468cfbca5cd899f2457f0b1f643 + id: get-token + with: + private-key: ${{ secrets.TOKENS_PRIVATE_KEY }} + app-id: ${{ secrets.TOKENS_APP_ID }} + - uses: GoogleCloudPlatform/release-please-action@v3 + id: release + with: + token: ${{ steps.get-token.outputs.token }} + release-type: node + package-name: '@netlify/edge-bundler' + - uses: actions/checkout@v4 + if: ${{ steps.release.outputs.release_created }} + - uses: actions/setup-node@v3 + with: + node-version: '*' + cache: 'npm' + check-latest: true + registry-url: 'https://registry.npmjs.org' + if: ${{ steps.release.outputs.release_created }} + - name: Setup Deno + uses: denoland/setup-deno@v1 + with: + deno-version: v1.x + if: ${{ steps.release.outputs.release_created }} + - run: npm publish --provenance + if: ${{ steps.release.outputs.release_created }} + env: + NODE_AUTH_TOKEN: ${{secrets.NPM_TOKEN}} diff --git a/packages/edge-bundler/.gitignore b/packages/edge-bundler/.gitignore new file mode 100644 index 0000000000..3e40daaee4 --- /dev/null +++ b/packages/edge-bundler/.gitignore @@ -0,0 +1,15 @@ +*~ +*.swp +npm-debug.log +node_modules +!test/fixtures/**/node_modules +**/.netlify/edge-functions-serve +/core +.eslintcache +.npmrc +.yarn-error.log +.nyc_output +/coverage +/build +.vscode +/dist diff --git a/packages/edge-bundler/CHANGELOG.md b/packages/edge-bundler/CHANGELOG.md new file mode 100644 index 0000000000..97d8872cd3 --- /dev/null +++ b/packages/edge-bundler/CHANGELOG.md @@ -0,0 +1,1146 @@ +# Changelog + +## [11.4.0](https://github.com/netlify/edge-bundler/compare/v11.3.0...v11.4.0) (2024-03-25) + + +### Features + +* ratelimit config from source ([#583](https://github.com/netlify/edge-bundler/issues/583)) ([4f3a3d4](https://github.com/netlify/edge-bundler/commit/4f3a3d4ce51ef3422fa2bd04fe3172111b34ff42)) + + +### Bug Fixes + +* **deps:** update dependency @vercel/nft to v0.26.4 ([#584](https://github.com/netlify/edge-bundler/issues/584)) ([3b9e578](https://github.com/netlify/edge-bundler/commit/3b9e578d0b875d5dcd8040e0a1c4758e5d037501)) +* **deps:** update dependency esbuild to v0.20.1 ([#586](https://github.com/netlify/edge-bundler/issues/586)) ([50edb15](https://github.com/netlify/edge-bundler/commit/50edb15a89aabbe1746897af57a68041f08b0e19)) +* **deps:** update dependency esbuild to v0.20.2 ([#588](https://github.com/netlify/edge-bundler/issues/588)) ([9088602](https://github.com/netlify/edge-bundler/commit/90886029bd187562f59bb84aa37282593c1f4f47)) + +## [11.3.0](https://github.com/netlify/edge-bundler/compare/v11.2.2...v11.3.0) (2024-02-21) + + +### Features + +* remove feature flag for PCRE engine ([#580](https://github.com/netlify/edge-bundler/issues/580)) ([7ba2769](https://github.com/netlify/edge-bundler/commit/7ba276991fc0de4062124c333d4517fc4093c3ab)) + + +### Bug Fixes + +* **deps:** update dependency @vercel/nft to v0.26.3 ([#572](https://github.com/netlify/edge-bundler/issues/572)) ([e9860c5](https://github.com/netlify/edge-bundler/commit/e9860c57bdfd0aea13f76ba15b98aea8e231e4ae)) +* **deps:** update dependency esbuild to v0.20.0 ([#576](https://github.com/netlify/edge-bundler/issues/576)) ([0901b98](https://github.com/netlify/edge-bundler/commit/0901b98ec3b976de9014eb2dc9250e8d971157c1)) +* **deps:** update dependency jsonc-parser to v3.2.1 ([#573](https://github.com/netlify/edge-bundler/issues/573)) ([c76d6d8](https://github.com/netlify/edge-bundler/commit/c76d6d8e30688b2719d0040cf7a888728b2f1dea)) +* **deps:** update dependency semver to v7.6.0 ([#577](https://github.com/netlify/edge-bundler/issues/577)) ([dd0e231](https://github.com/netlify/edge-bundler/commit/dd0e23111e7b9577cc406f93fcd381bef6593356)) + +## [11.2.2](https://github.com/netlify/edge-bundler/compare/v11.2.1...v11.2.2) (2024-01-22) + + +### Bug Fixes + +* pipe log output in server ([#568](https://github.com/netlify/edge-bundler/issues/568)) ([de9bff0](https://github.com/netlify/edge-bundler/commit/de9bff0ebc653eb1f936e95660dde5091b8da7d2)) + +## [11.2.1](https://github.com/netlify/edge-bundler/compare/v11.2.0...v11.2.1) (2024-01-19) + + +### Bug Fixes + +* enclose regexp when using PCRE ([#566](https://github.com/netlify/edge-bundler/issues/566)) ([1057a31](https://github.com/netlify/edge-bundler/commit/1057a318ab8616c5968d1696502b7be5bf4dfdde)) + +## [11.2.0](https://github.com/netlify/edge-bundler/compare/v11.1.0...v11.2.0) (2024-01-16) + + +### Features + +* allow custom `stderr` and `stdout` in server ([#564](https://github.com/netlify/edge-bundler/issues/564)) ([837027e](https://github.com/netlify/edge-bundler/commit/837027e1e98dad96047d0ba88e8b9d5d94e9f1d1)) + +## [11.1.0](https://github.com/netlify/edge-bundler/compare/v11.0.0...v11.1.0) (2024-01-15) + + +### Features + +* support PCRE regexp engine ([#563](https://github.com/netlify/edge-bundler/issues/563)) ([14ecd17](https://github.com/netlify/edge-bundler/commit/14ecd178f9c035e38be02038b0186c45a8ae325f)) +* transform negative lookaheads ([#560](https://github.com/netlify/edge-bundler/issues/560)) ([4cf6a5e](https://github.com/netlify/edge-bundler/commit/4cf6a5ef1e8627ffa317d6d2cf67229a070ff691)) + + +### Bug Fixes + +* **deps:** update dependency @vercel/nft to ^0.26.0 ([#551](https://github.com/netlify/edge-bundler/issues/551)) ([b733ed3](https://github.com/netlify/edge-bundler/commit/b733ed3c8c9d9efbd8b1cfb9e54271e4f02be52f)) +* **deps:** update dependency @vercel/nft to v0.26.2 ([#559](https://github.com/netlify/edge-bundler/issues/559)) ([4433b46](https://github.com/netlify/edge-bundler/commit/4433b46bb5cb7d8d567632cdee3eea59e3ca5c3a)) +* **deps:** update dependency esbuild to v0.19.10 ([#554](https://github.com/netlify/edge-bundler/issues/554)) ([bdf2291](https://github.com/netlify/edge-bundler/commit/bdf2291e85eb08565da7f904574986bac5b2ddcb)) +* **deps:** update dependency esbuild to v0.19.11 ([#556](https://github.com/netlify/edge-bundler/issues/556)) ([f031c99](https://github.com/netlify/edge-bundler/commit/f031c99897312011053341027d2fa9450c88d6a5)) +* revert "feat: transform negative lookaheads" ([#561](https://github.com/netlify/edge-bundler/issues/561)) ([99784f2](https://github.com/netlify/edge-bundler/commit/99784f2f3b669619de5c46702d827b89bd31890e)) + +## [11.0.0](https://github.com/netlify/edge-bundler/compare/v10.1.3...v11.0.0) (2023-12-11) + + +### ⚠ BREAKING CHANGES + +* provide import maps when starting the isolate, not server ([#548](https://github.com/netlify/edge-bundler/issues/548)) + +### Features + +* provide import maps when starting the isolate, not server ([#548](https://github.com/netlify/edge-bundler/issues/548)) ([7d500b9](https://github.com/netlify/edge-bundler/commit/7d500b9433ad205929c9b21253c8f6dcfa35c67c)) + + +### Bug Fixes + +* **deps:** update dependency @vercel/nft to v0.24.4 ([#545](https://github.com/netlify/edge-bundler/issues/545)) ([c06e234](https://github.com/netlify/edge-bundler/commit/c06e23470d8e3292c0fc0983f9e5ba2c7eb65e3a)) +* **deps:** update dependency esbuild to v0.19.8 ([#542](https://github.com/netlify/edge-bundler/issues/542)) ([b596235](https://github.com/netlify/edge-bundler/commit/b596235d259c8ad317343c5a472bff783fb95ae1)) +* **deps:** update dependency esbuild to v0.19.9 ([#550](https://github.com/netlify/edge-bundler/issues/550)) ([e41a990](https://github.com/netlify/edge-bundler/commit/e41a990bdf659fcb16e3c3f95b8e502eb86ba6a9)) + +## [10.1.3](https://github.com/netlify/edge-bundler/compare/v10.1.2...v10.1.3) (2023-11-20) + + +### Bug Fixes + +* **deps:** update dependency esbuild to v0.19.6 ([#538](https://github.com/netlify/edge-bundler/issues/538)) ([0c0fad6](https://github.com/netlify/edge-bundler/commit/0c0fad6cb397d3edf4da2a48a3623415cf22f400)) +* fix `ModuleGraph` type export ([#537](https://github.com/netlify/edge-bundler/issues/537)) ([0138d13](https://github.com/netlify/edge-bundler/commit/0138d138049e813074442fe3ede86f1faf12342c)) + +## [10.1.2](https://github.com/netlify/edge-bundler/compare/v10.1.1...v10.1.2) (2023-11-15) + + +### Bug Fixes + +* prevent global namespace clash for `Buffer` ([#535](https://github.com/netlify/edge-bundler/issues/535)) ([e2a787f](https://github.com/netlify/edge-bundler/commit/e2a787ff3ffee6312eb5c7b0ddf755bb965cb5ab)) + +## [10.1.1](https://github.com/netlify/edge-bundler/compare/v10.1.0...v10.1.1) (2023-11-14) + + +### Bug Fixes + +* parse TSX files for module detection, define NODE_ENV, polyfill missing Node.js globals ([#519](https://github.com/netlify/edge-bundler/issues/519)) ([6f69f35](https://github.com/netlify/edge-bundler/commit/6f69f35d7cc0472502d355dd6227281d08aaa5ae)) + +## [10.1.0](https://github.com/netlify/edge-bundler/compare/v10.0.0...v10.1.0) (2023-11-08) + + +### Features + +* add `ModuleGraph` type ([#528](https://github.com/netlify/edge-bundler/issues/528)) ([11ff685](https://github.com/netlify/edge-bundler/commit/11ff68588bf84c1a32ec9d8460a3f030c82c23c8)) + +## [10.0.0](https://github.com/netlify/edge-bundler/compare/v9.5.0...v10.0.0) (2023-11-06) + + +### ⚠ BREAKING CHANGES + +* `generateManifest` exported method now returns an object with a `manifest` property + +### Features + +* add `rootPath` for monorepo setups ([#521](https://github.com/netlify/edge-bundler/issues/521)) ([aeb76d3](https://github.com/netlify/edge-bundler/commit/aeb76d3bc4e5b07f495d90a134f30583d43c87d2)) +* return declarations without function and unrouted functions ([#523](https://github.com/netlify/edge-bundler/issues/523)) ([45f04a7](https://github.com/netlify/edge-bundler/commit/45f04a772276ceb2294cf655ce8903ef0256dbb4)) + + +### Bug Fixes + +* **deps:** update dependency esbuild to v0.19.5 ([#525](https://github.com/netlify/edge-bundler/issues/525)) ([5c777cf](https://github.com/netlify/edge-bundler/commit/5c777cfc5099eb4bc4d1bb032cbddd9a15796f30)) + +## [9.5.0](https://github.com/netlify/edge-bundler/compare/v9.4.1...v9.5.0) (2023-10-30) + + +### Features + +* add support for JSON imports ([#513](https://github.com/netlify/edge-bundler/issues/513)) ([d391d20](https://github.com/netlify/edge-bundler/commit/d391d20405373c0917f3bf839f8bbea386f8271b)) + + +### Bug Fixes + +* don't delete dist directory in between builds on local dev ([#512](https://github.com/netlify/edge-bundler/issues/512)) ([aa416ae](https://github.com/netlify/edge-bundler/commit/aa416aebec77086ba4d5bb530954ea24d930c29c)) +* prefer ESM if available ([#517](https://github.com/netlify/edge-bundler/issues/517)) ([906ff87](https://github.com/netlify/edge-bundler/commit/906ff87559f90fee9f7290f47e3b4d3f2e424dd7)) +* remove npm_modules and fail_unsupported_regex flags ([#514](https://github.com/netlify/edge-bundler/issues/514)) ([be1d7cc](https://github.com/netlify/edge-bundler/commit/be1d7cc74b5e76b282acccbffd4b8d74e830224d)) + +## [9.4.1](https://github.com/netlify/edge-bundler/compare/v9.4.0...v9.4.1) (2023-10-24) + + +### Bug Fixes + +* relative path needs to be from directory, not from file ([#510](https://github.com/netlify/edge-bundler/issues/510)) ([e8304db](https://github.com/netlify/edge-bundler/commit/e8304dba06d6b65e93484df4f3b22196f18cfa1c)) + +## [9.4.0](https://github.com/netlify/edge-bundler/compare/v9.3.0...v9.4.0) (2023-10-23) + + +### Features + +* detect Typescript typings for NPM modules and reference them from barrel files ([#505](https://github.com/netlify/edge-bundler/issues/505)) ([32f9e9e](https://github.com/netlify/edge-bundler/commit/32f9e9ee83e517ff534e4010156d852193fd3fd1)) + + +### Bug Fixes + +* give stable barrel file names ([#509](https://github.com/netlify/edge-bundler/issues/509)) ([a4edd93](https://github.com/netlify/edge-bundler/commit/a4edd93e3e71553f128fd867cca652e3395b3184)) + +## [9.3.0](https://github.com/netlify/edge-bundler/compare/v9.2.1...v9.3.0) (2023-10-16) + + +### Features + +* trace npm modules with NFT ([#499](https://github.com/netlify/edge-bundler/issues/499)) ([d3d09ca](https://github.com/netlify/edge-bundler/commit/d3d09ca675230d279ad5f37fca5aba46896acc59)) + + +### Bug Fixes + +* respect import map files containing only scopes ([#495](https://github.com/netlify/edge-bundler/issues/495)) ([6812209](https://github.com/netlify/edge-bundler/commit/681220982a6cc5e2fb0ed5ccd9a189f5f96d2f22)) + +## [9.2.1](https://github.com/netlify/edge-bundler/compare/v9.2.0...v9.2.1) (2023-10-11) + + +### Bug Fixes + +* mute esbuild while parsing for NPM modules ([#497](https://github.com/netlify/edge-bundler/issues/497)) ([6a3685e](https://github.com/netlify/edge-bundler/commit/6a3685e6d5d32690af0c4e0a0733c19287dbeaa6)) +* NPM parsing shouldn't try loading Deno URL imports ([#496](https://github.com/netlify/edge-bundler/issues/496)) ([8278713](https://github.com/netlify/edge-bundler/commit/8278713bf6913650586a5dece0746be83315523e)) + +## [9.2.0](https://github.com/netlify/edge-bundler/compare/v9.1.0...v9.2.0) (2023-10-09) + + +### Features + +* allow injecting user-facing logger ([#493](https://github.com/netlify/edge-bundler/issues/493)) ([95b4131](https://github.com/netlify/edge-bundler/commit/95b4131cccc42f9af6e1d904720cf9c3c926af8c)) + + +### Bug Fixes + +* **deps:** update dependency esbuild to v0.19.4 ([#487](https://github.com/netlify/edge-bundler/issues/487)) ([b54d948](https://github.com/netlify/edge-bundler/commit/b54d948df15be90abfe2425e4320e4aaaf9eef75)) +* **deps:** update dependency uuid to v9.0.1 ([#489](https://github.com/netlify/edge-bundler/issues/489)) ([58e2ce9](https://github.com/netlify/edge-bundler/commit/58e2ce92f0f513ab8ab7aca3b3fc06bf73846fd3)) +* detect .mjs files ([#483](https://github.com/netlify/edge-bundler/issues/483)) ([2a9024c](https://github.com/netlify/edge-bundler/commit/2a9024cb8a108b6f50f17db874b3ac82c1325111)) +* NPM bundling should use ESM format ([#494](https://github.com/netlify/edge-bundler/issues/494)) ([6bb800f](https://github.com/netlify/edge-bundler/commit/6bb800f0b66f3d78a06ea9314b525da509c45385)) + +## [9.1.0](https://github.com/netlify/edge-bundler/compare/v9.0.0...v9.1.0) (2023-09-26) + + +### Features + +* return `features` from server ([#481](https://github.com/netlify/edge-bundler/issues/481)) ([e135bb9](https://github.com/netlify/edge-bundler/commit/e135bb925d5af142dea3465813d1b8c6ccf5d4f8)) + +## [9.0.0](https://github.com/netlify/edge-bundler/compare/v8.20.0...v9.0.0) (2023-09-20) + + +### ⚠ BREAKING CHANGES + +* support npm modules when serving ([#475](https://github.com/netlify/edge-bundler/issues/475)) + +### Features + +* remove support for `npm:` prefix ([#472](https://github.com/netlify/edge-bundler/issues/472)) ([87478f0](https://github.com/netlify/edge-bundler/commit/87478f0300577b97da14c05a09e6b02d64c350a3)) +* support npm modules when serving ([#475](https://github.com/netlify/edge-bundler/issues/475)) ([ec33cd7](https://github.com/netlify/edge-bundler/commit/ec33cd70b1c2b1fa29dcf183e6fa7ebf1825f685)) + +## [8.20.0](https://github.com/netlify/edge-bundler/compare/v8.19.1...v8.20.0) (2023-09-07) + + +### Features + +* add support for npm modules ([#454](https://github.com/netlify/edge-bundler/issues/454)) ([3d8b3f3](https://github.com/netlify/edge-bundler/commit/3d8b3f342e9f075bbb17fe7fb80602ed377d1a46)) + + +### Bug Fixes + +* support import maps in npm module resolution ([#471](https://github.com/netlify/edge-bundler/issues/471)) ([3f4975e](https://github.com/netlify/edge-bundler/commit/3f4975e465a098e1699ab5e35f13524f9bbbd1c2)) + +## [8.19.1](https://github.com/netlify/edge-bundler/compare/v8.19.0...v8.19.1) (2023-09-06) + + +### Bug Fixes + +* hide stack trace on syntax errors ([#464](https://github.com/netlify/edge-bundler/issues/464)) ([9261b8c](https://github.com/netlify/edge-bundler/commit/9261b8c13a07970be0e177aa6f1c4358ac862110)) +* pin bootstrap version used in config extraction ([#469](https://github.com/netlify/edge-bundler/issues/469)) ([19d142d](https://github.com/netlify/edge-bundler/commit/19d142dcb17953e4c598626709662a2ddb6cf506)) +* remap `netlify:edge` specifier ([#467](https://github.com/netlify/edge-bundler/issues/467)) ([9728d1a](https://github.com/netlify/edge-bundler/commit/9728d1a067cd791226eae2110e03897d2e0ac97b)) + +## [8.19.0](https://github.com/netlify/edge-bundler/compare/v8.18.0...v8.19.0) (2023-08-28) + + +### Features + +* match on http methods ([#458](https://github.com/netlify/edge-bundler/issues/458)) ([72e8453](https://github.com/netlify/edge-bundler/commit/72e8453fe70f1b0d2e566b0faf58ccdecbe65518)) +* remove `URLPattern` feature flag ([#460](https://github.com/netlify/edge-bundler/issues/460)) ([aa4d4ab](https://github.com/netlify/edge-bundler/commit/aa4d4abdd2458cfd7bd6d31d5ccb604815d642e6)) +* support `@netlify/edge-functions` specifier ([#459](https://github.com/netlify/edge-bundler/issues/459)) ([3340ac6](https://github.com/netlify/edge-bundler/commit/3340ac64d9ced1a1bba638f40b053e290e580a8a)) + +## [8.18.0](https://github.com/netlify/edge-bundler/compare/v8.17.1...v8.18.0) (2023-08-17) + + +### Features + +* add `path` to manifest ([#455](https://github.com/netlify/edge-bundler/issues/455)) ([fdbc09d](https://github.com/netlify/edge-bundler/commit/fdbc09de991638e5b452331416390cf219402ae2)) +* simplify `ImportMap` ([#453](https://github.com/netlify/edge-bundler/issues/453)) ([12a1d45](https://github.com/netlify/edge-bundler/commit/12a1d45f9fa7d59b2259161aee23ef564b036fad)) + + +### Bug Fixes + +* **deps:** update dependency semver to v7.5.4 ([#445](https://github.com/netlify/edge-bundler/issues/445)) ([f1011af](https://github.com/netlify/edge-bundler/commit/f1011af32dd0ad9a394bddc4a6499c49a373bd7f)) +* mark invalid url patterns as user error ([#450](https://github.com/netlify/edge-bundler/issues/450)) ([4363322](https://github.com/netlify/edge-bundler/commit/436332297ca31e8ab4ccb23b229729a67f21006a)) + +## [8.17.1](https://github.com/netlify/edge-bundler/compare/v8.17.0...v8.17.1) (2023-07-27) + + +### Bug Fixes + +* ensure patterns match on whole path ([#442](https://github.com/netlify/edge-bundler/issues/442)) ([a9e1e11](https://github.com/netlify/edge-bundler/commit/a9e1e117f417894c9da21115674f6550872b3d10)) +* parseConfig stumbling over `globalThis.Netlify` usage in global scope ([#427](https://github.com/netlify/edge-bundler/issues/427)) ([d829e70](https://github.com/netlify/edge-bundler/commit/d829e70e9c8220ee4d3013f6ee631a204bccb341)) + +## [8.17.0](https://github.com/netlify/edge-bundler/compare/v8.16.4...v8.17.0) (2023-07-26) + + +### Features + +* replace `glob-to-regexp` with `URLPattern` ([#392](https://github.com/netlify/edge-bundler/issues/392)) ([ca6962d](https://github.com/netlify/edge-bundler/commit/ca6962daa37b2f2af44dd7d5f007efaec49dd8ba)) + +## [8.16.4](https://github.com/netlify/edge-bundler/compare/v8.16.3...v8.16.4) (2023-07-12) + + +### Bug Fixes + +* set minimum deno version to `1.32.5` to support latest features in netlify bootstrap ([140b46d](https://github.com/netlify/edge-bundler/commit/140b46d4868a76645017264e3e1b74c646abe0d6)) + +## [8.16.3](https://github.com/netlify/edge-bundler/compare/v8.16.2...v8.16.3) (2023-07-10) + + +### Bug Fixes + +* **deps:** update dependency semver to v7.5.3 ([#424](https://github.com/netlify/edge-bundler/issues/424)) ([364eefe](https://github.com/netlify/edge-bundler/commit/364eefeb7eff5dd76e613d553c4cb6e0b1410489)) +* **deps:** update dependency semver to v7.5.4 ([#430](https://github.com/netlify/edge-bundler/issues/430)) ([30bd647](https://github.com/netlify/edge-bundler/commit/30bd647fade7407adbcb80aa65741a5c159a4e07)) + +## [8.16.2](https://github.com/netlify/edge-bundler/compare/v8.16.1...v8.16.2) (2023-06-07) + + +### Bug Fixes + +* improvements to download process of deno ([#414](https://github.com/netlify/edge-bundler/issues/414)) ([8e1ecec](https://github.com/netlify/edge-bundler/commit/8e1ecec398f6588d6e6ede042168fc4df62cf0fd)) + +## [8.16.1](https://github.com/netlify/edge-bundler/compare/v8.16.0...v8.16.1) (2023-06-05) + + +### Bug Fixes + +* update minimum version of semver to be ESM compatible ([#412](https://github.com/netlify/edge-bundler/issues/412)) ([f5f2695](https://github.com/netlify/edge-bundler/commit/f5f269552804b07754b1cb97d0f348d2a334f614)) + +## [8.16.0](https://github.com/netlify/edge-bundler/compare/v8.15.0...v8.16.0) (2023-05-30) + + +### Features + +* support `node:` prefix ([#406](https://github.com/netlify/edge-bundler/issues/406)) ([0f7413f](https://github.com/netlify/edge-bundler/commit/0f7413f3e4921922ba82d1331cfb6d50ccafc2a6)) + +## [8.15.0](https://github.com/netlify/edge-bundler/compare/v8.14.2...v8.15.0) (2023-05-24) + + +### Features + +* add support for excludedPattern ([#403](https://github.com/netlify/edge-bundler/issues/403)) ([39b29d5](https://github.com/netlify/edge-bundler/commit/39b29d5676432786dd83971fcc8e7cff00bea649)) + + +### Bug Fixes + +* **deps:** update dependency semver to v7.5.1 ([#397](https://github.com/netlify/edge-bundler/issues/397)) ([0858b14](https://github.com/netlify/edge-bundler/commit/0858b14c49fa958935e20284dda46f4f0c3fc795)) + +## [8.14.2](https://github.com/netlify/edge-bundler/compare/v8.14.1...v8.14.2) (2023-05-12) + + +### Bug Fixes + +* remove del package ([e913e46](https://github.com/netlify/edge-bundler/commit/e913e4602cc3fa8d6931159280a24bf6986b782c)) + +## [8.14.1](https://github.com/netlify/edge-bundler/compare/v8.14.0...v8.14.1) (2023-05-05) + + +### Bug Fixes + +* **deps:** update dependency regexp-tree to v0.1.27 ([#383](https://github.com/netlify/edge-bundler/issues/383)) ([0bec897](https://github.com/netlify/edge-bundler/commit/0bec897b48e96bf8da0a4374d95e6d7b66d5460c)) +* **deps:** update dependency semver to v7.5.0 ([#385](https://github.com/netlify/edge-bundler/issues/385)) ([4c4e2df](https://github.com/netlify/edge-bundler/commit/4c4e2dfe14ecfb0fb2244dc0093cd2a9d1777c93)) +* remove feature flag for execution order ([#381](https://github.com/netlify/edge-bundler/issues/381)) ([125c82c](https://github.com/netlify/edge-bundler/commit/125c82c56380bcdf36094408fa5b42da5698ebaa)) +* remove FF edge_functions_invalid_config_throw ([#374](https://github.com/netlify/edge-bundler/issues/374)) ([8b4e65e](https://github.com/netlify/edge-bundler/commit/8b4e65e52ad24c75398050ac041f0a03b2b721a5)) + +## [8.14.0](https://github.com/netlify/edge-bundler/compare/v8.13.2...v8.14.0) (2023-05-02) + + +### Features + +* add npm provenance ([#373](https://github.com/netlify/edge-bundler/issues/373)) ([9d798de](https://github.com/netlify/edge-bundler/commit/9d798de1bc646e64770c98e8c1720ba13b886e15)) + + +### Bug Fixes + +* add repro for customer case ([#366](https://github.com/netlify/edge-bundler/issues/366)) ([c91593f](https://github.com/netlify/edge-bundler/commit/c91593f5e7f0831e4cfe3c69d240d6044c8869c8)) +* **deps:** update dependency regexp-tree to v0.1.25 ([#370](https://github.com/netlify/edge-bundler/issues/370)) ([29f8a89](https://github.com/netlify/edge-bundler/commit/29f8a89976263138e7ed42a4f192dd476f027557)) +* ensure regular expressions are properly escaped ([#378](https://github.com/netlify/edge-bundler/issues/378)) ([214c3fb](https://github.com/netlify/edge-bundler/commit/214c3fbce7f425ad866f0ef737ea92eccc993aa2)) +* types ([c91593f](https://github.com/netlify/edge-bundler/commit/c91593f5e7f0831e4cfe3c69d240d6044c8869c8)) + +## [8.13.2](https://github.com/netlify/edge-bundler/compare/v8.13.1...v8.13.2) (2023-04-12) + + +### Bug Fixes + +* update eszip + std ([#364](https://github.com/netlify/edge-bundler/issues/364)) ([4b78e4c](https://github.com/netlify/edge-bundler/commit/4b78e4c5de8c3ec236a21afe5f14522fc11e1708)) + +## [8.13.1](https://github.com/netlify/edge-bundler/compare/v8.13.0...v8.13.1) (2023-04-10) + + +### Bug Fixes + +* change the order of how edge functions are written to the manifest ([#357](https://github.com/netlify/edge-bundler/issues/357)) ([59d1c8c](https://github.com/netlify/edge-bundler/commit/59d1c8c38dd8858a00b9c033588e1be80c0a5515)) +* remove duplicate functions and let .js take precedence ([#359](https://github.com/netlify/edge-bundler/issues/359)) ([bc52282](https://github.com/netlify/edge-bundler/commit/bc52282cda391bdfcb95798c1283041430a28482)) +* revert slash validation and change validation message ([#343](https://github.com/netlify/edge-bundler/issues/343)) ([d032496](https://github.com/netlify/edge-bundler/commit/d0324960e241f02b39966ed14e9f7be9c089800f)) + +## [8.13.0](https://github.com/netlify/edge-bundler/compare/v8.12.3...v8.13.0) (2023-03-24) + + +### Features + +* move non-route related ef configs to function_config in manifest ([#348](https://github.com/netlify/edge-bundler/issues/348)) ([c7b7042](https://github.com/netlify/edge-bundler/commit/c7b704212e4660ad90e6f1f5236db2eb9883b5c8)) +* split user and internal ISC function configs ([#347](https://github.com/netlify/edge-bundler/issues/347)) ([c85a861](https://github.com/netlify/edge-bundler/commit/c85a861eff2b54d6447db522f209d59871e60ab1)) + +## [8.12.3](https://github.com/netlify/edge-bundler/compare/v8.12.2...v8.12.3) (2023-03-20) + + +### Bug Fixes + +* mark validation error as user error ([4dec1b9](https://github.com/netlify/edge-bundler/commit/4dec1b961f5256fd63a220680d938d8f37567bd2)) + +## [8.12.2](https://github.com/netlify/edge-bundler/compare/v8.12.1...v8.12.2) (2023-03-17) + + +### Bug Fixes + +* enforce leading slash in path and pattern ([#339](https://github.com/netlify/edge-bundler/issues/339)) ([5b1daf9](https://github.com/netlify/edge-bundler/commit/5b1daf94f6526c8eb465d406ae272c746cc2522a)) + +## [8.12.1](https://github.com/netlify/edge-bundler/compare/v8.12.0...v8.12.1) (2023-03-14) + + +### Bug Fixes + +* ignore config blocks for undefined functions ([#337](https://github.com/netlify/edge-bundler/issues/337)) ([599c677](https://github.com/netlify/edge-bundler/commit/599c677689b9598ca1b69665e8b8fada5822f4a1)) + +## [8.12.0](https://github.com/netlify/edge-bundler/compare/v8.11.1...v8.12.0) (2023-03-13) + + +### Features + +* export `mergeDeclarations` function ([#334](https://github.com/netlify/edge-bundler/issues/334)) ([a3b01c0](https://github.com/netlify/edge-bundler/commit/a3b01c08c5bcb734d7b66eedcdf45598abd87640)) + +## [8.11.1](https://github.com/netlify/edge-bundler/compare/v8.11.0...v8.11.1) (2023-03-10) + + +### Bug Fixes + +* Updated bootstrap to the latest version ([#332](https://github.com/netlify/edge-bundler/issues/332)) ([614102d](https://github.com/netlify/edge-bundler/commit/614102d3e4d30b2c9e1cb83fdb894e14c5f334c4)) + +## [8.11.0](https://github.com/netlify/edge-bundler/compare/v8.10.0...v8.11.0) (2023-03-08) + + +### Features + +* propagate onError config property to manifest ([#328](https://github.com/netlify/edge-bundler/issues/328)) ([bd804b2](https://github.com/netlify/edge-bundler/commit/bd804b214b0aa4cb44437a4b87e6a21b3bad602b)) + +## [8.10.0](https://github.com/netlify/edge-bundler/compare/v8.9.0...v8.10.0) (2023-03-08) + + +### Features + +* populate generator field if edge function is from a config file ([#312](https://github.com/netlify/edge-bundler/issues/312)) ([0ee2e1d](https://github.com/netlify/edge-bundler/commit/0ee2e1d79596d0f3b71c455c329cf81c9da84f92)) +* update bootstrap URL ([#329](https://github.com/netlify/edge-bundler/issues/329)) ([8b5dc3b](https://github.com/netlify/edge-bundler/commit/8b5dc3ba7a322bac53f820f4fbff82180af5337f)) + + +### Bug Fixes + +* throw errors when function or isc-config cannot be loaded ([#327](https://github.com/netlify/edge-bundler/issues/327)) ([cdac30d](https://github.com/netlify/edge-bundler/commit/cdac30d861b3bedd371c95e2914bee944777779d)) + +## [8.9.0](https://github.com/netlify/edge-bundler/compare/v8.8.1...v8.9.0) (2023-03-03) + + +### Features + +* update bootstrap version ([#321](https://github.com/netlify/edge-bundler/issues/321)) ([88928c7](https://github.com/netlify/edge-bundler/commit/88928c7214012a6fd4ecf7641fb52fad8fa20d44)) + +## [8.8.1](https://github.com/netlify/edge-bundler/compare/v8.8.0...v8.8.1) (2023-03-02) + + +### Bug Fixes + +* update std and eszip deps ([#316](https://github.com/netlify/edge-bundler/issues/316)) ([90a8a1d](https://github.com/netlify/edge-bundler/commit/90a8a1d2d34b31c48ad87dbf3f85da954f906289)) + +## [8.8.0](https://github.com/netlify/edge-bundler/compare/v8.7.0...v8.8.0) (2023-03-01) + + +### Features + +* update bootstrap ([#303](https://github.com/netlify/edge-bundler/issues/303)) ([05feca7](https://github.com/netlify/edge-bundler/commit/05feca7100f9e80c3437df3ff313b81f23308886)) + +## [8.7.0](https://github.com/netlify/edge-bundler/compare/v8.6.0...v8.7.0) (2023-02-17) + + +### Features + +* add generator field to edge function manifest ([#304](https://github.com/netlify/edge-bundler/issues/304)) ([5a59fcc](https://github.com/netlify/edge-bundler/commit/5a59fcca588ec77a9613047943601a2641b4fc88)) + +## [8.6.0](https://github.com/netlify/edge-bundler/compare/v8.5.0...v8.6.0) (2023-02-14) + + +### Features + +* wrap regex validation in feature flag ([#302](https://github.com/netlify/edge-bundler/issues/302)) ([862994b](https://github.com/netlify/edge-bundler/commit/862994b3e6047b5a80d3fdc4c2663566a965cf5c)) + + +### Bug Fixes + +* migrate to Github Action's output files ([#300](https://github.com/netlify/edge-bundler/issues/300)) ([bf54378](https://github.com/netlify/edge-bundler/commit/bf54378dd05fd9ef4f3eda4a796a0b6cafc7fb4b)) + +## [8.5.0](https://github.com/netlify/edge-bundler/compare/v8.4.0...v8.5.0) (2023-02-10) + + +### Features + +* validate pattern declarations ([#298](https://github.com/netlify/edge-bundler/issues/298)) ([d8c44a3](https://github.com/netlify/edge-bundler/commit/d8c44a363a6794950bf4d50cb691f0d6e6808a53)) + +## [8.4.0](https://github.com/netlify/edge-bundler/compare/v8.3.0...v8.4.0) (2023-01-18) + + +### Features + +* update bootstrap version ([#296](https://github.com/netlify/edge-bundler/issues/296)) ([3bab80b](https://github.com/netlify/edge-bundler/commit/3bab80bc8b932c2e906d25c19874b5a11fa8a271)) + +## [8.3.0](https://github.com/netlify/edge-bundler/compare/v8.2.1...v8.3.0) (2023-01-18) + + +### Features + +* remove `--unstable` flag from `serve` flags ([#294](https://github.com/netlify/edge-bundler/issues/294)) ([cb4c75d](https://github.com/netlify/edge-bundler/commit/cb4c75d27303fcec207ade5fb51c740940b574f5)) + +## [8.2.1](https://github.com/netlify/edge-bundler/compare/v8.2.0...v8.2.1) (2023-01-17) + + +### Bug Fixes + +* trigger another release, 8.2.0 didnt work ([#292](https://github.com/netlify/edge-bundler/issues/292)) ([1fcb47a](https://github.com/netlify/edge-bundler/commit/1fcb47ad95b2448f1a79b6f580e90fe4cb71b37d)) + +## [8.2.0](https://github.com/netlify/edge-bundler/compare/v8.1.2...v8.2.0) (2023-01-17) + + +### Features + +* rename x-deno- to x-nf- headers ([#290](https://github.com/netlify/edge-bundler/issues/290)) ([c6d8ae0](https://github.com/netlify/edge-bundler/commit/c6d8ae03e7773f16543935685ef32f9105071119)) + +## [8.1.2](https://github.com/netlify/edge-bundler/compare/v8.1.1...v8.1.2) (2023-01-11) + + +### Bug Fixes + +* replace "items" with "additionalProperties" ([#284](https://github.com/netlify/edge-bundler/issues/284)) ([0fc76b7](https://github.com/netlify/edge-bundler/commit/0fc76b78ef9faf0b5c99ecdec4b7ef6910949a38)) + +## [8.1.1](https://github.com/netlify/edge-bundler/compare/v8.1.0...v8.1.1) (2023-01-09) + + +### Bug Fixes + +* **deps:** update dependency ajv to v8.12.0 ([#282](https://github.com/netlify/edge-bundler/issues/282)) ([2b7c766](https://github.com/netlify/edge-bundler/commit/2b7c7667dc84df47002c055ad8a30b5a5c2acdf6)) + +## [8.1.0](https://github.com/netlify/edge-bundler/compare/v8.0.0...v8.1.0) (2023-01-06) + + +### Features + +* move excluded_patterns into function_config ([#274](https://github.com/netlify/edge-bundler/issues/274)) ([98ccb6f](https://github.com/netlify/edge-bundler/commit/98ccb6f2535f470cae7436b2f175d53eb8b9ef78)) + +## [8.0.0](https://github.com/netlify/edge-bundler/compare/v7.1.0...v8.0.0) (2022-12-21) + + +### ⚠ BREAKING CHANGES + +* make `config` export a plain object ([#273](https://github.com/netlify/edge-bundler/issues/273)) + +### Features + +* make `config` export a plain object ([#273](https://github.com/netlify/edge-bundler/issues/273)) ([a6a48cf](https://github.com/netlify/edge-bundler/commit/a6a48cf1b64ff00e022e797e57c3bde89258a3a6)) + + +### Bug Fixes + +* print nice npm error message for npm: specifier as well ([#271](https://github.com/netlify/edge-bundler/issues/271)) ([70071de](https://github.com/netlify/edge-bundler/commit/70071de9ff6f0d89e455d868fd43e05ff83a3bfc)) + +## [7.1.0](https://github.com/netlify/edge-bundler/compare/v7.0.1...v7.1.0) (2022-12-20) + + +### Features + +* add support for negative patterns ([#261](https://github.com/netlify/edge-bundler/issues/261)) ([646631a](https://github.com/netlify/edge-bundler/commit/646631af4593285ca8f081bd7581e5ecf0fe7de3)) + +## [7.0.1](https://github.com/netlify/edge-bundler/compare/v7.0.0...v7.0.1) (2022-12-19) + + +### Bug Fixes + +* read other import map paths when one doesn't exist ([#268](https://github.com/netlify/edge-bundler/issues/268)) ([8410c1c](https://github.com/netlify/edge-bundler/commit/8410c1caf9c57edf9ebb6874dd06750626d94a8d)) + +## [7.0.0](https://github.com/netlify/edge-bundler/compare/v6.1.0...v7.0.0) (2022-12-19) + + +### ⚠ BREAKING CHANGES + +* Both `bundle` and `serve` now expect an `importMapPaths` array containing a list of paths to any user-defined import map files + +### Features + +* add `importMapPaths` to `bundle` and `serve` ([#265](https://github.com/netlify/edge-bundler/issues/265)) ([dcbd7f7](https://github.com/netlify/edge-bundler/commit/dcbd7f7681f8971bd88e251669b7f09602ee0b9c)) +* log failures when loading import map files ([#267](https://github.com/netlify/edge-bundler/issues/267)) ([138690b](https://github.com/netlify/edge-bundler/commit/138690b5e490b5d577f07c529bcbfb1379be4811)) + +## [6.1.0](https://github.com/netlify/edge-bundler/compare/v6.0.0...v6.1.0) (2022-12-14) + + +### Features + +* add system logging for Deno config file ([#259](https://github.com/netlify/edge-bundler/issues/259)) ([27a628c](https://github.com/netlify/edge-bundler/commit/27a628c544514598f03247ceeb136d6e4667b0c2)) + +## [6.0.0](https://github.com/netlify/edge-bundler/compare/v5.5.0...v6.0.0) (2022-12-13) + + +### ⚠ BREAKING CHANGES + +* The `serve` export now requires a `basePath` parameter + +### Features + +* add support for user-defined import maps ([#256](https://github.com/netlify/edge-bundler/issues/256)) ([436e10e](https://github.com/netlify/edge-bundler/commit/436e10ecf3f8df3cd8da6d8b2d8d78110668c82d)) +* read Deno config behind feature flag ([#258](https://github.com/netlify/edge-bundler/issues/258)) ([5dc562a](https://github.com/netlify/edge-bundler/commit/5dc562a9a65081253c2702a890b0d01077e45fbe)) + +## [5.5.0](https://github.com/netlify/edge-bundler/compare/v5.4.0...v5.5.0) (2022-12-12) + + +### Features + +* Update BOOTSTRAP_LATEST ([#254](https://github.com/netlify/edge-bundler/issues/254)) ([0f9e79a](https://github.com/netlify/edge-bundler/commit/0f9e79aca610141292707f75872b669ac9095eba)) + + +### Bug Fixes + +* do not transform paths when writing import map to disk ([#253](https://github.com/netlify/edge-bundler/issues/253)) ([277dc30](https://github.com/netlify/edge-bundler/commit/277dc3016490ab38525c0a67d750256e7c465da3)) + +## [5.4.0](https://github.com/netlify/edge-bundler/compare/v5.3.3...v5.4.0) (2022-12-09) + + +### Features + +* use `netlify:import-map` specifier ([#246](https://github.com/netlify/edge-bundler/issues/246)) ([9f2a947](https://github.com/netlify/edge-bundler/commit/9f2a9473c77727671f3bc2fd9c8d31058848dece)) + +## [5.3.3](https://github.com/netlify/edge-bundler/compare/v5.3.2...v5.3.3) (2022-12-07) + + +### Bug Fixes + +* add guard for import map with extraneous dist directory ([#243](https://github.com/netlify/edge-bundler/issues/243)) ([f0ac6d0](https://github.com/netlify/edge-bundler/commit/f0ac6d050ce31566045cbf8339b6f2a556b484df)) +* generate valid file URL on Windows ([#245](https://github.com/netlify/edge-bundler/issues/245)) ([6a8a00b](https://github.com/netlify/edge-bundler/commit/6a8a00b0db5b82738774aec84336fc50326cc068)) + +## [5.3.2](https://github.com/netlify/edge-bundler/compare/v5.3.1...v5.3.2) (2022-12-06) + + +### Bug Fixes + +* correct import_map attribute name in validation ([#241](https://github.com/netlify/edge-bundler/issues/241)) ([dfcd90f](https://github.com/netlify/edge-bundler/commit/dfcd90fc74a53112800c2db8c73e1cef374010ed)) + +## [5.3.1](https://github.com/netlify/edge-bundler/compare/v5.3.0...v5.3.1) (2022-12-06) + + +### Bug Fixes + +* add `importMapURL` to manifest validation ([#239](https://github.com/netlify/edge-bundler/issues/239)) ([2ba1878](https://github.com/netlify/edge-bundler/commit/2ba1878765e219ba291bceb648bc50ee9bdb55c5)) + +## [5.3.0](https://github.com/netlify/edge-bundler/compare/v5.2.0...v5.3.0) (2022-12-06) + + +### Features + +* save import map URL to manifest ([#235](https://github.com/netlify/edge-bundler/issues/235)) ([94c6ec6](https://github.com/netlify/edge-bundler/commit/94c6ec61fb3663790d4b2561794f4bdf25f2264c)) +* support for multiple paths in in source configuration ([#230](https://github.com/netlify/edge-bundler/issues/230)) ([d4ec906](https://github.com/netlify/edge-bundler/commit/d4ec906edd311c4b5b137c6f2d3e4b564190d835)) + +## [5.2.0](https://github.com/netlify/edge-bundler/compare/v5.1.0...v5.2.0) (2022-12-06) + + +### Features + +* update bootstrap_url ([#236](https://github.com/netlify/edge-bundler/issues/236)) ([d1f44d6](https://github.com/netlify/edge-bundler/commit/d1f44d6fd970d51b79ae57f57f906c34c58e5b54)) + +## [5.1.0](https://github.com/netlify/edge-bundler/compare/v5.0.0...v5.1.0) (2022-12-05) + + +### Features + +* Update BOOTSTRAP_URL ([#233](https://github.com/netlify/edge-bundler/issues/233)) ([078009d](https://github.com/netlify/edge-bundler/commit/078009dca1828df177429d5f9a506c8e7106c86e)) + +## [5.0.0](https://github.com/netlify/edge-bundler/compare/v4.4.3...v5.0.0) (2022-11-28) + + +### ⚠ BREAKING CHANGES + +* remove support for JavaScript bundles ([#224](https://github.com/netlify/edge-bundler/issues/224)) +* move internal config file to Edge Bundler ([#219](https://github.com/netlify/edge-bundler/issues/219)) + +### Features + +* mark custom layers as `externals` ([#225](https://github.com/netlify/edge-bundler/issues/225)) ([a68607b](https://github.com/netlify/edge-bundler/commit/a68607bd5a5e83e4b62ec483e1ce3e7fd33f1ba1)) +* move internal config file to Edge Bundler ([#219](https://github.com/netlify/edge-bundler/issues/219)) ([08ce8a5](https://github.com/netlify/edge-bundler/commit/08ce8a591b105897f73a6e5c24d3d372e04ed574)) +* remove support for JavaScript bundles ([#224](https://github.com/netlify/edge-bundler/issues/224)) ([d8f45b1](https://github.com/netlify/edge-bundler/commit/d8f45b16ce4739b9f6938421098646d970ac5ad8)) + + +### Bug Fixes + +* **deps:** update dependency p-retry to v5.1.2 ([#228](https://github.com/netlify/edge-bundler/issues/228)) ([e8a54e1](https://github.com/netlify/edge-bundler/commit/e8a54e11ea0c4c3468a9cacc8bea032407b647f3)) + +## [4.4.3](https://github.com/netlify/edge-bundler/compare/v4.4.2...v4.4.3) (2022-11-23) + + +### Bug Fixes + +* deep merge in source and toml config ([#220](https://github.com/netlify/edge-bundler/issues/220)) ([e2789e3](https://github.com/netlify/edge-bundler/commit/e2789e3639fc92766efe8196aaa84366c54e84e9)) + +## [4.4.2](https://github.com/netlify/edge-bundler/compare/v4.4.1...v4.4.2) (2022-11-23) + + +### Bug Fixes + +* update bootstrap to 637cf7ce9214b300099b3aa8 ([#217](https://github.com/netlify/edge-bundler/issues/217)) ([dfc4b24](https://github.com/netlify/edge-bundler/commit/dfc4b240550dc726fe52eb3fa4dba15fe1953166)) + +## [4.4.1](https://github.com/netlify/edge-bundler/compare/v4.4.0...v4.4.1) (2022-11-21) + + +### Bug Fixes + +* update bootstrap to 637b7052e167bb00082f54f1 ([#215](https://github.com/netlify/edge-bundler/issues/215)) ([94ddc22](https://github.com/netlify/edge-bundler/commit/94ddc22ec4ae1f086be34a5babd413d0a8ba0ea6)) + +## [4.4.0](https://github.com/netlify/edge-bundler/compare/v4.3.2...v4.4.0) (2022-11-21) + + +### Features + +* add manifest validation ([#208](https://github.com/netlify/edge-bundler/issues/208)) ([17ee035](https://github.com/netlify/edge-bundler/commit/17ee035f949db06d1c4c229e454fe553eae71ae0)) + +## [4.3.2](https://github.com/netlify/edge-bundler/compare/v4.3.1...v4.3.2) (2022-11-18) + + +### Bug Fixes + +* tag edge function signature errors as user errors ([#209](https://github.com/netlify/edge-bundler/issues/209)) ([5d5a50f](https://github.com/netlify/edge-bundler/commit/5d5a50f08e2c926ad5ab7cc75dd3c879cd91f91c)) + +## [4.3.1](https://github.com/netlify/edge-bundler/compare/v4.3.0...v4.3.1) (2022-11-18) + + +### Bug Fixes + +* update bootstrap version ([#206](https://github.com/netlify/edge-bundler/issues/206)) ([47c9510](https://github.com/netlify/edge-bundler/commit/47c95109a48d34302092a4bb4c1cdfc161ddf637)) + +## [4.3.0](https://github.com/netlify/edge-bundler/compare/v4.2.0...v4.3.0) (2022-11-18) + + +### Features + +* validate edge function signature at build time ([#200](https://github.com/netlify/edge-bundler/issues/200)) ([2f81b01](https://github.com/netlify/edge-bundler/commit/2f81b019aa6df4f08bd3a450938880fc185ccc3d)) + +## [4.2.0](https://github.com/netlify/edge-bundler/compare/v4.1.0...v4.2.0) (2022-11-17) + + +### Features + +* add `layer:` prefix to ESZIP loader ([#201](https://github.com/netlify/edge-bundler/issues/201)) ([4d0e8dd](https://github.com/netlify/edge-bundler/commit/4d0e8dd31ae2c764cf12a318e8dc25ea7ccebc0b)) +* add detection + nice error message for npm import errors ([#195](https://github.com/netlify/edge-bundler/issues/195)) ([1389373](https://github.com/netlify/edge-bundler/commit/138937346db460bc90788049713a8f598bc196d2)) + + +### Bug Fixes + +* update bootstrap ([#202](https://github.com/netlify/edge-bundler/issues/202)) ([a314063](https://github.com/netlify/edge-bundler/commit/a314063469f966c8237cae808f1423e82e623d6a)) + +## [4.1.0](https://github.com/netlify/edge-bundler/compare/v4.0.2...v4.1.0) (2022-11-16) + + +### Features + +* add support for custom layers ([#198](https://github.com/netlify/edge-bundler/issues/198)) ([ec3848b](https://github.com/netlify/edge-bundler/commit/ec3848be0851f75ebddc78d952469fb752ecbeee)) + +## [4.0.2](https://github.com/netlify/edge-bundler/compare/v4.0.1...v4.0.2) (2022-11-15) + + +### Bug Fixes + +* update to newer version of bootstrap: 636e17c6f5c1ed0008150054 ([#196](https://github.com/netlify/edge-bundler/issues/196)) ([aa980a0](https://github.com/netlify/edge-bundler/commit/aa980a06130bfa9e9423b1a2f76baadba05fc628)) + +## [4.0.1](https://github.com/netlify/edge-bundler/compare/v4.0.0...v4.0.1) (2022-11-14) + + +### Bug Fixes + +* log when module loading fails after max tries ([#193](https://github.com/netlify/edge-bundler/issues/193)) ([b25b4db](https://github.com/netlify/edge-bundler/commit/b25b4dbc0e59aade01fd74b23daf633acce3e476)) + +## [4.0.0](https://github.com/netlify/edge-bundler/compare/v3.1.1...v4.0.0) (2022-11-10) + + +### ⚠ BREAKING CHANGES + +* replace `mode` property with `cache` (#190) + +### Features + +* replace `mode` property with `cache` ([#190](https://github.com/netlify/edge-bundler/issues/190)) ([5ca08c2](https://github.com/netlify/edge-bundler/commit/5ca08c278d27e77679b98562e6fb5cefc3901791)) + +## [3.1.1](https://github.com/netlify/edge-bundler/compare/v3.1.0...v3.1.1) (2022-11-04) + + +### Bug Fixes + +* remove disallow-code-generation-from-strings flag ([#177](https://github.com/netlify/edge-bundler/issues/177)) ([d344992](https://github.com/netlify/edge-bundler/commit/d34499214be4311e28b9b2292b9ba714cd01c06b)) + +## [3.1.0](https://github.com/netlify/edge-bundler/compare/v3.0.1...v3.1.0) (2022-10-28) + + +### Features + +* get config in server mode ([#175](https://github.com/netlify/edge-bundler/issues/175)) ([ea47d4e](https://github.com/netlify/edge-bundler/commit/ea47d4e569faf8bb5c9b3afedb4eab403b1ba598)) + +## [3.0.1](https://github.com/netlify/edge-bundler/compare/v3.0.0...v3.0.1) (2022-10-26) + + +### Bug Fixes + +* **deps:** update dependency del to v7 ([#172](https://github.com/netlify/edge-bundler/issues/172)) ([6e12a4a](https://github.com/netlify/edge-bundler/commit/6e12a4ac87077e09a95dd92f20057d80eb33429a)) +* run `config` export with `--allow-env` ([#174](https://github.com/netlify/edge-bundler/issues/174)) ([6020add](https://github.com/netlify/edge-bundler/commit/6020add051349ef086f1833ec2a7242c037bbb32)) + +## [3.0.0](https://github.com/netlify/edge-bundler/compare/v2.9.0...v3.0.0) (2022-10-24) + + +### ⚠ BREAKING CHANGES + +* drop support for Node.js 12 and remove auto-labeling (#167) + +### Bug Fixes + +* drop support for Node.js 12 and remove auto-labeling ([#167](https://github.com/netlify/edge-bundler/issues/167)) ([53a6029](https://github.com/netlify/edge-bundler/commit/53a60290ac11308c640ac2e180c98b19a346a3e0)) + +## [2.9.0](https://github.com/netlify/edge-bundler/compare/v2.8.0...v2.9.0) (2022-10-20) + + +### Features + +* add support for post-cache routes ([#165](https://github.com/netlify/edge-bundler/issues/165)) ([c7e530b](https://github.com/netlify/edge-bundler/commit/c7e530b910ba15e982fe5d8d1dd4324890687f24)) + + +### Bug Fixes + +* use import maps in config evaluation ([#166](https://github.com/netlify/edge-bundler/issues/166)) ([8e5ab76](https://github.com/netlify/edge-bundler/commit/8e5ab76ff01217068668e9c65d6cd9f6d2936029)) + +## [2.8.0](https://github.com/netlify/edge-bundler/compare/v2.7.0...v2.8.0) (2022-10-17) + + +### Features + +* support JSX and TSX in edge functions ([#161](https://github.com/netlify/edge-bundler/issues/161)) ([f1a9abb](https://github.com/netlify/edge-bundler/commit/f1a9abbb156ce45f784d2ce4bf7af3dc42daf21c)) + + +### Bug Fixes + +* **deps:** update dependency semver to v7.3.8 ([#155](https://github.com/netlify/edge-bundler/issues/155)) ([74b6afe](https://github.com/netlify/edge-bundler/commit/74b6afeb6604cb39c7d3a6e19b36c77fced335e4)) + +## [2.7.0](https://github.com/netlify/edge-bundler/compare/v2.6.0...v2.7.0) (2022-10-07) + + +### Features + +* vendor eszip Deno module ([#141](https://github.com/netlify/edge-bundler/issues/141)) ([cdec76c](https://github.com/netlify/edge-bundler/commit/cdec76c3faa65cfcbb8ea133fd7d3efc2fa8dd62)) + +## [2.6.0](https://github.com/netlify/edge-bundler/compare/v2.5.0...v2.6.0) (2022-10-03) + + +### Features + +* Update bootstrap url to latest version ([#149](https://github.com/netlify/edge-bundler/issues/149)) ([04cce91](https://github.com/netlify/edge-bundler/commit/04cce91414af11aa7480096c3de56605ece305ab)) + +## [2.5.0](https://github.com/netlify/edge-bundler/compare/v2.4.0...v2.5.0) (2022-10-03) + + +### Features + +* allow display name in manifest ([#140](https://github.com/netlify/edge-bundler/issues/140)) ([0fc04e9](https://github.com/netlify/edge-bundler/commit/0fc04e9dcd3fc2e41e15b1e178d2209d658e7dfc)) + +## [2.4.0](https://github.com/netlify/edge-bundler/compare/v2.3.1...v2.4.0) (2022-10-03) + + +### Features + +* update bootstrap latest to use latest version of bootstrap ([#146](https://github.com/netlify/edge-bundler/issues/146)) ([9aef2f7](https://github.com/netlify/edge-bundler/commit/9aef2f7a1791d83617dddc6c6ff37b44b3e2ef78)) + +## [2.3.1](https://github.com/netlify/edge-bundler/compare/v2.3.0...v2.3.1) (2022-10-03) + + +### Bug Fixes + +* use `allow-net` flag to run `config` function ([#144](https://github.com/netlify/edge-bundler/issues/144)) ([57d0edb](https://github.com/netlify/edge-bundler/commit/57d0edb52a63537b8dbdd0eaf50ef88689c6387f)) + +## [2.3.0](https://github.com/netlify/edge-bundler/compare/v2.2.0...v2.3.0) (2022-09-30) + + +### Features + +* add support for `config` export ([#133](https://github.com/netlify/edge-bundler/issues/133)) ([adb4f82](https://github.com/netlify/edge-bundler/commit/adb4f829d57e9a7d39741444b7f214f96d739f2b)) + +## [2.2.0](https://github.com/netlify/edge-bundler/compare/v2.1.0...v2.2.0) (2022-09-20) + + +### Features + +* add tests for `serve` functionality ([#116](https://github.com/netlify/edge-bundler/issues/116)) ([ed001bc](https://github.com/netlify/edge-bundler/commit/ed001bcc643f249976dcf8a1d8ff1bba14619f6c)) + + +### Bug Fixes + +* require version 1.22.0 of the Deno CLI ([#132](https://github.com/netlify/edge-bundler/issues/132)) ([8c15ca7](https://github.com/netlify/edge-bundler/commit/8c15ca72427e26d46b9c6c19de8429fda2dccc4c)) + +## [2.1.0](https://github.com/netlify/edge-bundler/compare/v2.0.5...v2.1.0) (2022-09-19) + + +### Features + +* add `functions` level to `metadata` object ([#129](https://github.com/netlify/edge-bundler/issues/129)) ([45cf3b2](https://github.com/netlify/edge-bundler/commit/45cf3b2ee2b70c2e1a97f589e99ed1fdb4644312)) +* export `metadata` object in local stage 2 ([#126](https://github.com/netlify/edge-bundler/issues/126)) ([ed7503a](https://github.com/netlify/edge-bundler/commit/ed7503a2a16540db9e8cc378c8e628f883d36077)) +* export `metadata` object in stage 2 ([#122](https://github.com/netlify/edge-bundler/issues/122)) ([99214c7](https://github.com/netlify/edge-bundler/commit/99214c7e49d2819c19c3b324083640bd240b22d7)) + + +### Bug Fixes + +* run `deno` with `--no-config` ([#128](https://github.com/netlify/edge-bundler/issues/128)) ([c5ee57c](https://github.com/netlify/edge-bundler/commit/c5ee57c55dfffd85c28930937418aceaf0104ad5)) + +## [2.0.5](https://github.com/netlify/edge-bundler/compare/v2.0.4...v2.0.5) (2022-09-14) + + +### Bug Fixes + +* convert file URL to path ([#123](https://github.com/netlify/edge-bundler/issues/123)) ([ff78c96](https://github.com/netlify/edge-bundler/commit/ff78c9637c3279d3a339abda82cc5a30ae3b452a)) + +## [2.0.4](https://github.com/netlify/edge-bundler/compare/v2.0.3...v2.0.4) (2022-09-14) + + +### Bug Fixes + +* use right location for Deno bundler ([#120](https://github.com/netlify/edge-bundler/issues/120)) ([a8a9f5d](https://github.com/netlify/edge-bundler/commit/a8a9f5d213d45ab8200e08ee6b2159a8b2c2351f)) + +## [2.0.3](https://github.com/netlify/edge-bundler/compare/v2.0.2...v2.0.3) (2022-09-14) + + +### Bug Fixes + +* fix `getPackageVersion` ([#118](https://github.com/netlify/edge-bundler/issues/118)) ([d57335a](https://github.com/netlify/edge-bundler/commit/d57335a1f91289bc4b18881b50f1fab705b68ae2)) + +## [2.0.2](https://github.com/netlify/edge-bundler/compare/v2.0.1...v2.0.2) (2022-09-14) + + +### Bug Fixes + +* create shared directory ([#117](https://github.com/netlify/edge-bundler/issues/117)) ([9a21c18](https://github.com/netlify/edge-bundler/commit/9a21c1826395fe42e8e443931773a4c7f0b17108)) +* **deps:** update dependency uuid to v9 ([#111](https://github.com/netlify/edge-bundler/issues/111)) ([0525b27](https://github.com/netlify/edge-bundler/commit/0525b27743f5203cd274890e02718a8eda0dd93f)) + +## [2.0.1](https://github.com/netlify/edge-bundler/compare/v2.0.0...v2.0.1) (2022-09-13) + + +### Bug Fixes + +* move `stage2.ts` to `src` ([#113](https://github.com/netlify/edge-bundler/issues/113)) ([0d14125](https://github.com/netlify/edge-bundler/commit/0d141253bdda65ba9bc31f5452b4c0a915f14416)) + +## [2.0.0](https://github.com/netlify/edge-bundler/compare/v1.14.1...v2.0.0) (2022-09-13) + + +### ⚠ BREAKING CHANGES + +* `importMaps` now expects a `baseURL` containing the URL of the import map file + +### Features + +* add support for import maps with ESZIP ([#109](https://github.com/netlify/edge-bundler/issues/109)) ([19031eb](https://github.com/netlify/edge-bundler/commit/19031eb4923fd37de0c004b67c542ea8b1aff374)) + +## [1.14.1](https://github.com/netlify/edge-bundler/compare/v1.14.0...v1.14.1) (2022-08-26) + + +### Bug Fixes + +* fix deno download retry logic ([#104](https://github.com/netlify/edge-bundler/issues/104)) ([270290c](https://github.com/netlify/edge-bundler/commit/270290c9bd4ec1734522f24f3c17db93d83ecc48)) + +## [1.14.0](https://github.com/netlify/edge-bundler/compare/v1.13.0...v1.14.0) (2022-08-22) + + +### Features + +* inline stage 2 ESZIP bundler ([#102](https://github.com/netlify/edge-bundler/issues/102)) ([5df5291](https://github.com/netlify/edge-bundler/commit/5df529197e7feea8b5fb80658f002ad267d74da3)) + +## [1.13.0](https://github.com/netlify/edge-bundler/compare/v1.12.1...v1.13.0) (2022-08-18) + + +### Features + +* update edge-bundler-bootstrap ([#96](https://github.com/netlify/edge-bundler/issues/96)) ([5bc3973](https://github.com/netlify/edge-bundler/commit/5bc39734d63eed506c07fab83f821c526b06b61c)) + + +### Bug Fixes + +* implement retries for Deno CLI download and additional logging ([#100](https://github.com/netlify/edge-bundler/issues/100)) ([489cbd3](https://github.com/netlify/edge-bundler/commit/489cbd3fbc1cadaa0aa1da288204b6534705ed3a)) + +## [1.12.1](https://github.com/netlify/edge-bundler/compare/v1.12.0...v1.12.1) (2022-08-10) + + +### Bug Fixes + +* ensure PATH is always set ([#93](https://github.com/netlify/edge-bundler/issues/93)) ([2f71c57](https://github.com/netlify/edge-bundler/commit/2f71c5752d7ef869d3bf106b78c26bebfd9e32b2)) + +## [1.12.0](https://github.com/netlify/edge-bundler/compare/v1.11.0...v1.12.0) (2022-08-09) + + +### Features + +* update bootstrap url ([#84](https://github.com/netlify/edge-bundler/issues/84)) ([af95e7d](https://github.com/netlify/edge-bundler/commit/af95e7d55979984eccb15a5e1497ae738ad71a1c)) + +## [1.11.0](https://github.com/netlify/edge-bundler/compare/v1.10.0...v1.11.0) (2022-08-09) + + +### Features + +* allow setting environment variables and disable extending in DenoServer ([#82](https://github.com/netlify/edge-bundler/issues/82)) ([3b9af3d](https://github.com/netlify/edge-bundler/commit/3b9af3dc0bf39a74adad1d96574aae8ba0adb2e8)) + +## [1.10.0](https://github.com/netlify/edge-bundler/compare/v1.9.0...v1.10.0) (2022-08-08) + + +### Features + +* use default logger in DenoBridge ([#89](https://github.com/netlify/edge-bundler/issues/89)) ([50b91e7](https://github.com/netlify/edge-bundler/commit/50b91e7298f0a9fddff4bb9d662e3fa1b1fd81f9)) + +## [1.9.0](https://github.com/netlify/edge-bundler/compare/v1.8.0...v1.9.0) (2022-08-04) + + +### Features + +* add support for system logger ([#85](https://github.com/netlify/edge-bundler/issues/85)) ([9188bd7](https://github.com/netlify/edge-bundler/commit/9188bd70887d0abb868cca03f18cdd538d8ba7a2)) + +## [1.8.0](https://github.com/netlify/edge-bundler/compare/v1.7.0...v1.8.0) (2022-07-29) + + +### Features + +* add support for `denoDir` parameter ([#80](https://github.com/netlify/edge-bundler/issues/80)) ([b5dd4a7](https://github.com/netlify/edge-bundler/commit/b5dd4a71ccddefff5cf7c7d69ee71128f5d9e6ee)) + +## [1.7.0](https://github.com/netlify/edge-bundler/compare/v1.6.0...v1.7.0) (2022-07-22) + + +### Features + +* accept `basePath` parameter ([#76](https://github.com/netlify/edge-bundler/issues/76)) ([a1c95cc](https://github.com/netlify/edge-bundler/commit/a1c95cc1e8013f9f37a11db40ed937e58897264f)) + +## [1.6.0](https://github.com/netlify/edge-bundler/compare/v1.5.0...v1.6.0) (2022-07-15) + + +### Features + +* add support for import maps when bundling ESZIP ([#72](https://github.com/netlify/edge-bundler/issues/72)) ([47c618c](https://github.com/netlify/edge-bundler/commit/47c618cba7514224c777cfe4408f120721612adc)) + +## [1.5.0](https://github.com/netlify/edge-bundler/compare/v1.4.3...v1.5.0) (2022-07-01) + + +### Features + +* refresh types on Deno CLI cache ([#66](https://github.com/netlify/edge-bundler/issues/66)) ([534ea80](https://github.com/netlify/edge-bundler/commit/534ea8022289d3ca4861931659bfa4f6d4a552ca)) + +## [1.4.3](https://github.com/netlify/edge-bundler/compare/v1.4.2...v1.4.3) (2022-06-30) + + +### Bug Fixes + +* improve user/system error boundaries ([#63](https://github.com/netlify/edge-bundler/issues/63)) ([a7ac87a](https://github.com/netlify/edge-bundler/commit/a7ac87a4f29964097dd0489b0d5c636530d71fda)) + +## [1.4.2](https://github.com/netlify/edge-bundler/compare/v1.4.1...v1.4.2) (2022-06-30) + + +### Bug Fixes + +* await lifecycle hooks as they might return promises ([#56](https://github.com/netlify/edge-bundler/issues/56)) ([01b53c6](https://github.com/netlify/edge-bundler/commit/01b53c600d26ae62bd996a3b707a3a0f6c668744)) + +## [1.4.1](https://github.com/netlify/edge-bundler/compare/v1.4.0...v1.4.1) (2022-06-22) + + +### Bug Fixes + +* add error state to onAfterDownload ([#42](https://github.com/netlify/edge-bundler/issues/42)) ([2cb24ac](https://github.com/netlify/edge-bundler/commit/2cb24ac72568f119ac4b1497bd732d76a99905a0)) + +## [1.4.0](https://github.com/netlify/edge-bundler/compare/v1.3.0...v1.4.0) (2022-06-21) + + +### Features + +* return generated manifest object ([#48](https://github.com/netlify/edge-bundler/issues/48)) ([a9eadcf](https://github.com/netlify/edge-bundler/commit/a9eadcf74b3baef606afb0ab43535fe4368d3b58)) + +## [1.3.0](https://github.com/netlify/edge-bundler/compare/v1.2.1...v1.3.0) (2022-06-21) + + +### Features + +* remove feature flag eszip ([#50](https://github.com/netlify/edge-bundler/issues/50)) ([da6377b](https://github.com/netlify/edge-bundler/commit/da6377bd6b2ed57215c64f185526e8b881522b1b)) + +## [1.2.1](https://github.com/netlify/edge-bundler/compare/v1.2.0...v1.2.1) (2022-06-13) + +- updated edge-functions-bootstrap version (https://github.com/netlify/edge-bundler/pull/43) + +### Bug Fixes + +* **deps:** update dependency del to v6.1.1 ([#38](https://github.com/netlify/edge-bundler/issues/38)) ([e16b8a3](https://github.com/netlify/edge-bundler/commit/e16b8a3320043a2693092b6917955ad0010dddb0)) + +### [1.2.0](https://github.com/netlify/edge-bundler/compare/v1.1.0...v1.2.0) (2022-05-25) + + +### Features + +* support for Edge Functions debugging ([#31](https://github.com/netlify/edge-bundler/issues/31)) ([d69c79e](https://github.com/netlify/edge-bundler/commit/d69c79edb75f0bd1cf177c8c2e7fde0d20f923c2)) + + +### Bug Fixes + +* **deps:** update dependency del to v6.1.0 ([#35](https://github.com/netlify/edge-bundler/issues/35)) ([0c4ff08](https://github.com/netlify/edge-bundler/commit/0c4ff08cf5ccbe629e579ac00458db9227ef26f5)) + + +### Miscellaneous Chores + +* release 1.1.1 ([#33](https://github.com/netlify/edge-bundler/issues/33)) ([6c25ee7](https://github.com/netlify/edge-bundler/commit/6c25ee742f4f8993f0dd10418f555ce6cf63afc5)) + +## [1.1.0](https://github.com/netlify/edge-bundler/compare/v1.0.0...v1.1.0) (2022-05-05) + + +### Features + +* add trailing slash to regular expressions ([#22](https://github.com/netlify/edge-bundler/issues/22)) ([ffc12a4](https://github.com/netlify/edge-bundler/commit/ffc12a4e9b909a1278bc04d5fd590eb8087cd04b)) + +## 1.0.0 (2022-05-03) + + +### Features + +* add `debug` parameter to `serve` ([#8](https://github.com/netlify/edge-bundler/issues/8)) ([95beffe](https://github.com/netlify/edge-bundler/commit/95beffef2a8b2c5c6bb31b40db74f0e69eb8e506)) +* add ability to restart isolate ([#20](https://github.com/netlify/edge-bundler/issues/20)) ([ec29efb](https://github.com/netlify/edge-bundler/commit/ec29efb47153ff4e4e8f5efc3d3b2afe8acc88db)) +* add bundler ([#10](https://github.com/netlify/edge-bundler/issues/10)) ([0e367b6](https://github.com/netlify/edge-bundler/commit/0e367b6aaa9ed2fd59d5f4ef0155297a3e7e9a8c)) +* add customErrorInfo property to user errors ([#25](https://github.com/netlify/edge-bundler/issues/25)) ([4a191df](https://github.com/netlify/edge-bundler/commit/4a191dfaf3ad1c38cbe7e4f123624ba88007ce9c)) +* add feature flags and debug mode ([#21](https://github.com/netlify/edge-bundler/issues/21)) ([392b5fe](https://github.com/netlify/edge-bundler/commit/392b5fe1d84207820b1ec2b1240f9ff32fc5c5b7)) +* add server ([36a89f5](https://github.com/netlify/edge-bundler/commit/36a89f55a3425701f537eb28e6985ea58daaa785)) +* add support for multi-stage ESZIPs ([#19](https://github.com/netlify/edge-bundler/issues/19)) ([2d78f5b](https://github.com/netlify/edge-bundler/commit/2d78f5b64aa00bf968ed8ecb68163507162868f8)) +* add support for user import maps ([#6](https://github.com/netlify/edge-bundler/issues/6)) ([9067956](https://github.com/netlify/edge-bundler/commit/9067956704b2c7a31368c8188b899a158878f3b8)) +* allow certificate to be supplied to `serve` ([#7](https://github.com/netlify/edge-bundler/issues/7)) ([51eabf7](https://github.com/netlify/edge-bundler/commit/51eabf76b02231e1261f7360492c334b4422fefd)) +* cache download Promise ([#23](https://github.com/netlify/edge-bundler/issues/23)) ([96fbb2a](https://github.com/netlify/edge-bundler/commit/96fbb2a8836117724feb7129728c3fc14a16bf66)) +* download Deno CLI from Deno repository ([#17](https://github.com/netlify/edge-bundler/issues/17)) ([68c9d30](https://github.com/netlify/edge-bundler/commit/68c9d30df10bb28db66879c48b68228619b54d23)) +* export function finder + `debug` property ([#16](https://github.com/netlify/edge-bundler/issues/16)) ([569399f](https://github.com/netlify/edge-bundler/commit/569399f5d2554789f1d4bf9aaf7ecc830df44cb6)) +* expprt `DenoBridge` ([#15](https://github.com/netlify/edge-bundler/issues/15)) ([66a4f4f](https://github.com/netlify/edge-bundler/commit/66a4f4ffd4fd18838be53662642125458b21e421)) +* gate ESZIP bundling with environment variable ([#3](https://github.com/netlify/edge-bundler/issues/3)) ([3556f60](https://github.com/netlify/edge-bundler/commit/3556f6092fe40c4f8fcf605304ca5dda13ffa765)) +* generate ESZIP and JS bundles ([#1](https://github.com/netlify/edge-bundler/issues/1)) ([8aff828](https://github.com/netlify/edge-bundler/commit/8aff828f411cbe0671b373124581111ed89031e7)) +* initial commit ([a031485](https://github.com/netlify/edge-bundler/commit/a031485a88957e95fbbadeade18e69b624c82cdb)) +* load bootstrap from deploy URL ([#7](https://github.com/netlify/edge-bundler/issues/7)) ([01f1285](https://github.com/netlify/edge-bundler/commit/01f128583653439d5757e07eb9b463fbd4006c7a)) +* pipe stdout ([b75374c](https://github.com/netlify/edge-bundler/commit/b75374ca28f2e7c72733a5df17d24231e3730f93)) +* rename Edge Handlers to Edge Functions ([#9](https://github.com/netlify/edge-bundler/issues/9)) ([a3906d4](https://github.com/netlify/edge-bundler/commit/a3906d4ee5451b47090a9b85b8d6850e227054f7)) +* rename package ([d60c568](https://github.com/netlify/edge-bundler/commit/d60c568713de4b0554582bf76014978d8a60a5ec)) +* update bootstrap layer ([#18](https://github.com/netlify/edge-bundler/issues/18)) ([d9ce983](https://github.com/netlify/edge-bundler/commit/d9ce98366e30f8d3c4356267139a0190d504a4ea)) +* update bootstrap layer to 6256b369f54728000a74a8d5 ([#22](https://github.com/netlify/edge-bundler/issues/22)) ([e243837](https://github.com/netlify/edge-bundler/commit/e243837a4a397dbb4ed6cf5e7bb4639c2b991fa3)) +* update bootstrap to 6270f39aacac8b000a2f84f4 ([#21](https://github.com/netlify/edge-bundler/issues/21)) ([ff702bf](https://github.com/netlify/edge-bundler/commit/ff702bff5d5cab278f970a1e04494349696b5dc6)) +* upgrade bootstrap to `625844cdcdd28b0008829757` ([#26](https://github.com/netlify/edge-bundler/issues/26)) ([9fdc1f8](https://github.com/netlify/edge-bundler/commit/9fdc1f89ef92f3ae855c8d1bcb7fb81abc61a203)) +* upgrade bootstrap to `625d32be1b90870009edfc99` ([#27](https://github.com/netlify/edge-bundler/issues/27)) ([648f99b](https://github.com/netlify/edge-bundler/commit/648f99b47f93f9b77dd862b8b7fa467dcf513136)) +* upgrade Deno to 1.20.3 ([#14](https://github.com/netlify/edge-bundler/issues/14)) ([54de383](https://github.com/netlify/edge-bundler/commit/54de38341cad18ac094a42e70632c6516968f3ca)) +* use `del` package ([#10](https://github.com/netlify/edge-bundler/issues/10)) ([ff68b19](https://github.com/netlify/edge-bundler/commit/ff68b19f589435de1d040a87689a7822ba3f6372)) +* use bootstrap layer ([fb6e1be](https://github.com/netlify/edge-bundler/commit/fb6e1be8fc5c740e4aba4846779ea0d324a3f139)) +* use import maps for internal Netlify identifier ([#5](https://github.com/netlify/edge-bundler/issues/5)) ([c5fa05e](https://github.com/netlify/edge-bundler/commit/c5fa05eb8797d7fcef7d33a111a0eb3b9e8ab6a7)) +* use new manifest format ([#11](https://github.com/netlify/edge-bundler/issues/11)) ([7bee912](https://github.com/netlify/edge-bundler/commit/7bee91209401a6a5d8c6628996c29329ba9b9674)) + + +### Bug Fixes + +* avoid clearing screen when starting server ([015b3fd](https://github.com/netlify/edge-bundler/commit/015b3fdad1a6408b57b35e3ce62ee20690d635e5)) +* **deps:** update dependency semver to v7.3.7 ([#9](https://github.com/netlify/edge-bundler/issues/9)) ([3ba4482](https://github.com/netlify/edge-bundler/commit/3ba44826c20878e6ca4a4db73996d80d749a03fb)) +* fix import ([81adcae](https://github.com/netlify/edge-bundler/commit/81adcae95b58462f13b7d1b1ba6198262c58ff07)) +* generate hash of final bundle file ([#4](https://github.com/netlify/edge-bundler/issues/4)) ([d27184a](https://github.com/netlify/edge-bundler/commit/d27184ab578736823010fc1740dcfb78a1196bf9)) +* publish `deno` directory ([#24](https://github.com/netlify/edge-bundler/issues/24)) ([86b9176](https://github.com/netlify/edge-bundler/commit/86b91769589425acd087da0b7b04ada524763402)) +* serialise RegExp ([5546370](https://github.com/netlify/edge-bundler/commit/5546370db2138109973ac5b3437083a2a38e5539)) +* use absolute file URLs in entry point file ([#12](https://github.com/netlify/edge-bundler/issues/12)) ([e4bcfb0](https://github.com/netlify/edge-bundler/commit/e4bcfb0dfaab65b4265fb63e9c360b8d0ecd9faf)) +* use declaration order when generating manifest ([#2](https://github.com/netlify/edge-bundler/issues/2)) ([f3b6405](https://github.com/netlify/edge-bundler/commit/f3b640584d1e0d8b1f27f42a3b53b322f179b023)) diff --git a/packages/edge-bundler/README.md b/packages/edge-bundler/README.md new file mode 100644 index 0000000000..d9762acba9 --- /dev/null +++ b/packages/edge-bundler/README.md @@ -0,0 +1,51 @@ +[![Build](https://github.com/netlify/edge-bundler/workflows/Build/badge.svg)](https://github.com/netlify/edge-bundler/actions) +[![Node](https://img.shields.io/node/v/@netlify/edge-bundler.svg?logo=node.js)](https://www.npmjs.com/package/@netlify/edge-bundler) + +# Edge Bundler + +Intelligently prepare Netlify Edge Functions for deployment. + +## Usage + +1. Install this module as a dependency in your project + + ``` + npm install @netlify/edge-bundler --save + ``` + +2. Import it and create a bundle from a directory of Edge Functions and a list of declarations. + + ```js + import { bundle } from '@netlify/edge-bundler' + + // List of directories to search for Edge Functions. + const sourceDirectories = ['/repo/netlify/edge-functions', '/repo/.netlify/edge-functions'] + + // Directory where bundle should be placed. + const distDirectory = '/repo/.netlify/edge-functions-dist' + + // List of Edge Functions declarations. + const declarations = [ + { function: 'user-1', path: '/blog/*' }, + { function: 'internal-2', path: '/' }, + ] + + await bundle(sourceDirectories, distDirectory, declarations) + ``` + +## Vendored modules + +To avoid pulling in additional dependencies at runtime, this package vendors some Deno modules in the `deno/vendor` +directory. + +You can recreate this directory by running `npm run vendor`. + +> [!WARNING] +> At the time of writing, the underlying Deno CLI command doesn't correctly pull the WASM binary required by the ESZIP +> module. If you run the command to update the list of vendores modules, please ensure you're not deleting +> `eszip_wasm_bg.wasm`. + +## Contributors + +Please see [CONTRIBUTING.md](./CONTRIBUTING.md) for instructions on how to set up and work on this repository. Thanks +for contributing! diff --git a/packages/edge-bundler/deno/bundle.ts b/packages/edge-bundler/deno/bundle.ts new file mode 100644 index 0000000000..64e3f49f7d --- /dev/null +++ b/packages/edge-bundler/deno/bundle.ts @@ -0,0 +1,14 @@ +import { writeStage2 } from './lib/stage2.ts' + +const [payload] = Deno.args +const { basePath, destPath, externals, functions, importMapData, vendorDirectory } = JSON.parse(payload) + +try { + await writeStage2({ basePath, destPath, externals, functions, importMapData, vendorDirectory }) +} catch (error) { + if (error instanceof Error && error.message.includes("The module's source code could not be parsed")) { + delete error.stack + } + + throw error +} diff --git a/packages/edge-bundler/deno/config.ts b/packages/edge-bundler/deno/config.ts new file mode 100644 index 0000000000..9377184e93 --- /dev/null +++ b/packages/edge-bundler/deno/config.ts @@ -0,0 +1,41 @@ +// this needs to be updated whenever there's a change to globalThis.Netlify in bootstrap +import { Netlify } from "https://64e8753eae24930008fac6d9--edge.netlify.app/bootstrap/index-combined.ts" + +const [functionURL, collectorURL, rawExitCodes] = Deno.args +const exitCodes = JSON.parse(rawExitCodes) + +globalThis.Netlify = Netlify + +let func + +try { + func = await import(functionURL) +} catch (error) { + console.error(error) + + Deno.exit(exitCodes.ImportError) +} + +if (typeof func.default !== 'function') { + Deno.exit(exitCodes.InvalidDefaultExport) +} + +if (func.config === undefined) { + Deno.exit(exitCodes.NoConfig) +} + +if (typeof func.config !== 'object') { + Deno.exit(exitCodes.InvalidExport) +} + +try { + const result = JSON.stringify(func.config) + + await Deno.writeTextFile(new URL(collectorURL), result) +} catch (error) { + console.error(error) + + Deno.exit(exitCodes.SerializationError) +} + +Deno.exit(exitCodes.Success) diff --git a/packages/edge-bundler/deno/lib/common.ts b/packages/edge-bundler/deno/lib/common.ts new file mode 100644 index 0000000000..a3f6ced471 --- /dev/null +++ b/packages/edge-bundler/deno/lib/common.ts @@ -0,0 +1,52 @@ +import { load } from "https://deno.land/x/eszip@v0.55.2/loader.ts"; +import { LoadResponse } from "https://deno.land/x/eszip@v0.55.2/mod.ts"; +import * as path from "https://deno.land/std@0.177.0/path/mod.ts"; +import { retryAsync } from "https://deno.land/x/retry@v2.0.0/mod.ts"; +import { isTooManyTries } from "https://deno.land/x/retry@v2.0.0/retry/tooManyTries.ts"; + +const inlineModule = (specifier: string, content: string): LoadResponse => { + return { + content, + headers: { + "content-type": "application/typescript", + }, + kind: "module", + specifier, + }; +}; + +const loadFromVirtualRoot = async ( + specifier: string, + virtualRoot: string, + basePath: string, +) => { + const basePathURL = path.toFileUrl(basePath).toString(); + const filePath = specifier.replace(virtualRoot.slice(0, -1), basePathURL); + const file = await load(filePath); + + if (file === undefined) { + throw new Error(`Could not find file: ${filePath}`); + } + + return { ...file, specifier }; +}; + +const loadWithRetry = (specifier: string, delay = 1000, maxTry = 3) => { + if (!specifier.startsWith("https://")) { + return load(specifier); + } + + try { + return retryAsync(() => load(specifier), { + delay, + maxTry, + }); + } catch (error) { + if (isTooManyTries(error)) { + console.error(`Loading ${specifier} failed after ${maxTry} tries.`); + } + throw error; + } +}; + +export { inlineModule, loadFromVirtualRoot, loadWithRetry }; diff --git a/packages/edge-bundler/deno/lib/consts.ts b/packages/edge-bundler/deno/lib/consts.ts new file mode 100644 index 0000000000..630d6921cd --- /dev/null +++ b/packages/edge-bundler/deno/lib/consts.ts @@ -0,0 +1,5 @@ +export const LEGACY_PUBLIC_SPECIFIER = 'netlify:edge' +export const PUBLIC_SPECIFIER = '@netlify/edge-functions' +export const STAGE1_SPECIFIER = 'netlify:bootstrap-stage1' +export const STAGE2_SPECIFIER = 'netlify:bootstrap-stage2' +export const virtualRoot = 'file:///root/' diff --git a/packages/edge-bundler/deno/lib/stage2.test.ts b/packages/edge-bundler/deno/lib/stage2.test.ts new file mode 100644 index 0000000000..a52eb47a54 --- /dev/null +++ b/packages/edge-bundler/deno/lib/stage2.test.ts @@ -0,0 +1,58 @@ +import { assertEquals, assertStringIncludes } from 'https://deno.land/std@0.177.0/testing/asserts.ts' + +import { join } from 'https://deno.land/std@0.177.0/path/mod.ts' +import { pathToFileURL } from 'https://deno.land/std@0.177.0/node/url.ts' + +import { getStage2Entry } from './stage2.ts' +import { virtualRoot } from './consts.ts' + +Deno.test('`getStage2Entry` returns a valid stage 2 file', async () => { + const directory = await Deno.makeTempDir() + const functions = [ + { + name: 'func1', + path: join(directory, 'func1.ts'), + response: 'Hello from function 1', + }, + { + name: 'func2', + path: join(directory, 'func2.ts'), + response: 'Hello from function 2', + }, + ] + + for (const func of functions) { + const contents = `export default async () => new Response(${JSON.stringify(func.response)})` + + await Deno.writeTextFile(func.path, contents) + } + + const baseURL = pathToFileURL(directory) + const stage2 = getStage2Entry( + directory, + functions.map(({ name, path }) => ({ name, path })), + ) + + // Ensuring that the stage 2 paths have the virtual root before we strip it. + assertStringIncludes(stage2, virtualRoot) + + // Replacing the virtual root with the URL of the temporary directory so that + // we can actually import the module. + const normalizedStage2 = stage2.replaceAll(virtualRoot, `${baseURL.href}/`) + + const stage2Path = join(directory, 'stage2.ts') + const stage2URL = pathToFileURL(stage2Path) + + await Deno.writeTextFile(stage2Path, normalizedStage2) + + const mod = await import(stage2URL.href) + + await Deno.remove(directory, { recursive: true }) + + for (const func of functions) { + const result = await mod.functions[func.name]() + + assertEquals(await result.text(), func.response) + assertEquals(mod.metadata.functions[func.name].url, pathToFileURL(func.path).toString()) + } +}) diff --git a/packages/edge-bundler/deno/lib/stage2.ts b/packages/edge-bundler/deno/lib/stage2.ts new file mode 100644 index 0000000000..5c2ca69887 --- /dev/null +++ b/packages/edge-bundler/deno/lib/stage2.ts @@ -0,0 +1,126 @@ +import { build, LoadResponse } from 'https://deno.land/x/eszip@v0.55.2/mod.ts' + +import * as path from 'https://deno.land/std@0.177.0/path/mod.ts' + +import type { InputFunction, WriteStage2Options } from '../../shared/stage2.ts' +import { importMapSpecifier, virtualRoot, virtualVendorRoot } from '../../shared/consts.ts' +import { LEGACY_PUBLIC_SPECIFIER, PUBLIC_SPECIFIER, STAGE2_SPECIFIER } from './consts.ts' +import { inlineModule, loadFromVirtualRoot, loadWithRetry } from './common.ts' + +interface FunctionReference { + exportLine: string + importLine: string + metadata: { + url: URL + } + name: string +} + +const getMetadata = (references: FunctionReference[]) => { + const functions = references.reduce( + (acc, { metadata, name }) => ({ + ...acc, + [name]: metadata, + }), + {}, + ) + + return { + functions, + } +} + +const getFunctionReference = (basePath: string, func: InputFunction, index: number): FunctionReference => { + const importName = `func${index}` + const exportLine = `"${func.name}": ${importName}` + const url = getVirtualPath(basePath, func.path) + + return { + exportLine, + importLine: `import ${importName} from "${url}";`, + metadata: { + url, + }, + name: func.name, + } +} + +export const getStage2Entry = (basePath: string, functions: InputFunction[]) => { + const lines = functions.map((func, index) => getFunctionReference(basePath, func, index)) + const importLines = lines.map(({ importLine }) => importLine).join('\n') + const exportLines = lines.map(({ exportLine }) => exportLine).join(', ') + const metadata = getMetadata(lines) + const functionsExport = `export const functions = {${exportLines}};` + const metadataExport = `export const metadata = ${JSON.stringify(metadata)};` + + return [importLines, functionsExport, metadataExport].join('\n\n') +} + +const getVirtualPath = (basePath: string, filePath: string) => { + const relativePath = path.relative(basePath, filePath) + const url = new URL(relativePath, virtualRoot) + + return url +} + +const stage2Loader = ( + basePath: string, + functions: InputFunction[], + externals: Set, + importMapData: string | undefined, + vendorDirectory?: string, +) => { + return async (specifier: string): Promise => { + if (specifier === STAGE2_SPECIFIER) { + const stage2Entry = getStage2Entry(basePath, functions) + + return inlineModule(specifier, stage2Entry) + } + + if (specifier === importMapSpecifier && importMapData !== undefined) { + return inlineModule(specifier, importMapData) + } + + if ( + specifier === LEGACY_PUBLIC_SPECIFIER || + specifier === PUBLIC_SPECIFIER || + externals.has(specifier) || + specifier.startsWith('node:') + ) { + return { + kind: 'external', + specifier, + } + } + + if (specifier.startsWith(virtualRoot)) { + return loadFromVirtualRoot(specifier, virtualRoot, basePath) + } + + if (vendorDirectory !== undefined && specifier.startsWith(virtualVendorRoot)) { + return loadFromVirtualRoot(specifier, virtualVendorRoot, vendorDirectory) + } + + return await loadWithRetry(specifier) + } +} + +const writeStage2 = async ({ + basePath, + destPath, + externals, + functions, + importMapData, + vendorDirectory, +}: WriteStage2Options) => { + const importMapURL = importMapData ? importMapSpecifier : undefined + const loader = stage2Loader(basePath, functions, new Set(externals), importMapData, vendorDirectory) + const bytes = await build([STAGE2_SPECIFIER], loader, importMapURL) + const directory = path.dirname(destPath) + + await Deno.mkdir(directory, { recursive: true }) + + return await Deno.writeFile(destPath, bytes) +} + +export { writeStage2 } diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/_util/asserts.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/_util/asserts.ts new file mode 100644 index 0000000000..3c5c346fe6 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/_util/asserts.ts @@ -0,0 +1,25 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * All internal non-test code, that is files that do not have `test` or `bench` in the name, must use the assertion functions within `_utils/asserts.ts` and not `testing/asserts.ts`. This is to create a separation of concerns between internal and testing assertions. + */ + +export class DenoStdInternalError extends Error { + constructor(message: string) { + super(message); + this.name = "DenoStdInternalError"; + } +} + +/** Make an assertion, if not `true`, then throw. */ +export function assert(expr: unknown, msg = ""): asserts expr { + if (!expr) { + throw new DenoStdInternalError(msg); + } +} + +/** Use this to assert unreachable code. */ +export function unreachable(): never { + throw new DenoStdInternalError("unreachable"); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/_util/os.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/_util/os.ts new file mode 100644 index 0000000000..a272eaed83 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/_util/os.ts @@ -0,0 +1,23 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +export type OSType = "windows" | "linux" | "darwin" | "freebsd"; + +export const osType: OSType = (() => { + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (typeof Deno?.build?.os === "string") { + return Deno.build.os; + } + + // deno-lint-ignore no-explicit-any + const { navigator } = globalThis as any; + if (navigator?.appVersion?.includes?.("Win")) { + return "windows"; + } + + return "linux"; +})(); + +export const isWindows = osType === "windows"; +export const isLinux = osType === "linux"; diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_constants.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_constants.ts new file mode 100644 index 0000000000..8da22a8da7 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_constants.ts @@ -0,0 +1,49 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +// Alphabet chars. +export const CHAR_UPPERCASE_A = 65; /* A */ +export const CHAR_LOWERCASE_A = 97; /* a */ +export const CHAR_UPPERCASE_Z = 90; /* Z */ +export const CHAR_LOWERCASE_Z = 122; /* z */ + +// Non-alphabetic chars. +export const CHAR_DOT = 46; /* . */ +export const CHAR_FORWARD_SLASH = 47; /* / */ +export const CHAR_BACKWARD_SLASH = 92; /* \ */ +export const CHAR_VERTICAL_LINE = 124; /* | */ +export const CHAR_COLON = 58; /* : */ +export const CHAR_QUESTION_MARK = 63; /* ? */ +export const CHAR_UNDERSCORE = 95; /* _ */ +export const CHAR_LINE_FEED = 10; /* \n */ +export const CHAR_CARRIAGE_RETURN = 13; /* \r */ +export const CHAR_TAB = 9; /* \t */ +export const CHAR_FORM_FEED = 12; /* \f */ +export const CHAR_EXCLAMATION_MARK = 33; /* ! */ +export const CHAR_HASH = 35; /* # */ +export const CHAR_SPACE = 32; /* */ +export const CHAR_NO_BREAK_SPACE = 160; /* \u00A0 */ +export const CHAR_ZERO_WIDTH_NOBREAK_SPACE = 65279; /* \uFEFF */ +export const CHAR_LEFT_SQUARE_BRACKET = 91; /* [ */ +export const CHAR_RIGHT_SQUARE_BRACKET = 93; /* ] */ +export const CHAR_LEFT_ANGLE_BRACKET = 60; /* < */ +export const CHAR_RIGHT_ANGLE_BRACKET = 62; /* > */ +export const CHAR_LEFT_CURLY_BRACKET = 123; /* { */ +export const CHAR_RIGHT_CURLY_BRACKET = 125; /* } */ +export const CHAR_HYPHEN_MINUS = 45; /* - */ +export const CHAR_PLUS = 43; /* + */ +export const CHAR_DOUBLE_QUOTE = 34; /* " */ +export const CHAR_SINGLE_QUOTE = 39; /* ' */ +export const CHAR_PERCENT = 37; /* % */ +export const CHAR_SEMICOLON = 59; /* ; */ +export const CHAR_CIRCUMFLEX_ACCENT = 94; /* ^ */ +export const CHAR_GRAVE_ACCENT = 96; /* ` */ +export const CHAR_AT = 64; /* @ */ +export const CHAR_AMPERSAND = 38; /* & */ +export const CHAR_EQUAL = 61; /* = */ + +// Digits +export const CHAR_0 = 48; /* 0 */ +export const CHAR_9 = 57; /* 9 */ diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_interface.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_interface.ts new file mode 100644 index 0000000000..153f3defd2 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_interface.ts @@ -0,0 +1,30 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +/** + * A parsed path object generated by path.parse() or consumed by path.format(). + */ +export interface ParsedPath { + /** + * The root of the path such as '/' or 'c:\' + */ + root: string; + /** + * The full directory path such as '/home/user/dir' or 'c:\path\dir' + */ + dir: string; + /** + * The file name including extension (if any) such as 'index.html' + */ + base: string; + /** + * The file extension (if any) such as '.html' + */ + ext: string; + /** + * The file name without extension (if any) such as 'index' + */ + name: string; +} + +export type FormatInputPathObject = Partial; diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_util.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_util.ts new file mode 100644 index 0000000000..b84ff912ce --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/_util.ts @@ -0,0 +1,194 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import type { FormatInputPathObject } from "./_interface.ts"; +import { + CHAR_BACKWARD_SLASH, + CHAR_DOT, + CHAR_FORWARD_SLASH, + CHAR_LOWERCASE_A, + CHAR_LOWERCASE_Z, + CHAR_UPPERCASE_A, + CHAR_UPPERCASE_Z, +} from "./_constants.ts"; + +export function assertPath(path: string) { + if (typeof path !== "string") { + throw new TypeError( + `Path must be a string. Received ${JSON.stringify(path)}`, + ); + } +} + +export function isPosixPathSeparator(code: number): boolean { + return code === CHAR_FORWARD_SLASH; +} + +export function isPathSeparator(code: number): boolean { + return isPosixPathSeparator(code) || code === CHAR_BACKWARD_SLASH; +} + +export function isWindowsDeviceRoot(code: number): boolean { + return ( + (code >= CHAR_LOWERCASE_A && code <= CHAR_LOWERCASE_Z) || + (code >= CHAR_UPPERCASE_A && code <= CHAR_UPPERCASE_Z) + ); +} + +// Resolves . and .. elements in a path with directory names +export function normalizeString( + path: string, + allowAboveRoot: boolean, + separator: string, + isPathSeparator: (code: number) => boolean, +): string { + let res = ""; + let lastSegmentLength = 0; + let lastSlash = -1; + let dots = 0; + let code: number | undefined; + for (let i = 0, len = path.length; i <= len; ++i) { + if (i < len) code = path.charCodeAt(i); + else if (isPathSeparator(code!)) break; + else code = CHAR_FORWARD_SLASH; + + if (isPathSeparator(code!)) { + if (lastSlash === i - 1 || dots === 1) { + // NOOP + } else if (lastSlash !== i - 1 && dots === 2) { + if ( + res.length < 2 || + lastSegmentLength !== 2 || + res.charCodeAt(res.length - 1) !== CHAR_DOT || + res.charCodeAt(res.length - 2) !== CHAR_DOT + ) { + if (res.length > 2) { + const lastSlashIndex = res.lastIndexOf(separator); + if (lastSlashIndex === -1) { + res = ""; + lastSegmentLength = 0; + } else { + res = res.slice(0, lastSlashIndex); + lastSegmentLength = res.length - 1 - res.lastIndexOf(separator); + } + lastSlash = i; + dots = 0; + continue; + } else if (res.length === 2 || res.length === 1) { + res = ""; + lastSegmentLength = 0; + lastSlash = i; + dots = 0; + continue; + } + } + if (allowAboveRoot) { + if (res.length > 0) res += `${separator}..`; + else res = ".."; + lastSegmentLength = 2; + } + } else { + if (res.length > 0) res += separator + path.slice(lastSlash + 1, i); + else res = path.slice(lastSlash + 1, i); + lastSegmentLength = i - lastSlash - 1; + } + lastSlash = i; + dots = 0; + } else if (code === CHAR_DOT && dots !== -1) { + ++dots; + } else { + dots = -1; + } + } + return res; +} + +export function _format( + sep: string, + pathObject: FormatInputPathObject, +): string { + const dir: string | undefined = pathObject.dir || pathObject.root; + const base: string = pathObject.base || + (pathObject.name || "") + (pathObject.ext || ""); + if (!dir) return base; + if (base === sep) return dir; + if (dir === pathObject.root) return dir + base; + return dir + sep + base; +} + +const WHITESPACE_ENCODINGS: Record = { + "\u0009": "%09", + "\u000A": "%0A", + "\u000B": "%0B", + "\u000C": "%0C", + "\u000D": "%0D", + "\u0020": "%20", +}; + +export function encodeWhitespace(string: string): string { + return string.replaceAll(/[\s]/g, (c) => { + return WHITESPACE_ENCODINGS[c] ?? c; + }); +} + +export function lastPathSegment( + path: string, + isSep: (char: number) => boolean, + start = 0, +): string { + let matchedNonSeparator = false; + let end = path.length; + + for (let i = path.length - 1; i >= start; --i) { + if (isSep(path.charCodeAt(i))) { + if (matchedNonSeparator) { + start = i + 1; + break; + } + } else if (!matchedNonSeparator) { + matchedNonSeparator = true; + end = i + 1; + } + } + + return path.slice(start, end); +} + +export function stripTrailingSeparators( + segment: string, + isSep: (char: number) => boolean, +): string { + if (segment.length <= 1) { + return segment; + } + + let end = segment.length; + + for (let i = segment.length - 1; i > 0; i--) { + if (isSep(segment.charCodeAt(i))) { + end = i; + } else { + break; + } + } + + return segment.slice(0, end); +} + +export function stripSuffix(name: string, suffix: string): string { + if (suffix.length >= name.length) { + return name; + } + + const lenDiff = name.length - suffix.length; + + for (let i = suffix.length - 1; i >= 0; --i) { + if (name.charCodeAt(lenDiff + i) !== suffix.charCodeAt(i)) { + return name; + } + } + + return name.slice(0, -suffix.length); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/common.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/common.ts new file mode 100644 index 0000000000..791105a644 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/common.ts @@ -0,0 +1,40 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { SEP } from "./separator.ts"; + +/** Determines the common path from a set of paths, using an optional separator, + * which defaults to the OS default separator. + * + * ```ts + * import { common } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; + * const p = common([ + * "./deno/std/path/mod.ts", + * "./deno/std/fs/mod.ts", + * ]); + * console.log(p); // "./deno/std/" + * ``` + */ +export function common(paths: string[], sep = SEP): string { + const [first = "", ...remaining] = paths; + if (first === "" || remaining.length === 0) { + return first.substring(0, first.lastIndexOf(sep) + 1); + } + const parts = first.split(sep); + + let endOfPrefix = parts.length; + for (const path of remaining) { + const compare = path.split(sep); + for (let i = 0; i < endOfPrefix; i++) { + if (compare[i] !== parts[i]) { + endOfPrefix = i; + } + } + + if (endOfPrefix === 0) { + return ""; + } + } + const prefix = parts.slice(0, endOfPrefix).join(sep); + return prefix.endsWith(sep) ? prefix : `${prefix}${sep}`; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/glob.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/glob.ts new file mode 100644 index 0000000000..265dc4a54f --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/glob.ts @@ -0,0 +1,418 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows, osType } from "../_util/os.ts"; +import { SEP, SEP_PATTERN } from "./separator.ts"; +import * as _win32 from "./win32.ts"; +import * as _posix from "./posix.ts"; +import type { OSType } from "../_util/os.ts"; + +const path = isWindows ? _win32 : _posix; +const { join, normalize } = path; + +export interface GlobOptions { + /** Extended glob syntax. + * See https://www.linuxjournal.com/content/bash-extended-globbing. + * + * @default {true} + */ + extended?: boolean; + /** Globstar syntax. + * See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. + * If false, `**` is treated like `*`. + * + * @default {true} + */ + globstar?: boolean; + /** Whether globstar should be case-insensitive. */ + caseInsensitive?: boolean; + /** Operating system. Defaults to the native OS. */ + os?: OSType; +} + +export type GlobToRegExpOptions = GlobOptions; + +const regExpEscapeChars = [ + "!", + "$", + "(", + ")", + "*", + "+", + ".", + "=", + "?", + "[", + "\\", + "^", + "{", + "|", +]; +const rangeEscapeChars = ["-", "\\", "]"]; + +/** Convert a glob string to a regular expression. + * + * Tries to match bash glob expansion as closely as possible. + * + * Basic glob syntax: + * - `*` - Matches everything without leaving the path segment. + * - `?` - Matches any single character. + * - `{foo,bar}` - Matches `foo` or `bar`. + * - `[abcd]` - Matches `a`, `b`, `c` or `d`. + * - `[a-d]` - Matches `a`, `b`, `c` or `d`. + * - `[!abcd]` - Matches any single character besides `a`, `b`, `c` or `d`. + * - `[[::]]` - Matches any character belonging to ``. + * - `[[:alnum:]]` - Matches any digit or letter. + * - `[[:digit:]abc]` - Matches any digit, `a`, `b` or `c`. + * - See https://facelessuser.github.io/wcmatch/glob/#posix-character-classes + * for a complete list of supported character classes. + * - `\` - Escapes the next character for an `os` other than `"windows"`. + * - \` - Escapes the next character for `os` set to `"windows"`. + * - `/` - Path separator. + * - `\` - Additional path separator only for `os` set to `"windows"`. + * + * Extended syntax: + * - Requires `{ extended: true }`. + * - `?(foo|bar)` - Matches 0 or 1 instance of `{foo,bar}`. + * - `@(foo|bar)` - Matches 1 instance of `{foo,bar}`. They behave the same. + * - `*(foo|bar)` - Matches _n_ instances of `{foo,bar}`. + * - `+(foo|bar)` - Matches _n > 0_ instances of `{foo,bar}`. + * - `!(foo|bar)` - Matches anything other than `{foo,bar}`. + * - See https://www.linuxjournal.com/content/bash-extended-globbing. + * + * Globstar syntax: + * - Requires `{ globstar: true }`. + * - `**` - Matches any number of any path segments. + * - Must comprise its entire path segment in the provided glob. + * - See https://www.linuxjournal.com/content/globstar-new-bash-globbing-option. + * + * Note the following properties: + * - The generated `RegExp` is anchored at both start and end. + * - Repeating and trailing separators are tolerated. Trailing separators in the + * provided glob have no meaning and are discarded. + * - Absolute globs will only match absolute paths, etc. + * - Empty globs will match nothing. + * - Any special glob syntax must be contained to one path segment. For example, + * `?(foo|bar/baz)` is invalid. The separator will take precedence and the + * first segment ends with an unclosed group. + * - If a path segment ends with unclosed groups or a dangling escape prefix, a + * parse error has occurred. Every character for that segment is taken + * literally in this event. + * + * Limitations: + * - A negative group like `!(foo|bar)` will wrongly be converted to a negative + * look-ahead followed by a wildcard. This means that `!(foo).js` will wrongly + * fail to match `foobar.js`, even though `foobar` is not `foo`. Effectively, + * `!(foo|bar)` is treated like `!(@(foo|bar)*)`. This will work correctly if + * the group occurs not nested at the end of the segment. */ +export function globToRegExp( + glob: string, + { + extended = true, + globstar: globstarOption = true, + os = osType, + caseInsensitive = false, + }: GlobToRegExpOptions = {}, +): RegExp { + if (glob == "") { + return /(?!)/; + } + + const sep = os == "windows" ? "(?:\\\\|/)+" : "/+"; + const sepMaybe = os == "windows" ? "(?:\\\\|/)*" : "/*"; + const seps = os == "windows" ? ["\\", "/"] : ["/"]; + const globstar = os == "windows" + ? "(?:[^\\\\/]*(?:\\\\|/|$)+)*" + : "(?:[^/]*(?:/|$)+)*"; + const wildcard = os == "windows" ? "[^\\\\/]*" : "[^/]*"; + const escapePrefix = os == "windows" ? "`" : "\\"; + + // Remove trailing separators. + let newLength = glob.length; + for (; newLength > 1 && seps.includes(glob[newLength - 1]); newLength--); + glob = glob.slice(0, newLength); + + let regExpString = ""; + + // Terminates correctly. Trust that `j` is incremented every iteration. + for (let j = 0; j < glob.length;) { + let segment = ""; + const groupStack: string[] = []; + let inRange = false; + let inEscape = false; + let endsWithSep = false; + let i = j; + + // Terminates with `i` at the non-inclusive end of the current segment. + for (; i < glob.length && !seps.includes(glob[i]); i++) { + if (inEscape) { + inEscape = false; + const escapeChars = inRange ? rangeEscapeChars : regExpEscapeChars; + segment += escapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; + continue; + } + + if (glob[i] == escapePrefix) { + inEscape = true; + continue; + } + + if (glob[i] == "[") { + if (!inRange) { + inRange = true; + segment += "["; + if (glob[i + 1] == "!") { + i++; + segment += "^"; + } else if (glob[i + 1] == "^") { + i++; + segment += "\\^"; + } + continue; + } else if (glob[i + 1] == ":") { + let k = i + 1; + let value = ""; + while (glob[k + 1] != null && glob[k + 1] != ":") { + value += glob[k + 1]; + k++; + } + if (glob[k + 1] == ":" && glob[k + 2] == "]") { + i = k + 2; + if (value == "alnum") segment += "\\dA-Za-z"; + else if (value == "alpha") segment += "A-Za-z"; + else if (value == "ascii") segment += "\x00-\x7F"; + else if (value == "blank") segment += "\t "; + else if (value == "cntrl") segment += "\x00-\x1F\x7F"; + else if (value == "digit") segment += "\\d"; + else if (value == "graph") segment += "\x21-\x7E"; + else if (value == "lower") segment += "a-z"; + else if (value == "print") segment += "\x20-\x7E"; + else if (value == "punct") { + segment += "!\"#$%&'()*+,\\-./:;<=>?@[\\\\\\]^_‘{|}~"; + } else if (value == "space") segment += "\\s\v"; + else if (value == "upper") segment += "A-Z"; + else if (value == "word") segment += "\\w"; + else if (value == "xdigit") segment += "\\dA-Fa-f"; + continue; + } + } + } + + if (glob[i] == "]" && inRange) { + inRange = false; + segment += "]"; + continue; + } + + if (inRange) { + if (glob[i] == "\\") { + segment += `\\\\`; + } else { + segment += glob[i]; + } + continue; + } + + if ( + glob[i] == ")" && groupStack.length > 0 && + groupStack[groupStack.length - 1] != "BRACE" + ) { + segment += ")"; + const type = groupStack.pop()!; + if (type == "!") { + segment += wildcard; + } else if (type != "@") { + segment += type; + } + continue; + } + + if ( + glob[i] == "|" && groupStack.length > 0 && + groupStack[groupStack.length - 1] != "BRACE" + ) { + segment += "|"; + continue; + } + + if (glob[i] == "+" && extended && glob[i + 1] == "(") { + i++; + groupStack.push("+"); + segment += "(?:"; + continue; + } + + if (glob[i] == "@" && extended && glob[i + 1] == "(") { + i++; + groupStack.push("@"); + segment += "(?:"; + continue; + } + + if (glob[i] == "?") { + if (extended && glob[i + 1] == "(") { + i++; + groupStack.push("?"); + segment += "(?:"; + } else { + segment += "."; + } + continue; + } + + if (glob[i] == "!" && extended && glob[i + 1] == "(") { + i++; + groupStack.push("!"); + segment += "(?!"; + continue; + } + + if (glob[i] == "{") { + groupStack.push("BRACE"); + segment += "(?:"; + continue; + } + + if (glob[i] == "}" && groupStack[groupStack.length - 1] == "BRACE") { + groupStack.pop(); + segment += ")"; + continue; + } + + if (glob[i] == "," && groupStack[groupStack.length - 1] == "BRACE") { + segment += "|"; + continue; + } + + if (glob[i] == "*") { + if (extended && glob[i + 1] == "(") { + i++; + groupStack.push("*"); + segment += "(?:"; + } else { + const prevChar = glob[i - 1]; + let numStars = 1; + while (glob[i + 1] == "*") { + i++; + numStars++; + } + const nextChar = glob[i + 1]; + if ( + globstarOption && numStars == 2 && + [...seps, undefined].includes(prevChar) && + [...seps, undefined].includes(nextChar) + ) { + segment += globstar; + endsWithSep = true; + } else { + segment += wildcard; + } + } + continue; + } + + segment += regExpEscapeChars.includes(glob[i]) ? `\\${glob[i]}` : glob[i]; + } + + // Check for unclosed groups or a dangling backslash. + if (groupStack.length > 0 || inRange || inEscape) { + // Parse failure. Take all characters from this segment literally. + segment = ""; + for (const c of glob.slice(j, i)) { + segment += regExpEscapeChars.includes(c) ? `\\${c}` : c; + endsWithSep = false; + } + } + + regExpString += segment; + if (!endsWithSep) { + regExpString += i < glob.length ? sep : sepMaybe; + endsWithSep = true; + } + + // Terminates with `i` at the start of the next segment. + while (seps.includes(glob[i])) i++; + + // Check that the next value of `j` is indeed higher than the current value. + if (!(i > j)) { + throw new Error("Assertion failure: i > j (potential infinite loop)"); + } + j = i; + } + + regExpString = `^${regExpString}$`; + return new RegExp(regExpString, caseInsensitive ? "i" : ""); +} + +/** Test whether the given string is a glob */ +export function isGlob(str: string): boolean { + const chars: Record = { "{": "}", "(": ")", "[": "]" }; + const regex = + /\\(.)|(^!|\*|\?|[\].+)]\?|\[[^\\\]]+\]|\{[^\\}]+\}|\(\?[:!=][^\\)]+\)|\([^|]+\|[^\\)]+\))/; + + if (str === "") { + return false; + } + + let match: RegExpExecArray | null; + + while ((match = regex.exec(str))) { + if (match[2]) return true; + let idx = match.index + match[0].length; + + // if an open bracket/brace/paren is escaped, + // set the index to the next closing character + const open = match[1]; + const close = open ? chars[open] : null; + if (open && close) { + const n = str.indexOf(close, idx); + if (n !== -1) { + idx = n + 1; + } + } + + str = str.slice(idx); + } + + return false; +} + +/** Like normalize(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function normalizeGlob( + glob: string, + { globstar = false }: GlobOptions = {}, +): string { + if (glob.match(/\0/g)) { + throw new Error(`Glob contains invalid characters: "${glob}"`); + } + if (!globstar) { + return normalize(glob); + } + const s = SEP_PATTERN.source; + const badParentPattern = new RegExp( + `(?<=(${s}|^)\\*\\*${s})\\.\\.(?=${s}|$)`, + "g", + ); + return normalize(glob.replace(badParentPattern, "\0")).replace(/\0/g, ".."); +} + +/** Like join(), but doesn't collapse "**\/.." when `globstar` is true. */ +export function joinGlobs( + globs: string[], + { extended = true, globstar = false }: GlobOptions = {}, +): string { + if (!globstar || globs.length == 0) { + return join(...globs); + } + if (globs.length === 0) return "."; + let joined: string | undefined; + for (const glob of globs) { + const path = glob; + if (path.length > 0) { + if (!joined) joined = path; + else joined += `${SEP}${path}`; + } + } + if (!joined) return "."; + return normalizeGlob(joined, { extended, globstar }); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/mod.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/mod.ts new file mode 100644 index 0000000000..72507541c8 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/mod.ts @@ -0,0 +1,53 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported mostly from https://github.com/browserify/path-browserify/ + +/** + * Utilities for working with OS-specific file paths. + * + * Codes in the examples uses POSIX path but it automatically use Windows path + * on Windows. Use methods under `posix` or `win32` object instead to handle non + * platform specific path like: + * ```ts + * import { posix, win32 } from "https://deno.land/std@$STD_VERSION/path/mod.ts"; + * const p1 = posix.fromFileUrl("file:///home/foo"); + * const p2 = win32.fromFileUrl("file:///home/foo"); + * console.log(p1); // "/home/foo" + * console.log(p2); // "\\home\\foo" + * ``` + * + * This module is browser compatible. + * + * @module + */ + +import { isWindows } from "../_util/os.ts"; +import * as _win32 from "./win32.ts"; +import * as _posix from "./posix.ts"; + +const path = isWindows ? _win32 : _posix; + +export const win32 = _win32; +export const posix = _posix; +export const { + basename, + delimiter, + dirname, + extname, + format, + fromFileUrl, + isAbsolute, + join, + normalize, + parse, + relative, + resolve, + sep, + toFileUrl, + toNamespacedPath, +} = path; + +export * from "./common.ts"; +export { SEP, SEP_PATTERN } from "./separator.ts"; +export * from "./_interface.ts"; +export * from "./glob.ts"; diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/posix.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/posix.ts new file mode 100644 index 0000000000..472ccaf2de --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/posix.ts @@ -0,0 +1,487 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; +import { CHAR_DOT } from "./_constants.ts"; + +import { + _format, + assertPath, + encodeWhitespace, + isPosixPathSeparator, + lastPathSegment, + normalizeString, + stripSuffix, + stripTrailingSeparators, +} from "./_util.ts"; + +export const sep = "/"; +export const delimiter = ":"; + +// path.resolve([from ...], to) +/** + * Resolves `pathSegments` into an absolute path. + * @param pathSegments an array of path segments + */ +export function resolve(...pathSegments: string[]): string { + let resolvedPath = ""; + let resolvedAbsolute = false; + + for (let i = pathSegments.length - 1; i >= -1 && !resolvedAbsolute; i--) { + let path: string; + + if (i >= 0) path = pathSegments[i]; + else { + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (typeof Deno?.cwd !== "function") { + throw new TypeError("Resolved a relative path without a CWD."); + } + path = Deno.cwd(); + } + + assertPath(path); + + // Skip empty entries + if (path.length === 0) { + continue; + } + + resolvedPath = `${path}/${resolvedPath}`; + resolvedAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + } + + // At this point the path should be resolved to a full absolute path, but + // handle relative paths to be safe (might happen when process.cwd() fails) + + // Normalize the path + resolvedPath = normalizeString( + resolvedPath, + !resolvedAbsolute, + "/", + isPosixPathSeparator, + ); + + if (resolvedAbsolute) { + if (resolvedPath.length > 0) return `/${resolvedPath}`; + else return "/"; + } else if (resolvedPath.length > 0) return resolvedPath; + else return "."; +} + +/** + * Normalize the `path`, resolving `'..'` and `'.'` segments. + * Note that resolving these segments does not necessarily mean that all will be eliminated. + * A `'..'` at the top-level will be preserved, and an empty path is canonically `'.'`. + * @param path to be normalized + */ +export function normalize(path: string): string { + assertPath(path); + + if (path.length === 0) return "."; + + const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + const trailingSeparator = isPosixPathSeparator( + path.charCodeAt(path.length - 1), + ); + + // Normalize the path + path = normalizeString(path, !isAbsolute, "/", isPosixPathSeparator); + + if (path.length === 0 && !isAbsolute) path = "."; + if (path.length > 0 && trailingSeparator) path += "/"; + + if (isAbsolute) return `/${path}`; + return path; +} + +/** + * Verifies whether provided path is absolute + * @param path to be verified as absolute + */ +export function isAbsolute(path: string): boolean { + assertPath(path); + return path.length > 0 && isPosixPathSeparator(path.charCodeAt(0)); +} + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * @param paths to be joined and normalized + */ +export function join(...paths: string[]): string { + if (paths.length === 0) return "."; + let joined: string | undefined; + for (let i = 0, len = paths.length; i < len; ++i) { + const path = paths[i]; + assertPath(path); + if (path.length > 0) { + if (!joined) joined = path; + else joined += `/${path}`; + } + } + if (!joined) return "."; + return normalize(joined); +} + +/** + * Return the relative path from `from` to `to` based on current working directory. + * @param from path in current working directory + * @param to path in current working directory + */ +export function relative(from: string, to: string): string { + assertPath(from); + assertPath(to); + + if (from === to) return ""; + + from = resolve(from); + to = resolve(to); + + if (from === to) return ""; + + // Trim any leading backslashes + let fromStart = 1; + const fromEnd = from.length; + for (; fromStart < fromEnd; ++fromStart) { + if (!isPosixPathSeparator(from.charCodeAt(fromStart))) break; + } + const fromLen = fromEnd - fromStart; + + // Trim any leading backslashes + let toStart = 1; + const toEnd = to.length; + for (; toStart < toEnd; ++toStart) { + if (!isPosixPathSeparator(to.charCodeAt(toStart))) break; + } + const toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (isPosixPathSeparator(to.charCodeAt(toStart + i))) { + // We get here if `from` is the exact base path for `to`. + // For example: from='/foo/bar'; to='/foo/bar/baz' + return to.slice(toStart + i + 1); + } else if (i === 0) { + // We get here if `from` is the root + // For example: from='/'; to='/foo' + return to.slice(toStart + i); + } + } else if (fromLen > length) { + if (isPosixPathSeparator(from.charCodeAt(fromStart + i))) { + // We get here if `to` is the exact base path for `from`. + // For example: from='/foo/bar/baz'; to='/foo/bar' + lastCommonSep = i; + } else if (i === 0) { + // We get here if `to` is the root. + // For example: from='/foo'; to='/' + lastCommonSep = 0; + } + } + break; + } + const fromCode = from.charCodeAt(fromStart + i); + const toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) break; + else if (isPosixPathSeparator(fromCode)) lastCommonSep = i; + } + + let out = ""; + // Generate the relative path based on the path difference between `to` + // and `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || isPosixPathSeparator(from.charCodeAt(i))) { + if (out.length === 0) out += ".."; + else out += "/.."; + } + } + + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) return out + to.slice(toStart + lastCommonSep); + else { + toStart += lastCommonSep; + if (isPosixPathSeparator(to.charCodeAt(toStart))) ++toStart; + return to.slice(toStart); + } +} + +/** + * Resolves path to a namespace path + * @param path to resolve to namespace + */ +export function toNamespacedPath(path: string): string { + // Non-op on posix systems + return path; +} + +/** + * Return the directory path of a `path`. + * @param path - path to extract the directory from. + */ +export function dirname(path: string): string { + if (path.length === 0) return "."; + + let end = -1; + let matchedNonSeparator = false; + + for (let i = path.length - 1; i >= 1; --i) { + if (isPosixPathSeparator(path.charCodeAt(i))) { + if (matchedNonSeparator) { + end = i; + break; + } + } else { + matchedNonSeparator = true; + } + } + + // No matches. Fallback based on provided path: + // + // - leading slashes paths + // "/foo" => "/" + // "///foo" => "/" + // - no slash path + // "foo" => "." + if (end === -1) { + return isPosixPathSeparator(path.charCodeAt(0)) ? "/" : "."; + } + + return stripTrailingSeparators( + path.slice(0, end), + isPosixPathSeparator, + ); +} + +/** + * Return the last portion of a `path`. + * Trailing directory separators are ignored, and optional suffix is removed. + * + * @param path - path to extract the name from. + * @param [suffix] - suffix to remove from extracted name. + */ +export function basename(path: string, suffix = ""): string { + assertPath(path); + + if (path.length === 0) return path; + + if (typeof suffix !== "string") { + throw new TypeError( + `Suffix must be a string. Received ${JSON.stringify(suffix)}`, + ); + } + + const lastSegment = lastPathSegment(path, isPosixPathSeparator); + const strippedSegment = stripTrailingSeparators( + lastSegment, + isPosixPathSeparator, + ); + return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; +} + +/** + * Return the extension of the `path` with leading period. + * @param path with extension + * @returns extension (ex. for `file.ts` returns `.ts`) + */ +export function extname(path: string): string { + assertPath(path); + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + for (let i = path.length - 1; i >= 0; --i) { + const code = path.charCodeAt(i); + if (isPosixPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return ""; + } + return path.slice(startDot, end); +} + +/** + * Generate a path from `FormatInputPathObject` object. + * @param pathObject with path + */ +export function format(pathObject: FormatInputPathObject): string { + if (pathObject === null || typeof pathObject !== "object") { + throw new TypeError( + `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, + ); + } + return _format("/", pathObject); +} + +/** + * Return a `ParsedPath` object of the `path`. + * @param path to process + */ +export function parse(path: string): ParsedPath { + assertPath(path); + + const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; + if (path.length === 0) return ret; + const isAbsolute = isPosixPathSeparator(path.charCodeAt(0)); + let start: number; + if (isAbsolute) { + ret.root = "/"; + start = 1; + } else { + start = 0; + } + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + let i = path.length - 1; + + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Get non-dir info + for (; i >= start; --i) { + const code = path.charCodeAt(i); + if (isPosixPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + if (end !== -1) { + if (startPart === 0 && isAbsolute) { + ret.base = ret.name = path.slice(1, end); + } else { + ret.base = ret.name = path.slice(startPart, end); + } + } + // Fallback to '/' in case there is no basename + ret.base = ret.base || "/"; + } else { + if (startPart === 0 && isAbsolute) { + ret.name = path.slice(1, startDot); + ret.base = path.slice(1, end); + } else { + ret.name = path.slice(startPart, startDot); + ret.base = path.slice(startPart, end); + } + ret.ext = path.slice(startDot, end); + } + + if (startPart > 0) { + ret.dir = stripTrailingSeparators( + path.slice(0, startPart - 1), + isPosixPathSeparator, + ); + } else if (isAbsolute) ret.dir = "/"; + + return ret; +} + +/** + * Converts a file URL to a path string. + * + * ```ts + * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts"; + * fromFileUrl("file:///home/foo"); // "/home/foo" + * ``` + * @param url of a file URL + */ +export function fromFileUrl(url: string | URL): string { + url = url instanceof URL ? url : new URL(url); + if (url.protocol != "file:") { + throw new TypeError("Must be a file URL."); + } + return decodeURIComponent( + url.pathname.replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), + ); +} + +/** + * Converts a path string to a file URL. + * + * ```ts + * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/posix.ts"; + * toFileUrl("/home/foo"); // new URL("file:///home/foo") + * ``` + * @param path to convert to file URL + */ +export function toFileUrl(path: string): URL { + if (!isAbsolute(path)) { + throw new TypeError("Must be an absolute path."); + } + const url = new URL("file:///"); + url.pathname = encodeWhitespace( + path.replace(/%/g, "%25").replace(/\\/g, "%5C"), + ); + return url; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/separator.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/separator.ts new file mode 100644 index 0000000000..99e4dff1b2 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/separator.ts @@ -0,0 +1,7 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// This module is browser compatible. + +import { isWindows } from "../_util/os.ts"; + +export const SEP = isWindows ? "\\" : "/"; +export const SEP_PATTERN = isWindows ? /[\\/]+/ : /\/+/; diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/win32.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/win32.ts new file mode 100644 index 0000000000..de4bd58954 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.177.0/path/win32.ts @@ -0,0 +1,962 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. +// Copyright the Browserify authors. MIT License. +// Ported from https://github.com/browserify/path-browserify/ +// This module is browser compatible. + +import type { FormatInputPathObject, ParsedPath } from "./_interface.ts"; +import { + CHAR_BACKWARD_SLASH, + CHAR_COLON, + CHAR_DOT, + CHAR_QUESTION_MARK, +} from "./_constants.ts"; + +import { + _format, + assertPath, + encodeWhitespace, + isPathSeparator, + isPosixPathSeparator, + isWindowsDeviceRoot, + lastPathSegment, + normalizeString, + stripSuffix, + stripTrailingSeparators, +} from "./_util.ts"; +import { assert } from "../_util/asserts.ts"; + +export const sep = "\\"; +export const delimiter = ";"; + +/** + * Resolves path segments into a `path` + * @param pathSegments to process to path + */ +export function resolve(...pathSegments: string[]): string { + let resolvedDevice = ""; + let resolvedTail = ""; + let resolvedAbsolute = false; + + for (let i = pathSegments.length - 1; i >= -1; i--) { + let path: string; + // deno-lint-ignore no-explicit-any + const { Deno } = globalThis as any; + if (i >= 0) { + path = pathSegments[i]; + } else if (!resolvedDevice) { + if (typeof Deno?.cwd !== "function") { + throw new TypeError("Resolved a drive-letter-less path without a CWD."); + } + path = Deno.cwd(); + } else { + if ( + typeof Deno?.env?.get !== "function" || typeof Deno?.cwd !== "function" + ) { + throw new TypeError("Resolved a relative path without a CWD."); + } + path = Deno.cwd(); + + // Verify that a cwd was found and that it actually points + // to our drive. If not, default to the drive's root. + if ( + path === undefined || + path.slice(0, 3).toLowerCase() !== `${resolvedDevice.toLowerCase()}\\` + ) { + path = `${resolvedDevice}\\`; + } + } + + assertPath(path); + + const len = path.length; + + // Skip empty entries + if (len === 0) continue; + + let rootEnd = 0; + let device = ""; + let isAbsolute = false; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + // If we started with a separator, we know we at least have an + // absolute path of some kind (UNC or otherwise) + isAbsolute = true; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + const firstPart = path.slice(last, j); + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + device = `\\\\${firstPart}\\${path.slice(last)}`; + rootEnd = j; + } else if (j !== last) { + // We matched a UNC root with leftovers + + device = `\\\\${firstPart}\\${path.slice(last, j)}`; + rootEnd = j; + } + } + } + } else { + rootEnd = 1; + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + device = path.slice(0, 2); + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + // Treat separator following drive name as an absolute path + // indicator + isAbsolute = true; + rootEnd = 3; + } + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator + rootEnd = 1; + isAbsolute = true; + } + + if ( + device.length > 0 && + resolvedDevice.length > 0 && + device.toLowerCase() !== resolvedDevice.toLowerCase() + ) { + // This path points to another device so it is not applicable + continue; + } + + if (resolvedDevice.length === 0 && device.length > 0) { + resolvedDevice = device; + } + if (!resolvedAbsolute) { + resolvedTail = `${path.slice(rootEnd)}\\${resolvedTail}`; + resolvedAbsolute = isAbsolute; + } + + if (resolvedAbsolute && resolvedDevice.length > 0) break; + } + + // At this point the path should be resolved to a full absolute path, + // but handle relative paths to be safe (might happen when process.cwd() + // fails) + + // Normalize the tail path + resolvedTail = normalizeString( + resolvedTail, + !resolvedAbsolute, + "\\", + isPathSeparator, + ); + + return resolvedDevice + (resolvedAbsolute ? "\\" : "") + resolvedTail || "."; +} + +/** + * Normalizes a `path` + * @param path to normalize + */ +export function normalize(path: string): string { + assertPath(path); + const len = path.length; + if (len === 0) return "."; + let rootEnd = 0; + let device: string | undefined; + let isAbsolute = false; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + // If we started with a separator, we know we at least have an absolute + // path of some kind (UNC or otherwise) + isAbsolute = true; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + const firstPart = path.slice(last, j); + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + // Return the normalized version of the UNC root since there + // is nothing left to process + + return `\\\\${firstPart}\\${path.slice(last)}\\`; + } else if (j !== last) { + // We matched a UNC root with leftovers + + device = `\\\\${firstPart}\\${path.slice(last, j)}`; + rootEnd = j; + } + } + } + } else { + rootEnd = 1; + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + device = path.slice(0, 2); + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + // Treat separator following drive name as an absolute path + // indicator + isAbsolute = true; + rootEnd = 3; + } + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid unnecessary + // work + return "\\"; + } + + let tail: string; + if (rootEnd < len) { + tail = normalizeString( + path.slice(rootEnd), + !isAbsolute, + "\\", + isPathSeparator, + ); + } else { + tail = ""; + } + if (tail.length === 0 && !isAbsolute) tail = "."; + if (tail.length > 0 && isPathSeparator(path.charCodeAt(len - 1))) { + tail += "\\"; + } + if (device === undefined) { + if (isAbsolute) { + if (tail.length > 0) return `\\${tail}`; + else return "\\"; + } else if (tail.length > 0) { + return tail; + } else { + return ""; + } + } else if (isAbsolute) { + if (tail.length > 0) return `${device}\\${tail}`; + else return `${device}\\`; + } else if (tail.length > 0) { + return device + tail; + } else { + return device; + } +} + +/** + * Verifies whether path is absolute + * @param path to verify + */ +export function isAbsolute(path: string): boolean { + assertPath(path); + const len = path.length; + if (len === 0) return false; + + const code = path.charCodeAt(0); + if (isPathSeparator(code)) { + return true; + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (len > 2 && path.charCodeAt(1) === CHAR_COLON) { + if (isPathSeparator(path.charCodeAt(2))) return true; + } + } + return false; +} + +/** + * Join all given a sequence of `paths`,then normalizes the resulting path. + * @param paths to be joined and normalized + */ +export function join(...paths: string[]): string { + const pathsCount = paths.length; + if (pathsCount === 0) return "."; + + let joined: string | undefined; + let firstPart: string | null = null; + for (let i = 0; i < pathsCount; ++i) { + const path = paths[i]; + assertPath(path); + if (path.length > 0) { + if (joined === undefined) joined = firstPart = path; + else joined += `\\${path}`; + } + } + + if (joined === undefined) return "."; + + // Make sure that the joined path doesn't start with two slashes, because + // normalize() will mistake it for an UNC path then. + // + // This step is skipped when it is very clear that the user actually + // intended to point at an UNC path. This is assumed when the first + // non-empty string arguments starts with exactly two slashes followed by + // at least one more non-slash character. + // + // Note that for normalize() to treat a path as an UNC path it needs to + // have at least 2 components, so we don't filter for that here. + // This means that the user can use join to construct UNC paths from + // a server name and a share name; for example: + // path.join('//server', 'share') -> '\\\\server\\share\\') + let needsReplace = true; + let slashCount = 0; + assert(firstPart != null); + if (isPathSeparator(firstPart.charCodeAt(0))) { + ++slashCount; + const firstLen = firstPart.length; + if (firstLen > 1) { + if (isPathSeparator(firstPart.charCodeAt(1))) { + ++slashCount; + if (firstLen > 2) { + if (isPathSeparator(firstPart.charCodeAt(2))) ++slashCount; + else { + // We matched a UNC path in the first part + needsReplace = false; + } + } + } + } + } + if (needsReplace) { + // Find any more consecutive slashes we need to replace + for (; slashCount < joined.length; ++slashCount) { + if (!isPathSeparator(joined.charCodeAt(slashCount))) break; + } + + // Replace the slashes if needed + if (slashCount >= 2) joined = `\\${joined.slice(slashCount)}`; + } + + return normalize(joined); +} + +/** + * It will solve the relative path from `from` to `to`, for instance: + * from = 'C:\\orandea\\test\\aaa' + * to = 'C:\\orandea\\impl\\bbb' + * The output of the function should be: '..\\..\\impl\\bbb' + * @param from relative path + * @param to relative path + */ +export function relative(from: string, to: string): string { + assertPath(from); + assertPath(to); + + if (from === to) return ""; + + const fromOrig = resolve(from); + const toOrig = resolve(to); + + if (fromOrig === toOrig) return ""; + + from = fromOrig.toLowerCase(); + to = toOrig.toLowerCase(); + + if (from === to) return ""; + + // Trim any leading backslashes + let fromStart = 0; + let fromEnd = from.length; + for (; fromStart < fromEnd; ++fromStart) { + if (from.charCodeAt(fromStart) !== CHAR_BACKWARD_SLASH) break; + } + // Trim trailing backslashes (applicable to UNC paths only) + for (; fromEnd - 1 > fromStart; --fromEnd) { + if (from.charCodeAt(fromEnd - 1) !== CHAR_BACKWARD_SLASH) break; + } + const fromLen = fromEnd - fromStart; + + // Trim any leading backslashes + let toStart = 0; + let toEnd = to.length; + for (; toStart < toEnd; ++toStart) { + if (to.charCodeAt(toStart) !== CHAR_BACKWARD_SLASH) break; + } + // Trim trailing backslashes (applicable to UNC paths only) + for (; toEnd - 1 > toStart; --toEnd) { + if (to.charCodeAt(toEnd - 1) !== CHAR_BACKWARD_SLASH) break; + } + const toLen = toEnd - toStart; + + // Compare paths to find the longest common path from root + const length = fromLen < toLen ? fromLen : toLen; + let lastCommonSep = -1; + let i = 0; + for (; i <= length; ++i) { + if (i === length) { + if (toLen > length) { + if (to.charCodeAt(toStart + i) === CHAR_BACKWARD_SLASH) { + // We get here if `from` is the exact base path for `to`. + // For example: from='C:\\foo\\bar'; to='C:\\foo\\bar\\baz' + return toOrig.slice(toStart + i + 1); + } else if (i === 2) { + // We get here if `from` is the device root. + // For example: from='C:\\'; to='C:\\foo' + return toOrig.slice(toStart + i); + } + } + if (fromLen > length) { + if (from.charCodeAt(fromStart + i) === CHAR_BACKWARD_SLASH) { + // We get here if `to` is the exact base path for `from`. + // For example: from='C:\\foo\\bar'; to='C:\\foo' + lastCommonSep = i; + } else if (i === 2) { + // We get here if `to` is the device root. + // For example: from='C:\\foo\\bar'; to='C:\\' + lastCommonSep = 3; + } + } + break; + } + const fromCode = from.charCodeAt(fromStart + i); + const toCode = to.charCodeAt(toStart + i); + if (fromCode !== toCode) break; + else if (fromCode === CHAR_BACKWARD_SLASH) lastCommonSep = i; + } + + // We found a mismatch before the first common path separator was seen, so + // return the original `to`. + if (i !== length && lastCommonSep === -1) { + return toOrig; + } + + let out = ""; + if (lastCommonSep === -1) lastCommonSep = 0; + // Generate the relative path based on the path difference between `to` and + // `from` + for (i = fromStart + lastCommonSep + 1; i <= fromEnd; ++i) { + if (i === fromEnd || from.charCodeAt(i) === CHAR_BACKWARD_SLASH) { + if (out.length === 0) out += ".."; + else out += "\\.."; + } + } + + // Lastly, append the rest of the destination (`to`) path that comes after + // the common path parts + if (out.length > 0) { + return out + toOrig.slice(toStart + lastCommonSep, toEnd); + } else { + toStart += lastCommonSep; + if (toOrig.charCodeAt(toStart) === CHAR_BACKWARD_SLASH) ++toStart; + return toOrig.slice(toStart, toEnd); + } +} + +/** + * Resolves path to a namespace path + * @param path to resolve to namespace + */ +export function toNamespacedPath(path: string): string { + // Note: this will *probably* throw somewhere. + if (typeof path !== "string") return path; + if (path.length === 0) return ""; + + const resolvedPath = resolve(path); + + if (resolvedPath.length >= 3) { + if (resolvedPath.charCodeAt(0) === CHAR_BACKWARD_SLASH) { + // Possible UNC root + + if (resolvedPath.charCodeAt(1) === CHAR_BACKWARD_SLASH) { + const code = resolvedPath.charCodeAt(2); + if (code !== CHAR_QUESTION_MARK && code !== CHAR_DOT) { + // Matched non-long UNC root, convert the path to a long UNC path + return `\\\\?\\UNC\\${resolvedPath.slice(2)}`; + } + } + } else if (isWindowsDeviceRoot(resolvedPath.charCodeAt(0))) { + // Possible device root + + if ( + resolvedPath.charCodeAt(1) === CHAR_COLON && + resolvedPath.charCodeAt(2) === CHAR_BACKWARD_SLASH + ) { + // Matched device root, convert the path to a long UNC path + return `\\\\?\\${resolvedPath}`; + } + } + } + + return path; +} + +/** + * Return the directory path of a `path`. + * @param path - path to extract the directory from. + */ +export function dirname(path: string): string { + assertPath(path); + const len = path.length; + if (len === 0) return "."; + let rootEnd = -1; + let end = -1; + let matchedSlash = true; + let offset = 0; + const code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + rootEnd = offset = 1; + + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + return path; + } + if (j !== last) { + // We matched a UNC root with leftovers + + // Offset by 1 to include the separator after the UNC root to + // treat it as a "normal root" on top of a (UNC) root + rootEnd = offset = j + 1; + } + } + } + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + rootEnd = offset = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) rootEnd = offset = 3; + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid + // unnecessary work + return path; + } + + for (let i = len - 1; i >= offset; --i) { + if (isPathSeparator(path.charCodeAt(i))) { + if (!matchedSlash) { + end = i; + break; + } + } else { + // We saw the first non-path separator + matchedSlash = false; + } + } + + if (end === -1) { + if (rootEnd === -1) return "."; + else end = rootEnd; + } + return stripTrailingSeparators(path.slice(0, end), isPosixPathSeparator); +} + +/** + * Return the last portion of a `path`. + * Trailing directory separators are ignored, and optional suffix is removed. + * + * @param path - path to extract name from. + * @param [suffix] - suffix to remove from extracted name. + */ +export function basename(path: string, suffix = ""): string { + assertPath(path); + + if (path.length === 0) return path; + + if (typeof suffix !== "string") { + throw new TypeError( + `Suffix must be a string. Received ${JSON.stringify(suffix)}`, + ); + } + + // Check for a drive letter prefix so as not to mistake the following + // path separator as an extra separator at the end of the path that can be + // disregarded + let start = 0; + if (path.length >= 2) { + const drive = path.charCodeAt(0); + if (isWindowsDeviceRoot(drive)) { + if (path.charCodeAt(1) === CHAR_COLON) start = 2; + } + } + + const lastSegment = lastPathSegment(path, isPathSeparator, start); + const strippedSegment = stripTrailingSeparators(lastSegment, isPathSeparator); + return suffix ? stripSuffix(strippedSegment, suffix) : strippedSegment; +} + +/** + * Return the extension of the `path` with leading period. + * @param path with extension + * @returns extension (ex. for `file.ts` returns `.ts`) + */ +export function extname(path: string): string { + assertPath(path); + let start = 0; + let startDot = -1; + let startPart = 0; + let end = -1; + let matchedSlash = true; + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Check for a drive letter prefix so as not to mistake the following + // path separator as an extra separator at the end of the path that can be + // disregarded + + if ( + path.length >= 2 && + path.charCodeAt(1) === CHAR_COLON && + isWindowsDeviceRoot(path.charCodeAt(0)) + ) { + start = startPart = 2; + } + + for (let i = path.length - 1; i >= start; --i) { + const code = path.charCodeAt(i); + if (isPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + return ""; + } + return path.slice(startDot, end); +} + +/** + * Generate a path from `FormatInputPathObject` object. + * @param pathObject with path + */ +export function format(pathObject: FormatInputPathObject): string { + if (pathObject === null || typeof pathObject !== "object") { + throw new TypeError( + `The "pathObject" argument must be of type Object. Received type ${typeof pathObject}`, + ); + } + return _format("\\", pathObject); +} + +/** + * Return a `ParsedPath` object of the `path`. + * @param path to process + */ +export function parse(path: string): ParsedPath { + assertPath(path); + + const ret: ParsedPath = { root: "", dir: "", base: "", ext: "", name: "" }; + + const len = path.length; + if (len === 0) return ret; + + let rootEnd = 0; + let code = path.charCodeAt(0); + + // Try to match a root + if (len > 1) { + if (isPathSeparator(code)) { + // Possible UNC root + + rootEnd = 1; + if (isPathSeparator(path.charCodeAt(1))) { + // Matched double path separator at beginning + let j = 2; + let last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more path separators + for (; j < len; ++j) { + if (!isPathSeparator(path.charCodeAt(j))) break; + } + if (j < len && j !== last) { + // Matched! + last = j; + // Match 1 or more non-path separators + for (; j < len; ++j) { + if (isPathSeparator(path.charCodeAt(j))) break; + } + if (j === len) { + // We matched a UNC root only + + rootEnd = j; + } else if (j !== last) { + // We matched a UNC root with leftovers + + rootEnd = j + 1; + } + } + } + } + } else if (isWindowsDeviceRoot(code)) { + // Possible device root + + if (path.charCodeAt(1) === CHAR_COLON) { + rootEnd = 2; + if (len > 2) { + if (isPathSeparator(path.charCodeAt(2))) { + if (len === 3) { + // `path` contains just a drive root, exit early to avoid + // unnecessary work + ret.root = ret.dir = path; + ret.base = "\\"; + return ret; + } + rootEnd = 3; + } + } else { + // `path` contains just a relative drive root, exit early to avoid + // unnecessary work + ret.root = ret.dir = path; + return ret; + } + } + } + } else if (isPathSeparator(code)) { + // `path` contains just a path separator, exit early to avoid + // unnecessary work + ret.root = ret.dir = path; + ret.base = "\\"; + return ret; + } + + if (rootEnd > 0) ret.root = path.slice(0, rootEnd); + + let startDot = -1; + let startPart = rootEnd; + let end = -1; + let matchedSlash = true; + let i = path.length - 1; + + // Track the state of characters (if any) we see before our first dot and + // after any path separator we find + let preDotState = 0; + + // Get non-dir info + for (; i >= rootEnd; --i) { + code = path.charCodeAt(i); + if (isPathSeparator(code)) { + // If we reached a path separator that was not part of a set of path + // separators at the end of the string, stop now + if (!matchedSlash) { + startPart = i + 1; + break; + } + continue; + } + if (end === -1) { + // We saw the first non-path separator, mark this as the end of our + // extension + matchedSlash = false; + end = i + 1; + } + if (code === CHAR_DOT) { + // If this is our first dot, mark it as the start of our extension + if (startDot === -1) startDot = i; + else if (preDotState !== 1) preDotState = 1; + } else if (startDot !== -1) { + // We saw a non-dot and non-path separator before our dot, so we should + // have a good chance at having a non-empty extension + preDotState = -1; + } + } + + if ( + startDot === -1 || + end === -1 || + // We saw a non-dot character immediately before the dot + preDotState === 0 || + // The (right-most) trimmed path component is exactly '..' + (preDotState === 1 && startDot === end - 1 && startDot === startPart + 1) + ) { + if (end !== -1) { + ret.base = ret.name = path.slice(startPart, end); + } + } else { + ret.name = path.slice(startPart, startDot); + ret.base = path.slice(startPart, end); + ret.ext = path.slice(startDot, end); + } + + // Fallback to '\' in case there is no basename + ret.base = ret.base || "\\"; + + // If the directory is the root, use the entire root as the `dir` including + // the trailing slash if any (`C:\abc` -> `C:\`). Otherwise, strip out the + // trailing slash (`C:\abc\def` -> `C:\abc`). + if (startPart > 0 && startPart !== rootEnd) { + ret.dir = path.slice(0, startPart - 1); + } else ret.dir = ret.root; + + return ret; +} + +/** + * Converts a file URL to a path string. + * + * ```ts + * import { fromFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts"; + * fromFileUrl("file:///home/foo"); // "\\home\\foo" + * fromFileUrl("file:///C:/Users/foo"); // "C:\\Users\\foo" + * fromFileUrl("file://localhost/home/foo"); // "\\\\localhost\\home\\foo" + * ``` + * @param url of a file URL + */ +export function fromFileUrl(url: string | URL): string { + url = url instanceof URL ? url : new URL(url); + if (url.protocol != "file:") { + throw new TypeError("Must be a file URL."); + } + let path = decodeURIComponent( + url.pathname.replace(/\//g, "\\").replace(/%(?![0-9A-Fa-f]{2})/g, "%25"), + ).replace(/^\\*([A-Za-z]:)(\\|$)/, "$1\\"); + if (url.hostname != "") { + // Note: The `URL` implementation guarantees that the drive letter and + // hostname are mutually exclusive. Otherwise it would not have been valid + // to append the hostname and path like this. + path = `\\\\${url.hostname}${path}`; + } + return path; +} + +/** + * Converts a path string to a file URL. + * + * ```ts + * import { toFileUrl } from "https://deno.land/std@$STD_VERSION/path/win32.ts"; + * toFileUrl("\\home\\foo"); // new URL("file:///home/foo") + * toFileUrl("C:\\Users\\foo"); // new URL("file:///C:/Users/foo") + * toFileUrl("\\\\127.0.0.1\\home\\foo"); // new URL("file://127.0.0.1/home/foo") + * ``` + * @param path to convert to file URL + */ +export function toFileUrl(path: string): URL { + if (!isAbsolute(path)) { + throw new TypeError("Must be an absolute path."); + } + const [, hostname, pathname] = path.match( + /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, + )!; + const url = new URL("file:///"); + url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); + if (hostname != null && hostname != "localhost") { + url.hostname = hostname; + if (!url.hostname) { + throw new TypeError("Invalid hostname."); + } + } + return url; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/deferred.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/deferred.ts new file mode 100644 index 0000000000..9455d68aab --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/deferred.ts @@ -0,0 +1,26 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +// TODO(ry) It'd be better to make Deferred a class that inherits from +// Promise, rather than an interface. This is possible in ES2016, however +// typescript produces broken code when targeting ES5 code. +// See https://github.com/Microsoft/TypeScript/issues/15202 +// At the time of writing, the github issue is closed but the problem remains. +export interface Deferred extends Promise { + resolve(value?: T | PromiseLike): void; + // deno-lint-ignore no-explicit-any + reject(reason?: any): void; +} + +/** Creates a Promise with the `reject` and `resolve` functions + * placed as methods on the promise object itself. It allows you to do: + * + * const p = deferred(); + * // ... + * p.resolve(42); + */ +export function deferred(): Deferred { + let methods; + const promise = new Promise((resolve, reject): void => { + methods = { resolve, reject }; + }); + return Object.assign(promise, methods) as Deferred; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/delay.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/delay.ts new file mode 100644 index 0000000000..0a9e1f529d --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/delay.ts @@ -0,0 +1,9 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +/* Resolves after the given number of milliseconds. */ +export function delay(ms: number): Promise { + return new Promise((res): number => + setTimeout((): void => { + res(); + }, ms) + ); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/mod.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/mod.ts new file mode 100644 index 0000000000..69fb2e5ec0 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/mod.ts @@ -0,0 +1,6 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +export * from "./deferred.ts"; +export * from "./delay.ts"; +export * from "./mux_async_iterator.ts"; +export * from "./pool.ts"; +export * from "./tee.ts"; diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/mux_async_iterator.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/mux_async_iterator.ts new file mode 100644 index 0000000000..6372415fdf --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/mux_async_iterator.ts @@ -0,0 +1,69 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. +import { Deferred, deferred } from "./deferred.ts"; + +interface TaggedYieldedValue { + iterator: AsyncIterator; + value: T; +} + +/** The MuxAsyncIterator class multiplexes multiple async iterators into a + * single stream. It currently makes an assumption: + * - The final result (the value returned and not yielded from the iterator) + * does not matter; if there is any, it is discarded. + */ +export class MuxAsyncIterator implements AsyncIterable { + private iteratorCount = 0; + private yields: Array> = []; + // deno-lint-ignore no-explicit-any + private throws: any[] = []; + private signal: Deferred = deferred(); + + add(iterable: AsyncIterable): void { + ++this.iteratorCount; + this.callIteratorNext(iterable[Symbol.asyncIterator]()); + } + + private async callIteratorNext( + iterator: AsyncIterator, + ) { + try { + const { value, done } = await iterator.next(); + if (done) { + --this.iteratorCount; + } else { + this.yields.push({ iterator, value }); + } + } catch (e) { + this.throws.push(e); + } + this.signal.resolve(); + } + + async *iterate(): AsyncIterableIterator { + while (this.iteratorCount > 0) { + // Sleep until any of the wrapped iterators yields. + await this.signal; + + // Note that while we're looping over `yields`, new items may be added. + for (let i = 0; i < this.yields.length; i++) { + const { iterator, value } = this.yields[i]; + yield value; + this.callIteratorNext(iterator); + } + + if (this.throws.length) { + for (const e of this.throws) { + throw e; + } + this.throws.length = 0; + } + // Clear the `yields` list and reset the `signal` promise. + this.yields.length = 0; + this.signal = deferred(); + } + } + + [Symbol.asyncIterator](): AsyncIterator { + return this.iterate(); + } +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/pool.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/pool.ts new file mode 100644 index 0000000000..521da6ca74 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/pool.ts @@ -0,0 +1,68 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + +/** + * pooledMap transforms values from an (async) iterable into another async + * iterable. The transforms are done concurrently, with a max concurrency + * defined by the poolLimit. + * + * If an error is thrown from `iterableFn`, no new transformations will begin. + * All currently executing transformations are allowed to finish and still + * yielded on success. After that, the rejections among them are gathered and + * thrown by the iterator in an `AggregateError`. + * + * @param poolLimit The maximum count of items being processed concurrently. + * @param array The input array for mapping. + * @param iteratorFn The function to call for every item of the array. + */ +export function pooledMap( + poolLimit: number, + array: Iterable | AsyncIterable, + iteratorFn: (data: T) => Promise, +): AsyncIterableIterator { + // Create the async iterable that is returned from this function. + const res = new TransformStream, R>({ + async transform( + p: Promise, + controller: TransformStreamDefaultController, + ) { + controller.enqueue(await p); + }, + }); + // Start processing items from the iterator + (async () => { + const writer = res.writable.getWriter(); + const executing: Array> = []; + try { + for await (const item of array) { + const p = Promise.resolve().then(() => iteratorFn(item)); + // Only write on success. If we `writer.write()` a rejected promise, + // that will end the iteration. We don't want that yet. Instead let it + // fail the race, taking us to the catch block where all currently + // executing jobs are allowed to finish and all rejections among them + // can be reported together. + p.then((v) => writer.write(Promise.resolve(v))).catch(() => {}); + const e: Promise = p.then(() => + executing.splice(executing.indexOf(e), 1) + ); + executing.push(e); + if (executing.length >= poolLimit) { + await Promise.race(executing); + } + } + // Wait until all ongoing events have processed, then close the writer. + await Promise.all(executing); + writer.close(); + } catch { + const errors = []; + for (const result of await Promise.allSettled(executing)) { + if (result.status == "rejected") { + errors.push(result.reason); + } + } + writer.write(Promise.reject( + new AggregateError(errors, "Threw while mapping."), + )).catch(() => {}); + } + })(); + return res.readable[Symbol.asyncIterator](); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/tee.ts b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/tee.ts new file mode 100644 index 0000000000..dd0f001a74 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/std@0.98.0/async/tee.ts @@ -0,0 +1,102 @@ +// Copyright 2018-2021 the Deno authors. All rights reserved. MIT license. + +// Utility for representing n-tuple +type Tuple = N extends N + ? number extends N ? T[] : TupleOf + : never; +type TupleOf = R["length"] extends N + ? R + : TupleOf; + +const noop = () => {}; + +class AsyncIterableClone implements AsyncIterable { + currentPromise: Promise>; + resolveCurrent: (x: Promise>) => void = noop; + consumed: Promise; + consume: () => void = noop; + + constructor() { + this.currentPromise = new Promise>((resolve) => { + this.resolveCurrent = resolve; + }); + this.consumed = new Promise((resolve) => { + this.consume = resolve; + }); + } + + reset() { + this.currentPromise = new Promise>((resolve) => { + this.resolveCurrent = resolve; + }); + this.consumed = new Promise((resolve) => { + this.consume = resolve; + }); + } + + async next(): Promise> { + const res = await this.currentPromise; + this.consume(); + this.reset(); + return res; + } + + async push(res: Promise>): Promise { + this.resolveCurrent(res); + // Wait until current promise is consumed and next item is requested. + await this.consumed; + } + + [Symbol.asyncIterator](): AsyncIterator { + return this; + } +} + +/** + * Branches the given async iterable into the n branches. + * + * Example: + * + * const gen = async function* gen() { + * yield 1; + * yield 2; + * yield 3; + * } + * + * const [branch1, branch2] = tee(gen()); + * + * (async () => { + * for await (const n of branch1) { + * console.log(n); // => 1, 2, 3 + * } + * })(); + * + * (async () => { + * for await (const n of branch2) { + * console.log(n); // => 1, 2, 3 + * } + * })(); + */ +export function tee( + src: AsyncIterable, + n: N = 2 as N, +): Tuple, N> { + const clones: Tuple, N> = Array.from({ length: n }).map( + () => new AsyncIterableClone(), + // deno-lint-ignore no-explicit-any + ) as any; + (async () => { + const iter = src[Symbol.asyncIterator](); + await Promise.resolve(); + while (true) { + const res = iter.next(); + await Promise.all(clones.map((c) => c.push(res))); + if ((await res).done) { + break; + } + } + })().catch((e) => { + console.error(e); + }); + return clones; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/dir@1.5.1/data_local_dir/mod.ts b/packages/edge-bundler/deno/vendor/deno.land/x/dir@1.5.1/data_local_dir/mod.ts new file mode 100644 index 0000000000..323d5912b8 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/dir@1.5.1/data_local_dir/mod.ts @@ -0,0 +1,34 @@ +/** Returns the path to the user's local data directory. + * + * The returned value depends on the operating system and is either a string, + * containing a value from the following table, or `null`. + * + * | Platform | Value | Example | + * | -------- | ---------------------------------------- | -------------------------------------------- | + * | Linux | `$XDG_DATA_HOME` or `$HOME`/.local/share | /home/justjavac/.local/share | + * | macOS | `$HOME`/Library/Application Support | /Users/justjavac/Library/Application Support | + * | Windows | `$LOCALAPPDATA` | C:\Users\justjavac\AppData\Local | + */ +export default function dataDir(): string | null { + switch (Deno.build.os) { + case "linux": { + const xdg = Deno.env.get("XDG_DATA_HOME"); + if (xdg) return xdg; + + const home = Deno.env.get("HOME"); + if (home) return `${home}/.local/share`; + break; + } + + case "darwin": { + const home = Deno.env.get("HOME"); + if (home) return `${home}/Library/Application Support`; + break; + } + + case "windows": + return Deno.env.get("LOCALAPPDATA") ?? null; + } + + return null; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/eszip_wasm.generated.js b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/eszip_wasm.generated.js new file mode 100644 index 0000000000..67d2ff6516 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/eszip_wasm.generated.js @@ -0,0 +1,768 @@ +// @generated file from wasmbuild -- do not edit +// deno-lint-ignore-file +// deno-fmt-ignore-file +// source-hash: 42cde0d0cd8911472f447996379441f664c820a5 +let wasm; + +const heap = new Array(128).fill(undefined); + +heap.push(undefined, null, true, false); + +function getObject(idx) { + return heap[idx]; +} + +function isLikeNone(x) { + return x === undefined || x === null; +} + +let cachedFloat64Memory0 = null; + +function getFloat64Memory0() { + if (cachedFloat64Memory0 === null || cachedFloat64Memory0.byteLength === 0) { + cachedFloat64Memory0 = new Float64Array(wasm.memory.buffer); + } + return cachedFloat64Memory0; +} + +let cachedInt32Memory0 = null; + +function getInt32Memory0() { + if (cachedInt32Memory0 === null || cachedInt32Memory0.byteLength === 0) { + cachedInt32Memory0 = new Int32Array(wasm.memory.buffer); + } + return cachedInt32Memory0; +} + +let WASM_VECTOR_LEN = 0; + +let cachedUint8Memory0 = null; + +function getUint8Memory0() { + if (cachedUint8Memory0 === null || cachedUint8Memory0.byteLength === 0) { + cachedUint8Memory0 = new Uint8Array(wasm.memory.buffer); + } + return cachedUint8Memory0; +} + +const cachedTextEncoder = typeof TextEncoder !== "undefined" + ? new TextEncoder("utf-8") + : { + encode: () => { + throw Error("TextEncoder not available"); + }, + }; + +const encodeString = function (arg, view) { + return cachedTextEncoder.encodeInto(arg, view); +}; + +function passStringToWasm0(arg, malloc, realloc) { + if (realloc === undefined) { + const buf = cachedTextEncoder.encode(arg); + const ptr = malloc(buf.length, 1) >>> 0; + getUint8Memory0().subarray(ptr, ptr + buf.length).set(buf); + WASM_VECTOR_LEN = buf.length; + return ptr; + } + + let len = arg.length; + let ptr = malloc(len, 1) >>> 0; + + const mem = getUint8Memory0(); + + let offset = 0; + + for (; offset < len; offset++) { + const code = arg.charCodeAt(offset); + if (code > 0x7F) break; + mem[ptr + offset] = code; + } + + if (offset !== len) { + if (offset !== 0) { + arg = arg.slice(offset); + } + ptr = realloc(ptr, len, len = offset + arg.length * 3, 1) >>> 0; + const view = getUint8Memory0().subarray(ptr + offset, ptr + len); + const ret = encodeString(arg, view); + + offset += ret.written; + } + + WASM_VECTOR_LEN = offset; + return ptr; +} + +let heap_next = heap.length; + +function addHeapObject(obj) { + if (heap_next === heap.length) heap.push(heap.length + 1); + const idx = heap_next; + heap_next = heap[idx]; + + heap[idx] = obj; + return idx; +} + +const cachedTextDecoder = typeof TextDecoder !== "undefined" + ? new TextDecoder("utf-8", { ignoreBOM: true, fatal: true }) + : { + decode: () => { + throw Error("TextDecoder not available"); + }, + }; + +if (typeof TextDecoder !== "undefined") cachedTextDecoder.decode(); + +function getStringFromWasm0(ptr, len) { + ptr = ptr >>> 0; + return cachedTextDecoder.decode(getUint8Memory0().subarray(ptr, ptr + len)); +} + +function dropObject(idx) { + if (idx < 132) return; + heap[idx] = heap_next; + heap_next = idx; +} + +function takeObject(idx) { + const ret = getObject(idx); + dropObject(idx); + return ret; +} + +let cachedBigInt64Memory0 = null; + +function getBigInt64Memory0() { + if ( + cachedBigInt64Memory0 === null || cachedBigInt64Memory0.byteLength === 0 + ) { + cachedBigInt64Memory0 = new BigInt64Array(wasm.memory.buffer); + } + return cachedBigInt64Memory0; +} + +function debugString(val) { + // primitive types + const type = typeof val; + if (type == "number" || type == "boolean" || val == null) { + return `${val}`; + } + if (type == "string") { + return `"${val}"`; + } + if (type == "symbol") { + const description = val.description; + if (description == null) { + return "Symbol"; + } else { + return `Symbol(${description})`; + } + } + if (type == "function") { + const name = val.name; + if (typeof name == "string" && name.length > 0) { + return `Function(${name})`; + } else { + return "Function"; + } + } + // objects + if (Array.isArray(val)) { + const length = val.length; + let debug = "["; + if (length > 0) { + debug += debugString(val[0]); + } + for (let i = 1; i < length; i++) { + debug += ", " + debugString(val[i]); + } + debug += "]"; + return debug; + } + // Test for built-in + const builtInMatches = /\[object ([^\]]+)\]/.exec(toString.call(val)); + let className; + if (builtInMatches.length > 1) { + className = builtInMatches[1]; + } else { + // Failed to match the standard '[object ClassName]' + return toString.call(val); + } + if (className == "Object") { + // we're a user defined class or Object + // JSON.stringify avoids problems with cycles, and is generally much + // easier than looping through ownProperties of `val`. + try { + return "Object(" + JSON.stringify(val) + ")"; + } catch (_) { + return "Object"; + } + } + // errors + if (val instanceof Error) { + return `${val.name}: ${val.message}\n${val.stack}`; + } + // TODO we could test for more things here, like `Set`s and `Map`s. + return className; +} + +const CLOSURE_DTORS = new FinalizationRegistry((state) => { + wasm.__wbindgen_export_2.get(state.dtor)(state.a, state.b); +}); + +function makeMutClosure(arg0, arg1, dtor, f) { + const state = { a: arg0, b: arg1, cnt: 1, dtor }; + const real = (...args) => { + // First up with a closure we increment the internal reference + // count. This ensures that the Rust closure environment won't + // be deallocated while we're invoking it. + state.cnt++; + const a = state.a; + state.a = 0; + try { + return f(a, state.b, ...args); + } finally { + if (--state.cnt === 0) { + wasm.__wbindgen_export_2.get(state.dtor)(a, state.b); + CLOSURE_DTORS.unregister(state); + } else { + state.a = a; + } + } + }; + real.original = state; + CLOSURE_DTORS.register(real, state, state); + return real; +} +function __wbg_adapter_40(arg0, arg1, arg2) { + wasm.wasm_bindgen__convert__closures__invoke1_mut__h91735af6e275c7ce( + arg0, + arg1, + addHeapObject(arg2), + ); +} + +function passArray8ToWasm0(arg, malloc) { + const ptr = malloc(arg.length * 1, 1) >>> 0; + getUint8Memory0().set(arg, ptr / 1); + WASM_VECTOR_LEN = arg.length; + return ptr; +} +/** + * Serialize a module graph into eszip. + * @param {any} roots + * @param {Function} loader + * @param {any} import_map_url + * @returns {Promise} + */ +export function build(roots, loader, import_map_url) { + const ret = wasm.build( + addHeapObject(roots), + addHeapObject(loader), + addHeapObject(import_map_url), + ); + return takeObject(ret); +} + +function handleError(f, args) { + try { + return f.apply(this, args); + } catch (e) { + wasm.__wbindgen_exn_store(addHeapObject(e)); + } +} +function __wbg_adapter_100(arg0, arg1, arg2, arg3) { + wasm.wasm_bindgen__convert__closures__invoke2_mut__hd032087bb158572e( + arg0, + arg1, + addHeapObject(arg2), + addHeapObject(arg3), + ); +} + +const ParserFinalization = new FinalizationRegistry((ptr) => + wasm.__wbg_parser_free(ptr >>> 0) +); +/** */ +export class Parser { + static __wrap(ptr) { + ptr = ptr >>> 0; + const obj = Object.create(Parser.prototype); + obj.__wbg_ptr = ptr; + ParserFinalization.register(obj, obj.__wbg_ptr, obj); + return obj; + } + + __destroy_into_raw() { + const ptr = this.__wbg_ptr; + this.__wbg_ptr = 0; + ParserFinalization.unregister(this); + return ptr; + } + + free() { + const ptr = this.__destroy_into_raw(); + wasm.__wbg_parser_free(ptr); + } + /** */ + constructor() { + const ret = wasm.parser_new(); + return Parser.__wrap(ret); + } + /** + * Parse from a BYOB readable stream. + * @param {ReadableStreamBYOBReader} stream + * @returns {Promise} + */ + parse(stream) { + const ret = wasm.parser_parse(this.__wbg_ptr, addHeapObject(stream)); + return takeObject(ret); + } + /** + * Parse from an in-memory buffer. + * @param {Uint8Array} buffer + * @returns {Promise} + */ + parseBytes(buffer) { + const ptr0 = passArray8ToWasm0(buffer, wasm.__wbindgen_malloc); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parser_parseBytes(this.__wbg_ptr, ptr0, len0); + return takeObject(ret); + } + /** + * Load module sources. + * @returns {Promise} + */ + load() { + const ret = wasm.parser_load(this.__wbg_ptr); + return takeObject(ret); + } + /** + * Get a module source. + * @param {string} specifier + * @returns {Promise} + */ + getModuleSource(specifier) { + const ptr0 = passStringToWasm0( + specifier, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parser_getModuleSource(this.__wbg_ptr, ptr0, len0); + return takeObject(ret); + } + /** + * Get a module sourcemap. + * @param {string} specifier + * @returns {Promise} + */ + getModuleSourceMap(specifier) { + const ptr0 = passStringToWasm0( + specifier, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len0 = WASM_VECTOR_LEN; + const ret = wasm.parser_getModuleSourceMap(this.__wbg_ptr, ptr0, len0); + return takeObject(ret); + } +} + +const imports = { + __wbindgen_placeholder__: { + __wbindgen_in: function (arg0, arg1) { + const ret = getObject(arg0) in getObject(arg1); + return ret; + }, + __wbindgen_number_get: function (arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "number" ? obj : undefined; + getFloat64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? 0 : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }, + __wbindgen_boolean_get: function (arg0) { + const v = getObject(arg0); + const ret = typeof v === "boolean" ? (v ? 1 : 0) : 2; + return ret; + }, + __wbindgen_string_get: function (arg0, arg1) { + const obj = getObject(arg1); + const ret = typeof obj === "string" ? obj : undefined; + var ptr1 = isLikeNone(ret) + ? 0 + : passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + var len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, + __wbindgen_is_bigint: function (arg0) { + const ret = typeof (getObject(arg0)) === "bigint"; + return ret; + }, + __wbindgen_is_object: function (arg0) { + const val = getObject(arg0); + const ret = typeof val === "object" && val !== null; + return ret; + }, + __wbindgen_bigint_from_i64: function (arg0) { + const ret = arg0; + return addHeapObject(ret); + }, + __wbindgen_bigint_from_u64: function (arg0) { + const ret = BigInt.asUintN(64, arg0); + return addHeapObject(ret); + }, + __wbg_new_0d7da8e129c00c84: function (arg0, arg1) { + const ret = new TypeError(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbg_new_898a68150f225f2e: function () { + const ret = new Array(); + return addHeapObject(ret); + }, + __wbindgen_string_new: function (arg0, arg1) { + const ret = getStringFromWasm0(arg0, arg1); + return addHeapObject(ret); + }, + __wbg_push_ca1c26067ef907ac: function (arg0, arg1) { + const ret = getObject(arg0).push(getObject(arg1)); + return ret; + }, + __wbg_length_fff51ee6522a1a18: function (arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbg_new_d258248ed531ff54: function (arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbindgen_memory: function () { + const ret = wasm.memory; + return addHeapObject(ret); + }, + __wbg_buffer_085ec1f694018c4f: function (arg0) { + const ret = getObject(arg0).buffer; + return addHeapObject(ret); + }, + __wbg_newwithbyteoffsetandlength_6da8e527659b86aa: function ( + arg0, + arg1, + arg2, + ) { + const ret = new Uint8Array(getObject(arg0), arg1 >>> 0, arg2 >>> 0); + return addHeapObject(ret); + }, + __wbg_new_8125e318e6245eed: function (arg0) { + const ret = new Uint8Array(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_String_88810dfeb4021902: function (arg0, arg1) { + const ret = String(getObject(arg1)); + const ptr1 = passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, + __wbindgen_jsval_eq: function (arg0, arg1) { + const ret = getObject(arg0) === getObject(arg1); + return ret; + }, + __wbindgen_error_new: function (arg0, arg1) { + const ret = new Error(getStringFromWasm0(arg0, arg1)); + return addHeapObject(ret); + }, + __wbg_iterator_97f0c81209c6c35a: function () { + const ret = Symbol.iterator; + return addHeapObject(ret); + }, + __wbg_newwithlength_e5d69174d6984cd7: function (arg0) { + const ret = new Uint8Array(arg0 >>> 0); + return addHeapObject(ret); + }, + __wbg_read_d8bf6d1f877af2a5: function (arg0, arg1) { + const ret = getObject(arg0).read(getObject(arg1)); + return addHeapObject(ret); + }, + __wbg_done_1c9555f2eaa593e9: function (arg0) { + const ret = getObject(arg0).done; + return ret; + }, + __wbg_toString_a8e343996af880e9: function (arg0) { + const ret = getObject(arg0).toString(); + return addHeapObject(ret); + }, + __wbg_value_a5e55ed0660d29ac: function (arg0) { + const ret = getObject(arg0).value; + return isLikeNone(ret) ? 0 : addHeapObject(ret); + }, + __wbg_byteLength_47d11fa79875dee3: function (arg0) { + const ret = getObject(arg0).byteLength; + return ret; + }, + __wbg_length_72e2208bbc0efc61: function (arg0) { + const ret = getObject(arg0).length; + return ret; + }, + __wbg_call_776890ca77946e2f: function () { + return handleError(function (arg0, arg1, arg2, arg3, arg4) { + const ret = getObject(arg0).call( + getObject(arg1), + getObject(arg2), + getObject(arg3), + getObject(arg4), + ); + return addHeapObject(ret); + }, arguments); + }, + __wbg_resolve_53698b95aaf7fcf8: function (arg0) { + const ret = Promise.resolve(getObject(arg0)); + return addHeapObject(ret); + }, + __wbg_new_43f1b47c28813cbd: function (arg0, arg1) { + try { + var state0 = { a: arg0, b: arg1 }; + var cb0 = (arg0, arg1) => { + const a = state0.a; + state0.a = 0; + try { + return __wbg_adapter_100(a, state0.b, arg0, arg1); + } finally { + state0.a = a; + } + }; + const ret = new Promise(cb0); + return addHeapObject(ret); + } finally { + state0.a = state0.b = 0; + } + }, + __wbg_new_abda76e883ba8a5f: function () { + const ret = new Error(); + return addHeapObject(ret); + }, + __wbg_stack_658279fe44541cf6: function (arg0, arg1) { + const ret = getObject(arg1).stack; + const ptr1 = passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, + __wbg_error_f851667af71bcfc6: function (arg0, arg1) { + let deferred0_0; + let deferred0_1; + try { + deferred0_0 = arg0; + deferred0_1 = arg1; + console.error(getStringFromWasm0(arg0, arg1)); + } finally { + wasm.__wbindgen_free(deferred0_0, deferred0_1, 1); + } + }, + __wbindgen_object_drop_ref: function (arg0) { + takeObject(arg0); + }, + __wbindgen_is_function: function (arg0) { + const ret = typeof (getObject(arg0)) === "function"; + return ret; + }, + __wbg_get_44be0491f933a435: function (arg0, arg1) { + const ret = getObject(arg0)[arg1 >>> 0]; + return addHeapObject(ret); + }, + __wbg_next_ddb3312ca1c4e32a: function () { + return handleError(function (arg0) { + const ret = getObject(arg0).next(); + return addHeapObject(ret); + }, arguments); + }, + __wbg_done_5c1f01fb660d73b5: function (arg0) { + const ret = getObject(arg0).done; + return ret; + }, + __wbg_value_1695675138684bd5: function (arg0) { + const ret = getObject(arg0).value; + return addHeapObject(ret); + }, + __wbg_get_97b561fb56f034b5: function () { + return handleError(function (arg0, arg1) { + const ret = Reflect.get(getObject(arg0), getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }, + __wbg_call_cb65541d95d71282: function () { + return handleError(function (arg0, arg1) { + const ret = getObject(arg0).call(getObject(arg1)); + return addHeapObject(ret); + }, arguments); + }, + __wbg_next_526fc47e980da008: function (arg0) { + const ret = getObject(arg0).next; + return addHeapObject(ret); + }, + __wbg_isArray_4c24b343cb13cfb1: function (arg0) { + const ret = Array.isArray(getObject(arg0)); + return ret; + }, + __wbg_call_01734de55d61e11d: function () { + return handleError(function (arg0, arg1, arg2) { + const ret = getObject(arg0).call(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, arguments); + }, + __wbg_isSafeInteger_bb8e18dd21c97288: function (arg0) { + const ret = Number.isSafeInteger(getObject(arg0)); + return ret; + }, + __wbg_set_5cf90238115182c3: function (arg0, arg1, arg2) { + getObject(arg0).set(getObject(arg1), arg2 >>> 0); + }, + __wbindgen_jsval_loose_eq: function (arg0, arg1) { + const ret = getObject(arg0) == getObject(arg1); + return ret; + }, + __wbg_instanceof_Uint8Array_d8d9cb2b8e8ac1d4: function (arg0) { + let result; + try { + result = getObject(arg0) instanceof Uint8Array; + } catch { + result = false; + } + const ret = result; + return ret; + }, + __wbg_instanceof_ArrayBuffer_39ac22089b74fddb: function (arg0) { + let result; + try { + result = getObject(arg0) instanceof ArrayBuffer; + } catch { + result = false; + } + const ret = result; + return ret; + }, + __wbg_entries_e51f29c7bba0c054: function (arg0) { + const ret = Object.entries(getObject(arg0)); + return addHeapObject(ret); + }, + __wbindgen_bigint_get_as_i64: function (arg0, arg1) { + const v = getObject(arg1); + const ret = typeof v === "bigint" ? v : undefined; + getBigInt64Memory0()[arg0 / 8 + 1] = isLikeNone(ret) ? BigInt(0) : ret; + getInt32Memory0()[arg0 / 4 + 0] = !isLikeNone(ret); + }, + __wbindgen_debug_string: function (arg0, arg1) { + const ret = debugString(getObject(arg1)); + const ptr1 = passStringToWasm0( + ret, + wasm.__wbindgen_malloc, + wasm.__wbindgen_realloc, + ); + const len1 = WASM_VECTOR_LEN; + getInt32Memory0()[arg0 / 4 + 1] = len1; + getInt32Memory0()[arg0 / 4 + 0] = ptr1; + }, + __wbindgen_throw: function (arg0, arg1) { + throw new Error(getStringFromWasm0(arg0, arg1)); + }, + __wbindgen_cb_drop: function (arg0) { + const obj = takeObject(arg0).original; + if (obj.cnt-- == 1) { + obj.a = 0; + return true; + } + const ret = false; + return ret; + }, + __wbg_then_f7e06ee3c11698eb: function (arg0, arg1) { + const ret = getObject(arg0).then(getObject(arg1)); + return addHeapObject(ret); + }, + __wbg_then_b2267541e2a73865: function (arg0, arg1, arg2) { + const ret = getObject(arg0).then(getObject(arg1), getObject(arg2)); + return addHeapObject(ret); + }, + __wbindgen_closure_wrapper8999: function (arg0, arg1, arg2) { + const ret = makeMutClosure(arg0, arg1, 312, __wbg_adapter_40); + return addHeapObject(ret); + }, + }, +}; + +import { Loader } from "https://deno.land/x/wasmbuild@0.15.1/loader.ts"; +import { cacheToLocalDir } from "https://deno.land/x/wasmbuild@0.15.1/cache.ts"; + +const loader = new Loader({ + imports, + cache: cacheToLocalDir, +}); +/** + * Decompression callback + * + * @callback DecompressCallback + * @param {Uint8Array} compressed + * @return {Uint8Array} decompressed + */ + +/** + * Options for instantiating a Wasm instance. + * @typedef {Object} InstantiateOptions + * @property {URL=} url - Optional url to the Wasm file to instantiate. + * @property {DecompressCallback=} decompress - Callback to decompress the + * raw Wasm file bytes before instantiating. + */ + +/** Instantiates an instance of the Wasm module returning its functions. + * @remarks It is safe to call this multiple times and once successfully + * loaded it will always return a reference to the same object. + * @param {InstantiateOptions=} opts + */ +export async function instantiate(opts) { + return (await instantiateWithInstance(opts)).exports; +} + +/** Instantiates an instance of the Wasm module along with its exports. + * @remarks It is safe to call this multiple times and once successfully + * loaded it will always return a reference to the same object. + * @param {InstantiateOptions=} opts + * @returns {Promise<{ + * instance: WebAssembly.Instance; + * exports: { build: typeof build; Parser : typeof Parser } + * }>} + */ +export async function instantiateWithInstance(opts) { + const { instance } = await loader.load( + opts?.url ?? new URL("eszip_wasm_bg.wasm", import.meta.url), + opts?.decompress, + ); + wasm = wasm ?? instance.exports; + cachedInt32Memory0 = cachedInt32Memory0 ?? new Int32Array(wasm.memory.buffer); + cachedUint8Memory0 = cachedUint8Memory0 ?? new Uint8Array(wasm.memory.buffer); + return { + instance, + exports: getWasmInstanceExports(), + }; +} + +function getWasmInstanceExports() { + return { build, Parser }; +} + +/** Gets if the Wasm module has been instantiated. */ +export function isInstantiated() { + return loader.instance != null; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/eszip_wasm_bg.wasm b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/eszip_wasm_bg.wasm new file mode 100644 index 0000000000..a8577c31d1 Binary files /dev/null and b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/eszip_wasm_bg.wasm differ diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/loader.ts b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/loader.ts new file mode 100644 index 0000000000..7844908952 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/loader.ts @@ -0,0 +1,67 @@ +// Adapted from deno_graph +// https://github.com/denoland/deno_graph/blob/main/lib/loader.ts + +export interface LoadResponseModule { + /** A module with code has been loaded. */ + kind: "module"; + /** The string URL of the resource. If there were redirects, the final + * specifier should be set here, otherwise the requested specifier. */ + specifier: string; + /** For remote resources, a record of headers should be set, where the key's + * have been normalized to be lower case values. */ + headers?: Record; + /** The string value of the loaded resources. */ + content: string; +} + +export interface LoadResponseExternalBuiltIn { + /** The loaded module is either _external_ or _built-in_ to the runtime. */ + kind: "external" | "builtIn"; + /** The string URL of the resource. If there were redirects, the final + * specifier should be set here, otherwise the requested specifier. */ + specifier: string; +} + +export type LoadResponse = LoadResponseModule | LoadResponseExternalBuiltIn; + +export async function load( + specifier: string, +): Promise { + const url = new URL(specifier); + try { + switch (url.protocol) { + case "file:": { + const content = await Deno.readTextFile(url); + return { + kind: "module", + specifier, + content, + }; + } + case "http:": + case "https:": { + const response = await fetch(String(url), { redirect: "follow" }); + if (response.status !== 200) { + // ensure the body is read as to not leak resources + await response.arrayBuffer(); + return undefined; + } + const content = await response.text(); + const headers: Record = {}; + for (const [key, value] of response.headers) { + headers[key.toLowerCase()] = value; + } + return { + kind: "module", + specifier: response.url, + headers, + content, + }; + } + default: + return undefined; + } + } catch { + return undefined; + } +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/mod.ts b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/mod.ts new file mode 100644 index 0000000000..556a486c0c --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/eszip@v0.55.2/mod.ts @@ -0,0 +1,35 @@ +import { load, LoadResponse } from "./loader.ts"; +import { + instantiate, + Parser as InternalParser, +} from "./eszip_wasm.generated.js"; + +export type { LoadResponse } from "./loader.ts"; + +export const options: { wasmURL: URL | undefined } = { wasmURL: undefined }; + +export class Parser extends InternalParser { + private constructor() { + super(); + } + + static async createInstance() { + // insure instantiate is called + await instantiate({ url: options.wasmURL }); + return new Parser(); + } +} + +export async function build( + roots: string[], + loader: (url: string) => Promise = load, + importMapUrl?: string, +): Promise { + const { build } = await instantiate({ url: options.wasmURL }); + return build( + roots, + (specifier: string) => + loader(specifier).catch((err) => Promise.reject(String(err))), + importMapUrl, + ); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/deps.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/deps.ts new file mode 100644 index 0000000000..081020930e --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/deps.ts @@ -0,0 +1,5 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +export { + deferred, + delay as denoDelay, +} from "https://deno.land/std@0.98.0/async/mod.ts"; diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/misc.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/misc.ts new file mode 100644 index 0000000000..6f887584a1 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/misc.ts @@ -0,0 +1,25 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { deferred } from "./deps.ts"; + +export const asyncDecorator = (fn: () => T) => { + return (): Promise => { + const promise = deferred(); + try { + const result = fn(); + promise.resolve(result); + } catch (err) { + promise.reject(err); + } + return promise; + }; +}; + +export const assertDefined = ( + value: T | undefined | null, + errMsg: string, +): value is T => { + if (value === undefined || value == null) { + throw new Error(errMsg); + } + return true; +}; diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/mod.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/mod.ts new file mode 100644 index 0000000000..c59480a5c0 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/mod.ts @@ -0,0 +1,50 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. + +export { retry, retryAsync } from "./retry/retry.ts"; +export { + getDefaultRetryOptions, + setDefaultRetryOptions, +} from "./retry/options.ts"; +export { isTooManyTries, TooManyTries } from "./retry/tooManyTries.ts"; +export type { RetryOptions } from "./retry/options.ts"; +export { retryAsyncDecorator, retryDecorator } from "./retry/decorator.ts"; + +export { waitUntil, waitUntilAsync } from "./wait/wait.ts"; +export type { TimeoutError } from "./wait/timeoutError.ts"; +export { isTimeoutError } from "./wait/timeoutError.ts"; +export { getDefaultDuration, setDefaultDuration } from "./wait/options.ts"; +export { + waitUntilAsyncDecorator, + waitUntilDecorator, +} from "./wait/decorators.ts"; + +export { + retryAsyncUntilDefined, + retryUntilDefined, +} from "./retry/utils/untilDefined/retry.ts"; + +export { + retryAsyncUntilDefinedDecorator, + retryUntilDefinedDecorator, +} from "./retry/utils/untilDefined/decorators.ts"; + +export { + retryAsyncUntilTruthy, + retryUntilTruthy, +} from "./retry/utils/untilTruthy/retry.ts"; + +export { + retryAsyncUntilTruthyDecorator, + retryUntilTruthyDecorator, +} from "./retry/utils/untilTruthy/decorators.ts"; + +export type { RetryUtilsOptions } from "./retry/utils/options.ts"; + +export { + retryAsyncUntilResponse, +} from "./retry/utils/untilResponse/retry.ts"; + +export { + retryAsyncUntilResponseDecorator, +} from "./retry/utils/untilResponse/decorators.ts"; + diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/decorator.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/decorator.ts new file mode 100644 index 0000000000..29b66905d1 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/decorator.ts @@ -0,0 +1,31 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { retry, retryAsync } from "./retry.ts"; +import { RetryOptions } from "./options.ts"; + +export function retryAsyncDecorator< + // deno-lint-ignore no-explicit-any + RETURN_TYPE extends (...args: any[]) => Promise, +>( + fn: RETURN_TYPE, + retryOptions?: RetryOptions, +) { + return (...args: Parameters): ReturnType => { + const wrappedFn = () => fn(...args); + return retryAsync(wrappedFn, retryOptions) as ReturnType; + }; +} + +export function retryDecorator< + // deno-lint-ignore no-explicit-any + RETURN_TYPE extends (...args: any[]) => any, +>( + fn: RETURN_TYPE, + retryOptions?: RetryOptions, +) { + return ( + ...args: Parameters + ): Promise> => { + const wrappedFn = () => fn(...args); + return retry(wrappedFn, retryOptions) as Promise>; + }; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/options.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/options.ts new file mode 100644 index 0000000000..be952a741d --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/options.ts @@ -0,0 +1,36 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. + +/** type of the unil function */ +export type UNTIL = (lastResult: RETURN_TYPE) => boolean; + +/** + * Retry options: + * - maxTry: maximum number of attempts. if fn is still throwing execption afect maxtry attempts, an exepction is thrown + * - delay: number of miliseconds between each attempt. + * - until: if given, the function will be call until this function returns tru or until maxTry calls. + */ +export interface RetryOptions { + maxTry?: number; + delay?: number; + until?: UNTIL | null; +} + +// deno-lint-ignore no-explicit-any +export let defaultRetryOptions: RetryOptions = { + delay: 250, + maxTry: 4 * 60, + until: null, +}; + +/** Set default retry options */ +export function setDefaultRetryOptions( + retryOptions: Partial>, +): RetryOptions { + defaultRetryOptions = { ...defaultRetryOptions, ...retryOptions }; + return getDefaultRetryOptions(); +} + +/** Returns the current retry options. To change default options, use setDefaultRetryOptions: do not try to modify this object */ +export function getDefaultRetryOptions(): Readonly> { + return { ...defaultRetryOptions }; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/retry.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/retry.ts new file mode 100644 index 0000000000..00f17a1d12 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/retry.ts @@ -0,0 +1,63 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { denoDelay } from "../deps.ts"; +import { assertDefined, asyncDecorator } from "../misc.ts"; +import { + defaultRetryOptions, + getDefaultRetryOptions, + RetryOptions, +} from "./options.ts"; +import { isTooManyTries, TooManyTries } from "./tooManyTries.ts"; + +/** + * Retry a function until it does not throw an exception. + * + * @param fn the function to execute + * @param retryOptions retry options + */ +export function retry( + fn: () => RETURN_TYPE, + retryOptions?: RetryOptions, +): Promise { + const fnAsync = asyncDecorator(fn); + return retryAsync(fnAsync, retryOptions); +} + +/** + * Retry an async function until it does not throw an exception. + * + * @param fn the async function to execute + * @param retryOptions retry options + */ +export async function retryAsync( + fn: () => Promise, + retryOptions?: RetryOptions, +): Promise { + const { maxTry, delay, until } = { + ...getDefaultRetryOptions(), + ...retryOptions, + }; + assertDefined(maxTry, `maxTry must be defined`); + assertDefined(delay, `delay must be defined`); + const canRecall = () => maxTry! > 1; + const recall = async () => { + await denoDelay(delay!); + return await retryAsync(fn, { delay, maxTry: maxTry! - 1, until }); + }; + try { + const result = await fn(); + const done = until ? until(result) : true; + if (done) { + return result; + } else if (canRecall()) { + return await recall(); + } else { + throw new TooManyTries(); + } + } catch (err) { + if (!isTooManyTries(err) && canRecall()) { + return await recall(); + } else { + throw err; + } + } +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/tooManyTries.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/tooManyTries.ts new file mode 100644 index 0000000000..bbf0285c47 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/tooManyTries.ts @@ -0,0 +1,11 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +export class TooManyTries extends Error { + constructor() { + super("function did not complete within allowed number of attempts"); + } + tooManyTries = true; +} + +export function isTooManyTries(error: Error): error is TooManyTries { + return (error as TooManyTries).tooManyTries === true; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/options.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/options.ts new file mode 100644 index 0000000000..30a2711ea7 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/options.ts @@ -0,0 +1,5 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. + +import { RetryOptions } from "../options.ts"; + +export type RetryUtilsOptions = Exclude, "until">; diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/tools.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/tools.ts new file mode 100644 index 0000000000..a08dd0b7f6 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/tools.ts @@ -0,0 +1,15 @@ +import { UNTIL } from "../options.ts"; +import { retry, retryAsync } from "../retry.ts"; +import { RetryUtilsOptions } from "./options.ts"; + +export const retryHof = (until: UNTIL) => + ( + fn: () => RETURN_TYPE, + retryOptions?: RetryUtilsOptions, + ): Promise => retry(fn, { ...retryOptions, until }); + +export const retryAsyncHof = (until: UNTIL) => + ( + fn: () => Promise, + retryOptions?: RetryUtilsOptions, + ): Promise => retryAsync(fn, { ...retryOptions, until }); diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilDefined/decorators.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilDefined/decorators.ts new file mode 100644 index 0000000000..6ba4045699 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilDefined/decorators.ts @@ -0,0 +1,35 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { RetryUtilsOptions } from "../options.ts"; +import { retryAsyncUntilDefined, retryUntilDefined } from "./retry.ts"; + +export function retryUntilDefinedDecorator< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE, +>( + fn: (...args: PARAMETERS_TYPE) => RETURN_TYPE | undefined | null, + retryOptions?: RetryUtilsOptions, +): (...args: PARAMETERS_TYPE) => Promise { + return ( + ...args: PARAMETERS_TYPE + ): Promise => { + const wrappedFn = () => fn(...args); + return retryUntilDefined(wrappedFn, retryOptions); + }; +} + +export function retryAsyncUntilDefinedDecorator< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE, +>( + fn: (...args: PARAMETERS_TYPE) => Promise, + retryOptions?: RetryUtilsOptions, +): (...args: PARAMETERS_TYPE) => Promise { + return ( + ...args: PARAMETERS_TYPE + ): Promise => { + const wrappedFn = () => fn(...args); + return retryAsyncUntilDefined(wrappedFn, retryOptions); + }; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilDefined/retry.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilDefined/retry.ts new file mode 100644 index 0000000000..cb20b81d2d --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilDefined/retry.ts @@ -0,0 +1,23 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { RetryUtilsOptions } from "../options.ts"; +import { retry, retryAsync } from "../../retry.ts"; + +const until = ( + lastResult: RETURN_TYPE | undefined | null, +): boolean => lastResult !== undefined && lastResult !== null; + +export async function retryUntilDefined( + fn: () => RETURN_TYPE | undefined | null, + retryOptions?: RetryUtilsOptions, +): Promise { + const result = await retry(fn, { ...retryOptions, until }); + return result!; +} + +export async function retryAsyncUntilDefined( + fn: () => Promise, + options?: RetryUtilsOptions, +): Promise { + const result = await retryAsync(fn, { ...options, until }); + return result!; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilResponse/decorators.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilResponse/decorators.ts new file mode 100644 index 0000000000..5cd16d4abb --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilResponse/decorators.ts @@ -0,0 +1,18 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import {retryAsyncUntilResponse} from './retry.ts' +import { RetryUtilsOptions } from "../options.ts"; + +export function retryAsyncUntilResponseDecorator< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE extends Response, +>( + fn: (...args: PARAMETERS_TYPE) => Promise, + retryOptions?: RetryUtilsOptions, +) { + return (...args: PARAMETERS_TYPE): Promise => { + const wrappedFn = () => fn(...args); + return retryAsyncUntilResponse(wrappedFn, retryOptions); + } +} + diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilResponse/retry.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilResponse/retry.ts new file mode 100644 index 0000000000..bc79fc188f --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilResponse/retry.ts @@ -0,0 +1,8 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { retryAsyncHof } from "../tools.ts"; + +const until = ( + lastResult: RETURN_TYPE, +): boolean => lastResult.ok; + +export const retryAsyncUntilResponse = retryAsyncHof(until); diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilTruthy/decorators.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilTruthy/decorators.ts new file mode 100644 index 0000000000..ba9893357a --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilTruthy/decorators.ts @@ -0,0 +1,31 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { RetryUtilsOptions } from "../options.ts"; +import { retryAsyncUntilTruthy, retryUntilTruthy } from "./retry.ts"; + +export function retryUntilTruthyDecorator< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE, +>( + fn: (...args: PARAMETERS_TYPE) => RETURN_TYPE, + retryOptions?: RetryUtilsOptions, +): (...args: PARAMETERS_TYPE) => Promise { + return (...args: PARAMETERS_TYPE): Promise => { + const wrappedFn = () => fn(...args); + return retryUntilTruthy(wrappedFn, retryOptions); + }; +} + +export function retryAsyncUntilTruthyDecorator< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE, +>( + fn: (...args: PARAMETERS_TYPE) => Promise, + retryOptions?: RetryUtilsOptions, +): (...args: PARAMETERS_TYPE) => Promise { + return (...args: PARAMETERS_TYPE): Promise => { + const wrappedFn = () => fn(...args); + return retryAsyncUntilTruthy(wrappedFn, retryOptions); + }; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilTruthy/retry.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilTruthy/retry.ts new file mode 100644 index 0000000000..ee90d6248f --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/retry/utils/untilTruthy/retry.ts @@ -0,0 +1,29 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { RetryUtilsOptions } from "../options.ts"; +import { retry, retryAsync } from "../../retry.ts"; + +const until = (lastResult: RETURN_TYPE): boolean => + // deno-lint-ignore no-explicit-any + (lastResult as any) == true; + +export function retryUntilTruthy< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE, +>( + fn: (...args: PARAMETERS_TYPE) => RETURN_TYPE, + retryOptions?: RetryUtilsOptions, +): Promise { + return retry(fn, { ...retryOptions, until }); +} + +export function retryAsyncUntilTruthy< + // deno-lint-ignore no-explicit-any + PARAMETERS_TYPE extends any[], + RETURN_TYPE, +>( + fn: (...args: PARAMETERS_TYPE) => Promise, + retryOptions?: RetryUtilsOptions, +): Promise { + return retryAsync(fn, { ...retryOptions, until }); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/decorators.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/decorators.ts new file mode 100644 index 0000000000..eab889f557 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/decorators.ts @@ -0,0 +1,36 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { waitUntil, waitUntilAsync } from "./wait.ts"; + +/** a waitUntilAsync decorator + * @param fn the async function to execute + * @param duration timeout in milliseconds + * @param [error] custom error to throw when fn duration exceeded duration. If not provided a TimeoutError is thrown. + * @returns a function hat takes same parameters as fn. It calls fn using waitUntilAsync and returns/throws the results/error of this call? +*/ +export function waitUntilAsyncDecorator< + // deno-lint-ignore no-explicit-any + RETURN_TYPE extends (...args: any[]) => Promise, +>(fn: RETURN_TYPE, duration?: number, error?: Error) { + return (...args: Parameters): ReturnType => { + const wrappedFn = () => fn(...args); + return waitUntilAsync(wrappedFn, duration, error) as ReturnType< + RETURN_TYPE + >; + }; +} + +/** a waitUntil decorator + * @param fn the function to execute + * @param duration timeout in milliseconds + * @param [error] custom error to throw when fn duration exceeded duration. If not provided a TimeoutError is thrown. + * @returns: a function hat takes same parameters as fn. It calls fn using waitUntil and returns/throws the results/error of this call? +*/ +export function waitUntilDecorator< + // deno-lint-ignore no-explicit-any + T extends (...args: any[]) => any, +>(fn: T, duration?: number, error?: Error) { + return (...args: Parameters): ReturnType => { + const wrappedFn = () => fn(...args); + return waitUntil(wrappedFn, duration, error) as ReturnType; + }; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/options.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/options.ts new file mode 100644 index 0000000000..fb67caa667 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/options.ts @@ -0,0 +1,10 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +export let defaultDuration = 60 * 1000; + +export function setDefaultDuration(duration: number) { + defaultDuration = duration; +} + +export function getDefaultDuration(): number { + return defaultDuration; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/timeoutError.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/timeoutError.ts new file mode 100644 index 0000000000..6d02be5a73 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/timeoutError.ts @@ -0,0 +1,9 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +export class TimeoutError extends Error { + isTimeout = true; +} +/** Type guard for TimeoutError */ + +export function isTimeoutError(error: Error): error is TimeoutError { + return (error as TimeoutError).isTimeout === true; +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/wait.ts b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/wait.ts new file mode 100644 index 0000000000..b8b7df99cd --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/retry@v2.0.0/wait/wait.ts @@ -0,0 +1,46 @@ +// Copyright since 2020, FranckLdx. All rights reserved. MIT license. +import { denoDelay } from "../deps.ts"; +import { asyncDecorator } from "../misc.ts"; +import { defaultDuration } from "./options.ts"; +import { TimeoutError } from "./timeoutError.ts"; + +/** + * wait for a function to complete within a givne duration or throw an exception. + * + * @param fn the async function to execute + * @param duration timeout in milliseconds + * @param [error] custom error to throw when fn duration exceeded duration. If not provided a TimeoutError is thrown. + */ +export async function waitUntilAsync( + fn: () => Promise, + duration: number = defaultDuration, + error: Error = new TimeoutError( + "function did not complete within allowed time", + ), +): Promise { + const canary = Symbol("RETRY_LIB_FN_EXPIRED"); + const result = await Promise.race([ + fn(), + denoDelay(duration).then(() => canary), + ]); + if (result === canary) { + throw error; + } + return result as RETURN_TYPE; +} + +/** + * wait for a function to complete within a givne duration or throw an exception. + * + * @param fn the function to execute + * @param duration timeout in milliseconds + * @param [error] custom error to throw when fn duration exceeded duration. If not provided a TimeoutError is thrown. + */ +export async function waitUntil( + fn: () => T, + duration?: number, + error?: Error, +): Promise { + const fnAsync = asyncDecorator(fn); + return await waitUntilAsync(fnAsync, duration, error); +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/wasmbuild@0.15.1/cache.ts b/packages/edge-bundler/deno/vendor/deno.land/x/wasmbuild@0.15.1/cache.ts new file mode 100644 index 0000000000..e1d05481a0 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/wasmbuild@0.15.1/cache.ts @@ -0,0 +1,157 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +import { default as localDataDir } from "https://deno.land/x/dir@1.5.1/data_local_dir/mod.ts"; + +export async function cacheToLocalDir( + url: URL, + decompress: (bytes: Uint8Array) => Uint8Array, +) { + const localPath = await getUrlLocalPath(url); + if (localPath == null) { + return undefined; + } + if (!await exists(localPath)) { + const fileBytes = decompress(new Uint8Array(await getUrlBytes(url))); + try { + await Deno.writeFile(localPath, fileBytes); + } catch { + // ignore and return the wasm bytes + return fileBytes; + } + } + return toFileUrl(localPath); +} + +async function getUrlLocalPath(url: URL) { + try { + const dataDirPath = await getInitializedLocalDataDirPath(); + const hash = await getUrlHash(url); + return `${dataDirPath}/${hash}.wasm`; + } catch { + return undefined; + } +} + +async function getInitializedLocalDataDirPath() { + const dataDir = localDataDir(); + if (dataDir == null) { + throw new Error(`Could not find local data directory.`); + } + const dirPath = `${dataDir}/deno-wasmbuild`; + await ensureDir(dirPath); + return dirPath; +} + +async function exists(filePath: string | URL): Promise { + try { + await Deno.lstat(filePath); + return true; + } catch (error) { + if (error instanceof Deno.errors.NotFound) { + return false; + } + throw error; + } +} + +async function ensureDir(dir: string) { + try { + const fileInfo = await Deno.lstat(dir); + if (!fileInfo.isDirectory) { + throw new Error(`Path was not a directory '${dir}'`); + } + } catch (err) { + if (err instanceof Deno.errors.NotFound) { + // if dir not exists. then create it. + await Deno.mkdir(dir, { recursive: true }); + return; + } + throw err; + } +} + +async function getUrlHash(url: URL) { + // Taken from MDN: https://developer.mozilla.org/en-US/docs/Web/API/SubtleCrypto/digest + const hashBuffer = await crypto.subtle.digest( + "SHA-256", + new TextEncoder().encode(url.href), + ); + // convert buffer to byte array + const hashArray = Array.from(new Uint8Array(hashBuffer)); + // convert bytes to hex string + const hashHex = hashArray + .map((b) => b.toString(16).padStart(2, "0")) + .join(""); + return hashHex; +} + +async function getUrlBytes(url: URL) { + const response = await fetchWithRetries(url); + return await response.arrayBuffer(); +} + +// the below is extracted from deno_std/path + +const WHITESPACE_ENCODINGS: Record = { + "\u0009": "%09", + "\u000A": "%0A", + "\u000B": "%0B", + "\u000C": "%0C", + "\u000D": "%0D", + "\u0020": "%20", +}; + +function encodeWhitespace(string: string): string { + return string.replaceAll(/[\s]/g, (c) => { + return WHITESPACE_ENCODINGS[c] ?? c; + }); +} + +function toFileUrl(path: string): URL { + return Deno.build.os === "windows" + ? windowsToFileUrl(path) + : posixToFileUrl(path); +} + +function posixToFileUrl(path: string): URL { + const url = new URL("file:///"); + url.pathname = encodeWhitespace( + path.replace(/%/g, "%25").replace(/\\/g, "%5C"), + ); + return url; +} + +function windowsToFileUrl(path: string): URL { + const [, hostname, pathname] = path.match( + /^(?:[/\\]{2}([^/\\]+)(?=[/\\](?:[^/\\]|$)))?(.*)/, + )!; + const url = new URL("file:///"); + url.pathname = encodeWhitespace(pathname.replace(/%/g, "%25")); + if (hostname != null && hostname != "localhost") { + url.hostname = hostname; + if (!url.hostname) { + throw new TypeError("Invalid hostname."); + } + } + return url; +} + +export async function fetchWithRetries(url: URL | string, maxRetries = 5) { + let sleepMs = 250; + let iterationCount = 0; + while (true) { + iterationCount++; + try { + const res = await fetch(url); + if (res.ok || iterationCount > maxRetries) { + return res; + } + } catch (err) { + if (iterationCount > maxRetries) { + throw err; + } + } + console.warn(`Failed fetching. Retrying in ${sleepMs}ms...`); + await new Promise((resolve) => setTimeout(resolve, sleepMs)); + sleepMs = Math.min(sleepMs * 2, 10_000); + } +} diff --git a/packages/edge-bundler/deno/vendor/deno.land/x/wasmbuild@0.15.1/loader.ts b/packages/edge-bundler/deno/vendor/deno.land/x/wasmbuild@0.15.1/loader.ts new file mode 100644 index 0000000000..11116f6c35 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/deno.land/x/wasmbuild@0.15.1/loader.ts @@ -0,0 +1,126 @@ +// Copyright 2018-2022 the Deno authors. All rights reserved. MIT license. +import { fetchWithRetries } from "./cache.ts"; + +export type DecompressCallback = (bytes: Uint8Array) => Uint8Array; + +export interface LoaderOptions { + /** The Wasm module's imports. */ + imports: WebAssembly.Imports | undefined; + /** A function that caches the Wasm module to a local path so that + * so that a network request isn't required on every load. + * + * Returns an ArrayBuffer with the bytes on download success, but + * cache save failure. + */ + cache?: ( + url: URL, + decompress: DecompressCallback | undefined, + ) => Promise; +} + +export class Loader { + #options: LoaderOptions; + #lastLoadPromise: + | Promise + | undefined; + #instantiated: WebAssembly.WebAssemblyInstantiatedSource | undefined; + + constructor(options: LoaderOptions) { + this.#options = options; + } + + get instance() { + return this.#instantiated?.instance; + } + + get module() { + return this.#instantiated?.module; + } + + load( + url: URL, + decompress: DecompressCallback | undefined, + ): Promise { + if (this.#instantiated) { + return Promise.resolve(this.#instantiated); + } else if (this.#lastLoadPromise == null) { + this.#lastLoadPromise = (async () => { + try { + this.#instantiated = await this.#instantiate(url, decompress); + return this.#instantiated; + } finally { + this.#lastLoadPromise = undefined; + } + })(); + } + return this.#lastLoadPromise; + } + + async #instantiate(url: URL, decompress: DecompressCallback | undefined) { + const imports = this.#options.imports; + if (this.#options.cache != null && url.protocol !== "file:") { + try { + const result = await this.#options.cache( + url, + decompress ?? ((bytes) => bytes), + ); + if (result instanceof URL) { + url = result; + decompress = undefined; // already decompressed + } else if (result != null) { + return WebAssembly.instantiate(result, imports); + } + } catch { + // ignore if caching ever fails (ex. when on deploy) + } + } + + const isFile = url.protocol === "file:"; + + // make file urls work in Node via dnt + // deno-lint-ignore no-explicit-any + const isNode = (globalThis as any).process?.versions?.node != null; + if (isFile && typeof Deno !== "object") { + throw new Error( + "Loading local files are not supported in this environment", + ); + } + if (isNode && isFile) { + // the deno global will be shimmed by dnt + const wasmCode = await Deno.readFile(url); + return WebAssembly.instantiate( + decompress ? decompress(wasmCode) : wasmCode, + imports, + ); + } + + switch (url.protocol) { + case "file:": + case "https:": + case "http:": { + const wasmResponse = await fetchWithRetries(url); + if (decompress) { + const wasmCode = new Uint8Array(await wasmResponse.arrayBuffer()); + return WebAssembly.instantiate(decompress(wasmCode), imports); + } + if ( + isFile || + wasmResponse.headers.get("content-type")?.toLowerCase() + .startsWith("application/wasm") + ) { + // Cast to any so there's no type checking issues with dnt + // (https://github.com/denoland/wasmbuild/issues/92) + // deno-lint-ignore no-explicit-any + return WebAssembly.instantiateStreaming(wasmResponse as any, imports); + } else { + return WebAssembly.instantiate( + await wasmResponse.arrayBuffer(), + imports, + ); + } + } + default: + throw new Error(`Unsupported protocol: ${url.protocol}`); + } + } +} diff --git a/packages/edge-bundler/deno/vendor/import_map.json b/packages/edge-bundler/deno/vendor/import_map.json new file mode 100644 index 0000000000..e0c0249016 --- /dev/null +++ b/packages/edge-bundler/deno/vendor/import_map.json @@ -0,0 +1,5 @@ +{ + "imports": { + "https://deno.land/": "./deno.land/" + } +} diff --git a/packages/edge-bundler/node/__snapshots__/declaration.test.ts.snap b/packages/edge-bundler/node/__snapshots__/declaration.test.ts.snap new file mode 100644 index 0000000000..c60576b991 --- /dev/null +++ b/packages/edge-bundler/node/__snapshots__/declaration.test.ts.snap @@ -0,0 +1,46 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`Ensure the order of edge functions with FF 1`] = ` +[ + { + "function": "framework-manifest-a", + "path": "/path1", + }, + { + "function": "framework-manifest-c", + "path": "/path3", + }, + { + "function": "framework-manifest-b", + "path": "/path2", + }, + { + "function": "framework-isc-c", + "path": "/path1", + }, + { + "function": "framework-isc-c", + "path": "/path2", + }, + { + "function": "user-toml-a", + "path": "/path1", + }, + { + "function": "user-toml-c", + "path": "/path3", + }, + { + "function": "user-toml-b", + "path": "/path2", + }, + { + "function": "user-isc-c", + "path": "/path1", + }, + { + "function": "user-isc-c", + "path": "/path2", + }, +] +`; diff --git a/packages/edge-bundler/node/bridge.test.ts b/packages/edge-bundler/node/bridge.test.ts new file mode 100644 index 0000000000..6c973cebdc --- /dev/null +++ b/packages/edge-bundler/node/bridge.test.ts @@ -0,0 +1,138 @@ +import { Buffer } from 'buffer' +import { rm } from 'fs/promises' +import { createRequire } from 'module' +import { platform, env } from 'process' +import { PassThrough } from 'stream' + +import nock from 'nock' +import semver from 'semver' +import tmp, { DirectoryResult } from 'tmp-promise' +import { test, expect } from 'vitest' + +import { DenoBridge, DENO_VERSION_RANGE } from './bridge.js' +import { getPlatformTarget } from './platform.js' + +const require = createRequire(import.meta.url) +const archiver = require('archiver') + +const getMockDenoBridge = function (tmpDir: DirectoryResult, mockBinaryOutput: string) { + const latestVersion = semver.minVersion(DENO_VERSION_RANGE)?.version ?? '' + const data = new PassThrough() + const archive = archiver('zip', { zlib: { level: 9 } }) + + archive.pipe(data) + archive.append(Buffer.from(mockBinaryOutput.replace(/@@@latestVersion@@@/g, latestVersion)), { + name: platform === 'win32' ? 'deno.exe' : 'deno', + }) + archive.finalize() + + const target = getPlatformTarget() + + nock('https://dl.deno.land').get('/release-latest.txt').reply(200, `v${latestVersion}`) + nock('https://dl.deno.land') + .get(`/release/v${latestVersion}/deno-${target}.zip`) + .reply(200, () => data) + + return new DenoBridge({ + cacheDirectory: tmpDir.path, + useGlobal: false, + }) +} + +test('Does not inherit environment variables if `extendEnv` is false', async () => { + const tmpDir = await tmp.dir() + const deno = getMockDenoBridge( + tmpDir, + `#!/usr/bin/env sh + + if [ "$1" = "test" ] + then + env + else + echo "deno @@@latestVersion@@@" + fi`, + ) + + // The environment sets some variables so let us see what they are and remove them from the result + const referenceOutput = await deno.run(['test'], { env: {}, extendEnv: false }) + env.TADA = 'TUDU' + const result = await deno.run(['test'], { env: { LULU: 'LALA' }, extendEnv: false }) + let output = result?.stdout ?? '' + + delete env.TADA + + referenceOutput?.stdout.split('\n').forEach((line) => { + output = output.replace(line.trim(), '') + }) + output = output.trim().replace(/\n+/g, '\n') + + expect(output).toBe('LULU=LALA') + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('Does inherit environment variables if `extendEnv` is true', async () => { + const tmpDir = await tmp.dir() + const deno = getMockDenoBridge( + tmpDir, + `#!/usr/bin/env sh + + if [ "$1" = "test" ] + then + env + else + echo "deno @@@latestVersion@@@" + fi`, + ) + + // The environment sets some variables so let us see what they are and remove them from the result + const referenceOutput = await deno.run(['test'], { env: {}, extendEnv: true }) + env.TADA = 'TUDU' + const result = await deno.run(['test'], { env: { LULU: 'LALA' }, extendEnv: true }) + let output = result?.stdout ?? '' + + delete env.TADA + + referenceOutput?.stdout.split('\n').forEach((line) => { + output = output.replace(line.trim(), '') + }) + // lets remove holes, split lines and sort lines by name, as different OSes might order them different + const environmentVariables = output.trim().replace(/\n+/g, '\n').split('\n').sort() + + expect(environmentVariables).toEqual(['LULU=LALA', 'TADA=TUDU']) + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('Does inherit environment variables if `extendEnv` is not set', async () => { + const tmpDir = await tmp.dir() + const deno = getMockDenoBridge( + tmpDir, + `#!/usr/bin/env sh + + if [ "$1" = "test" ] + then + env + else + echo "deno @@@latestVersion@@@" + fi`, + ) + + // The environment sets some variables so let us see what they are and remove them from the result + const referenceOutput = await deno.run(['test'], { env: {}, extendEnv: true }) + env.TADA = 'TUDU' + const result = await deno.run(['test'], { env: { LULU: 'LALA' } }) + let output = result?.stdout ?? '' + + delete env.TADA + + referenceOutput?.stdout.split('\n').forEach((line) => { + output = output.replace(line.trim(), '') + }) + // lets remove holes, split lines and sort lines by name, as different OSes might order them different + const environmentVariables = output.trim().replace(/\n+/g, '\n').split('\n').sort() + + expect(environmentVariables).toEqual(['LULU=LALA', 'TADA=TUDU']) + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) diff --git a/packages/edge-bundler/node/bridge.ts b/packages/edge-bundler/node/bridge.ts new file mode 100644 index 0000000000..bcc3a52102 --- /dev/null +++ b/packages/edge-bundler/node/bridge.ts @@ -0,0 +1,270 @@ +import { promises as fs, type WriteStream } from 'fs' +import path from 'path' +import process from 'process' + +import { execa, ExecaChildProcess, Options } from 'execa' +import pathKey from 'path-key' +import semver from 'semver' + +import { download } from './downloader.js' +import { getPathInHome } from './home_path.js' +import { getLogger, Logger } from './logger.js' +import { getBinaryExtension } from './platform.js' + +const DENO_VERSION_FILE = 'version.txt' +// When updating DENO_VERSION_RANGE, ensure that the deno version installed in the +// build-image/buildbot does satisfy this range! +const DENO_VERSION_RANGE = '^1.37.0' + +type OnBeforeDownloadHook = () => void | Promise +type OnAfterDownloadHook = (error?: Error) => void | Promise + +interface DenoOptions { + cacheDirectory?: string + debug?: boolean + denoDir?: string + logger?: Logger + onAfterDownload?: OnAfterDownloadHook + onBeforeDownload?: OnBeforeDownloadHook + useGlobal?: boolean + versionRange?: string +} + +interface ProcessRef { + ps?: ExecaChildProcess +} + +interface RunOptions { + env?: NodeJS.ProcessEnv + extendEnv?: boolean + pipeOutput?: boolean + stderr?: WriteStream + stdout?: WriteStream + rejectOnExitCode?: boolean +} + +class DenoBridge { + cacheDirectory: string + currentDownload?: ReturnType + debug: boolean + denoDir?: string + logger: Logger + onAfterDownload?: OnAfterDownloadHook + onBeforeDownload?: OnBeforeDownloadHook + useGlobal: boolean + versionRange: string + + constructor(options: DenoOptions) { + this.cacheDirectory = options.cacheDirectory ?? getPathInHome('deno-cli') + this.debug = options.debug ?? false + this.denoDir = options.denoDir + this.logger = options.logger ?? getLogger(undefined, undefined, options.debug) + this.onAfterDownload = options.onAfterDownload + this.onBeforeDownload = options.onBeforeDownload + this.useGlobal = options.useGlobal ?? true + this.versionRange = options.versionRange ?? DENO_VERSION_RANGE + } + + private async downloadBinary() { + await this.onBeforeDownload?.() + + await this.ensureCacheDirectory() + + this.logger.system(`Downloading Deno CLI to ${this.cacheDirectory}`) + + const binaryPath = await download(this.cacheDirectory, this.versionRange, this.logger) + const downloadedVersion = await this.getBinaryVersion(binaryPath) + + // We should never get here, because it means that `DENO_VERSION_RANGE` is + // a malformed semver range. If this does happen, let's throw an error so + // that the tests catch it. + if (downloadedVersion === undefined) { + const error = new Error( + 'There was a problem setting up the Edge Functions environment. To try a manual installation, visit https://ntl.fyi/install-deno.', + ) + + await this.onAfterDownload?.(error) + + this.logger.system('Could not run downloaded Deno CLI', error) + + throw error + } + + await this.writeVersionFile(downloadedVersion) + + await this.onAfterDownload?.() + + return binaryPath + } + + private async getBinaryVersion(binaryPath: string) { + try { + const { stdout } = await execa(binaryPath, ['--version']) + const version = stdout.match(/^deno ([\d.]+)/) + + if (!version) { + this.logger.system(`getBinaryVersion no version found. binaryPath ${binaryPath}`) + return + } + + return version[1] + } catch (error) { + this.logger.system('getBinaryVersion failed', error) + } + } + + private async getCachedBinary() { + const versionFilePath = path.join(this.cacheDirectory, DENO_VERSION_FILE) + + let cachedVersion + + try { + cachedVersion = await fs.readFile(versionFilePath, 'utf8') + } catch (error) { + this.logger.system('Error getting cached binary', error) + return + } + + if (!semver.satisfies(cachedVersion, this.versionRange)) { + this.logger.system(`semver not satisfied. cachedVersion: ${cachedVersion}, versionRange: ${this.versionRange}`) + return + } + + const binaryName = `deno${getBinaryExtension()}` + + return path.join(this.cacheDirectory, binaryName) + } + + private async getGlobalBinary() { + if (!this.useGlobal) { + return + } + + const globalBinaryName = 'deno' + const globalVersion = await this.getBinaryVersion(globalBinaryName) + + if (globalVersion === undefined || !semver.satisfies(globalVersion, this.versionRange)) { + this.logger.system( + `No globalVersion or semver not satisfied. globalVersion: ${globalVersion}, versionRange: ${this.versionRange}`, + ) + return + } + + return globalBinaryName + } + + private getRemoteBinary() { + if (this.currentDownload === undefined) { + this.currentDownload = this.downloadBinary() + } + + return this.currentDownload + } + + private static runWithBinary( + binaryPath: string, + args: string[], + { + options, + pipeOutput, + stderr, + stdout, + }: { options?: Options; pipeOutput?: boolean; stderr?: WriteStream; stdout?: WriteStream }, + ) { + const runDeno = execa(binaryPath, args, options) + + if (stderr) { + runDeno.stderr?.pipe(stderr) + } else if (pipeOutput) { + runDeno.stderr?.pipe(process.stderr) + } + + if (stdout) { + runDeno.stdout?.pipe(stdout) + } else if (pipeOutput) { + runDeno.stdout?.pipe(process.stdout) + } + + return runDeno + } + + private async writeVersionFile(version: string) { + await this.ensureCacheDirectory() + + const versionFilePath = path.join(this.cacheDirectory, DENO_VERSION_FILE) + + await fs.writeFile(versionFilePath, version) + } + + async ensureCacheDirectory() { + await fs.mkdir(this.cacheDirectory, { recursive: true }) + } + + async getBinaryPath() { + const globalPath = await this.getGlobalBinary() + + if (globalPath !== undefined) { + this.logger.system('Using global installation of Deno CLI') + + return { global: true, path: globalPath } + } + + const cachedPath = await this.getCachedBinary() + + if (cachedPath !== undefined) { + this.logger.system('Using cached Deno CLI from', cachedPath) + + return { global: false, path: cachedPath } + } + + const downloadedPath = await this.getRemoteBinary() + + return { global: false, path: downloadedPath } + } + + getEnvironmentVariables(inputEnv: NodeJS.ProcessEnv = {}) { + const env: NodeJS.ProcessEnv = { ...inputEnv } + + if (this.denoDir !== undefined) { + env.DENO_DIR = this.denoDir + } + + // Ensure PATH is always set as otherwise we are not able to find the global deno binary + env[pathKey()] = inputEnv[pathKey({ env: inputEnv })] || process.env[pathKey()] + + return env + } + + // Runs the Deno CLI in the background and returns a reference to the child + // process, awaiting its execution. + async run( + args: string[], + { env: inputEnv, extendEnv = true, rejectOnExitCode = true, stderr, stdout }: RunOptions = {}, + ) { + const { path: binaryPath } = await this.getBinaryPath() + const env = this.getEnvironmentVariables(inputEnv) + const options: Options = { env, extendEnv, reject: rejectOnExitCode } + + return DenoBridge.runWithBinary(binaryPath, args, { options, stderr, stdout }) + } + + // Runs the Deno CLI in the background, assigning a reference of the child + // process to a `ps` property in the `ref` argument, if one is supplied. + async runInBackground( + args: string[], + ref?: ProcessRef, + { env: inputEnv, extendEnv = true, pipeOutput, stderr, stdout }: RunOptions = {}, + ) { + const { path: binaryPath } = await this.getBinaryPath() + const env = this.getEnvironmentVariables(inputEnv) + const options: Options = { env, extendEnv } + const ps = DenoBridge.runWithBinary(binaryPath, args, { options, pipeOutput, stderr, stdout }) + + if (ref !== undefined) { + ref.ps = ps + } + } +} + +export { DENO_VERSION_RANGE, DenoBridge } +export type { DenoOptions, OnAfterDownloadHook, OnBeforeDownloadHook, ProcessRef } diff --git a/packages/edge-bundler/node/bundle.ts b/packages/edge-bundler/node/bundle.ts new file mode 100644 index 0000000000..522130a704 --- /dev/null +++ b/packages/edge-bundler/node/bundle.ts @@ -0,0 +1,10 @@ +export enum BundleFormat { + ESZIP2 = 'eszip2', + JS = 'js', +} + +export interface Bundle { + extension: string + format: BundleFormat + hash: string +} diff --git a/packages/edge-bundler/node/bundle_error.ts b/packages/edge-bundler/node/bundle_error.ts new file mode 100644 index 0000000000..2857dd6657 --- /dev/null +++ b/packages/edge-bundler/node/bundle_error.ts @@ -0,0 +1,45 @@ +import type { ExecaError } from 'execa' + +interface BundleErrorOptions { + format: string +} + +const getCustomErrorInfo = (options?: BundleErrorOptions) => ({ + location: { + format: options?.format, + runtime: 'deno', + }, + type: 'functionsBundling', +}) + +class BundleError extends Error { + customErrorInfo: ReturnType + + constructor(originalError: Error, options?: BundleErrorOptions) { + super(originalError.message) + + this.customErrorInfo = getCustomErrorInfo(options) + this.name = 'BundleError' + this.stack = originalError.stack + + // https://github.com/microsoft/TypeScript-wiki/blob/8a66ecaf77118de456f7cd9c56848a40fe29b9b4/Breaking-Changes.md#implicit-any-error-raised-for-un-annotated-callback-arguments-with-no-matching-overload-arguments + Object.setPrototypeOf(this, BundleError.prototype) + } +} + +/** + * BundleErrors are treated as user-error, so Netlify Team is not alerted about them. + */ +const wrapBundleError = (input: unknown, options?: BundleErrorOptions) => { + if (input instanceof Error) { + if (input.message.includes("The module's source code could not be parsed")) { + input.message = (input as ExecaError).stderr + } + + return new BundleError(input, options) + } + + return input +} + +export { BundleError, wrapBundleError } diff --git a/packages/edge-bundler/node/bundler.test.ts b/packages/edge-bundler/node/bundler.test.ts new file mode 100644 index 0000000000..3d33ea8907 --- /dev/null +++ b/packages/edge-bundler/node/bundler.test.ts @@ -0,0 +1,570 @@ +import { Buffer } from 'buffer' +import { access, readdir, readFile, rm, writeFile } from 'fs/promises' +import { join, resolve } from 'path' +import process from 'process' +import { pathToFileURL } from 'url' + +import tmp from 'tmp-promise' +import { test, expect, vi } from 'vitest' + +import { importMapSpecifier } from '../shared/consts.js' +import { runESZIP, useFixture } from '../test/util.js' + +import { BundleError } from './bundle_error.js' +import { bundle, BundleOptions } from './bundler.js' +import { Declaration } from './declaration.js' +import { isFileNotFoundError } from './utils/error.js' +import { validateManifest } from './validation/manifest/index.js' + +test('Produces an ESZIP bundle', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_import_maps') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const userDirectory = join(basePath, 'user-functions') + const internalDirectory = join(basePath, 'functions') + const result = await bundle([userDirectory, internalDirectory], distPath, declarations, { + basePath, + configPath: join(internalDirectory, 'config.json'), + importMapPaths: [join(userDirectory, 'import_map.json')], + }) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(3) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + expect(() => validateManifest(manifest)).not.toThrowError() + const { bundles, import_map: importMapURL } = manifest + + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + + expect(importMapURL).toBe(importMapSpecifier) + + const bundlePath = join(distPath, bundles[0].asset) + + const { func1, func2, func3 } = await runESZIP(bundlePath) + + expect(func1).toBe('HELLO, JANE DOE!') + expect(func2).toBe('Jane Doe') + expect(func3).toBe('hello, netlify!') + + await cleanup() +}) + +test('Uses the vendored eszip module instead of fetching it from deno.land', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_import_maps') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const sourceDirectory = join(basePath, 'functions') + const result = await bundle([sourceDirectory], distPath, declarations, { + basePath, + configPath: join(sourceDirectory, 'config.json'), + }) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(1) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const { bundles } = manifest + + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + + await cleanup() +}) + +test('Adds a custom error property to user errors during bundling', async () => { + process.env.NO_COLOR = 'true' + expect.assertions(3) + + const { basePath, cleanup, distPath } = await useFixture('invalid_functions') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + + try { + await bundle([sourceDirectory], distPath, declarations, { basePath }) + } catch (error) { + expect(error).toBeInstanceOf(BundleError) + const [messageBeforeStack] = (error as BundleError).message.split('at (file://') + expect(messageBeforeStack).toMatchInlineSnapshot(` + "error: Uncaught (in promise) Error: The module's source code could not be parsed: Unexpected eof at file:///root/functions/func1.ts:1:27 + + export default async () => + ~ + const ret = new Error(getStringFromWasm0(arg0, arg1)); + ^ + " + `) + expect((error as BundleError).customErrorInfo).toEqual({ + location: { + format: 'eszip', + runtime: 'deno', + }, + type: 'functionsBundling', + }) + } finally { + await cleanup() + } +}) + +test('Prints a nice error message when user tries importing an npm module', async () => { + expect.assertions(2) + + const { basePath, cleanup, distPath } = await useFixture('imports_npm_module_scheme') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + + try { + await bundle([sourceDirectory], distPath, declarations, { + basePath, + }) + } catch (error) { + expect(error).toBeInstanceOf(BundleError) + expect((error as BundleError).message).toEqual( + `There was an error when loading the 'p-retry' npm module. Support for npm modules in edge functions is an experimental feature. Refer to https://ntl.fyi/edge-functions-npm for more information.`, + ) + } finally { + await cleanup() + } +}) + +test('Does not add a custom error property to system errors during bundling', async () => { + expect.assertions(1) + + try { + // @ts-expect-error Sending bad input to `bundle` to force a system error. + await bundle([123, 321], '/some/directory', declarations) + } catch (error) { + expect(error).not.toBeInstanceOf(BundleError) + } +}) + +test('Uses the cache directory as the `DENO_DIR` value', async () => { + expect.assertions(3) + + const { basePath, cleanup, distPath } = await useFixture('with_import_maps') + const sourceDirectory = join(basePath, 'functions') + const cacheDir = await tmp.dir() + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const options: BundleOptions = { + basePath, + cacheDirectory: cacheDir.path, + configPath: join(sourceDirectory, 'config.json'), + } + + const result = await bundle([sourceDirectory], distPath, declarations, options) + const outFiles = await readdir(distPath) + + expect(result.functions.length).toBe(1) + expect(outFiles.length).toBe(2) + + const denoDir = await readdir(join(cacheDir.path, 'deno_dir')) + + expect(denoDir.includes('gen')).toBe(true) + + await cleanup() +}) + +test('Supports import maps with relative paths', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_import_maps') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const result = await bundle([sourceDirectory], distPath, declarations, { + basePath, + configPath: join(sourceDirectory, 'config.json'), + }) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(1) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const { bundles } = manifest + + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + + await cleanup() +}) + +test('Ignores any user-defined `deno.json` files', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_import_maps') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + + // Creating an import map file that rewires the URL of the Deno registry to + // an invalid location. + const importMapFile = await tmp.file() + const importMap = { + imports: { + 'https://deno.land/': 'https://black.hole/', + }, + } + + await writeFile(importMapFile.path, JSON.stringify(importMap)) + + // Deno configuration files need to be in the current working directory. + // There's not a great way for us to set the working directory of the `deno` + // process that we'll run, so our best bet is to write the file to whatever + // is the current working directory now and then clean it up. + const denoConfigPath = join(process.cwd(), 'deno.json') + const denoConfig = { + importMap: importMapFile.path, + } + + try { + await access(denoConfigPath) + + throw new Error( + `The file at '${denoConfigPath} would be overwritten by this test. Please move the file to a different location and try again.'`, + ) + } catch (error) { + if (!isFileNotFoundError(error)) { + throw error + } + } + + await writeFile(denoConfigPath, JSON.stringify(denoConfig)) + + expect(() => + bundle([sourceDirectory], distPath, declarations, { + basePath, + configPath: join(sourceDirectory, 'config.json'), + }), + ).not.toThrow() + + await cleanup() + await rm(denoConfigPath, { force: true, recursive: true, maxRetries: 10 }) + await rm(importMapFile.path, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('Processes a function that imports a custom layer', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_layers') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const layer = { name: 'https://edge-function-layer-template.netlify.app/mod.ts', flag: 'edge-functions-layer-test' } + const result = await bundle([sourceDirectory], distPath, declarations, { + basePath, + configPath: join(sourceDirectory, 'config.json'), + }) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(1) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const { bundles, layers } = manifest + + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + + expect(layers).toEqual([layer]) + + await cleanup() +}) + +test('Loads declarations and import maps from the deploy configuration and in-source config', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_deploy_config') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const directories = [join(basePath, 'netlify', 'edge-functions'), join(basePath, '.netlify', 'edge-functions')] + const result = await bundle(directories, distPath, declarations, { + basePath, + configPath: join(basePath, '.netlify', 'edge-functions', 'manifest.json'), + internalSrcFolder: directories[1], + }) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(3) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const { bundles, function_config: functionConfig, routes } = manifest + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + + // respects excludedPath from deploy config + expect(routes[0].excluded_patterns).toEqual(['^/func2/skip/?$']) + + expect(functionConfig.func2).toEqual({ + name: 'Function two', + generator: '@netlify/fake-plugin@1.0.0', + }) + + // respects in-source config + expect(functionConfig.func3).toEqual({ + name: 'in-config-function', + on_error: 'bypass', + generator: 'internalFunc', + }) + + await cleanup() +}) + +test("Ignores entries in `importMapPaths` that don't point to an existing import map file", async () => { + const systemLogger = vi.fn() + const { basePath, cleanup, distPath } = await useFixture('with_import_maps') + const sourceDirectory = join(basePath, 'user-functions') + + // Creating import map file + const importMap = await tmp.file() + const importMapContents = { + imports: { + helper: pathToFileURL(join(basePath, 'helper.ts')).toString(), + }, + scopes: { + [pathToFileURL(join(sourceDirectory, 'func3/func3.ts')).toString()]: { + helper: pathToFileURL(join(basePath, 'helper2.ts')).toString(), + }, + }, + } + + await writeFile(importMap.path, JSON.stringify(importMapContents)) + + const nonExistingImportMapPath = join(distPath, 'some-file-that-does-not-exist.json') + const result = await bundle( + [sourceDirectory], + distPath, + [ + { + function: 'func1', + path: '/func1', + }, + ], + { + basePath, + importMapPaths: [nonExistingImportMapPath, importMap.path], + systemLogger, + }, + ) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(2) + expect(generatedFiles.length).toBe(2) + expect(systemLogger).toHaveBeenCalledWith(`Did not find an import map file at '${nonExistingImportMapPath}'.`) + + await cleanup() + await importMap.cleanup() +}) + +test('Handles imports with the `node:` prefix', async () => { + const { basePath, cleanup, distPath } = await useFixture('imports_node_specifier') + const userDirectory = join(basePath, 'netlify', 'edge-functions') + const result = await bundle([userDirectory], distPath, [], { + basePath, + importMapPaths: [join(userDirectory, 'import_map.json')], + }) + const generatedFiles = await readdir(distPath) + + expect(result.functions.length).toBe(1) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + + expect(() => validateManifest(manifest)).not.toThrowError() + + const { bundles, import_map: importMapURL, routes } = manifest + + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + expect(importMapURL).toBe(importMapSpecifier) + expect(routes.length).toBe(1) + expect(routes[0].function).toBe('func1') + expect(routes[0].pattern).toBe('^/func1/?$') + + const bundlePath = join(distPath, bundles[0].asset) + + const { func1 } = await runESZIP(bundlePath) + + expect(func1).toBe('ok') + + await cleanup() +}) + +test('Loads npm modules from bare specifiers', async () => { + const systemLogger = vi.fn() + const { basePath, cleanup, distPath } = await useFixture('imports_npm_module') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const vendorDirectory = await tmp.dir() + + await bundle([sourceDirectory], distPath, declarations, { + basePath, + importMapPaths: [join(basePath, 'import_map.json')], + vendorDirectory: vendorDirectory.path, + systemLogger, + }) + + expect( + systemLogger.mock.calls.find((call) => call[0] === 'Could not track dependencies in edge function:'), + ).toBeUndefined() + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const bundlePath = join(distPath, manifest.bundles[0].asset) + const { func1 } = await runESZIP(bundlePath, vendorDirectory.path) + + expect(func1).toBe( + `JavaScript, APIs${process.cwd()}, Markup${process.cwd()}`, + ) + + await cleanup() + await rm(vendorDirectory.path, { force: true, recursive: true }) +}) + +test('Loads npm modules in a monorepo setup', async () => { + const systemLogger = vi.fn() + const { basePath: rootPath, cleanup, distPath } = await useFixture('monorepo_npm_module') + const basePath = join(rootPath, 'packages', 'frontend') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const vendorDirectory = await tmp.dir() + + await bundle([sourceDirectory], distPath, declarations, { + basePath, + importMapPaths: [join(basePath, 'import_map.json')], + rootPath, + vendorDirectory: vendorDirectory.path, + systemLogger, + }) + + expect( + systemLogger.mock.calls.find((call) => call[0] === 'Could not track dependencies in edge function:'), + ).toBeUndefined() + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const bundlePath = join(distPath, manifest.bundles[0].asset) + const { func1 } = await runESZIP(bundlePath, vendorDirectory.path) + + expect(func1).toBe( + `JavaScript, APIs${process.cwd()}, Markup${process.cwd()}`, + ) + + await cleanup() + await rm(vendorDirectory.path, { force: true, recursive: true }) +}) + +test('Loads JSON modules', async () => { + const { basePath, cleanup, distPath } = await useFixture('imports_json') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const vendorDirectory = await tmp.dir() + + await bundle([sourceDirectory], distPath, declarations, { + basePath, + vendorDirectory: vendorDirectory.path, + }) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const bundlePath = join(distPath, manifest.bundles[0].asset) + const { func1 } = await runESZIP(bundlePath, vendorDirectory.path) + + expect(func1).toBe(`{"foo":"bar"}`) + + await cleanup() + await rm(vendorDirectory.path, { force: true, recursive: true }) +}) + +test('Supports TSX and process.env', async () => { + const { basePath, cleanup, distPath } = await useFixture('tsx') + const sourceDirectory = join(basePath, 'functions') + const declarations: Declaration[] = [ + { + function: 'func1', + path: '/func1', + }, + ] + const vendorDirectory = await tmp.dir() + + await bundle([sourceDirectory], distPath, declarations, { + basePath, + vendorDirectory: vendorDirectory.path, + }) + + const manifestFile = await readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const bundlePath = join(distPath, manifest.bundles[0].asset) + process.env.FOO = 'bar' + const { func1 } = await runESZIP(bundlePath, vendorDirectory.path) + + expect(Buffer.from(func1, 'base64').toString()).toBe( + `hippedy hoppedy, createElement is now a production property. Here, take this env var: FOO=bar`, + ) + + await cleanup() + await rm(vendorDirectory.path, { force: true, recursive: true }) + delete process.env.FOO +}) diff --git a/packages/edge-bundler/node/bundler.ts b/packages/edge-bundler/node/bundler.ts new file mode 100644 index 0000000000..adae92b230 --- /dev/null +++ b/packages/edge-bundler/node/bundler.ts @@ -0,0 +1,281 @@ +import { promises as fs } from 'fs' +import { join } from 'path' + +import commonPathPrefix from 'common-path-prefix' +import { v4 as uuidv4 } from 'uuid' + +import { importMapSpecifier } from '../shared/consts.js' + +import { DenoBridge, DenoOptions, OnAfterDownloadHook, OnBeforeDownloadHook } from './bridge.js' +import type { Bundle } from './bundle.js' +import { FunctionConfig, getFunctionConfig } from './config.js' +import { Declaration, mergeDeclarations } from './declaration.js' +import { load as loadDeployConfig } from './deploy_config.js' +import { EdgeFunction } from './edge_function.js' +import { FeatureFlags, getFlags } from './feature_flags.js' +import { findFunctions } from './finder.js' +import { bundle as bundleESZIP } from './formats/eszip.js' +import { ImportMap } from './import_map.js' +import { getLogger, LogFunction, Logger } from './logger.js' +import { writeManifest } from './manifest.js' +import { vendorNPMSpecifiers } from './npm_dependencies.js' +import { ensureLatestTypes } from './types.js' + +export interface BundleOptions { + basePath?: string + bootstrapURL?: string + cacheDirectory?: string + configPath?: string + debug?: boolean + distImportMapPath?: string + featureFlags?: FeatureFlags + importMapPaths?: (string | undefined)[] + internalSrcFolder?: string + onAfterDownload?: OnAfterDownloadHook + onBeforeDownload?: OnBeforeDownloadHook + rootPath?: string + systemLogger?: LogFunction + userLogger?: LogFunction + vendorDirectory?: string +} + +export const bundle = async ( + sourceDirectories: string[], + distDirectory: string, + tomlDeclarations: Declaration[] = [], + { + basePath: inputBasePath, + cacheDirectory, + configPath, + debug, + distImportMapPath, + featureFlags: inputFeatureFlags, + importMapPaths = [], + internalSrcFolder, + onAfterDownload, + onBeforeDownload, + rootPath, + userLogger, + systemLogger, + vendorDirectory, + }: BundleOptions = {}, +) => { + const logger = getLogger(systemLogger, userLogger, debug) + const featureFlags = getFlags(inputFeatureFlags) + const options: DenoOptions = { + debug, + cacheDirectory, + logger, + onAfterDownload, + onBeforeDownload, + } + + if (cacheDirectory !== undefined) { + options.denoDir = join(cacheDirectory, 'deno_dir') + } + + const deno = new DenoBridge(options) + const basePath = getBasePath(sourceDirectories, inputBasePath) + + await ensureLatestTypes(deno, logger) + + // The name of the bundle will be the hash of its contents, which we can't + // compute until we run the bundle process. For now, we'll use a random ID + // to create the bundle artifacts and rename them later. + const buildID = uuidv4() + + // Loading any configuration options from the deploy configuration API, if it + // exists. + const deployConfig = await loadDeployConfig(configPath, logger) + + // Layers are marked as externals in the ESZIP, so that those specifiers are + // not actually included in the bundle. + const externals = deployConfig.layers.map((layer) => layer.name) + + const userSourceDirectories = sourceDirectories.filter((dir) => dir !== internalSrcFolder) + + const importMap = new ImportMap() + + await importMap.addFiles([deployConfig?.importMap, ...importMapPaths], logger) + + const userFunctions = userSourceDirectories.length === 0 ? [] : await findFunctions(userSourceDirectories) + const internalFunctions = internalSrcFolder ? await findFunctions([internalSrcFolder]) : [] + const functions = [...internalFunctions, ...userFunctions] + const vendor = await safelyVendorNPMSpecifiers({ + basePath, + featureFlags, + functions, + importMap, + logger, + rootPath: rootPath ?? basePath, + vendorDirectory, + }) + + if (vendor) { + importMap.add(vendor.importMap) + } + + const functionBundle = await bundleESZIP({ + basePath, + buildID, + debug, + deno, + distDirectory, + externals, + functions, + featureFlags, + importMap, + vendorDirectory: vendor?.directory, + }) + + // The final file name of the bundles contains a SHA256 hash of the contents, + // which we can only compute now that the files have been generated. So let's + // rename the bundles to their permanent names. + await createFinalBundles([functionBundle], distDirectory, buildID) + + // Retrieving a configuration object for each function. + // Run `getFunctionConfig` in parallel as it is a non-trivial operation and spins up deno + const internalConfigPromises = internalFunctions.map( + async (func) => [func.name, await getFunctionConfig({ func, importMap, deno, log: logger })] as const, + ) + const userConfigPromises = userFunctions.map( + async (func) => [func.name, await getFunctionConfig({ func, importMap, deno, log: logger })] as const, + ) + + // Creating a hash of function names to configuration objects. + const internalFunctionsWithConfig = Object.fromEntries(await Promise.all(internalConfigPromises)) + const userFunctionsWithConfig = Object.fromEntries(await Promise.all(userConfigPromises)) + + // Creating a final declarations array by combining the TOML file with the + // deploy configuration API and the in-source configuration. + const declarations = mergeDeclarations( + tomlDeclarations, + userFunctionsWithConfig, + internalFunctionsWithConfig, + deployConfig.declarations, + featureFlags, + ) + + const internalFunctionConfig = createFunctionConfig({ + internalFunctionsWithConfig, + declarations, + }) + + const manifest = await writeManifest({ + bundles: [functionBundle], + declarations, + distDirectory, + featureFlags, + functions, + userFunctionConfig: userFunctionsWithConfig, + internalFunctionConfig, + importMap: importMapSpecifier, + layers: deployConfig.layers, + }) + + await vendor?.cleanup() + + if (distImportMapPath) { + await importMap.writeToFile(distImportMapPath) + } + + return { functions, manifest } +} + +const createFinalBundles = async (bundles: Bundle[], distDirectory: string, buildID: string) => { + const renamingOps = bundles.map(async ({ extension, hash }) => { + const tempBundlePath = join(distDirectory, `${buildID}${extension}`) + const finalBundlePath = join(distDirectory, `${hash}${extension}`) + + await fs.rename(tempBundlePath, finalBundlePath) + }) + + await Promise.all(renamingOps) +} + +const getBasePath = (sourceDirectories: string[], inputBasePath?: string) => { + // If there's a specific base path supplied, that takes precedence. + if (inputBasePath !== undefined) { + return inputBasePath + } + + // `common-path-prefix` returns an empty string when called with a single + // path, so we check for that case and return the path itself instead. + if (sourceDirectories.length === 1) { + return sourceDirectories[0] + } + + return commonPathPrefix(sourceDirectories) +} + +interface MergeWithDeclarationConfigOptions { + functionName: string + config: FunctionConfig + declarations: Declaration[] +} + +// We used to allow the `name` and `generator` fields to be defined at the +// declaration level. We want these properties to live at the function level +// in their config object, so we translate that for backwards-compatibility. +const mergeWithDeclarationConfig = ({ functionName, config, declarations }: MergeWithDeclarationConfigOptions) => { + const declaration = declarations?.find((decl) => decl.function === functionName) + + return { + ...config, + name: declaration?.name || config.name, + generator: declaration?.generator || config.generator, + } +} + +const addGeneratorFallback = (config: FunctionConfig) => ({ + ...config, + generator: config.generator || 'internalFunc', +}) + +interface CreateFunctionConfigOptions { + internalFunctionsWithConfig: Record + declarations: Declaration[] +} + +const createFunctionConfig = ({ internalFunctionsWithConfig, declarations }: CreateFunctionConfigOptions) => + Object.entries(internalFunctionsWithConfig).reduce((acc, [functionName, config]) => { + const mergedConfigFields = mergeWithDeclarationConfig({ functionName, config, declarations }) + + return { + ...acc, + [functionName]: addGeneratorFallback(mergedConfigFields), + } + }, {} as Record) + +interface VendorNPMOptions { + basePath: string + featureFlags: FeatureFlags + functions: EdgeFunction[] + importMap: ImportMap + logger: Logger + rootPath: string + vendorDirectory: string | undefined +} + +const safelyVendorNPMSpecifiers = async ({ + basePath, + functions, + importMap, + logger, + rootPath, + vendorDirectory, +}: VendorNPMOptions) => { + try { + return await vendorNPMSpecifiers({ + basePath, + directory: vendorDirectory, + functions: functions.map(({ path }) => path), + importMap, + logger, + environment: 'production', + rootPath, + }) + } catch (error) { + logger.system(error) + } +} diff --git a/packages/edge-bundler/node/config.test.ts b/packages/edge-bundler/node/config.test.ts new file mode 100644 index 0000000000..cc9b4c5689 --- /dev/null +++ b/packages/edge-bundler/node/config.test.ts @@ -0,0 +1,419 @@ +import { promises as fs } from 'fs' +import { rm } from 'fs/promises' +import { join, resolve } from 'path' +import { pathToFileURL } from 'url' + +import tmp from 'tmp-promise' +import { test, expect, vi, describe } from 'vitest' + +import { fixturesDir, useFixture } from '../test/util.js' + +import { DenoBridge } from './bridge.js' +import { bundle } from './bundler.js' +import { FunctionConfig, getFunctionConfig } from './config.js' +import type { Declaration } from './declaration.js' +import { ImportMap } from './import_map.js' +import { RateLimitAction, RateLimitAggregator } from './rate_limit.js' + +const importMapFile = { + baseURL: new URL('file:///some/path/import-map.json'), + imports: { + 'alias:helper': pathToFileURL(join(fixturesDir, 'helper.ts')).toString(), + }, +} + +const invalidDefaultExportErr = (path: string) => + `Default export in '${path}' must be a function. More on the Edge Functions API at https://ntl.fyi/edge-api.` + +interface TestFunctions { + error?: RegExp + expectedConfig?: FunctionConfig + name: string + source: string + testName: string + userLog?: string +} + +const functions: TestFunctions[] = [ + { + testName: 'no config', + expectedConfig: {}, + name: 'func1', + source: `export default async () => new Response("Hello from function one")`, + }, + { + testName: 'empty config', + expectedConfig: {}, + name: 'func2', + source: ` + export default async () => new Response("Hello from function two") + + export const config = {} + `, + }, + { + testName: 'config with wrong type', + name: 'func3', + source: ` + export default async () => new Response("Hello from function two") + + export const config = () => ({}) + `, + error: + /^The 'config' export in edge function at '(.*)' must be an object\. More on the Edge Functions API at https:\/\/ntl\.fyi\/edge-api\.$/, + }, + { + testName: 'config with syntax error', + name: 'func4', + source: ` + export default async () => new Response("Hello from function two") + + export const config + `, + error: + /^Could not load edge function at '(.*)'\. More on the Edge Functions API at https:\/\/ntl\.fyi\/edge-api\.$/, + }, + { + testName: 'config with correct onError', + expectedConfig: { onError: 'bypass' }, + name: 'func5', + source: ` + export default async () => new Response("Hello from function two") + export const config = { onError: "bypass" } + `, + }, + { + testName: 'config with wrong onError', + name: 'func6', + source: ` + export default async () => new Response("Hello from function two") + export const config = { onError: "foo" } + `, + error: /The 'onError' configuration property in edge function at .*/, + }, + { + testName: 'config with `path`', + expectedConfig: { path: '/home' }, + name: 'func7', + source: ` + export default async () => new Response("Hello from function three") + + export const config = { path: "/home" } + `, + }, + { + testName: 'config with path, generator, name and onError`', + expectedConfig: { + path: '/home', + generator: '@netlify/fake-plugin@1.0.0', + name: 'a displayName', + onError: 'bypass', + }, + name: 'func8', + source: ` + export default async () => new Response("Hello from function three") + + export const config = { + path: "/home", + generator: '@netlify/fake-plugin@1.0.0', + name: 'a displayName', + onError: 'bypass', + } + `, + }, + { + testName: 'config with ratelimit', + expectedConfig: { + path: '/ratelimit', + name: 'a limit rate', + rateLimit: { + windowSize: 10, + windowLimit: 100, + aggregateBy: [RateLimitAggregator.IP, RateLimitAggregator.Domain], + }, + }, + name: 'func9', + source: ` + export default async () => new Response("Rate my limits") + + export const config = { + path: "/ratelimit", + rateLimit: { + windowSize: 10, + windowLimit: 100, + aggregateBy: ["ip", "domain"], + }, + name: 'a limit rate', + } + `, + }, + { + testName: 'config with rewrite', + expectedConfig: { + path: '/rewrite', + name: 'a limit rewrite', + rateLimit: { + action: RateLimitAction.Rewrite, + to: '/rewritten', + windowSize: 20, + windowLimit: 200, + aggregateBy: [RateLimitAggregator.IP, RateLimitAggregator.Domain], + }, + }, + name: 'func9', + source: ` + export default async () => new Response("Rate my limits") + + export const config = { + path: "/rewrite", + rateLimit: { + action: "rewrite", + to: "/rewritten", + windowSize: 20, + windowLimit: 200, + aggregateBy: ["ip", "domain"], + }, + name: 'a limit rewrite', + } + `, + }, +] +describe('`getFunctionConfig` extracts configuration properties from function file', () => { + test.each(functions)('$testName', async (func) => { + const { path: tmpDir } = await tmp.dir() + const deno = new DenoBridge({ + cacheDirectory: tmpDir, + }) + + const logger = { + user: vi.fn().mockResolvedValue(null), + system: vi.fn().mockResolvedValue(null), + } + const path = join(tmpDir, `${func.name}.js`) + + await fs.writeFile(path, func.source) + + const funcCall = () => + getFunctionConfig({ + func: { + name: func.name, + path, + }, + importMap: new ImportMap([importMapFile]), + deno, + log: logger, + }) + + if (func.error) { + await expect(funcCall()).rejects.toThrowError(func.error) + } else if (func.userLog) { + await expect(funcCall()).resolves.not.toThrowError() + expect(logger.user).toHaveBeenCalledWith(expect.stringMatching(func.userLog)) + } else { + const config = await funcCall() + expect(config).toEqual(func.expectedConfig) + expect(logger.user).not.toHaveBeenCalled() + } + + await rm(tmpDir, { force: true, recursive: true, maxRetries: 10 }) + }) +}) + +test('Loads function paths from the in-source `config` function', async () => { + const { basePath, cleanup, distPath } = await useFixture('with_config') + const userDirectory = resolve(basePath, 'netlify', 'edge-functions') + const internalDirectory = resolve(basePath, '.netlify', 'edge-functions') + const declarations: Declaration[] = [ + { + function: 'framework-func2', + path: '/framework-func2', + }, + { + function: 'user-func2', + path: '/user-func2', + method: ['PATCH'], + }, + ] + const result = await bundle([internalDirectory, userDirectory], distPath, declarations, { + basePath, + configPath: join(internalDirectory, 'config.json'), + }) + const generatedFiles = await fs.readdir(distPath) + + expect(result.functions.length).toBe(7) + expect(generatedFiles.length).toBe(2) + + const manifestFile = await fs.readFile(resolve(distPath, 'manifest.json'), 'utf8') + const manifest = JSON.parse(manifestFile) + const { bundles, routes, post_cache_routes: postCacheRoutes, function_config: functionConfig } = manifest + + expect(bundles.length).toBe(1) + expect(bundles[0].format).toBe('eszip2') + expect(generatedFiles.includes(bundles[0].asset)).toBe(true) + + expect(routes.length).toBe(6) + expect(routes[0]).toEqual({ + function: 'framework-func2', + pattern: '^/framework-func2/?$', + excluded_patterns: [], + path: '/framework-func2', + }) + expect(routes[1]).toEqual({ + function: 'user-func2', + pattern: '^/user-func2/?$', + excluded_patterns: [], + path: '/user-func2', + methods: ['PATCH'], + }) + expect(routes[2]).toEqual({ + function: 'framework-func1', + pattern: '^/framework-func1/?$', + excluded_patterns: [], + path: '/framework-func1', + }) + expect(routes[3]).toEqual({ + function: 'user-func1', + pattern: '^/user-func1/?$', + excluded_patterns: [], + path: '/user-func1', + }) + expect(routes[4]).toEqual({ + function: 'user-func3', + pattern: '^/user-func3/?$', + excluded_patterns: [], + path: '/user-func3', + }) + expect(routes[5]).toEqual({ + function: 'user-func5', + pattern: '^/user-func5(?:/(.*))/?$', + excluded_patterns: [], + path: '/user-func5/*', + methods: ['GET'], + }) + + expect(postCacheRoutes.length).toBe(1) + expect(postCacheRoutes[0]).toEqual({ + function: 'user-func4', + pattern: '^/user-func4/?$', + excluded_patterns: [], + path: '/user-func4', + methods: ['POST', 'PUT'], + }) + + expect(Object.keys(functionConfig)).toHaveLength(1) + expect(functionConfig['user-func5']).toEqual({ + excluded_patterns: ['^/user-func5/excluded/?$'], + }) + + await cleanup() +}) + +test('Passes validation if default export exists and is a function', async () => { + const { path: tmpDir } = await tmp.dir() + const deno = new DenoBridge({ + cacheDirectory: tmpDir, + }) + + const func = { + name: 'func1', + source: ` + const func = () => new Response("Hello world!") + export default func + `, + } + + const logger = { + user: vi.fn().mockResolvedValue(null), + system: vi.fn().mockResolvedValue(null), + } + const path = join(tmpDir, `${func.name}.ts`) + + await fs.writeFile(path, func.source) + + await expect( + getFunctionConfig({ + func: { + name: func.name, + path, + }, + importMap: new ImportMap([importMapFile]), + deno, + log: logger, + }), + ).resolves.not.toThrow() + + await rm(tmpDir, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('Fails validation if default export is not function', async () => { + const { path: tmpDir } = await tmp.dir() + const deno = new DenoBridge({ + cacheDirectory: tmpDir, + }) + + const func = { + name: 'func2', + source: ` + const func = new Response("Hello world!") + export default func + `, + } + + const logger = { + user: vi.fn().mockResolvedValue(null), + system: vi.fn().mockResolvedValue(null), + } + const path = join(tmpDir, `${func.name}.ts`) + + await fs.writeFile(path, func.source) + + const config = getFunctionConfig({ + func: { + name: func.name, + path, + }, + importMap: new ImportMap([importMapFile]), + deno, + log: logger, + }) + + await expect(config).rejects.toThrowError(invalidDefaultExportErr(path)) + + await rm(tmpDir, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('Fails validation if default export is not present', async () => { + const { path: tmpDir } = await tmp.dir() + const deno = new DenoBridge({ + cacheDirectory: tmpDir, + }) + + const func = { + name: 'func3', + source: ` + export const func = () => new Response("Hello world!") + `, + } + + const logger = { + user: vi.fn().mockResolvedValue(null), + system: vi.fn().mockResolvedValue(null), + } + const path = join(tmpDir, `${func.name}.ts`) + + await fs.writeFile(path, func.source) + + const config = getFunctionConfig({ + func: { + name: func.name, + path, + }, + importMap: new ImportMap([importMapFile]), + deno, + log: logger, + }) + + await expect(config).rejects.toThrowError(invalidDefaultExportErr(path)) + + await rm(tmpDir, { force: true, recursive: true, maxRetries: 10 }) +}) diff --git a/packages/edge-bundler/node/config.ts b/packages/edge-bundler/node/config.ts new file mode 100644 index 0000000000..2e0b605d0e --- /dev/null +++ b/packages/edge-bundler/node/config.ts @@ -0,0 +1,179 @@ +import { promises as fs } from 'fs' +import { join } from 'path' +import { pathToFileURL } from 'url' + +import tmp from 'tmp-promise' + +import { DenoBridge } from './bridge.js' +import { BundleError } from './bundle_error.js' +import { EdgeFunction } from './edge_function.js' +import { ImportMap } from './import_map.js' +import { Logger } from './logger.js' +import { getPackagePath } from './package_json.js' +import { RateLimit } from './rate_limit.js' + +enum ConfigExitCode { + Success = 0, + UnhandledError = 1, + ImportError, + NoConfig, + InvalidExport, + SerializationError, + InvalidDefaultExport, +} + +export const enum Cache { + Off = 'off', + Manual = 'manual', +} + +export type HTTPMethod = 'GET' | 'POST' | 'PUT' | 'PATCH' | 'DELETE' | 'OPTIONS' + +export type Path = `/${string}` + +export type OnError = 'fail' | 'bypass' | Path + +export const isValidOnError = (value: unknown): value is OnError => { + if (typeof value === 'undefined') return true + if (typeof value !== 'string') return false + return value === 'fail' || value === 'bypass' || value.startsWith('/') +} + +export interface FunctionConfig { + cache?: Cache + path?: Path | Path[] + excludedPath?: Path | Path[] + onError?: OnError + name?: string + generator?: string + method?: HTTPMethod | HTTPMethod[] + rateLimit?: RateLimit +} + +const getConfigExtractor = () => { + const packagePath = getPackagePath() + const configExtractorPath = join(packagePath, 'deno', 'config.ts') + + return configExtractorPath +} + +export const getFunctionConfig = async ({ + func, + importMap, + deno, + log, +}: { + func: EdgeFunction + importMap: ImportMap + deno: DenoBridge + log: Logger +}) => { + // The extractor is a Deno script that will import the function and run its + // `config` export, if one exists. + const extractorPath = getConfigExtractor() + + // We need to collect the output of the config function, which should be a + // JSON object. Rather than printing it to stdout, the extractor will write + // it to a temporary file, which we then read in the Node side. This allows + // the config function to write to stdout and stderr without that interfering + // with the extractor. + const collector = await tmp.file() + + // The extractor will use its exit code to signal different error scenarios, + // based on the list of exit codes we send as an argument. We then capture + // the exit code to know exactly what happened and guide people accordingly. + const { exitCode, stderr, stdout } = await deno.run( + [ + 'run', + '--allow-env', + '--allow-net', + '--allow-read', + `--allow-write=${collector.path}`, + '--quiet', + `--import-map=${importMap.toDataURL()}`, + extractorPath, + pathToFileURL(func.path).href, + pathToFileURL(collector.path).href, + JSON.stringify(ConfigExitCode), + ], + { rejectOnExitCode: false }, + ) + + if (exitCode !== ConfigExitCode.Success) { + handleConfigError(func, exitCode, stderr, log) + + return {} + } + + if (stdout !== '') { + log.user(stdout) + } + + let collectorData: FunctionConfig = {} + + try { + const collectorDataJSON = await fs.readFile(collector.path, 'utf8') + collectorData = JSON.parse(collectorDataJSON) as FunctionConfig + } catch { + handleConfigError(func, ConfigExitCode.UnhandledError, stderr, log) + } finally { + await collector.cleanup() + } + + if (!isValidOnError(collectorData.onError)) { + throw new BundleError( + new Error( + `The 'onError' configuration property in edge function at '${func.path}' must be one of 'fail', 'bypass', or a path starting with '/'. Got '${collectorData.onError}'. More on the Edge Functions API at https://ntl.fyi/edge-api.`, + ), + ) + } + + return collectorData +} + +const handleConfigError = (func: EdgeFunction, exitCode: number, stderr: string, log: Logger) => { + switch (exitCode) { + case ConfigExitCode.ImportError: + log.user(stderr) + throw new BundleError( + new Error( + `Could not load edge function at '${func.path}'. More on the Edge Functions API at https://ntl.fyi/edge-api.`, + ), + ) + + break + + case ConfigExitCode.NoConfig: + log.system(`No in-source config found for edge function at '${func.path}'`) + + break + + case ConfigExitCode.InvalidExport: + throw new BundleError( + new Error( + `The 'config' export in edge function at '${func.path}' must be an object. More on the Edge Functions API at https://ntl.fyi/edge-api.`, + ), + ) + + break + + case ConfigExitCode.SerializationError: + throw new BundleError( + new Error( + `The 'config' object in the edge function at '${func.path}' must contain primitive values only. More on the Edge Functions API at https://ntl.fyi/edge-api.`, + ), + ) + break + + case ConfigExitCode.InvalidDefaultExport: + throw new BundleError( + new Error( + `Default export in '${func.path}' must be a function. More on the Edge Functions API at https://ntl.fyi/edge-api.`, + ), + ) + + default: + log.user(`Could not load configuration for edge function at '${func.path}'`) + log.user(stderr) + } +} diff --git a/packages/edge-bundler/node/declaration.test.ts b/packages/edge-bundler/node/declaration.test.ts new file mode 100644 index 0000000000..9b5b9a39ae --- /dev/null +++ b/packages/edge-bundler/node/declaration.test.ts @@ -0,0 +1,182 @@ +import { test, expect } from 'vitest' + +import { FunctionConfig } from './config.js' +import { Declaration, mergeDeclarations, normalizePattern } from './declaration.js' + +const deployConfigDeclarations: Declaration[] = [] + +test('Ensure the order of edge functions with FF', () => { + const deployConfigDeclarations: Declaration[] = [ + { function: 'framework-manifest-a', path: '/path1' }, + { function: 'framework-manifest-c', path: '/path3' }, + { function: 'framework-manifest-b', path: '/path2' }, + ] + + const tomlConfig: Declaration[] = [ + { function: 'user-toml-a', path: '/path1' }, + { function: 'user-toml-c', path: '/path3' }, + { function: 'user-toml-b', path: '/path2' }, + ] + + const userFuncConfig = { + 'user-isc-c': { path: ['/path1', '/path2'] }, + } as Record + + const internalFuncConfig = { + 'framework-isc-c': { path: ['/path1', '/path2'] }, + } as Record + + expect(mergeDeclarations(tomlConfig, userFuncConfig, internalFuncConfig, deployConfigDeclarations)).toMatchSnapshot() +}) + +test('In-source config takes precedence over netlify.toml config', () => { + const tomlConfig: Declaration[] = [ + { function: 'geolocation', path: '/geo', cache: 'off' }, + { function: 'json', path: '/json', cache: 'manual' }, + ] + + const userFuncConfig = { + geolocation: { path: ['/geo-isc', '/*'], cache: 'manual' }, + json: { path: '/json', cache: 'off' }, + } as Record + + const expectedDeclarations = [ + { function: 'geolocation', path: '/geo-isc', cache: 'manual' }, + { function: 'geolocation', path: '/*', cache: 'manual' }, + { function: 'json', path: '/json', cache: 'off' }, + ] + + const declarations = mergeDeclarations(tomlConfig, userFuncConfig, {}, deployConfigDeclarations) + + expect(declarations).toEqual(expectedDeclarations) +}) + +test("Declarations don't break if no in-source config is provided", () => { + const tomlConfig: Declaration[] = [ + { function: 'geolocation', path: '/geo', cache: 'off' }, + { function: 'json', path: '/json', cache: 'manual' }, + ] + + const userFuncConfig = { + geolocation: { path: ['/geo-isc'], cache: 'manual' }, + json: {}, + } as Record + + const expectedDeclarations = [ + { function: 'geolocation', path: '/geo-isc', cache: 'manual' }, + { function: 'json', path: '/json', cache: 'manual' }, + ] + + const declarations = mergeDeclarations(tomlConfig, userFuncConfig, {}, deployConfigDeclarations) + + expect(declarations).toEqual(expectedDeclarations) +}) + +test('In-source config works independent of the netlify.toml file if a path is defined and otherwise if no path is set', () => { + const tomlConfig: Declaration[] = [{ function: 'geolocation', path: '/geo', cache: 'off' }] + + const funcConfigWithPath = { + json: { path: ['/json', '/json-isc'], cache: 'off' }, + } as Record + + const funcConfigWithoutPath = { + json: { cache: 'off' }, + } as Record + + const expectedDeclarationsWithISCPath = [ + { function: 'geolocation', path: '/geo', cache: 'off' }, + { function: 'json', path: '/json', cache: 'off' }, + { function: 'json', path: '/json-isc', cache: 'off' }, + ] + + const expectedDeclarationsWithoutISCPath = [{ function: 'geolocation', path: '/geo', cache: 'off' }] + + const declarationsWithISCPath = mergeDeclarations(tomlConfig, funcConfigWithPath, {}, deployConfigDeclarations) + expect(declarationsWithISCPath).toEqual(expectedDeclarationsWithISCPath) + + const declarationsWithoutISCPath = mergeDeclarations(tomlConfig, funcConfigWithoutPath, {}, deployConfigDeclarations) + expect(declarationsWithoutISCPath).toEqual(expectedDeclarationsWithoutISCPath) +}) + +test('In-source config works if only the cache config property is set', () => { + const tomlConfig: Declaration[] = [{ function: 'geolocation', path: '/geo', cache: 'off' }] + + const funcConfig = { + geolocation: { cache: 'manual' }, + } as Record + + const expectedDeclarations = [{ function: 'geolocation', path: '/geo', cache: 'manual' }] + + expect(mergeDeclarations(tomlConfig, funcConfig, {}, deployConfigDeclarations)).toEqual(expectedDeclarations) +}) + +test("In-source config path property works if it's not an array", () => { + const tomlConfig: Declaration[] = [{ function: 'json', path: '/json-toml', cache: 'off' }] + + const funcConfig = { + json: { path: '/json', cache: 'manual' }, + } as Record + + const expectedDeclarations = [{ function: 'json', path: '/json', cache: 'manual' }] + + expect(mergeDeclarations(tomlConfig, funcConfig, {}, deployConfigDeclarations)).toEqual(expectedDeclarations) +}) + +test("In-source config path property works if it's not an array and it's not present in toml or deploy config", () => { + const tomlConfig: Declaration[] = [{ function: 'geolocation', path: '/geo', cache: 'off' }] + const funcConfig = { + json: { path: '/json-isc', cache: 'manual' }, + } as Record + + const expectedDeclarations = [ + { function: 'geolocation', path: '/geo', cache: 'off' }, + { function: 'json', path: '/json-isc', cache: 'manual' }, + ] + + expect(mergeDeclarations(tomlConfig, funcConfig, {}, deployConfigDeclarations)).toEqual(expectedDeclarations) +}) + +test('In-source config works if path property is an empty array with cache value specified', () => { + const tomlConfig: Declaration[] = [{ function: 'json', path: '/json-toml', cache: 'off' }] + + const funcConfig = { + json: { path: [], cache: 'manual' }, + } as Record + + const expectedDeclarations = [{ function: 'json', path: '/json-toml', cache: 'manual' }] + + expect(mergeDeclarations(tomlConfig, funcConfig, {}, deployConfigDeclarations)).toEqual(expectedDeclarations) +}) + +test('netlify.toml-defined excludedPath are respected', () => { + const tomlConfig: Declaration[] = [{ function: 'geolocation', path: '/geo/*', excludedPath: '/geo/exclude' }] + + const funcConfig = {} + + const expectedDeclarations = [{ function: 'geolocation', path: '/geo/*', excludedPath: '/geo/exclude' }] + + const declarations = mergeDeclarations(tomlConfig, funcConfig, {}, deployConfigDeclarations) + + expect(declarations).toEqual(expectedDeclarations) +}) + +test('Does not escape front slashes in a regex pattern if they are already escaped', () => { + const regexPattern = '^(?:\\/(_next\\/data\\/[^/]{1,}))?(?:\\/([^/.]{1,}))\\/shows(?:\\/(.*))(.json)?[\\/#\\?]?$' + const expected = '^(?:\\/(_next\\/data\\/[^/]{1,}))?(?:\\/([^/.]{1,}))\\/shows(?:\\/(.*))(.json)?[\\/#\\?]?$' + + expect(normalizePattern(regexPattern)).toEqual(expected) +}) + +test('Escapes front slashes in a regex pattern', () => { + const regexPattern = '^(?:/(_next/data/[^/]{1,}))?(?:/([^/.]{1,}))/shows(?:/(.*))(.json)?[/#\\?]?$' + const expected = '^(?:\\/(_next\\/data\\/[^/]{1,}))?(?:\\/([^/.]{1,}))\\/shows(?:\\/(.*))(.json)?[/#\\?]?$' + + expect(normalizePattern(regexPattern)).toEqual(expected) +}) + +test('Ensures pattern match on the whole path', () => { + const regexPattern = '/foo/.*/bar' + const expected = '^\\/foo\\/.*\\/bar$' + + expect(normalizePattern(regexPattern)).toEqual(expected) +}) diff --git a/packages/edge-bundler/node/declaration.ts b/packages/edge-bundler/node/declaration.ts new file mode 100644 index 0000000000..054b60f700 --- /dev/null +++ b/packages/edge-bundler/node/declaration.ts @@ -0,0 +1,136 @@ +import { FunctionConfig, HTTPMethod, Path } from './config.js' +import { FeatureFlags } from './feature_flags.js' + +interface BaseDeclaration { + cache?: string + function: string + method?: HTTPMethod | HTTPMethod[] + // todo: remove these two after a while and only support in-source config for non-route related configs + name?: string + generator?: string +} + +type DeclarationWithPath = BaseDeclaration & { + path: Path + excludedPath?: Path | Path[] +} + +type DeclarationWithPattern = BaseDeclaration & { + pattern: string + excludedPattern?: string | string[] +} + +export type Declaration = DeclarationWithPath | DeclarationWithPattern + +export const mergeDeclarations = ( + tomlDeclarations: Declaration[], + userFunctionsConfig: Record, + internalFunctionsConfig: Record, + deployConfigDeclarations: Declaration[], + // eslint-disable-next-line @typescript-eslint/no-unused-vars + _featureFlags: FeatureFlags = {}, +) => { + const functionsVisited: Set = new Set() + + const declarations: Declaration[] = [ + // INTEGRATIONS + // 1. Declarations from the integrations deploy config + ...getDeclarationsFromInput(deployConfigDeclarations, internalFunctionsConfig, functionsVisited), + // 2. Declarations from the integrations ISC + ...createDeclarationsFromFunctionConfigs(internalFunctionsConfig, functionsVisited), + + // USER + // 3. Declarations from the users toml config + ...getDeclarationsFromInput(tomlDeclarations, userFunctionsConfig, functionsVisited), + // 4. Declarations from the users ISC + ...createDeclarationsFromFunctionConfigs(userFunctionsConfig, functionsVisited), + ] + + return declarations +} + +const getDeclarationsFromInput = ( + inputDeclarations: Declaration[], + functionConfigs: Record, + functionsVisited: Set, +): Declaration[] => { + const declarations: Declaration[] = [] + // For any declaration for which we also have a function configuration object, + // we replace the path because that object takes precedence. + for (const declaration of inputDeclarations) { + const config = functionConfigs[declaration.function] + + if (!config) { + // If no config is found, add the declaration as is. + declarations.push(declaration) + } else if (config.path?.length) { + // If we have a path specified as either a string or non-empty array, + // create a declaration for each path. + const paths = Array.isArray(config.path) ? config.path : [config.path] + + paths.forEach((path) => { + declarations.push({ ...declaration, cache: config.cache, path }) + }) + } else { + // With an in-source config without a path, add the config to the declaration. + // eslint-disable-next-line @typescript-eslint/no-unused-vars + const { path, excludedPath, ...rest } = config + + declarations.push({ ...declaration, ...rest }) + } + + functionsVisited.add(declaration.function) + } + + return declarations +} + +const createDeclarationsFromFunctionConfigs = ( + functionConfigs: Record, + functionsVisited: Set, +): Declaration[] => { + const declarations: Declaration[] = [] + + for (const name in functionConfigs) { + const { cache, path, method } = functionConfigs[name] + + // If we have a path specified, create a declaration for each path. + if (!functionsVisited.has(name) && path) { + const paths = Array.isArray(path) ? path : [path] + + paths.forEach((singlePath) => { + const declaration: Declaration = { function: name, path: singlePath } + if (cache) { + declaration.cache = cache + } + if (method) { + declaration.method = method + } + declarations.push(declaration) + }) + } + } + + return declarations +} + +/** + * Normalizes a regular expression, ensuring it has a leading `^` and trailing + * `$` characters. + */ +export const normalizePattern = (pattern: string) => { + let enclosedPattern = pattern + + if (!pattern.startsWith('^')) { + enclosedPattern = `^${enclosedPattern}` + } + + if (!pattern.endsWith('$')) { + enclosedPattern = `${enclosedPattern}$` + } + + const regexp = new RegExp(enclosedPattern) + + // Strip leading and forward slashes. + return regexp.toString().slice(1, -1) +} diff --git a/packages/edge-bundler/node/deploy_config.test.ts b/packages/edge-bundler/node/deploy_config.test.ts new file mode 100644 index 0000000000..8de0206372 --- /dev/null +++ b/packages/edge-bundler/node/deploy_config.test.ts @@ -0,0 +1,60 @@ +import { promises as fs } from 'fs' +import { join } from 'path' +import { cwd } from 'process' + +import tmp from 'tmp-promise' +import { test, expect } from 'vitest' + +import { load } from './deploy_config.js' +import { getLogger } from './logger.js' + +const logger = getLogger(console.log) + +test('Returns an empty config object if there is no file at the given path', async () => { + const mockPath = join(cwd(), 'some-directory', `a-file-that-does-not-exist-${Date.now()}.json`) + const config = await load(mockPath, logger) + + expect(config.declarations).toEqual([]) + expect(config.layers).toEqual([]) +}) + +test('Returns a config object with declarations, layers, and import map', async () => { + const importMapFile = await tmp.file({ postfix: '.json' }) + const importMap = { + imports: { + 'https://deno.land/': 'https://black.hole/', + }, + } + + await fs.writeFile(importMapFile.path, JSON.stringify(importMap)) + + const configFile = await tmp.file() + const config = { + functions: [ + { + function: 'func1', + path: '/func1', + generator: 'internalFunc', + }, + ], + layers: [ + { + name: 'layer1', + flag: 'edge_functions_layer1_url', + local: 'https://some-url.netlify.app/mod.ts', + }, + ], + import_map: importMapFile.path, + version: 1, + } + + await fs.writeFile(configFile.path, JSON.stringify(config)) + + const parsedConfig = await load(configFile.path, logger) + + await importMapFile.cleanup() + + expect(parsedConfig.declarations).toEqual(config.functions) + expect(parsedConfig.layers).toEqual(config.layers) + expect(parsedConfig.importMap).toBe(importMapFile.path) +}) diff --git a/packages/edge-bundler/node/deploy_config.ts b/packages/edge-bundler/node/deploy_config.ts new file mode 100644 index 0000000000..7ca2ba9923 --- /dev/null +++ b/packages/edge-bundler/node/deploy_config.ts @@ -0,0 +1,64 @@ +import { promises as fs } from 'fs' +import { dirname, resolve } from 'path' + +import type { Declaration } from './declaration.js' +import type { Layer } from './layer.js' +import type { Logger } from './logger.js' +import { isFileNotFoundError } from './utils/error.js' + +interface DeployConfigFile { + functions?: Declaration[] + import_map?: string + layers?: Layer[] + version: number +} + +export interface DeployConfig { + declarations: Declaration[] + importMap?: string + layers: Layer[] +} + +export const load = async (path: string | undefined, logger: Logger): Promise => { + if (path === undefined) { + return { + declarations: [], + layers: [], + } + } + + try { + const data = await fs.readFile(path, 'utf8') + const config = JSON.parse(data) as DeployConfigFile + + return parse(config, path) + } catch (error) { + if (!isFileNotFoundError(error)) { + logger.system('Error while parsing internal edge functions manifest:', error) + } + } + + return { + declarations: [], + layers: [], + } +} + +const parse = (data: DeployConfigFile, path: string) => { + if (data.version !== 1) { + throw new Error(`Unsupported file version: ${data.version}`) + } + + const config: DeployConfig = { + declarations: data.functions ?? [], + layers: data.layers ?? [], + } + + if (data.import_map) { + const importMapPath = resolve(dirname(path), data.import_map) + + config.importMap = importMapPath + } + + return config +} diff --git a/packages/edge-bundler/node/downloader.test.ts b/packages/edge-bundler/node/downloader.test.ts new file mode 100644 index 0000000000..30905a8632 --- /dev/null +++ b/packages/edge-bundler/node/downloader.test.ts @@ -0,0 +1,165 @@ +import { rm } from 'fs/promises' +import { platform } from 'process' +import { PassThrough } from 'stream' + +import { execa } from 'execa' +import nock from 'nock' +import tmp from 'tmp-promise' +import { beforeEach, afterEach, test, expect, TestContext as VitestTestContext, vi } from 'vitest' + +import { fixturesDir, testLogger } from '../test/util.js' + +import { download } from './downloader.js' +import { getPlatformTarget } from './platform.js' + +// This changes the defaults for p-retry +// minTimeout 1000 -> 10 +// factor 2 -> 1 +// This reduces the wait time in the tests from `2s, 4s, 8s` to `10ms, 10ms, 10ms` for 3 retries +vi.mock('p-retry', async (importOriginal) => { + const pRetry = (await importOriginal()) as typeof import('p-retry') + type Params = Parameters + + return { + default: (func: Params[0], options: Params[1]) => pRetry.default(func, { minTimeout: 10, factor: 1, ...options }), + } +}) + +const streamError = () => { + const stream = new PassThrough() + setTimeout(() => stream.emit('data', 'zipcontent'), 100) + setTimeout(() => stream.emit('error', new Error('stream error')), 200) + + return stream +} + +interface TestContext extends VitestTestContext { + tmpDir: string +} + +beforeEach(async (ctx: TestContext) => { + const tmpDir = await tmp.dir() + + ctx.tmpDir = tmpDir.path +}) + +afterEach(async (ctx: TestContext) => { + await rm(ctx.tmpDir, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('tries downloading binary up to 4 times', async (ctx: TestContext) => { + nock.disableNetConnect() + + const version = '99.99.99' + const mockURL = 'https://dl.deno.land:443' + const target = getPlatformTarget() + const zipPath = `/release/v${version}/deno-${target}.zip` + const latestVersionMock = nock(mockURL) + .get('/release-latest.txt') + .reply(200, `v${version}\n`) + + // first attempt + .get(zipPath) + .reply(500) + + // second attempt + .get(zipPath) + .reply(500) + + // third attempt + .get(zipPath) + .reply(500) + + // fourth attempt + .get(zipPath) + // 1 second delay + .delayBody(1000) + .replyWithFile(200, platform === 'win32' ? `${fixturesDir}/deno.win.zip` : `${fixturesDir}/deno.zip`, { + 'Content-Type': 'application/zip', + }) + + const deno = await download(ctx.tmpDir, `^${version}`, testLogger) + + expect(latestVersionMock.isDone()).toBe(true) + expect(deno).toBeTruthy() + + const res = await execa(deno) + expect(res.stdout).toBe('hello') +}) + +test('fails downloading binary after 4th time', async (ctx: TestContext) => { + expect.assertions(2) + + nock.disableNetConnect() + + const version = '99.99.99' + const mockURL = 'https://dl.deno.land:443' + const target = getPlatformTarget() + const zipPath = `/release/v${version}/deno-${target}.zip` + const latestVersionMock = nock(mockURL) + .get('/release-latest.txt') + .reply(200, `v${version}\n`) + + // first attempt + .get(zipPath) + .reply(500) + + // second attempt + .get(zipPath) + .reply(500) + + // third attempt + .get(zipPath) + .reply(500) + + // fourth attempt + .get(zipPath) + .reply(500) + + try { + await download(ctx.tmpDir, `^${version}`, testLogger) + } catch (error) { + expect(error).toMatch(/Download failed with status code 500/) + } + + expect(latestVersionMock.isDone()).toBe(true) +}) + +test('fails downloading if response stream throws error', async (ctx: TestContext) => { + expect.assertions(2) + + nock.disableNetConnect() + + const version = '99.99.99' + const mockURL = 'https://dl.deno.land:443' + const target = getPlatformTarget() + const zipPath = `/release/v${version}/deno-${target}.zip` + + const latestVersionMock = nock(mockURL) + .get('/release-latest.txt') + .reply(200, `v${version}\n`) + + // first attempt + .get(zipPath) + .reply(200, streamError) + + // second attempt + .get(zipPath) + .reply(200, streamError) + + // third attempt + .get(zipPath) + .reply(200, streamError) + + // fourth attempt + .get(zipPath) + .reply(200, streamError) + + try { + await download(ctx.tmpDir, `^${version}`, testLogger) + } catch (error) { + expect(error).toMatch(/stream error/) + } + + expect(latestVersionMock.isDone()).toBe(true) +}) diff --git a/packages/edge-bundler/node/downloader.ts b/packages/edge-bundler/node/downloader.ts new file mode 100644 index 0000000000..f9859ad75a --- /dev/null +++ b/packages/edge-bundler/node/downloader.ts @@ -0,0 +1,115 @@ +import { createWriteStream, promises as fs } from 'fs' +import path from 'path' +import { promisify } from 'util' + +import fetch from 'node-fetch' +import StreamZip from 'node-stream-zip' +import pRetry from 'p-retry' +import semver from 'semver' + +import { Logger } from './logger.js' +import { getBinaryExtension, getPlatformTarget } from './platform.js' + +const downloadWithRetry = async (targetDirectory: string, versionRange: string, logger: Logger) => + await pRetry(async () => await download(targetDirectory, versionRange), { + retries: 3, + onFailedAttempt: (error) => { + logger.system('Deno download with retry failed', error) + }, + }) + +const download = async (targetDirectory: string, versionRange: string) => { + const zipPath = path.join(targetDirectory, 'deno-cli-latest.zip') + const data = await downloadVersion(versionRange) + const binaryName = `deno${getBinaryExtension()}` + const binaryPath = path.join(targetDirectory, binaryName) + const file = createWriteStream(zipPath) + + try { + await new Promise((resolve, reject) => { + data.on('error', reject) + file.on('finish', resolve) + data.pipe(file) + }) + + await extractBinaryFromZip(zipPath, binaryPath, binaryName) + + return binaryPath + } finally { + // Try closing and deleting the zip file in any case, error or not + await promisify(file.close.bind(file))() + + try { + await fs.unlink(zipPath) + } catch { + // no-op + } + } +} + +const downloadVersion = async (versionRange: string) => { + const version = await getLatestVersionForRange(versionRange) + const url = getReleaseURL(version) + const res = await fetch(url) + + if (res.body === null || res.status < 200 || res.status > 299) { + throw new Error(`Download failed with status code ${res.status}`) + } + + return res.body +} + +const extractBinaryFromZip = async (zipPath: string, binaryPath: string, binaryName: string) => { + const { async: StreamZipAsync } = StreamZip + const zip = new StreamZipAsync({ file: zipPath }) + + await zip.extract(binaryName, binaryPath) + await zip.close() + await fs.chmod(binaryPath, '755') +} + +const getLatestVersion = async () => { + try { + const response = await fetch('https://dl.deno.land/release-latest.txt') + const data = await response.text() + + // We want to extract from the format `v`. + const version = data.match(/^v?(\d+\.\d+\.\d+)/) + + if (version === null) { + return + } + + return version[1] + } catch { + // This is a no-op. If we failed to retrieve the latest version, let's + // return `undefined` and let the code upstream handle it. + } +} + +const getLatestVersionForRange = async (range: string) => { + const minimumVersion = semver.minVersion(range)?.version + + // We should never get here, because it means that `DENO_VERSION_RANGE` is + // a malformed semver range. If this does happen, let's throw an error so + // that the tests catch it. + if (minimumVersion === undefined) { + throw new Error('Incorrect version range specified by Edge Bundler') + } + + const latestVersion = await getLatestVersion() + + if (latestVersion === undefined || !semver.satisfies(latestVersion, range)) { + return minimumVersion + } + + return latestVersion +} + +const getReleaseURL = (version: string) => { + const target = getPlatformTarget() + + return `https://dl.deno.land/release/v${version}/deno-${target}.zip` +} + +export { downloadWithRetry as download } diff --git a/packages/edge-bundler/node/edge_function.ts b/packages/edge-bundler/node/edge_function.ts new file mode 100644 index 0000000000..9b77f51dfe --- /dev/null +++ b/packages/edge-bundler/node/edge_function.ts @@ -0,0 +1,4 @@ +export interface EdgeFunction { + name: string + path: string +} diff --git a/packages/edge-bundler/node/feature_flags.ts b/packages/edge-bundler/node/feature_flags.ts new file mode 100644 index 0000000000..bbb1af7173 --- /dev/null +++ b/packages/edge-bundler/node/feature_flags.ts @@ -0,0 +1,16 @@ +const defaultFlags = {} + +type FeatureFlag = keyof typeof defaultFlags +type FeatureFlags = Partial> + +const getFlags = (input: Record = {}, flags = defaultFlags): FeatureFlags => + Object.entries(flags).reduce( + (result, [key, defaultValue]) => ({ + ...result, + [key]: input[key] === undefined ? defaultValue : input[key], + }), + {}, + ) + +export { defaultFlags, getFlags } +export type { FeatureFlag, FeatureFlags } diff --git a/packages/edge-bundler/node/finder.test.ts b/packages/edge-bundler/node/finder.test.ts new file mode 100644 index 0000000000..983f2923aa --- /dev/null +++ b/packages/edge-bundler/node/finder.test.ts @@ -0,0 +1,20 @@ +import { test, expect } from 'vitest' + +import { removeDuplicatesByExtension } from './finder.js' + +test('filters out any duplicate files based on the extension', () => { + const functions = [ + 'file1.js', + 'file1.ts', + 'file2.tsx', + 'file2.jsx', + 'file3.tsx', + 'file3.js', + 'file4.ts', + 'file5.ts', + 'file5.tsx', + ] + const expected = ['file1.js', 'file2.jsx', 'file3.js', 'file4.ts', 'file5.ts'] + + expect(removeDuplicatesByExtension(functions)).toStrictEqual(expected) +}) diff --git a/packages/edge-bundler/node/finder.ts b/packages/edge-bundler/node/finder.ts new file mode 100644 index 0000000000..12a0a5283f --- /dev/null +++ b/packages/edge-bundler/node/finder.ts @@ -0,0 +1,95 @@ +import { promises as fs } from 'fs' +import { basename, extname, join, parse } from 'path' + +import { EdgeFunction } from './edge_function.js' +import { nonNullable } from './utils/non_nullable.js' + +// the order of the allowed extensions is also the order we remove duplicates +// with a lower index meaning a higher precedence over the others +const ALLOWED_EXTENSIONS = ['.js', '.jsx', '.mjs', '.mts', '.ts', '.tsx'] + +export const removeDuplicatesByExtension = (functions: string[]) => { + const seen = new Map() + + return Object.values( + functions.reduce((acc, path) => { + const { ext, name } = parse(path) + const extIndex = ALLOWED_EXTENSIONS.indexOf(ext) + + if (!seen.has(name) || seen.get(name) > extIndex) { + seen.set(name, extIndex) + return { ...acc, [name]: path } + } + + return acc + }, {}), + ) as string[] +} + +const findFunctionInDirectory = async (directory: string): Promise => { + const name = basename(directory) + const candidatePaths = ALLOWED_EXTENSIONS.flatMap((extension) => [`${name}${extension}`, `index${extension}`]).map( + (filename) => join(directory, filename), + ) + + let functionPath + + for (const candidatePath of candidatePaths) { + try { + const stats = await fs.stat(candidatePath) + + if (stats.isFile()) { + functionPath = candidatePath + + break + } + } catch { + // no-op + } + } + + if (functionPath === undefined) { + return + } + + return { + name, + path: functionPath, + } +} + +const findFunctionInPath = async (path: string): Promise => { + const stats = await fs.stat(path) + + if (stats.isDirectory()) { + return findFunctionInDirectory(path) + } + + const extension = extname(path) + + if (ALLOWED_EXTENSIONS.includes(extension)) { + return { name: basename(path, extension), path } + } +} + +const findFunctionsInDirectory = async (baseDirectory: string) => { + let items: string[] = [] + + try { + items = await fs.readdir(baseDirectory).then(removeDuplicatesByExtension) + } catch { + // no-op + } + + const functions = await Promise.all(items.map((item) => findFunctionInPath(join(baseDirectory, item)))) + + return functions.filter(nonNullable) +} + +const findFunctions = async (directories: string[]) => { + const functions = await Promise.all(directories.map(findFunctionsInDirectory)) + + return functions.flat() +} + +export { findFunctions } diff --git a/packages/edge-bundler/node/formats/eszip.ts b/packages/edge-bundler/node/formats/eszip.ts new file mode 100644 index 0000000000..432c07ff36 --- /dev/null +++ b/packages/edge-bundler/node/formats/eszip.ts @@ -0,0 +1,88 @@ +import { join } from 'path' +import { pathToFileURL } from 'url' + +import { virtualRoot, virtualVendorRoot } from '../../shared/consts.js' +import type { WriteStage2Options } from '../../shared/stage2.js' +import { DenoBridge } from '../bridge.js' +import { Bundle, BundleFormat } from '../bundle.js' +import { wrapBundleError } from '../bundle_error.js' +import { EdgeFunction } from '../edge_function.js' +import { FeatureFlags } from '../feature_flags.js' +import { ImportMap } from '../import_map.js' +import { wrapNpmImportError } from '../npm_import_error.js' +import { getPackagePath } from '../package_json.js' +import { getFileHash } from '../utils/sha256.js' + +interface BundleESZIPOptions { + basePath: string + buildID: string + debug?: boolean + deno: DenoBridge + distDirectory: string + externals: string[] + featureFlags: FeatureFlags + functions: EdgeFunction[] + importMap: ImportMap + vendorDirectory?: string +} + +const bundleESZIP = async ({ + basePath, + buildID, + debug, + deno, + distDirectory, + externals, + functions, + importMap, + vendorDirectory, +}: BundleESZIPOptions): Promise => { + const extension = '.eszip' + const destPath = join(distDirectory, `${buildID}${extension}`) + const importMapPrefixes: Record = { + [`${pathToFileURL(basePath)}/`]: virtualRoot, + } + + if (vendorDirectory !== undefined) { + importMapPrefixes[`${pathToFileURL(vendorDirectory)}/`] = virtualVendorRoot + } + + const { bundler, importMap: bundlerImportMap } = getESZIPPaths() + const importMapData = JSON.stringify(importMap.getContents(importMapPrefixes)) + const payload: WriteStage2Options = { + basePath, + destPath, + externals, + functions, + importMapData, + vendorDirectory, + } + const flags = ['--allow-all', '--no-config', `--import-map=${bundlerImportMap}`] + + if (!debug) { + flags.push('--quiet') + } + + try { + await deno.run(['run', ...flags, bundler, JSON.stringify(payload)], { pipeOutput: true }) + } catch (error: unknown) { + throw wrapBundleError(wrapNpmImportError(error), { + format: 'eszip', + }) + } + + const hash = await getFileHash(destPath) + + return { extension, format: BundleFormat.ESZIP2, hash } +} + +const getESZIPPaths = () => { + const denoPath = join(getPackagePath(), 'deno') + + return { + bundler: join(denoPath, 'bundle.ts'), + importMap: join(denoPath, 'vendor', 'import_map.json'), + } +} + +export { bundleESZIP as bundle } diff --git a/packages/edge-bundler/node/formats/javascript.ts b/packages/edge-bundler/node/formats/javascript.ts new file mode 100644 index 0000000000..0e7ae20962 --- /dev/null +++ b/packages/edge-bundler/node/formats/javascript.ts @@ -0,0 +1,86 @@ +import { mkdir, writeFile } from 'fs/promises' +import { join } from 'path' +import { pathToFileURL } from 'url' + +import { EdgeFunction } from '../edge_function.js' +import type { FormatFunction } from '../server/server.js' + +const defaultFormatExportTypeError: FormatFunction = (name) => + `The Edge Function "${name}" has failed to load. Does it have a function as the default export?` + +const defaultFormatImportError: FormatFunction = (name) => `There was an error with Edge Function "${name}".` + +interface GenerateStage2Options { + bootstrapURL: string + distDirectory: string + fileName: string + formatExportTypeError?: FormatFunction + formatImportError?: FormatFunction + functions: EdgeFunction[] +} + +const generateStage2 = async ({ + bootstrapURL, + distDirectory, + fileName, + formatExportTypeError, + formatImportError, + functions, +}: GenerateStage2Options) => { + await mkdir(distDirectory, { recursive: true }) + + const entryPoint = getLocalEntryPoint(functions, { bootstrapURL, formatExportTypeError, formatImportError }) + const stage2Path = join(distDirectory, fileName) + + await writeFile(stage2Path, entryPoint) + + return stage2Path +} + +interface GetLocalEntryPointOptions { + bootstrapURL: string + formatExportTypeError?: FormatFunction + formatImportError?: FormatFunction +} + +// For the local development environment, we import the user functions with +// dynamic imports to gracefully handle the case where the file doesn't have +// a valid default export. +const getLocalEntryPoint = ( + functions: EdgeFunction[], + { + bootstrapURL, + formatExportTypeError = defaultFormatExportTypeError, + formatImportError = defaultFormatImportError, + }: GetLocalEntryPointOptions, +) => { + const bootImport = `import { boot } from "${bootstrapURL}";` + const declaration = `const functions = {}; const metadata = { functions: {} };` + const imports = functions.map((func) => { + const url = pathToFileURL(func.path) + const metadata = { + url, + } + + return ` + try { + const { default: func } = await import("${url}"); + + if (typeof func === "function") { + functions["${func.name}"] = func; + metadata.functions["${func.name}"] = ${JSON.stringify(metadata)} + } else { + console.log(${JSON.stringify(formatExportTypeError(func.name))}); + } + } catch (error) { + console.log(${JSON.stringify(formatImportError(func.name))}); + console.error(error); + } + ` + }) + const bootCall = `boot(functions, metadata);` + + return [bootImport, declaration, ...imports, bootCall].join('\n\n') +} + +export { generateStage2, getLocalEntryPoint } diff --git a/packages/edge-bundler/node/home_path.ts b/packages/edge-bundler/node/home_path.ts new file mode 100644 index 0000000000..244c60b422 --- /dev/null +++ b/packages/edge-bundler/node/home_path.ts @@ -0,0 +1,9 @@ +import { join } from 'path' + +import envPaths from 'env-paths' + +const OSBasedPaths = envPaths('netlify', { suffix: '' }) + +const getPathInHome = (path: string) => join(OSBasedPaths.config, path) + +export { getPathInHome } diff --git a/packages/edge-bundler/node/import_map.test.ts b/packages/edge-bundler/node/import_map.test.ts new file mode 100644 index 0000000000..fc53441208 --- /dev/null +++ b/packages/edge-bundler/node/import_map.test.ts @@ -0,0 +1,251 @@ +import { promises as fs } from 'fs' +import { join } from 'path' +import { cwd } from 'process' +import { pathToFileURL } from 'url' + +import tmp from 'tmp-promise' +import { describe, test, expect } from 'vitest' + +import { ImportMap } from './import_map.js' +import { getLogger } from './logger.js' + +test('Handles import maps with full URLs without specifying a base URL', () => { + const basePath = join(cwd(), 'my-cool-site', 'import-map.json') + const inputFile1 = { + baseURL: pathToFileURL(basePath), + imports: { + 'alias:jamstack': 'https://jamstack.org', + }, + } + const inputFile2 = { + baseURL: pathToFileURL(basePath), + imports: { + 'alias:pets': 'https://petsofnetlify.com/', + }, + } + + const map = new ImportMap([inputFile1, inputFile2]) + + const m1 = map.getContents() + + expect(m1.imports['netlify:edge']).toBe('https://edge.netlify.com/v1/index.ts?v=legacy') + expect(m1.imports['@netlify/edge-functions']).toBe('https://edge.netlify.com/v1/index.ts') + expect(m1.imports['alias:jamstack']).toBe('https://jamstack.org/') + expect(m1.imports['alias:pets']).toBe('https://petsofnetlify.com/') + + const m2 = map.getContentsWithURLObjects() + + expect(m2.imports['netlify:edge']).toStrictEqual(new URL('https://edge.netlify.com/v1/index.ts?v=legacy')) + expect(m2.imports['@netlify/edge-functions']).toStrictEqual(new URL('https://edge.netlify.com/v1/index.ts')) + expect(m2.imports['alias:jamstack']).toStrictEqual(new URL('https://jamstack.org/')) + expect(m2.imports['alias:pets']).toStrictEqual(new URL('https://petsofnetlify.com/')) +}) + +test('Resolves relative paths to absolute paths if a base path is not provided', () => { + const basePath = join(cwd(), 'my-cool-site', 'import-map.json') + const inputFile1 = { + baseURL: pathToFileURL(basePath), + imports: { + 'alias:pets': './heart/pets/', + }, + } + + const map = new ImportMap([inputFile1]) + const expectedPath = join(cwd(), 'my-cool-site', 'heart', 'pets') + + const m1 = map.getContents() + + expect(m1.imports['netlify:edge']).toBe('https://edge.netlify.com/v1/index.ts?v=legacy') + expect(m1.imports['@netlify/edge-functions']).toBe('https://edge.netlify.com/v1/index.ts') + expect(m1.imports['alias:pets']).toBe(`${pathToFileURL(expectedPath).toString()}/`) + + const m2 = map.getContentsWithURLObjects() + + expect(m2.imports['netlify:edge']).toStrictEqual(new URL('https://edge.netlify.com/v1/index.ts?v=legacy')) + expect(m2.imports['@netlify/edge-functions']).toStrictEqual(new URL('https://edge.netlify.com/v1/index.ts')) + expect(m2.imports['alias:pets']).toStrictEqual(new URL(`${pathToFileURL(expectedPath).toString()}/`)) +}) + +describe('Returns the fully resolved import map', () => { + const inputFile1 = { + baseURL: new URL('file:///some/full/path/import-map.json'), + imports: { + specifier1: 'file:///some/full/path/file.js', + specifier2: './file2.js', + specifier3: 'file:///different/full/path/file3.js', + }, + } + const inputFile2 = { + baseURL: new URL('file:///some/cool/path/import-map.json'), + imports: { + 'lib/*': './library/', + }, + scopes: { + 'with/scopes/': { + 'lib/*': 'https://external.netlify/lib/', + foo: './foo-alias', + bar: 'file:///different/full/path/bar.js', + }, + }, + } + + test('Without prefixes', () => { + const map = new ImportMap([inputFile1, inputFile2]) + const { imports, scopes } = map.getContents() + + expect(imports).toStrictEqual({ + 'lib/*': 'file:///some/cool/path/library/', + specifier3: 'file:///different/full/path/file3.js', + specifier2: 'file:///some/full/path/file2.js', + specifier1: 'file:///some/full/path/file.js', + '@netlify/edge-functions': 'https://edge.netlify.com/v1/index.ts', + 'netlify:edge': 'https://edge.netlify.com/v1/index.ts?v=legacy', + }) + + expect(scopes).toStrictEqual({ + 'file:///some/cool/path/with/scopes/': { + 'lib/*': 'https://external.netlify/lib/', + foo: 'file:///some/cool/path/foo-alias', + bar: 'file:///different/full/path/bar.js', + }, + }) + }) + + test('With prefixes', () => { + const map = new ImportMap([inputFile1, inputFile2]) + const { imports, scopes } = map.getContents({ + 'file:///some/': 'file:///root/', + 'file:///different/': 'file:///vendor/', + }) + + expect(imports).toStrictEqual({ + 'lib/*': 'file:///root/cool/path/library/', + specifier3: 'file:///vendor/full/path/file3.js', + specifier2: 'file:///root/full/path/file2.js', + specifier1: 'file:///root/full/path/file.js', + '@netlify/edge-functions': 'https://edge.netlify.com/v1/index.ts', + 'netlify:edge': 'https://edge.netlify.com/v1/index.ts?v=legacy', + }) + + expect(scopes).toStrictEqual({ + 'file:///root/cool/path/with/scopes/': { + 'lib/*': 'https://external.netlify/lib/', + foo: 'file:///root/cool/path/foo-alias', + bar: 'file:///vendor/full/path/bar.js', + }, + }) + }) +}) + +test('Throws when an import map uses a relative path to reference a file outside of the base path', () => { + const inputFile1 = { + baseURL: pathToFileURL(join(cwd(), 'import-map.json')), + imports: { + 'alias:file': '../file.js', + }, + } + + const map = new ImportMap([inputFile1], cwd()) + + expect(() => map.getContents()).toThrowError( + `Import map cannot reference '${join(cwd(), '..', 'file.js')}' as it's outside of the base directory '${cwd()}'`, + ) +}) + +test('Writes import map file to disk', async () => { + const file = await tmp.file() + const basePath = join(cwd(), 'my-cool-site', 'import-map.json') + const inputFile1 = { + baseURL: pathToFileURL(basePath), + imports: { + 'alias:pets': './heart/pets/file.ts', + }, + } + + const map = new ImportMap([inputFile1]) + + await map.writeToFile(file.path) + + const createdFile = await fs.readFile(file.path, 'utf8') + const { imports } = JSON.parse(createdFile) + const expectedPath = join(cwd(), 'my-cool-site', 'heart', 'pets', 'file.ts') + + await file.cleanup() + + expect(imports['netlify:edge']).toBe('https://edge.netlify.com/v1/index.ts?v=legacy') + expect(imports['@netlify/edge-functions']).toBe('https://edge.netlify.com/v1/index.ts') + expect(imports['alias:pets']).toBe(pathToFileURL(expectedPath).toString()) +}) + +test('Respects import map when it has only scoped key', async () => { + const file = await tmp.file() + const importMap = { + scopes: { + './foo': { + 'alias:pets': './heart/pets/file.ts', + }, + }, + } + await fs.writeFile(file.path, JSON.stringify(importMap)) + const map = new ImportMap() + await map.addFile(file.path, getLogger()) + + expect(map.getContents()).toEqual({ + imports: { + 'netlify:edge': 'https://edge.netlify.com/v1/index.ts?v=legacy', + '@netlify/edge-functions': 'https://edge.netlify.com/v1/index.ts', + }, + scopes: { + [pathToFileURL(join(file.path, '../foo')).href]: { + 'alias:pets': pathToFileURL(join(file.path, '../heart/pets/file.ts')).href, + }, + }, + }) +}) + +test('Clones an import map', () => { + const basePath = join(cwd(), 'my-cool-site', 'import-map.json') + const inputFile1 = { + baseURL: pathToFileURL(basePath), + imports: { + 'alias:jamstack': 'https://jamstack.org', + }, + } + const inputFile2 = { + baseURL: pathToFileURL(basePath), + imports: { + 'alias:pets': 'https://petsofnetlify.com/', + }, + } + + const map1 = new ImportMap([inputFile1, inputFile2]) + const map2 = map1.clone() + + map2.add({ + baseURL: pathToFileURL(basePath), + imports: { + netlify: 'https://netlify.com', + }, + }) + + expect(map1.getContents()).toStrictEqual({ + imports: { + 'netlify:edge': 'https://edge.netlify.com/v1/index.ts?v=legacy', + '@netlify/edge-functions': 'https://edge.netlify.com/v1/index.ts', + 'alias:jamstack': 'https://jamstack.org/', + 'alias:pets': 'https://petsofnetlify.com/', + }, + scopes: {}, + }) + + expect(map2.getContents()).toStrictEqual({ + imports: { + 'netlify:edge': 'https://edge.netlify.com/v1/index.ts?v=legacy', + '@netlify/edge-functions': 'https://edge.netlify.com/v1/index.ts', + 'alias:jamstack': 'https://jamstack.org/', + 'alias:pets': 'https://petsofnetlify.com/', + netlify: 'https://netlify.com/', + }, + scopes: {}, + }) +}) diff --git a/packages/edge-bundler/node/import_map.ts b/packages/edge-bundler/node/import_map.ts new file mode 100644 index 0000000000..c3cabfe75d --- /dev/null +++ b/packages/edge-bundler/node/import_map.ts @@ -0,0 +1,268 @@ +import { Buffer } from 'buffer' +import { promises as fs } from 'fs' +import { dirname, relative } from 'path' +import { fileURLToPath, pathToFileURL } from 'url' + +import { parse, ParsedImportMap } from '@import-maps/resolve' + +import { Logger } from './logger.js' +import { isFileNotFoundError } from './utils/error.js' + +const INTERNAL_IMPORTS = { + '@netlify/edge-functions': 'https://edge.netlify.com/v1/index.ts', + 'netlify:edge': 'https://edge.netlify.com/v1/index.ts?v=legacy', +} + +type Imports = Record + +export interface ImportMapFile { + baseURL: URL + imports?: Imports + scopes?: Record +} + +// ImportMap can take several import map files and merge them into a final +// import map object, also adding the internal imports in the right order. +export class ImportMap { + // The root path which import maps can reference. If an import map attempts + // to reference a file outside this directory, an error will be thrown. + rootPath: string | null + + // The different import map files that make up the wider import map. + sources: ImportMapFile[] + + constructor(sources: ImportMapFile[] = [], rootPath: string | null = null) { + this.rootPath = rootPath + this.sources = [] + + sources.forEach((file) => { + this.add(file) + }) + } + + add(source: ImportMapFile) { + this.sources.push(source) + } + + async addFile(path: string, logger: Logger) { + const source = await ImportMap.readFile(path, logger) + + return this.add(source) + } + + async addFiles(paths: (string | undefined)[], logger: Logger) { + for (const path of paths) { + if (path === undefined) { + continue + } + + await this.addFile(path, logger) + } + } + + // Applies a list of prefixes to an `imports` block, by transforming values + // with the `applyPrefixesToPath` method. + static applyPrefixesToImports(imports: Imports, prefixes: Record): Imports { + return Object.entries(imports).reduce( + (acc, [key, value]) => ({ + ...acc, + [key]: ImportMap.applyPrefixesToPath(value, prefixes), + }), + {}, + ) + } + + clone() { + return new ImportMap(this.sources, this.rootPath) + } + + static convertImportsToURLObjects(imports: Imports) { + return Object.entries(imports).reduce( + (acc, [key, value]) => ({ + ...acc, + [key]: new URL(value), + }), + {} as Record, + ) + } + + static convertScopesToURLObjects(scopes: Record) { + return Object.entries(scopes).reduce( + (acc, [key, value]) => ({ + ...acc, + [key]: ImportMap.convertImportsToURLObjects(value), + }), + {} as Record>, + ) + } + + // Applies a list of prefixes to a given path, returning the replaced path. + // For example, given a `path` of `file:///foo/bar/baz.js` and a `prefixes` + // object with `{"file:///foo/": "file:///hello/"}`, this method will return + // `file:///hello/bar/baz.js`. If no matching prefix is found, the original + // path is returned. + static applyPrefixesToPath(path: string, prefixes: Record) { + for (const prefix in prefixes) { + if (path.startsWith(prefix)) { + return path.replace(prefix, prefixes[prefix]) + } + } + + return path + } + + // Takes an `imports` object and filters out any entries without a URL. Also, + // it checks whether the import map is referencing a path outside `rootPath`, + // if one is set. + filterImports(imports: Record = {}) { + const filteredImports: Record = {} + + Object.keys(imports).forEach((specifier) => { + const url = imports[specifier] + + // If there's no URL, don't even add the specifier to the final imports. + if (url === null) { + return + } + + if (this.rootPath !== null) { + const path = fileURLToPath(url) + const relativePath = relative(this.rootPath, path) + + if (relativePath.startsWith('..')) { + throw new Error( + `Import map cannot reference '${path}' as it's outside of the base directory '${this.rootPath}'`, + ) + } + } + + filteredImports[specifier] = url.toString() + }) + + return filteredImports + } + + // Takes a `scopes` object and runs all imports through `filterImports`, + // omitting any scopes for which there are no imports. + filterScopes(scopes?: ParsedImportMap['scopes']) { + const filteredScopes: Record = {} + + if (scopes !== undefined) { + Object.keys(scopes).forEach((url) => { + const imports = this.filterImports(scopes[url]) + + if (Object.keys(imports).length === 0) { + return + } + + filteredScopes[url] = imports + }) + } + + return filteredScopes + } + + // Returns the import map as a plain object, with any relative paths resolved + // to full URLs. It takes an optional `prefixes` object that specifies a list + // of prefixes to replace path prefixes (see `applyPrefixesToPath`). Prefixes + // will be applied on both `imports` and `scopes`. + getContents(prefixes: Record = {}) { + let imports: Imports = {} + let scopes: Record = {} + + this.sources.forEach((file) => { + const importMap = this.resolve(file) + + imports = { ...imports, ...importMap.imports } + scopes = { ...scopes, ...importMap.scopes } + }) + + // Internal imports must come last, because we need to guarantee that + // `netlify:edge` isn't user-defined. + Object.entries(INTERNAL_IMPORTS).forEach((internalImport) => { + const [specifier, url] = internalImport + + imports[specifier] = url + }) + + const transformedImports = ImportMap.applyPrefixesToImports(imports, prefixes) + const transformedScopes = Object.entries(scopes).reduce( + (acc, [key, value]) => ({ + ...acc, + [ImportMap.applyPrefixesToPath(key, prefixes)]: ImportMap.applyPrefixesToImports(value, prefixes), + }), + {}, + ) + + return { + imports: transformedImports, + scopes: transformedScopes, + } + } + + // The same as `getContents`, but the URLs are represented as URL objects + // instead of strings. This is compatible with the `ParsedImportMap` type + // from the `@import-maps/resolve` library. + getContentsWithURLObjects(prefixes: Record = {}) { + const { imports, scopes } = this.getContents(prefixes) + + return { + imports: ImportMap.convertImportsToURLObjects(imports), + scopes: ImportMap.convertScopesToURLObjects(scopes), + } + } + + static async readFile(path: string, logger: Logger): Promise { + const baseURL = pathToFileURL(path) + + try { + const data = await fs.readFile(path, 'utf8') + const importMap = JSON.parse(data) + + return { + ...importMap, + baseURL, + } + } catch (error) { + if (isFileNotFoundError(error)) { + logger.system(`Did not find an import map file at '${path}'.`) + } else { + logger.user(`Error while loading import map at '${path}':`, error) + } + } + + return { + baseURL, + imports: {}, + } + } + + // Resolves an import map file by transforming all relative paths into full + // URLs. The `baseURL` property of each file is used to resolve all relative + // paths against. + resolve(source: ImportMapFile) { + const { baseURL, ...importMap } = source + const parsedImportMap = parse(importMap, baseURL) + const imports = this.filterImports(parsedImportMap.imports) + const scopes = this.filterScopes(parsedImportMap.scopes) + + return { ...parsedImportMap, imports, scopes } + } + + toDataURL() { + const data = JSON.stringify(this.getContents()) + const encodedImportMap = Buffer.from(data).toString('base64') + + return `data:application/json;base64,${encodedImportMap}` + } + + async writeToFile(path: string) { + const distDirectory = dirname(path) + + await fs.mkdir(distDirectory, { recursive: true }) + + const contents = this.getContents() + + await fs.writeFile(path, JSON.stringify(contents)) + } +} diff --git a/packages/edge-bundler/node/index.ts b/packages/edge-bundler/node/index.ts new file mode 100644 index 0000000000..88babb3c21 --- /dev/null +++ b/packages/edge-bundler/node/index.ts @@ -0,0 +1,11 @@ +export { bundle } from './bundler.js' +export { DenoBridge } from './bridge.js' +export type { FunctionConfig } from './config.js' +export { Declaration, mergeDeclarations } from './declaration.js' +export type { EdgeFunction } from './edge_function.js' +export { findFunctions as find } from './finder.js' +export { generateManifest } from './manifest.js' +export type { EdgeFunctionConfig, Manifest } from './manifest.js' +export type { ModuleGraphJson as ModuleGraph } from './vendor/module_graph/module_graph.js' +export { serve } from './server/server.js' +export { validateManifest, ManifestValidationError } from './validation/manifest/index.js' diff --git a/packages/edge-bundler/node/layer.ts b/packages/edge-bundler/node/layer.ts new file mode 100644 index 0000000000..7e91c47985 --- /dev/null +++ b/packages/edge-bundler/node/layer.ts @@ -0,0 +1,4 @@ +export interface Layer { + flag: string + name: string +} diff --git a/packages/edge-bundler/node/logger.test.ts b/packages/edge-bundler/node/logger.test.ts new file mode 100644 index 0000000000..2e47c8f023 --- /dev/null +++ b/packages/edge-bundler/node/logger.test.ts @@ -0,0 +1,70 @@ +import { afterEach, test, expect, vi } from 'vitest' + +import { getLogger } from './logger.js' + +const consoleLog = console.log + +const noopLogger = () => { + // no-op +} + +afterEach(() => { + // Restoring global `console.log`. + console.log = consoleLog +}) + +test('Prints user logs to stdout if no user logger is provided', () => { + const mockConsoleLog = vi.fn() + console.log = mockConsoleLog + + const logger1 = getLogger(noopLogger, undefined, true) + const logger2 = getLogger(noopLogger, undefined, false) + + logger1.user('Hello with `debug: true`') + logger2.user('Hello with `debug: false`') + + expect(mockConsoleLog).toHaveBeenCalledTimes(2) + expect(mockConsoleLog).toHaveBeenNthCalledWith(1, 'Hello with `debug: true`') + expect(mockConsoleLog).toHaveBeenNthCalledWith(2, 'Hello with `debug: false`') +}) + +test('Prints user logs to user logger provided', () => { + const userLogger = vi.fn() + const logger = getLogger(noopLogger, userLogger, true) + + logger.user('Hello!') + + expect(userLogger).toHaveBeenCalledTimes(1) + expect(userLogger).toHaveBeenNthCalledWith(1, 'Hello!') +}) + +test('Prints system logs to the system logger provided', () => { + const mockSystemLog = vi.fn() + const mockConsoleLog = vi.fn() + console.log = mockSystemLog + + const logger1 = getLogger(mockSystemLog, undefined, true) + const logger2 = getLogger(mockSystemLog, undefined, false) + + logger1.system('Hello with `debug: true`') + logger2.system('Hello with `debug: false`') + + expect(mockConsoleLog).toHaveBeenCalledTimes(0) + expect(mockSystemLog).toHaveBeenCalledTimes(2) + expect(mockSystemLog).toHaveBeenNthCalledWith(1, 'Hello with `debug: true`') + expect(mockSystemLog).toHaveBeenNthCalledWith(2, 'Hello with `debug: false`') +}) + +test('Prints system logs to stdout if there is no system logger provided and `debug` is enabled', () => { + const mockConsoleLog = vi.fn() + console.log = mockConsoleLog + + const logger1 = getLogger(undefined, undefined, true) + const logger2 = getLogger(undefined, undefined, false) + + logger1.system('Hello with `debug: true`') + logger2.system('Hello with `debug: false`') + + expect(mockConsoleLog).toHaveBeenCalledTimes(1) + expect(mockConsoleLog).toHaveBeenNthCalledWith(1, 'Hello with `debug: true`') +}) diff --git a/packages/edge-bundler/node/logger.ts b/packages/edge-bundler/node/logger.ts new file mode 100644 index 0000000000..aa55080896 --- /dev/null +++ b/packages/edge-bundler/node/logger.ts @@ -0,0 +1,26 @@ +type LogFunction = (...args: unknown[]) => void + +const noopLogger: LogFunction = () => { + // no-op +} + +interface Logger { + system: LogFunction + user: LogFunction +} + +const getLogger = (systemLogger?: LogFunction, userLogger?: LogFunction, debug = false): Logger => { + // If there is a system logger configured, we'll use that. If there isn't, + // we'll pipe system logs to stdout if `debug` is enabled and swallow them + // otherwise. + const system = systemLogger ?? (debug ? console.log : noopLogger) + const user = userLogger ?? console.log + + return { + system, + user, + } +} + +export { getLogger } +export type { LogFunction, Logger } diff --git a/packages/edge-bundler/node/main.test.ts b/packages/edge-bundler/node/main.test.ts new file mode 100644 index 0000000000..b530bc6b1f --- /dev/null +++ b/packages/edge-bundler/node/main.test.ts @@ -0,0 +1,55 @@ +import { Buffer } from 'buffer' +import { rm } from 'fs/promises' +import { createRequire } from 'module' +import { platform } from 'process' +import { PassThrough } from 'stream' + +import nock from 'nock' +import semver from 'semver' +import tmp from 'tmp-promise' +import { test, expect, vi } from 'vitest' + +import { DenoBridge, DENO_VERSION_RANGE } from './bridge.js' +import { getPlatformTarget } from './platform.js' + +const require = createRequire(import.meta.url) +const archiver = require('archiver') + +test('Downloads the Deno CLI on demand and caches it for subsequent calls', async () => { + const latestVersion = semver.minVersion(DENO_VERSION_RANGE)?.version ?? '' + const mockBinaryOutput = `#!/usr/bin/env sh\n\necho "deno ${latestVersion}"` + const data = new PassThrough() + const archive = archiver('zip', { zlib: { level: 9 } }) + + archive.pipe(data) + archive.append(Buffer.from(mockBinaryOutput), { name: platform === 'win32' ? 'deno.exe' : 'deno' }) + archive.finalize() + + const target = getPlatformTarget() + const latestReleaseMock = nock('https://dl.deno.land').get('/release-latest.txt').reply(200, `v${latestVersion}`) + const downloadMock = nock('https://dl.deno.land') + .get(`/release/v${latestVersion}/deno-${target}.zip`) + .reply(200, () => data) + + const tmpDir = await tmp.dir() + const beforeDownload = vi.fn() + const afterDownload = vi.fn() + const deno = new DenoBridge({ + cacheDirectory: tmpDir.path, + onBeforeDownload: beforeDownload, + onAfterDownload: afterDownload, + useGlobal: false, + }) + const output1 = await deno.run(['help']) + const output2 = await deno.run(['help']) + const expectedOutput = /^deno [\d.]+/ + + expect(latestReleaseMock.isDone()).toBe(true) + expect(downloadMock.isDone()).toBe(true) + expect(output1?.stdout ?? '').toMatch(expectedOutput) + expect(output2?.stdout ?? '').toMatch(expectedOutput) + expect(beforeDownload).toHaveBeenCalledTimes(1) + expect(afterDownload).toHaveBeenCalledTimes(1) + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) diff --git a/packages/edge-bundler/node/manifest.test.ts b/packages/edge-bundler/node/manifest.test.ts new file mode 100644 index 0000000000..f3e94ddfaf --- /dev/null +++ b/packages/edge-bundler/node/manifest.test.ts @@ -0,0 +1,574 @@ +import { test, expect } from 'vitest' + +// @ts-expect-error current tsconfig.json doesn't allow this, but I don't want to change it +import { version } from '../package.json' assert { type: 'json' } +import { getRouteMatcher } from '../test/util.js' + +import { BundleFormat } from './bundle.js' +import { BundleError } from './bundle_error.js' +import { Cache, FunctionConfig } from './config.js' +import { Declaration } from './declaration.js' +import { generateManifest } from './manifest.js' +import { RateLimitAction, RateLimitAggregator } from './rate_limit.js' + +test('Generates a manifest with different bundles', () => { + const bundle1 = { + extension: '.ext1', + format: BundleFormat.ESZIP2, + hash: '123456', + } + const bundle2 = { + extension: '.ext2', + format: BundleFormat.ESZIP2, + hash: '654321', + } + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1' }] + const { manifest } = generateManifest({ bundles: [bundle1, bundle2], declarations, functions }) + + const expectedBundles = [ + { asset: bundle1.hash + bundle1.extension, format: bundle1.format }, + { asset: bundle2.hash + bundle2.extension, format: bundle2.format }, + ] + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1/?$', excluded_patterns: [], path: '/f1' }] + + expect(manifest.bundles).toEqual(expectedBundles) + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.bundler_version).toBe(version as string) +}) + +test('Generates a manifest with display names', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1/*' }] + + const internalFunctionConfig: Record = { + 'func-1': { + name: 'Display Name', + }, + } + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + internalFunctionConfig, + }) + + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: [], path: '/f1/*' }] + expect(manifest.function_config).toEqual({ + 'func-1': { name: 'Display Name' }, + }) + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.bundler_version).toBe(version as string) +}) + +test('Generates a manifest with a generator field', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1/*' }] + const internalFunctionConfig: Record = { + 'func-1': { + generator: '@netlify/fake-plugin@1.0.0', + }, + } + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + internalFunctionConfig, + }) + + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: [], path: '/f1/*' }] + const expectedFunctionConfig = { 'func-1': { generator: '@netlify/fake-plugin@1.0.0' } } + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.function_config).toEqual(expectedFunctionConfig) +}) + +test('Generates a manifest with excluded paths and patterns', () => { + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + { name: 'func-3', path: '/path/to/func-3.ts' }, + ] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1/*', excludedPath: '/f1/exclude' }, + { function: 'func-2', pattern: '^/f2(?:/(.*))/?$', excludedPattern: ['^/f2/exclude$', '^/f2/exclude-as-well$'] }, + { function: 'func-3', path: '/*', excludedPath: '/**/*.html' }, + ] + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + }) + const expectedRoutes = [ + { function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: ['^/f1/exclude/?$'], path: '/f1/*' }, + { + function: 'func-2', + pattern: '^/f2(?:/(.*))/?$', + excluded_patterns: ['^/f2/exclude$', '^/f2/exclude-as-well$'], + }, + { + function: 'func-3', + pattern: '^(?:/(.*))/?$', + excluded_patterns: ['^(?:/((?:.*)(?:/(?:.*))*))?(?:/(.*))\\.html/?$'], + path: '/*', + }, + ] + + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.function_config).toEqual({}) + expect(manifest.bundler_version).toBe(version as string) + + const matcher = getRouteMatcher(manifest) + + expect(matcher('/f1/hello')?.function).toBe('func-1') + expect(matcher('/grandparent/parent/child/grandchild.html')?.function).toBeUndefined() +}) + +test('TOML-defined paths can be combined with ISC-defined excluded paths', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1/*' }] + const userFunctionConfig: Record = { + 'func-1': { excludedPath: '/f1/exclude' }, + } + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + }) + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: [], path: '/f1/*' }] + + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.function_config).toEqual({ + 'func-1': { excluded_patterns: ['^/f1/exclude/?$'] }, + }) + expect(manifest.bundler_version).toBe(version as string) +}) + +test('Filters out internal in-source configurations in user created functions', () => { + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + ] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1/*' }, + { function: 'func-2', pattern: '^/f2(?:/(.*))/?$' }, + ] + const userFunctionConfig: Record = { + 'func-1': { + onError: '/custom-error', + cache: Cache.Manual, + excludedPath: '/f1/exclude', + path: '/path/to/func-1.ts', + name: 'User function', + generator: 'fake-generator', + }, + } + const internalFunctionConfig: Record = { + 'func-2': { + onError: 'bypass', + cache: Cache.Off, + excludedPath: '/f2/exclude', + path: '/path/to/func-2.ts', + name: 'Internal function', + generator: 'internal-generator', + }, + } + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + internalFunctionConfig, + }) + expect(manifest.function_config).toEqual({ + 'func-1': { + on_error: '/custom-error', + excluded_patterns: ['^/f1/exclude/?$'], + }, + 'func-2': { + on_error: 'bypass', + cache: Cache.Off, + name: 'Internal function', + generator: 'internal-generator', + excluded_patterns: ['^/f2/exclude/?$'], + }, + }) +}) + +test('excludedPath from ISC goes into function_config, TOML goes into routes', () => { + const functions = [{ name: 'customisation', path: '/path/to/customisation.ts' }] + const declarations: Declaration[] = [ + { function: 'customisation', path: '/showcases/*' }, + { function: 'customisation', path: '/checkout/*', excludedPath: ['/*/terms-and-conditions'] }, + ] + const userFunctionConfig: Record = { + customisation: { + excludedPath: ['/*.css', '/*.jpg'], + }, + } + const internalFunctionConfig: Record = {} + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + internalFunctionConfig, + }) + expect(manifest.routes).toEqual([ + { + function: 'customisation', + pattern: '^/showcases(?:/(.*))/?$', + excluded_patterns: [], + path: '/showcases/*', + }, + { + function: 'customisation', + pattern: '^/checkout(?:/(.*))/?$', + excluded_patterns: ['^(?:/(.*))/terms-and-conditions/?$'], + path: '/checkout/*', + }, + ]) + expect(manifest.function_config).toEqual({ + customisation: { + excluded_patterns: ['^(?:/(.*))\\.css/?$', '^(?:/(.*))\\.jpg/?$'], + }, + }) + + const matcher = getRouteMatcher(manifest) + + expect(matcher('/showcases/boho-style')).toBeDefined() + expect(matcher('/checkout/address')).toBeDefined() + expect(matcher('/checkout/terms-and-conditions')).toBeUndefined() + expect(matcher('/checkout/scrooge-mc-duck-animation.css')).toBeUndefined() + expect(matcher('/showcases/boho-style/expensive-chair.jpg')).toBeUndefined() +}) + +test('URLPattern named groups are supported', () => { + const functions = [{ name: 'customisation', path: '/path/to/customisation.ts' }] + const declarations: Declaration[] = [{ function: 'customisation', path: '/products/:productId' }] + const userFunctionConfig: Record = {} + const internalFunctionConfig: Record = {} + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + internalFunctionConfig, + }) + expect(manifest.routes).toEqual([ + { + function: 'customisation', + pattern: '^/products(?:/([^/]+?))/?$', + excluded_patterns: [], + path: '/products/:productId', + }, + ]) + + const matcher = getRouteMatcher(manifest) + + expect(matcher('/products/jigsaw-doweling-jig')).toBeDefined() +}) + +test('Invalid Path patterns throw bundling errors', () => { + const functions = [{ name: 'customisation', path: '/path/to/customisation.ts' }] + const declarations: Declaration[] = [{ function: 'customisation', path: '/https://foo.netlify.app/' }] + const userFunctionConfig: Record = {} + const internalFunctionConfig: Record = {} + + expect(() => + generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + internalFunctionConfig, + }), + ).toThrowError(BundleError) +}) + +test('Includes failure modes in manifest', () => { + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + ] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1/*' }, + { function: 'func-2', pattern: '^/f2(?:/(.*))/?$' }, + ] + const userFunctionConfig: Record = { + 'func-1': { + onError: '/custom-error', + }, + } + const { manifest } = generateManifest({ bundles: [], declarations, functions, userFunctionConfig }) + expect(manifest.function_config).toEqual({ + 'func-1': { on_error: '/custom-error' }, + }) +}) + +test('Excludes functions for which there are function files but no matching config declarations', () => { + const bundle1 = { + extension: '.ext2', + format: BundleFormat.ESZIP2, + hash: '123456', + } + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + ] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1' }] + const { manifest } = generateManifest({ bundles: [bundle1], declarations, functions }) + + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1/?$', excluded_patterns: [], path: '/f1' }] + + expect(manifest.routes).toEqual(expectedRoutes) +}) + +test('Excludes functions for which there are config declarations but no matching function files', () => { + const bundle1 = { + extension: '.ext2', + format: BundleFormat.ESZIP2, + hash: '123456', + } + const functions = [{ name: 'func-2', path: '/path/to/func-2.ts' }] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1' }, + { function: 'func-2', path: '/f2' }, + ] + const { manifest } = generateManifest({ bundles: [bundle1], declarations, functions }) + + const expectedRoutes = [{ function: 'func-2', pattern: '^/f2/?$', excluded_patterns: [], path: '/f2' }] + + expect(manifest.routes).toEqual(expectedRoutes) +}) + +test('Generates a manifest without bundles', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1' }] + const { manifest } = generateManifest({ bundles: [], declarations, functions }) + + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1/?$', excluded_patterns: [], path: '/f1' }] + + expect(manifest.bundles).toEqual([]) + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.bundler_version).toBe(version as string) +}) + +test('Generates a manifest with pre and post-cache routes', () => { + const bundle1 = { + extension: '.ext1', + format: BundleFormat.ESZIP2, + hash: '123456', + } + const bundle2 = { + extension: '.ext2', + format: BundleFormat.ESZIP2, + hash: '654321', + } + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + { name: 'func-3', path: '/path/to/func-3.ts' }, + ] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1' }, + { function: 'func-2', cache: 'not_a_supported_value', path: '/f2' }, + { function: 'func-3', cache: 'manual', path: '/f3' }, + ] + const { manifest } = generateManifest({ bundles: [bundle1, bundle2], declarations, functions }) + + const expectedBundles = [ + { asset: bundle1.hash + bundle1.extension, format: bundle1.format }, + { asset: bundle2.hash + bundle2.extension, format: bundle2.format }, + ] + const expectedPreCacheRoutes = [ + { function: 'func-1', name: undefined, pattern: '^/f1/?$', excluded_patterns: [], path: '/f1' }, + { function: 'func-2', name: undefined, pattern: '^/f2/?$', excluded_patterns: [], path: '/f2' }, + ] + const expectedPostCacheRoutes = [ + { function: 'func-3', name: undefined, pattern: '^/f3/?$', excluded_patterns: [], path: '/f3' }, + ] + + expect(manifest.bundles).toEqual(expectedBundles) + expect(manifest.routes).toEqual(expectedPreCacheRoutes) + expect(manifest.post_cache_routes).toEqual(expectedPostCacheRoutes) + expect(manifest.bundler_version).toBe(version as string) +}) + +test('Generates a manifest with layers', () => { + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + ] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1/*' }, + { function: 'func-2', path: '/f2/*' }, + ] + const expectedRoutes = [ + { function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: [], path: '/f1/*' }, + { function: 'func-2', pattern: '^/f2(?:/(.*))/?$', excluded_patterns: [], path: '/f2/*' }, + ] + const layers = [ + { + name: 'onion', + flag: 'edge_functions_onion_layer', + }, + ] + const { manifest: manifest1 } = generateManifest({ + bundles: [], + declarations, + functions, + }) + const { manifest: manifest2 } = generateManifest({ + bundles: [], + declarations, + functions, + layers, + }) + + expect(manifest1.routes).toEqual(expectedRoutes) + expect(manifest1.layers).toEqual([]) + + expect(manifest2.routes).toEqual(expectedRoutes) + expect(manifest2.layers).toEqual(layers) +}) + +test('Accepts regular expressions with lookaheads', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations = [{ function: 'func-1', pattern: '^\\/((?!api|_next\\/static|_next\\/image|favicon.ico).*)$' }] + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + }) + const [route] = manifest.routes + const regexp = new RegExp(route.pattern) + + expect(regexp.test('/foo')).toBeTruthy() + expect(regexp.test('/_next/static/foo')).toBeFalsy() +}) + +test('Accepts regular expressions with named capture groups', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations = [{ function: 'func-1', pattern: '^/(?\\w+)$' }] + const { manifest } = generateManifest({ bundles: [], declarations, functions }) + + expect(manifest.routes).toEqual([{ function: 'func-1', pattern: '^/(?\\w+)$', excluded_patterns: [] }]) +}) + +test('Returns functions without a declaration and unrouted functions', () => { + const bundle = { + extension: '.ext1', + format: BundleFormat.ESZIP2, + hash: '123456', + } + const functions = [ + { name: 'func-1', path: '/path/to/func-1.ts' }, + { name: 'func-2', path: '/path/to/func-2.ts' }, + { name: 'func-4', path: '/path/to/func-4.ts' }, + ] + const declarations: Declaration[] = [ + { function: 'func-1', path: '/f1' }, + { function: 'func-3', path: '/f3' }, + + // @ts-expect-error Error is expected due to neither `path` or `pattern` + // being present. + { function: 'func-4', name: 'Some name' }, + ] + const { declarationsWithoutFunction, manifest, unroutedFunctions } = generateManifest({ + bundles: [bundle], + declarations, + functions, + }) + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1/?$', excluded_patterns: [], path: '/f1' }] + + expect(manifest.routes).toEqual(expectedRoutes) + expect(declarationsWithoutFunction).toEqual(['func-3']) + expect(unroutedFunctions).toEqual(['func-2', 'func-4']) +}) + +test('Generates a manifest with rate limit config', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1/*' }] + + const userFunctionConfig: Record = { + 'func-1': { rateLimit: { windowLimit: 100, windowSize: 60 } }, + } + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + }) + + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: [], path: '/f1/*' }] + const expectedFunctionConfig = { + 'func-1': { + traffic_rules: { + action: { + type: 'rate_limit', + config: { + rate_limit_config: { + window_limit: 100, + window_size: 60, + algorithm: 'sliding_window', + }, + aggregate: { + keys: [{ type: 'domain' }], + }, + }, + }, + }, + }, + } + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.function_config).toEqual(expectedFunctionConfig) +}) + +test('Generates a manifest with rewrite config', () => { + const functions = [{ name: 'func-1', path: '/path/to/func-1.ts' }] + const declarations: Declaration[] = [{ function: 'func-1', path: '/f1/*' }] + + const userFunctionConfig: Record = { + 'func-1': { + rateLimit: { + action: RateLimitAction.Rewrite, + to: '/new_path', + windowLimit: 100, + windowSize: 60, + aggregateBy: [RateLimitAggregator.Domain, RateLimitAggregator.IP], + }, + }, + } + const { manifest } = generateManifest({ + bundles: [], + declarations, + functions, + userFunctionConfig, + }) + + const expectedRoutes = [{ function: 'func-1', pattern: '^/f1(?:/(.*))/?$', excluded_patterns: [], path: '/f1/*' }] + const expectedFunctionConfig = { + 'func-1': { + traffic_rules: { + action: { + type: 'rewrite', + config: { + to: '/new_path', + rate_limit_config: { + window_limit: 100, + window_size: 60, + algorithm: 'sliding_window', + }, + aggregate: { + keys: [{ type: 'domain' }, { type: 'ip' }], + }, + }, + }, + }, + }, + } + expect(manifest.routes).toEqual(expectedRoutes) + expect(manifest.function_config).toEqual(expectedFunctionConfig) +}) diff --git a/packages/edge-bundler/node/manifest.ts b/packages/edge-bundler/node/manifest.ts new file mode 100644 index 0000000000..023a8af2c2 --- /dev/null +++ b/packages/edge-bundler/node/manifest.ts @@ -0,0 +1,343 @@ +import { promises as fs } from 'fs' +import { join } from 'path' + +import type { Bundle } from './bundle.js' +import { wrapBundleError } from './bundle_error.js' +import { Cache, FunctionConfig, Path } from './config.js' +import { Declaration, normalizePattern } from './declaration.js' +import { EdgeFunction } from './edge_function.js' +import { FeatureFlags } from './feature_flags.js' +import { Layer } from './layer.js' +import { getPackageVersion } from './package_json.js' +import { RateLimit, RateLimitAction, RateLimitAlgorithm, RateLimitAggregator } from './rate_limit.js' +import { nonNullable } from './utils/non_nullable.js' +import { ExtendedURLPattern } from './utils/urlpattern.js' + +interface Route { + function: string + pattern: string + excluded_patterns: string[] + path?: string + methods?: string[] +} + +interface TrafficRules { + action: { + type: string + config: { + rate_limit_config: { + algorithm: string + window_size: number + window_limit: number + } + aggregate: { + keys: { + type: string + }[] + } + to?: string + } + } +} + +export interface EdgeFunctionConfig { + excluded_patterns: string[] + on_error?: string + generator?: string + name?: string + traffic_rules?: TrafficRules +} + +interface Manifest { + bundler_version: string + bundles: { asset: string; format: string }[] + import_map?: string + layers: { name: string; flag: string }[] + routes: Route[] + post_cache_routes: Route[] + function_config: Record +} + +interface GenerateManifestOptions { + bundles?: Bundle[] + declarations?: Declaration[] + featureFlags?: FeatureFlags + functions: EdgeFunction[] + importMap?: string + internalFunctionConfig?: Record + layers?: Layer[] + userFunctionConfig?: Record +} + +const removeEmptyConfigValues = (functionConfig: EdgeFunctionConfig) => + Object.entries(functionConfig).reduce((acc, [key, value]) => { + if (value && !(Array.isArray(value) && value.length === 0)) { + return { ...acc, [key]: value } + } + return acc + }, {} as EdgeFunctionConfig) + +// JavaScript regular expressions are converted to strings with leading and +// trailing slashes, so any slashes inside the expression itself are escaped +// as `//`. This function deserializes that back into a single slash, which +// is the format we want to use in the manifest. +const serializePattern = (pattern: string) => pattern.replace(/\\\//g, '/') + +const sanitizeEdgeFunctionConfig = (config: Record): Record => { + const newConfig: Record = {} + + for (const [name, functionConfig] of Object.entries(config)) { + const newFunctionConfig = removeEmptyConfigValues(functionConfig) + + if (Object.keys(newFunctionConfig).length !== 0) { + newConfig[name] = newFunctionConfig + } + } + + return newConfig +} + +const addExcludedPatterns = ( + name: string, + manifestFunctionConfig: Record, + excludedPath?: Path | Path[], +) => { + if (excludedPath) { + const paths = Array.isArray(excludedPath) ? excludedPath : [excludedPath] + const excludedPatterns = paths.map(pathToRegularExpression).filter(nonNullable).map(serializePattern) + + manifestFunctionConfig[name].excluded_patterns.push(...excludedPatterns) + } +} + +/** + * Normalizes method names into arrays of uppercase strings. + * (e.g. "get" becomes ["GET"]) + */ +const normalizeMethods = (method: unknown, name: string): string[] | undefined => { + const methods = Array.isArray(method) ? method : [method] + return methods.map((method) => { + if (typeof method !== 'string') { + throw new TypeError( + `Could not parse method declaration of function '${name}'. Expecting HTTP Method, got ${method}`, + ) + } + + return method.toUpperCase() + }) +} + +const generateManifest = ({ + bundles = [], + declarations = [], + functions, + userFunctionConfig = {}, + internalFunctionConfig = {}, + importMap, + layers = [], +}: GenerateManifestOptions) => { + const preCacheRoutes: Route[] = [] + const postCacheRoutes: Route[] = [] + const manifestFunctionConfig: Manifest['function_config'] = Object.fromEntries( + functions.map(({ name }) => [name, { excluded_patterns: [] }]), + ) + const routedFunctions = new Set() + const declarationsWithoutFunction = new Set() + + for (const [name, { excludedPath, onError, rateLimit }] of Object.entries(userFunctionConfig)) { + // If the config block is for a function that is not defined, discard it. + if (manifestFunctionConfig[name] === undefined) { + continue + } + + addExcludedPatterns(name, manifestFunctionConfig, excludedPath) + + manifestFunctionConfig[name] = { + ...manifestFunctionConfig[name], + on_error: onError, + traffic_rules: getTrafficRulesConfig(rateLimit), + } + } + + // eslint-disable-next-line @typescript-eslint/no-unused-vars + for (const [name, { excludedPath, path, onError, rateLimit, ...rest }] of Object.entries(internalFunctionConfig)) { + // If the config block is for a function that is not defined, discard it. + if (manifestFunctionConfig[name] === undefined) { + continue + } + + addExcludedPatterns(name, manifestFunctionConfig, excludedPath) + + manifestFunctionConfig[name] = { + ...manifestFunctionConfig[name], + on_error: onError, + traffic_rules: getTrafficRulesConfig(rateLimit), + ...rest, + } + } + + declarations.forEach((declaration) => { + const func = functions.find(({ name }) => declaration.function === name) + + if (func === undefined) { + declarationsWithoutFunction.add(declaration.function) + + return + } + + const pattern = getRegularExpression(declaration) + + // If there is no `pattern`, the declaration will never be triggered, so we + // can discard it. + if (!pattern) { + return + } + + routedFunctions.add(declaration.function) + + const excludedPattern = getExcludedRegularExpressions(declaration) + const route: Route = { + function: func.name, + pattern: serializePattern(pattern), + excluded_patterns: excludedPattern.map(serializePattern), + } + + if ('method' in declaration) { + route.methods = normalizeMethods(declaration.method, func.name) + } + + if ('path' in declaration) { + route.path = declaration.path + } + + if (declaration.cache === Cache.Manual) { + postCacheRoutes.push(route) + } else { + preCacheRoutes.push(route) + } + }) + const manifestBundles = bundles.map(({ extension, format, hash }) => ({ + asset: hash + extension, + format, + })) + const manifest: Manifest = { + bundles: manifestBundles, + routes: preCacheRoutes.filter(nonNullable), + post_cache_routes: postCacheRoutes.filter(nonNullable), + bundler_version: getPackageVersion(), + layers, + import_map: importMap, + function_config: sanitizeEdgeFunctionConfig(manifestFunctionConfig), + } + const unroutedFunctions = functions.filter(({ name }) => !routedFunctions.has(name)).map(({ name }) => name) + + return { declarationsWithoutFunction: [...declarationsWithoutFunction], manifest, unroutedFunctions } +} + +const getTrafficRulesConfig = (rl: RateLimit | undefined) => { + if (rl === undefined) { + return + } + + const rateLimitAgg = Array.isArray(rl.aggregateBy) ? rl.aggregateBy : [RateLimitAggregator.Domain] + const rewriteConfig = 'to' in rl && typeof rl.to === 'string' ? { to: rl.to } : undefined + + return { + action: { + type: rl.action || RateLimitAction.Limit, + config: { + ...rewriteConfig, + rate_limit_config: { + window_limit: rl.windowLimit, + window_size: rl.windowSize, + algorithm: RateLimitAlgorithm.SlidingWindow, + }, + aggregate: { + keys: rateLimitAgg.map((agg) => ({ type: agg })), + }, + }, + }, + } +} + +const pathToRegularExpression = (path: string) => { + if (!path) { + return null + } + + try { + const pattern = new ExtendedURLPattern({ pathname: path }) + + // Removing the `^` and `$` delimiters because we'll need to modify what's + // between them. + const source = pattern.regexp.pathname.source.slice(1, -1) + + // Wrapping the expression source with `^` and `$`. Also, adding an optional + // trailing slash, so that a declaration of `path: "/foo"` matches requests + // for both `/foo` and `/foo/`. + const normalizedSource = `^${source}\\/?$` + + return normalizedSource + } catch (error) { + throw wrapBundleError(error) + } +} + +const getRegularExpression = (declaration: Declaration) => { + if ('pattern' in declaration) { + try { + return normalizePattern(declaration.pattern) + } catch (error: unknown) { + throw wrapBundleError( + new Error( + `Could not parse path declaration of function '${declaration.function}': ${(error as Error).message}`, + ), + ) + } + } + + return pathToRegularExpression(declaration.path) +} + +const getExcludedRegularExpressions = (declaration: Declaration): string[] => { + if ('excludedPattern' in declaration && declaration.excludedPattern) { + const excludedPatterns: string[] = Array.isArray(declaration.excludedPattern) + ? declaration.excludedPattern + : [declaration.excludedPattern] + + return excludedPatterns.map((excludedPattern) => { + try { + return normalizePattern(excludedPattern) + } catch (error: unknown) { + throw wrapBundleError( + new Error( + `Could not parse path declaration of function '${declaration.function}': ${(error as Error).message}`, + ), + ) + } + }) + } + + if ('path' in declaration && declaration.excludedPath) { + const paths = Array.isArray(declaration.excludedPath) ? declaration.excludedPath : [declaration.excludedPath] + + return paths.map(pathToRegularExpression).filter(nonNullable) + } + + return [] +} + +interface WriteManifestOptions extends GenerateManifestOptions { + distDirectory: string +} + +const writeManifest = async ({ distDirectory, ...rest }: WriteManifestOptions) => { + const { manifest } = generateManifest(rest) + const manifestPath = join(distDirectory, 'manifest.json') + + await fs.writeFile(manifestPath, JSON.stringify(manifest)) + + return manifest +} + +export { generateManifest, Manifest, Route, writeManifest } diff --git a/packages/edge-bundler/node/npm_dependencies.ts b/packages/edge-bundler/node/npm_dependencies.ts new file mode 100644 index 0000000000..63f5a054a1 --- /dev/null +++ b/packages/edge-bundler/node/npm_dependencies.ts @@ -0,0 +1,345 @@ +import { promises as fs } from 'fs' +import { builtinModules } from 'module' +import path from 'path' +import { fileURLToPath, pathToFileURL } from 'url' + +import { resolve, ParsedImportMap } from '@import-maps/resolve' +import { nodeFileTrace, resolve as nftResolve } from '@vercel/nft' +import { build } from 'esbuild' +import { findUp } from 'find-up' +import getPackageName from 'get-package-name' +import tmp from 'tmp-promise' + +import { ImportMap } from './import_map.js' +import { Logger } from './logger.js' +import { pathsBetween } from './utils/fs.js' + +const TYPESCRIPT_EXTENSIONS = new Set(['.ts', '.tsx', '.cts', '.ctsx', '.mts', '.mtsx']) + +const slugifyPackageName = (specifier: string) => { + if (!specifier.startsWith('@')) return specifier + const [scope, pkg] = specifier.split('/') + return `${scope.replace('@', '')}__${pkg}` +} + +/** + * Returns the name of the `@types/` package used by a given specifier. Most of + * the times this is just the specifier itself, but scoped packages suffer a + * transformation (e.g. `@netlify/functions` -> `@types/netlify__functions`). + * https://github.com/DefinitelyTyped/DefinitelyTyped#what-about-scoped-packages + */ +const getTypesPackageName = (specifier: string) => path.join('@types', slugifyPackageName(specifier)) + +/** + * Finds corresponding DefinitelyTyped packages (`@types/...`) and returns path to declaration file. + */ +const getTypePathFromTypesPackage = async ( + packageName: string, + packageJsonPath: string, +): Promise => { + const typesPackagePath = await findUp(`node_modules/${getTypesPackageName(packageName)}/package.json`, { + cwd: packageJsonPath, + }) + if (!typesPackagePath) { + return undefined + } + + const { types, typings } = JSON.parse(await fs.readFile(typesPackagePath, 'utf8')) + const declarationPath = types ?? typings + if (typeof declarationPath === 'string') { + return path.join(typesPackagePath, '..', declarationPath) + } + + return undefined +} + +/** + * Starting from a `package.json` file, this tries detecting a TypeScript declaration file. + * It first looks at the `types` and `typings` fields in `package.json`. + * If it doesn't find them, it falls back to DefinitelyTyped packages (`@types/...`). + */ +const getTypesPath = async (packageJsonPath: string): Promise => { + const { name, types, typings } = JSON.parse(await fs.readFile(packageJsonPath, 'utf8')) + // this only looks at `.types` and `.typings` fields. there might also be data in `exports -> . -> types -> import/default`. + // we're ignoring that for now. + const declarationPath = types ?? typings + if (typeof declarationPath === 'string') { + return path.join(packageJsonPath, '..', declarationPath) + } + + return await getTypePathFromTypesPackage(name, packageJsonPath) +} + +const safelyDetectTypes = async (packageJsonPath: string): Promise => { + try { + return await getTypesPath(packageJsonPath) + } catch { + return undefined + } +} + +// Workaround for https://github.com/evanw/esbuild/issues/1921. +const banner = { + js: ` + import __nfyProcess from "node:process"; + import {setImmediate as __nfySetImmediate, clearImmediate as __nfyClearImmediate} from "node:timers"; + import {Buffer as __nfyBuffer} from "node:buffer"; + import {createRequire as ___nfyCreateRequire} from "node:module"; + import {fileURLToPath as ___nfyFileURLToPath} from "node:url"; + import {dirname as ___nfyPathDirname} from "node:path"; + let __filename=___nfyFileURLToPath(import.meta.url); + let __dirname=___nfyPathDirname(___nfyFileURLToPath(import.meta.url)); + let require=___nfyCreateRequire(import.meta.url); + globalThis.process = __nfyProcess; + globalThis.setImmediate = __nfySetImmediate; + globalThis.clearImmediate = __nfyClearImmediate; + globalThis.Buffer = __nfyBuffer; + `, +} + +interface GetNPMSpecifiersOptions { + basePath: string + functions: string[] + importMap: ParsedImportMap + environment: 'production' | 'development' + rootPath: string +} + +/** + * Parses a set of functions and returns a list of specifiers that correspond + * to npm modules. + */ +const getNPMSpecifiers = async ({ basePath, functions, importMap, environment, rootPath }: GetNPMSpecifiersOptions) => { + const baseURL = pathToFileURL(basePath) + const { reasons } = await nodeFileTrace(functions, { + base: rootPath, + processCwd: basePath, + readFile: async (filePath: string) => { + // If this is a TypeScript file, we need to compile in before we can + // parse it. + if (TYPESCRIPT_EXTENSIONS.has(path.extname(filePath))) { + const compiled = await build({ + bundle: false, + entryPoints: [filePath], + logLevel: 'silent', + platform: 'node', + write: false, + }) + + return compiled.outputFiles[0].text + } + + return fs.readFile(filePath, 'utf8') + }, + resolve: async (specifier, ...args) => { + // Start by checking whether the specifier matches any import map defined + // by the user. + const { matched, resolvedImport } = resolve(specifier, importMap, baseURL) + + // If it does, the resolved import is the specifier we'll evaluate going + // forward. + if (matched && resolvedImport.protocol === 'file:') { + const newSpecifier = fileURLToPath(resolvedImport).replace(/\\/g, '/') + + return nftResolve(newSpecifier, ...args) + } + + return nftResolve(specifier, ...args) + }, + }) + const npmSpecifiers: { specifier: string; types?: string }[] = [] + const npmSpecifiersWithExtraneousFiles = new Set() + + for (const [filePath, reason] of reasons.entries()) { + const parents = [...reason.parents] + const isExtraneousFile = reason.type.every((type) => type === 'asset') + + // An extraneous file is a dependency that was traced by NFT and marked + // as not being statically imported. We can't process dynamic importing + // at runtime, so we gather the list of modules that may use these files + // so that we can warn users about this caveat. + if (isExtraneousFile) { + parents.forEach((path) => { + const specifier = getPackageName(path) + + if (specifier) { + npmSpecifiersWithExtraneousFiles.add(specifier) + } + }) + } + + // every dependency will have its `package.json` in `reasons` exactly once. + // by only looking at this file, we save us from doing duplicate work. + const isPackageJson = filePath.endsWith('package.json') + if (!isPackageJson) continue + + const packageName = getPackageName(filePath) + if (packageName === undefined) continue + + const isDirectDependency = parents.some((parentPath) => { + if (!parentPath.startsWith(`node_modules${path.sep}`)) return true + // typically, edge functions have no direct dependency on the `package.json` of a module. + // it's the impl files that depend on `package.json`, so we need to check the parents of + // the `package.json` file as well to see if the module is a direct dependency. + const parents = [...(reasons.get(parentPath)?.parents ?? [])] + return parents.some((parentPath) => !parentPath.startsWith(`node_modules${path.sep}`)) + }) + + // We're only interested in capturing the specifiers that are first-level + // dependencies. Because we'll bundle all modules in a subsequent step, + // any transitive dependencies will be handled then. + if (isDirectDependency) { + npmSpecifiers.push({ + specifier: packageName, + types: environment === 'development' ? await safelyDetectTypes(path.join(basePath, filePath)) : undefined, + }) + } + } + + return { + npmSpecifiers, + npmSpecifiersWithExtraneousFiles: [...npmSpecifiersWithExtraneousFiles], + } +} + +interface VendorNPMSpecifiersOptions { + basePath: string + directory?: string + functions: string[] + importMap: ImportMap + logger: Logger + environment: 'production' | 'development' + rootPath?: string +} + +export const vendorNPMSpecifiers = async ({ + basePath, + directory, + functions, + importMap, + environment, + rootPath = basePath, +}: VendorNPMSpecifiersOptions) => { + // The directories that esbuild will use when resolving Node modules. We must + // set these manually because esbuild will be operating from a temporary + // directory that will not live inside the project root, so the normal + // resolution logic won't work. + const nodePaths = pathsBetween(basePath, rootPath).map((directory) => path.join(directory, 'node_modules')) + + // We need to create some files on disk, which we don't want to write to the + // project directory. If a custom directory has been specified, we use it. + // Otherwise, create a random temporary directory. + const temporaryDirectory = directory ? { path: directory } : await tmp.dir() + + const { npmSpecifiers, npmSpecifiersWithExtraneousFiles } = await getNPMSpecifiers({ + basePath, + functions, + importMap: importMap.getContentsWithURLObjects(), + environment, + rootPath, + }) + + // If we found no specifiers, there's nothing left to do here. + if (Object.keys(npmSpecifiers).length === 0) { + return + } + + // To bundle an entire module and all its dependencies, create a entrypoint file + // where we re-export everything from that specifier. We do this for every + // specifier, and each of these files will become entry points to esbuild. + const ops = await Promise.all( + npmSpecifiers.map(async ({ specifier, types }) => { + const code = `import * as mod from "${specifier}"; export default mod.default; export * from "${specifier}";` + const filePath = path.join(temporaryDirectory.path, `bundled-${slugifyPackageName(specifier)}.js`) + + await fs.writeFile(filePath, code) + + return { filePath, specifier, types } + }), + ) + const entryPoints = ops.map(({ filePath }) => filePath) + // Bundle each of the entrypoints we created. We'll end up with a compiled + // version of each, plus any chunks of shared code + // between them (such that a common module isn't bundled twice). + const { outputFiles } = await build({ + allowOverwrite: true, + banner, + bundle: true, + entryPoints, + format: 'esm', + mainFields: ['module', 'browser', 'main'], + logLevel: 'error', + nodePaths, + outdir: temporaryDirectory.path, + platform: 'node', + splitting: true, + target: 'es2020', + write: false, + define: + environment === 'production' + ? { + 'process.env.NODE_ENV': '"production"', + } + : undefined, + }) + + await Promise.all( + outputFiles.map(async (file) => { + const types = ops.find((op) => path.basename(file.path) === path.basename(op.filePath))?.types + let content = file.text + if (types) { + content = `/// \n${content}` + } + await fs.writeFile(file.path, content) + }), + ) + + // Add all Node.js built-ins to the import map, so any unprefixed specifiers + // (e.g. `process`) resolve to the prefixed versions (e.g. `node:prefix`), + // which Deno can process. + const builtIns = builtinModules.reduce( + (acc, name) => ({ + ...acc, + [name]: `node:${name}`, + }), + {} as Record, + ) + + // Creates an object that is compatible with the `imports` block of an import + // map, mapping specifiers to the paths of their bundled files on disk. Each + // specifier gets two entries in the import map, one with the `npm:` prefix + // and one without, such that both options are supported. + const newImportMap = { + baseURL: pathToFileURL(temporaryDirectory.path), + imports: ops.reduce((acc, op) => { + const url = pathToFileURL(op.filePath).toString() + + return { + ...acc, + [op.specifier]: url, + } + }, builtIns), + } + + const cleanup = async () => { + // If a custom temporary directory was specified, we leave the cleanup job + // up to the caller. + if (directory) { + return + } + + try { + await fs.rm(temporaryDirectory.path, { force: true, recursive: true }) + } catch { + // no-op + } + } + + return { + cleanup, + directory: temporaryDirectory.path, + importMap: newImportMap, + npmSpecifiersWithExtraneousFiles, + outputFiles: outputFiles.map((file) => file.path), + } +} diff --git a/packages/edge-bundler/node/npm_import_error.ts b/packages/edge-bundler/node/npm_import_error.ts new file mode 100644 index 0000000000..e061cff96a --- /dev/null +++ b/packages/edge-bundler/node/npm_import_error.ts @@ -0,0 +1,33 @@ +class NPMImportError extends Error { + constructor(originalError: Error, moduleName: string) { + super( + `There was an error when loading the '${moduleName}' npm module. Support for npm modules in edge functions is an experimental feature. Refer to https://ntl.fyi/edge-functions-npm for more information.`, + ) + + this.name = 'NPMImportError' + this.stack = originalError.stack + + // https://github.com/microsoft/TypeScript-wiki/blob/8a66ecaf77118de456f7cd9c56848a40fe29b9b4/Breaking-Changes.md#implicit-any-error-raised-for-un-annotated-callback-arguments-with-no-matching-overload-arguments + Object.setPrototypeOf(this, NPMImportError.prototype) + } +} + +const wrapNpmImportError = (input: unknown) => { + if (input instanceof Error) { + const match = input.message.match(/Relative import path "(.*)" not prefixed with/) + if (match !== null) { + const [, moduleName] = match + return new NPMImportError(input, moduleName) + } + + const schemeMatch = input.message.match(/Error: Module not found "npm:(.*)"/) + if (schemeMatch !== null) { + const [, moduleName] = schemeMatch + return new NPMImportError(input, moduleName) + } + } + + return input +} + +export { NPMImportError, wrapNpmImportError } diff --git a/packages/edge-bundler/node/package_json.test.ts b/packages/edge-bundler/node/package_json.test.ts new file mode 100644 index 0000000000..4f7c6cecf4 --- /dev/null +++ b/packages/edge-bundler/node/package_json.test.ts @@ -0,0 +1,10 @@ +import semver from 'semver' +import { test, expect } from 'vitest' + +import { getPackageVersion } from './package_json.js' + +test('`getPackageVersion` returns the package version`', () => { + const version = getPackageVersion() + + expect(semver.valid(version)).not.toBeNull() +}) diff --git a/packages/edge-bundler/node/package_json.ts b/packages/edge-bundler/node/package_json.ts new file mode 100644 index 0000000000..75ac6ae37e --- /dev/null +++ b/packages/edge-bundler/node/package_json.ts @@ -0,0 +1,40 @@ +import { readFileSync } from 'fs' +import { join } from 'path' +import { fileURLToPath } from 'url' + +import { findUpSync, pathExistsSync } from 'find-up' + +const getPackagePath = () => { + const packagePath = findUpSync( + (directory: string) => { + if (pathExistsSync(join(directory, 'package.json'))) { + return directory + } + }, + { cwd: fileURLToPath(import.meta.url), type: 'directory' }, + ) + + // We should never get here, but let's show a somewhat useful error message. + if (packagePath === undefined) { + throw new Error( + 'Could not find `package.json` for `@netlify/edge-bundler`. Please try running `npm install` to reinstall your dependencies.', + ) + } + + return packagePath +} + +const getPackageVersion = () => { + const packagePath = getPackagePath() + + try { + const packageJSON = readFileSync(join(packagePath, 'package.json'), 'utf8') + const { version } = JSON.parse(packageJSON) + + return version as string + } catch { + return '' + } +} + +export { getPackagePath, getPackageVersion } diff --git a/packages/edge-bundler/node/platform.ts b/packages/edge-bundler/node/platform.ts new file mode 100644 index 0000000000..81b09705d4 --- /dev/null +++ b/packages/edge-bundler/node/platform.ts @@ -0,0 +1,19 @@ +import { arch, platform } from 'process' + +const getBinaryExtension = () => (platform === 'win32' ? '.exe' : '') + +const getPlatformTarget = () => { + if (platform === 'win32') { + return 'x86_64-pc-windows-msvc' + } + + const isArm64 = arch === 'arm64' + + if (platform === 'darwin') { + return isArm64 ? 'aarch64-apple-darwin' : 'x86_64-apple-darwin' + } + + return 'x86_64-unknown-linux-gnu' +} + +export { getBinaryExtension, getPlatformTarget } diff --git a/packages/edge-bundler/node/rate_limit.ts b/packages/edge-bundler/node/rate_limit.ts new file mode 100644 index 0000000000..3e1ca721ae --- /dev/null +++ b/packages/edge-bundler/node/rate_limit.ts @@ -0,0 +1,30 @@ +export enum RateLimitAlgorithm { + SlidingWindow = 'sliding_window', +} + +export enum RateLimitAggregator { + Domain = 'domain', + IP = 'ip', +} + +export enum RateLimitAction { + Limit = 'rate_limit', + Rewrite = 'rewrite', +} + +interface SlidingWindow { + windowLimit: number + windowSize: number +} + +export type RewriteActionConfig = SlidingWindow & { + to: string +} + +interface RateLimitConfig { + action?: RateLimitAction + aggregateBy?: RateLimitAggregator | RateLimitAggregator[] + algorithm?: RateLimitAlgorithm +} + +export type RateLimit = RateLimitConfig & (SlidingWindow | RewriteActionConfig) diff --git a/packages/edge-bundler/node/server/server.test.ts b/packages/edge-bundler/node/server/server.test.ts new file mode 100644 index 0000000000..5d4d484f67 --- /dev/null +++ b/packages/edge-bundler/node/server/server.test.ts @@ -0,0 +1,180 @@ +import { createWriteStream } from 'fs' +import { readFile } from 'fs/promises' +import { join } from 'path' +import process from 'process' + +import getPort from 'get-port' +import fetch from 'node-fetch' +import tmp from 'tmp-promise' +import { v4 as uuidv4 } from 'uuid' +import { test, expect } from 'vitest' + +import { fixturesDir } from '../../test/util.js' +import { serve } from '../index.js' + +test('Starts a server and serves requests for edge functions', async () => { + const basePath = join(fixturesDir, 'serve_test') + const paths = { + internal: join(basePath, '.netlify', 'edge-functions'), + user: join(basePath, 'netlify', 'edge-functions'), + } + const port = await getPort() + const importMapPaths = [join(paths.internal, 'import_map.json'), join(paths.user, 'import-map.json')] + const servePath = join(basePath, '.netlify', 'edge-functions-serve') + const server = await serve({ + basePath, + bootstrapURL: 'https://edge.netlify.com/bootstrap/index-combined.ts', + port, + servePath, + }) + + const functions = [ + { + name: 'echo_env', + path: join(paths.user, 'echo_env.ts'), + }, + { + name: 'greet', + path: join(paths.internal, 'greet.ts'), + }, + { + name: 'global_netlify', + path: join(paths.user, 'global_netlify.ts'), + }, + ] + const options = { + getFunctionsConfig: true, + importMapPaths, + } + + const { features, functionsConfig, graph, success, npmSpecifiersWithExtraneousFiles } = await server( + functions, + { + very_secret_secret: 'i love netlify', + }, + options, + ) + expect(features).toEqual({ npmModules: true }) + expect(success).toBe(true) + expect(functionsConfig).toEqual([{ path: '/my-function' }, {}, { path: '/global-netlify' }]) + expect(npmSpecifiersWithExtraneousFiles).toEqual(['dictionary']) + + for (const key in functions) { + const graphEntry = graph?.modules.some( + ({ kind, mediaType, local }) => kind === 'esm' && mediaType === 'TypeScript' && local === functions[key].path, + ) + + expect(graphEntry).toBe(true) + } + + const response1 = await fetch(`http://0.0.0.0:${port}/foo`, { + headers: { + 'x-nf-edge-functions': 'echo_env', + 'x-ef-passthrough': 'passthrough', + 'X-NF-Request-ID': uuidv4(), + }, + }) + expect(response1.status).toBe(200) + expect(await response1.text()).toBe('I LOVE NETLIFY') + + const response2 = await fetch(`http://0.0.0.0:${port}/greet`, { + headers: { + 'x-nf-edge-functions': 'greet', + 'x-ef-passthrough': 'passthrough', + 'X-NF-Request-ID': uuidv4(), + }, + }) + expect(response2.status).toBe(200) + expect(await response2.text()).toBe('HELLO!') + + const response3 = await fetch(`http://0.0.0.0:${port}/global-netlify`, { + headers: { + 'x-nf-edge-functions': 'global_netlify', + 'x-ef-passthrough': 'passthrough', + 'X-NF-Request-ID': uuidv4(), + }, + }) + expect(await response3.json()).toEqual({ + global: 'i love netlify', + local: 'i love netlify', + }) + + const idBarrelFile = await readFile(join(servePath, 'bundled-id.js'), 'utf-8') + expect(idBarrelFile).toContain(`/// `) + + const identidadeBarrelFile = await readFile(join(servePath, 'bundled-pt-committee__identidade.js'), 'utf-8') + expect(identidadeBarrelFile).toContain( + `/// `, + ) +}) + +test('Serves edge functions in a monorepo setup', async () => { + const tmpFile = await tmp.file() + const stderr = createWriteStream(tmpFile.path) + + const rootPath = join(fixturesDir, 'monorepo_npm_module') + const basePath = join(rootPath, 'packages', 'frontend') + const paths = { + user: join(basePath, 'functions'), + } + const port = await getPort() + const importMapPaths = [join(basePath, 'import_map.json')] + const servePath = join(basePath, '.netlify', 'edge-functions-serve') + const server = await serve({ + basePath, + bootstrapURL: 'https://edge.netlify.com/bootstrap/index-combined.ts', + port, + rootPath, + servePath, + stderr, + }) + + const functions = [ + { + name: 'func1', + path: join(paths.user, 'func1.ts'), + }, + ] + const options = { + getFunctionsConfig: true, + importMapPaths, + } + + const { features, functionsConfig, graph, success, npmSpecifiersWithExtraneousFiles } = await server( + functions, + { + very_secret_secret: 'i love netlify', + }, + options, + ) + + expect(features).toEqual({ npmModules: true }) + expect(success).toBe(true) + expect(functionsConfig).toEqual([{ path: '/func1' }]) + expect(npmSpecifiersWithExtraneousFiles).toEqual(['child-1']) + + for (const key in functions) { + const graphEntry = graph?.modules.some( + ({ kind, mediaType, local }) => kind === 'esm' && mediaType === 'TypeScript' && local === functions[key].path, + ) + + expect(graphEntry).toBe(true) + } + + const response1 = await fetch(`http://0.0.0.0:${port}/func1`, { + headers: { + 'x-nf-edge-functions': 'func1', + 'x-ef-passthrough': 'passthrough', + 'X-NF-Request-ID': uuidv4(), + }, + }) + + expect(response1.status).toBe(200) + expect(await response1.text()).toBe( + `JavaScript, APIs${process.cwd()}, Markup${process.cwd()}`, + ) + + expect(await readFile(tmpFile.path, 'utf8')).toContain('[func1] Something is on fire') + + await tmpFile.cleanup() +}) diff --git a/packages/edge-bundler/node/server/server.ts b/packages/edge-bundler/node/server/server.ts new file mode 100644 index 0000000000..cd2c8af690 --- /dev/null +++ b/packages/edge-bundler/node/server/server.ts @@ -0,0 +1,361 @@ +import type { WriteStream } from 'fs' +import { readdir, unlink } from 'fs/promises' +import { join } from 'path' + +import { DenoBridge, OnAfterDownloadHook, OnBeforeDownloadHook, ProcessRef } from '../bridge.js' +import { getFunctionConfig, FunctionConfig } from '../config.js' +import type { EdgeFunction } from '../edge_function.js' +import type { FeatureFlags } from '../feature_flags.js' +import { generateStage2 } from '../formats/javascript.js' +import { ImportMap } from '../import_map.js' +import { getLogger, LogFunction, Logger } from '../logger.js' +import { vendorNPMSpecifiers } from '../npm_dependencies.js' +import { ensureLatestTypes } from '../types.js' +import type { ModuleGraphJson } from '../vendor/module_graph/module_graph.js' + +import { killProcess, waitForServer } from './util.js' + +export type FormatFunction = (name: string) => string + +interface PrepareServerOptions { + basePath: string + bootstrapURL: string + deno: DenoBridge + distDirectory: string + distImportMapPath?: string + entryPoint?: string + featureFlags?: FeatureFlags + flags: string[] + formatExportTypeError?: FormatFunction + formatImportError?: FormatFunction + logger: Logger + stderr?: WriteStream + stdout?: WriteStream + port: number + rootPath?: string +} + +interface StartServerOptions { + getFunctionsConfig?: boolean + importMapPaths?: string[] +} + +/** + * Cleans up a directory, except for the files specified in the `except` array. + * Both should be given as absolute paths. + * Assumes the directory doesn't contain any nested directories. + */ +const cleanDirectory = async (directory: string, except: string[]) => { + const files = await readdir(directory) + const toBeDeleted = files.filter((file) => !except.includes(join(directory, file))) + await Promise.all(toBeDeleted.map((file) => unlink(join(directory, file)))) +} + +const prepareServer = ({ + basePath, + bootstrapURL, + deno, + distDirectory, + distImportMapPath, + flags: denoFlags, + formatExportTypeError, + formatImportError, + logger, + port, + rootPath, + stderr, + stdout, +}: PrepareServerOptions) => { + const processRef: ProcessRef = {} + const startServer = async ( + functions: EdgeFunction[], + env: NodeJS.ProcessEnv = {}, + options: StartServerOptions = {}, + ) => { + if (processRef?.ps !== undefined) { + await killProcess(processRef.ps) + } + + let graph: ModuleGraphJson = { + roots: [], + modules: [], + redirects: {}, + } + + const stage2Path = await generateStage2({ + bootstrapURL, + distDirectory, + fileName: 'dev.js', + functions, + formatExportTypeError, + formatImportError, + }) + + const features: Record = {} + + const importMap = new ImportMap() + await importMap.addFiles(options.importMapPaths ?? [], logger) + + const npmSpecifiersWithExtraneousFiles: string[] = [] + + // we keep track of the files that are relevant to the user's code, so we can clean up leftovers from past executions later + const relevantFiles = [stage2Path] + + const vendor = await vendorNPMSpecifiers({ + basePath, + directory: distDirectory, + functions: functions.map(({ path }) => path), + importMap, + logger, + environment: 'development', + rootPath, + }) + + if (vendor) { + features.npmModules = true + importMap.add(vendor.importMap) + npmSpecifiersWithExtraneousFiles.push(...vendor.npmSpecifiersWithExtraneousFiles) + relevantFiles.push(...vendor.outputFiles) + } + + await cleanDirectory(distDirectory, relevantFiles) + + try { + // This command will print a JSON object with all the modules found in + // the `stage2Path` file as well as all of their dependencies. + // Consumers such as the CLI can use this information to watch all the + // relevant files and issue an isolate restart when one of them changes. + const { stdout } = await deno.run(['info', '--json', stage2Path]) + + graph = JSON.parse(stdout) + } catch { + // no-op + } + + const extraDenoFlags = [`--import-map=${importMap.toDataURL()}`] + const applicationFlags = ['--port', port.toString()] + + // We set `extendEnv: false` to avoid polluting the edge function context + // with variables from the user's system, since those will not be available + // in the production environment. + await deno.runInBackground(['run', ...denoFlags, ...extraDenoFlags, stage2Path, ...applicationFlags], processRef, { + env, + extendEnv: false, + pipeOutput: true, + stderr, + stdout, + }) + + let functionsConfig: FunctionConfig[] = [] + + if (options.getFunctionsConfig) { + functionsConfig = await Promise.all( + functions.map((func) => getFunctionConfig({ func, importMap, deno, log: logger })), + ) + } + + if (distImportMapPath) { + await importMap.writeToFile(distImportMapPath) + } + + const success = await waitForServer(port, processRef.ps) + + return { + features, + functionsConfig, + graph, + npmSpecifiersWithExtraneousFiles, + success, + } + } + + return startServer +} + +interface InspectSettings { + // Inspect mode enabled + enabled: boolean + + // Pause on breakpoints (i.e. "--brk") + pause: boolean + + // Host/port override (optional) + address?: string +} +interface ServeOptions { + basePath: string + bootstrapURL: string + certificatePath?: string + debug?: boolean + distImportMapPath?: string + featureFlags?: FeatureFlags + inspectSettings?: InspectSettings + onAfterDownload?: OnAfterDownloadHook + onBeforeDownload?: OnBeforeDownloadHook + formatExportTypeError?: FormatFunction + formatImportError?: FormatFunction + port: number + rootPath?: string + servePath: string + stderr?: WriteStream + stdout?: WriteStream + userLogger?: LogFunction + systemLogger?: LogFunction +} + +export const serve = async ({ + /** + * Path that is common to all functions. Works as the root directory in the + * generated bundle. + */ + basePath, + + /** + * URL of the bootstrap layer to use. + */ + bootstrapURL, + + /** + * Path to an SSL certificate to run the Deno server with. + */ + certificatePath, + + /** + * Whether to print verbose information about the server process. + */ + debug, + + /** + * Path of an import map file to be generated using the built-in specifiers + * and any npm modules found during the bundling process. + */ + distImportMapPath, + + /** + * Debug settings to use with Deno's `--inspect` and `--inspect-brk` flags. + */ + inspectSettings, + + /** + * Map of feature flags. + */ + featureFlags, + + /** + * Callback function to be triggered whenever a function has a default export + * with the wrong type. + */ + formatExportTypeError, + + /** + * Callback function to be triggered whenever an error occurs while importing + * a function. + */ + formatImportError, + + /** + * Callback function to be triggered after the Deno CLI has been downloaded. + */ + onAfterDownload, + + /** + * Callback function to be triggered before we attempt to download the Deno + * CLI. + */ + onBeforeDownload, + + /** + * Port where the server should listen on. + */ + port, + + /** + * Root path of the project. Defines a boundary outside of which files or npm + * modules cannot be included from. This is usually the same as `basePath`, + * with monorepos being the main exception, where `basePath` maps to the + * package path and `rootPath` is the repository root. + */ + rootPath, + + /** + * Path to write ephemeral files that need to be generated for the server to + * operate. + */ + servePath, + + /** + * Writable stream to receive the stderr of the server process. If not set, + * the stderr of the parent process will be used. + */ + stderr, + + /** + * Writable stream to receive the stdout of the server process. If not set, + * the stdout of the parent process will be used. + */ + stdout, + + /** + * Custom logging function to be used for user-facing messages. Defaults to + * `console.log`. + */ + userLogger, + + /** + * Custom logging function to be used for system-level messages. + */ + systemLogger, +}: ServeOptions) => { + const logger = getLogger(systemLogger, userLogger, debug) + const deno = new DenoBridge({ + debug, + logger, + onAfterDownload, + onBeforeDownload, + }) + + // Wait for the binary to be downloaded if needed. + await deno.getBinaryPath() + + // Downloading latest types if needed. + await ensureLatestTypes(deno, logger) + + const flags = ['--allow-all', '--no-config'] + + if (certificatePath) { + flags.push(`--cert=${certificatePath}`) + } + + if (debug) { + flags.push('--log-level=debug') + } else { + flags.push('--quiet') + } + + if (inspectSettings && inspectSettings.enabled) { + if (inspectSettings.pause) { + flags.push(inspectSettings.address ? `--inspect-brk=${inspectSettings.address}` : '--inspect-brk') + } else { + flags.push(inspectSettings.address ? `--inspect=${inspectSettings.address}` : '--inspect') + } + } + + const server = prepareServer({ + basePath, + bootstrapURL, + deno, + distDirectory: servePath, + distImportMapPath, + featureFlags, + flags, + formatExportTypeError, + formatImportError, + logger, + stderr, + stdout, + port, + rootPath, + }) + + return server +} diff --git a/packages/edge-bundler/node/server/util.ts b/packages/edge-bundler/node/server/util.ts new file mode 100644 index 0000000000..058018456a --- /dev/null +++ b/packages/edge-bundler/node/server/util.ts @@ -0,0 +1,65 @@ +import { ExecaChildProcess } from 'execa' +import fetch from 'node-fetch' +import waitFor from 'p-wait-for' + +// 1 second +const SERVER_KILL_TIMEOUT = 1e3 + +// 1 second +const SERVER_POLL_INTERNAL = 1e3 + +// 10 seconds +const SERVER_POLL_TIMEOUT = 1e4 + +interface SuccessRef { + success: boolean +} + +const isServerReady = async (port: number, successRef: SuccessRef, ps?: ExecaChildProcess) => { + // If the process has been killed or if it exited with an error, we return + // early with `success: false`. + if (ps?.killed || (ps?.exitCode && ps.exitCode > 0)) { + return true + } + + try { + await fetch(`http://127.0.0.1:${port}`) + + successRef.success = true + } catch { + return false + } + + return true +} + +const killProcess = (ps: ExecaChildProcess) => { + // If the process is no longer running, there's nothing left to do. + if (ps?.exitCode !== null) { + return + } + + return new Promise((resolve, reject) => { + ps.on('close', resolve) + ps.on('error', reject) + + ps.kill('SIGTERM', { + forceKillAfterTimeout: SERVER_KILL_TIMEOUT, + }) + }) +} + +const waitForServer = async (port: number, ps?: ExecaChildProcess) => { + const successRef: SuccessRef = { + success: false, + } + + await waitFor(() => isServerReady(port, successRef, ps), { + interval: SERVER_POLL_INTERNAL, + timeout: SERVER_POLL_TIMEOUT, + }) + + return successRef.success +} + +export { killProcess, waitForServer } diff --git a/packages/edge-bundler/node/stage_2.test.ts b/packages/edge-bundler/node/stage_2.test.ts new file mode 100644 index 0000000000..4658b260f1 --- /dev/null +++ b/packages/edge-bundler/node/stage_2.test.ts @@ -0,0 +1,63 @@ +import { rm, writeFile } from 'fs/promises' +import { join } from 'path' +import { pathToFileURL } from 'url' + +import { execa } from 'execa' +import tmp from 'tmp-promise' +import { test, expect } from 'vitest' + +import { getLocalEntryPoint } from './formats/javascript.js' + +test('`getLocalEntryPoint` returns a valid stage 2 file for local development', async () => { + const { path: tmpDir } = await tmp.dir() + + // This is a fake bootstrap that we'll create just for the purpose of logging + // the functions and the metadata that are sent to the `boot` function. + const printer = ` + export const boot = async (functions, metadata) => { + const responses = {} + + for (const name in functions) { + responses[name] = await functions[name]() + } + + console.log(JSON.stringify({ responses, metadata })) + } + ` + const printerPath = join(tmpDir, 'printer.mjs') + const bootstrapURL = pathToFileURL(printerPath).toString() + + await writeFile(printerPath, printer) + + const functions = [ + { name: 'func1', path: join(tmpDir, 'func1.mjs'), response: 'Hello from function 1' }, + { name: 'func2', path: join(tmpDir, 'func2.mjs'), response: 'Hello from function 2' }, + ] + + for (const func of functions) { + const contents = `export default () => ${JSON.stringify(func.response)}` + + await writeFile(func.path, contents) + } + + const stage2 = getLocalEntryPoint( + functions.map(({ name, path }) => ({ name, path })), + { bootstrapURL }, + ) + const stage2Path = join(tmpDir, 'stage2.mjs') + + await writeFile(stage2Path, stage2) + + const { stdout, stderr } = await execa('deno', ['run', '--allow-all', stage2Path]) + + expect(stderr).toBe('') + + const { metadata, responses } = JSON.parse(stdout) + + for (const func of functions) { + expect(responses[func.name]).toBe(func.response) + expect(metadata.functions[func.name].url).toBe(pathToFileURL(func.path).toString()) + } + + await rm(tmpDir, { force: true, recursive: true }) +}) diff --git a/packages/edge-bundler/node/types.test.ts b/packages/edge-bundler/node/types.test.ts new file mode 100644 index 0000000000..4d57416dac --- /dev/null +++ b/packages/edge-bundler/node/types.test.ts @@ -0,0 +1,90 @@ +import { readFile, rm, writeFile } from 'fs/promises' +import { join } from 'path' + +import nock from 'nock' +import tmp from 'tmp-promise' +import { test, expect, vi } from 'vitest' + +import { testLogger } from '../test/util.js' + +import { DenoBridge } from './bridge.js' +import { ensureLatestTypes } from './types.js' + +test('`ensureLatestTypes` updates the Deno CLI cache if the local version of types is outdated', async () => { + const mockURL = 'https://edge.netlify' + const mockVersion = '123456789' + const latestVersionMock = nock(mockURL).get('/version.txt').reply(200, mockVersion) + + const tmpDir = await tmp.dir() + const deno = new DenoBridge({ + cacheDirectory: tmpDir.path, + logger: testLogger, + }) + + // @ts-expect-error return value not used + const mock = vi.spyOn(deno, 'run').mockResolvedValue({}) + + await ensureLatestTypes(deno, testLogger, mockURL) + + const versionFile = await readFile(join(tmpDir.path, 'types-version.txt'), 'utf8') + + expect(latestVersionMock.isDone()).toBe(true) + expect(mock).toHaveBeenCalledTimes(1) + expect(mock).toHaveBeenCalledWith(['cache', '-r', mockURL]) + expect(versionFile).toBe(mockVersion) + + mock.mockRestore() + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('`ensureLatestTypes` does not update the Deno CLI cache if the local version of types is up-to-date', async () => { + const mockURL = 'https://edge.netlify' + const mockVersion = '987654321' + + const tmpDir = await tmp.dir() + const versionFilePath = join(tmpDir.path, 'types-version.txt') + + await writeFile(versionFilePath, mockVersion) + + const latestVersionMock = nock(mockURL).get('/version.txt').reply(200, mockVersion) + const deno = new DenoBridge({ + cacheDirectory: tmpDir.path, + logger: testLogger, + }) + + // @ts-expect-error return value not used + const mock = vi.spyOn(deno, 'run').mockResolvedValue({}) + + await ensureLatestTypes(deno, testLogger, mockURL) + + expect(latestVersionMock.isDone()).toBe(true) + expect(mock).not.toHaveBeenCalled() + + mock.mockRestore() + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) + +test('`ensureLatestTypes` does not throw if the types URL is not available', async () => { + const mockURL = 'https://edge.netlify' + const latestVersionMock = nock(mockURL).get('/version.txt').reply(500) + + const tmpDir = await tmp.dir() + const deno = new DenoBridge({ + cacheDirectory: tmpDir.path, + logger: testLogger, + }) + + // @ts-expect-error return value not used + const mock = vi.spyOn(deno, 'run').mockResolvedValue({}) + + await ensureLatestTypes(deno, testLogger, mockURL) + + expect(latestVersionMock.isDone()).toBe(true) + expect(mock).not.toHaveBeenCalled() + + mock.mockRestore() + + await rm(tmpDir.path, { force: true, recursive: true, maxRetries: 10 }) +}) diff --git a/packages/edge-bundler/node/types.ts b/packages/edge-bundler/node/types.ts new file mode 100644 index 0000000000..9a354abe81 --- /dev/null +++ b/packages/edge-bundler/node/types.ts @@ -0,0 +1,81 @@ +import { promises as fs } from 'fs' +import { join } from 'path' + +import fetch from 'node-fetch' + +import type { DenoBridge } from './bridge.js' +import type { Logger } from './logger.js' + +const TYPES_URL = 'https://edge.netlify.com' + +const ensureLatestTypes = async (deno: DenoBridge, logger: Logger, customTypesURL?: string) => { + const typesURL = customTypesURL ?? TYPES_URL + + // eslint-disable-next-line prefer-const + let [localVersion, remoteVersion] = [await getLocalVersion(deno), ''] + + try { + remoteVersion = await getRemoteVersion(typesURL) + } catch (error) { + logger.system('Could not check latest version of types:', error) + + return + } + + if (localVersion === remoteVersion) { + logger.system('Local version of types is up-to-date:', localVersion) + + return + } + + logger.system('Local version of types is outdated, updating:', localVersion) + + try { + await deno.run(['cache', '-r', typesURL]) + } catch (error) { + logger.system('Could not download latest types:', error) + + return + } + + try { + await writeVersionFile(deno, remoteVersion) + } catch { + // no-op + } +} + +const getLocalVersion = async (deno: DenoBridge) => { + const versionFilePath = join(deno.cacheDirectory, 'types-version.txt') + + try { + const version = await fs.readFile(versionFilePath, 'utf8') + + return version + } catch { + // no-op + } +} + +const getRemoteVersion = async (typesURL: string) => { + const versionURL = new URL('/version.txt', typesURL) + const res = await fetch(versionURL.toString()) + + if (res.status !== 200) { + throw new Error('Unexpected status code from version endpoint') + } + + const version = await res.text() + + return version +} + +const writeVersionFile = async (deno: DenoBridge, version: string) => { + await deno.ensureCacheDirectory() + + const versionFilePath = join(deno.cacheDirectory, 'types-version.txt') + + await fs.writeFile(versionFilePath, version) +} + +export { ensureLatestTypes } diff --git a/packages/edge-bundler/node/utils/error.ts b/packages/edge-bundler/node/utils/error.ts new file mode 100644 index 0000000000..1b6a600399 --- /dev/null +++ b/packages/edge-bundler/node/utils/error.ts @@ -0,0 +1,3 @@ +export const isNodeError = (error: any): error is NodeJS.ErrnoException => error instanceof Error + +export const isFileNotFoundError = (error: any) => isNodeError(error) && error.code === 'ENOENT' diff --git a/packages/edge-bundler/node/utils/fs.ts b/packages/edge-bundler/node/utils/fs.ts new file mode 100644 index 0000000000..afff29d4a6 --- /dev/null +++ b/packages/edge-bundler/node/utils/fs.ts @@ -0,0 +1,15 @@ +import path from 'path' + +/** + * Returns all the directories obtained by traversing `inner` and its parents + * all the way to `outer`, inclusive. + */ +export const pathsBetween = (inner: string, outer: string, paths: string[] = []): string[] => { + const parent = path.dirname(inner) + + if (inner === outer || inner === parent) { + return [...paths, outer] + } + + return [inner, ...pathsBetween(parent, outer)] +} diff --git a/packages/edge-bundler/node/utils/non_nullable.ts b/packages/edge-bundler/node/utils/non_nullable.ts new file mode 100644 index 0000000000..040d5f21a1 --- /dev/null +++ b/packages/edge-bundler/node/utils/non_nullable.ts @@ -0,0 +1,3 @@ +const nonNullable = (value: T): value is NonNullable => value !== null && value !== undefined + +export { nonNullable } diff --git a/packages/edge-bundler/node/utils/sha256.ts b/packages/edge-bundler/node/utils/sha256.ts new file mode 100644 index 0000000000..03c835e64d --- /dev/null +++ b/packages/edge-bundler/node/utils/sha256.ts @@ -0,0 +1,23 @@ +import crypto from 'crypto' +import fs from 'fs' + +const getFileHash = (path: string): Promise => { + const hash = crypto.createHash('sha256') + + hash.setEncoding('hex') + + return new Promise((resolve, reject) => { + const file = fs.createReadStream(path) + + file.on('end', () => { + hash.end() + + resolve(hash.read()) + }) + file.on('error', reject) + + file.pipe(hash) + }) +} + +export { getFileHash } diff --git a/packages/edge-bundler/node/utils/urlpattern.ts b/packages/edge-bundler/node/utils/urlpattern.ts new file mode 100644 index 0000000000..168ed0e630 --- /dev/null +++ b/packages/edge-bundler/node/utils/urlpattern.ts @@ -0,0 +1,7 @@ +import { URLPattern } from 'urlpattern-polyfill' + +export class ExtendedURLPattern extends URLPattern { + // @ts-expect-error Internal property that the underlying class is using but + // not exposing. + regexp: Record +} diff --git a/packages/edge-bundler/node/validation/manifest/__snapshots__/index.test.ts.snap b/packages/edge-bundler/node/validation/manifest/__snapshots__/index.test.ts.snap new file mode 100644 index 0000000000..9f30a52250 --- /dev/null +++ b/packages/edge-bundler/node/validation/manifest/__snapshots__/index.test.ts.snap @@ -0,0 +1,191 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`bundle > should throw on additional property in bundle 1`] = ` +"Validation of Edge Functions manifest failed +ADDTIONAL PROPERTY must NOT have additional properties + + 4 | \\"asset\\": \\"f35baff44129a8f6be7db68590b2efd86ed4ba29000e2edbcaddc5d620d7d043.js\\", + 5 | \\"format\\": \\"js\\", +> 6 | \\"foo\\": \\"bar\\" + | ^^^^^ 😲 foo is not expected to be here! + 7 | } + 8 | ], + 9 | \\"routes\\": [" +`; + +exports[`bundle > should throw on invalid format 1`] = ` +"Validation of Edge Functions manifest failed +ENUM must be equal to one of the allowed values +(eszip2, js) + + 3 | { + 4 | \\"asset\\": \\"f35baff44129a8f6be7db68590b2efd86ed4ba29000e2edbcaddc5d620d7d043.js\\", +> 5 | \\"format\\": \\"foo\\" + | ^^^^^ 👈🏽 Unexpected value, should be equal to one of the allowed values + 6 | } + 7 | ], + 8 | \\"routes\\": [" +`; + +exports[`bundle > should throw on missing asset 1`] = ` +"Validation of Edge Functions manifest failed +REQUIRED must have required property 'asset' + + 1 | { + 2 | \\"bundles\\": [ +> 3 | { + | ^ ☹️ asset is missing here! + 4 | \\"format\\": \\"js\\" + 5 | } + 6 | ]," +`; + +exports[`bundle > should throw on missing format 1`] = ` +"Validation of Edge Functions manifest failed +REQUIRED must have required property 'format' + + 1 | { + 2 | \\"bundles\\": [ +> 3 | { + | ^ ☹️ format is missing here! + 4 | \\"asset\\": \\"f35baff44129a8f6be7db68590b2efd86ed4ba29000e2edbcaddc5d620d7d043.js\\" + 5 | } + 6 | ]," +`; + +exports[`import map URL > should throw on wrong type 1`] = ` +"Validation of Edge Functions manifest failed +TYPE must be string + + 30 | ], + 31 | \\"bundler_version\\": \\"1.6.0\\", +> 32 | \\"import_map\\": [ + | ^ +> 33 | \\"file:///root/.netlify/edge-functions-dist/import_map.json\\" + | ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ +> 34 | ] + | ^^^^ 👈🏽 type must be string + 35 | }" +`; + +exports[`layers > should throw on additional property 1`] = ` +"Validation of Edge Functions manifest failed +ADDTIONAL PROPERTY must NOT have additional properties + + 27 | \\"name\\": \\"name\\", + 28 | \\"local\\": \\"local\\", +> 29 | \\"foo\\": \\"bar\\" + | ^^^^^ 😲 foo is not expected to be here! + 30 | } + 31 | ], + 32 | \\"bundler_version\\": \\"1.6.0\\"" +`; + +exports[`layers > should throw on missing flag 1`] = ` +"Validation of Edge Functions manifest failed +REQUIRED must have required property 'flag' + + 23 | ], + 24 | \\"layers\\": [ +> 25 | { + | ^ ☹️ flag is missing here! + 26 | \\"name\\": \\"name\\", + 27 | \\"local\\": \\"local\\" + 28 | }" +`; + +exports[`layers > should throw on missing name 1`] = ` +"Validation of Edge Functions manifest failed +REQUIRED must have required property 'name' + + 23 | ], + 24 | \\"layers\\": [ +> 25 | { + | ^ ☹️ name is missing here! + 26 | \\"flag\\": \\"flag\\", + 27 | \\"local\\": \\"local\\" + 28 | }" +`; + +exports[`route > should throw on additional property 1`] = ` +"Validation of Edge Functions manifest failed +ADDTIONAL PROPERTY must NOT have additional properties + + 12 | \\"pattern\\": \\"^/hello/?$\\", + 13 | \\"generator\\": \\"@netlify/fake-plugin@1.0.0\\", +> 14 | \\"foo\\": \\"bar\\" + | ^^^^^ 😲 foo is not expected to be here! + 15 | } + 16 | ], + 17 | \\"post_cache_routes\\": [" +`; + +exports[`route > should throw on invalid pattern 1`] = ` +"Validation of Edge Functions manifest failed +FORMAT pattern must be a regex that starts with ^ and ends with $ (e.g. ^/blog/[d]{4}$) + + 10 | \\"name\\": \\"name\\", + 11 | \\"function\\": \\"hello\\", +> 12 | \\"pattern\\": \\"/^/hello/?$/\\", + | ^^^^^^^^^^^^^^ 👈🏽 format pattern must be a regex that starts with ^ and ends with $ (e.g. ^/blog/[d]{4}$) + 13 | \\"generator\\": \\"@netlify/fake-plugin@1.0.0\\" + 14 | } + 15 | ]," +`; + +exports[`route > should throw on missing function 1`] = ` +"Validation of Edge Functions manifest failed +REQUIRED must have required property 'function' + + 7 | ], + 8 | \\"routes\\": [ +> 9 | { + | ^ ☹️ function is missing here! + 10 | \\"name\\": \\"name\\", + 11 | \\"pattern\\": \\"^/hello/?$\\", + 12 | \\"generator\\": \\"@netlify/fake-plugin@1.0.0\\"" +`; + +exports[`route > should throw on missing pattern 1`] = ` +"Validation of Edge Functions manifest failed +REQUIRED must have required property 'pattern' + + 7 | ], + 8 | \\"routes\\": [ +> 9 | { + | ^ ☹️ pattern is missing here! + 10 | \\"name\\": \\"name\\", + 11 | \\"function\\": \\"hello\\", + 12 | \\"generator\\": \\"@netlify/fake-plugin@1.0.0\\"" +`; + +exports[`should show multiple errors 1`] = ` +"Validation of Edge Functions manifest failed +ADDTIONAL PROPERTY must NOT have additional properties + + 30 | ], + 31 | \\"bundler_version\\": \\"1.6.0\\", +> 32 | \\"foo\\": \\"bar\\", + | ^^^^^ 😲 foo is not expected to be here! + 33 | \\"baz\\": \\"bar\\" + 34 | } + +ADDTIONAL PROPERTY must NOT have additional properties + + 31 | \\"bundler_version\\": \\"1.6.0\\", + 32 | \\"foo\\": \\"bar\\", +> 33 | \\"baz\\": \\"bar\\" + | ^^^^^ 😲 baz is not expected to be here! + 34 | }" +`; + +exports[`should throw on additional property on root level 1`] = ` +"Validation of Edge Functions manifest failed +ADDTIONAL PROPERTY must NOT have additional properties + + 30 | ], + 31 | \\"bundler_version\\": \\"1.6.0\\", +> 32 | \\"foo\\": \\"bar\\" + | ^^^^^ 😲 foo is not expected to be here! + 33 | }" +`; diff --git a/packages/edge-bundler/node/validation/manifest/error.ts b/packages/edge-bundler/node/validation/manifest/error.ts new file mode 100644 index 0000000000..66026c31ef --- /dev/null +++ b/packages/edge-bundler/node/validation/manifest/error.ts @@ -0,0 +1,14 @@ +export default class ManifestValidationError extends Error { + customErrorInfo = { + type: 'functionsBundling', + } + + constructor(message: string | undefined) { + super(`Validation of Edge Functions manifest failed\n${message}`) + + this.name = 'ManifestValidationError' + + // https://github.com/microsoft/TypeScript-wiki/blob/0fecbda7263f130c57394d779b8ca13f0a2e9123/Breaking-Changes.md#extending-built-ins-like-error-array-and-map-may-no-longer-work + Object.setPrototypeOf(this, ManifestValidationError.prototype) + } +} diff --git a/packages/edge-bundler/node/validation/manifest/index.test.ts b/packages/edge-bundler/node/validation/manifest/index.test.ts new file mode 100644 index 0000000000..6a594799bd --- /dev/null +++ b/packages/edge-bundler/node/validation/manifest/index.test.ts @@ -0,0 +1,182 @@ +import chalk from 'chalk' +import { test, expect, describe } from 'vitest' + +import { validateManifest, ManifestValidationError } from './index.js' + +// We need to disable all color outputs for the tests as they are different on different platforms, CI, etc. +// This only works if this is the same instance of chalk that better-ajv-errors uses +chalk.level = 0 + +// Factory so we have a new object per test +const getBaseManifest = (): Record => ({ + bundles: [ + { + asset: 'f35baff44129a8f6be7db68590b2efd86ed4ba29000e2edbcaddc5d620d7d043.js', + format: 'js', + }, + ], + routes: [ + { + name: 'name', + function: 'hello', + pattern: '^/hello/?$', + generator: '@netlify/fake-plugin@1.0.0', + }, + ], + post_cache_routes: [ + { + name: 'name', + function: 'hello', + pattern: '^/hello/?$', + generator: '@netlify/fake-plugin@1.0.0', + }, + ], + layers: [ + { + flag: 'flag', + name: 'name', + local: 'local', + }, + ], + bundler_version: '1.6.0', +}) + +test('should not throw on valid manifest', () => { + expect(() => validateManifest(getBaseManifest())).not.toThrowError() +}) + +test('should throw ManifestValidationError with correct message', () => { + expect(() => validateManifest('manifest')).toThrowError(ManifestValidationError) + expect(() => validateManifest('manifest')).toThrowError(/^Validation of Edge Functions manifest failed/) +}) + +test('should throw ManifestValidationError with customErrorInfo', () => { + try { + validateManifest('manifest') + } catch (error) { + expect(error).toBeInstanceOf(ManifestValidationError) + + const { customErrorInfo } = error as ManifestValidationError + expect(customErrorInfo).toBeDefined() + expect(customErrorInfo.type).toBe('functionsBundling') + return + } + + expect.fail('should have thrown') +}) + +test('should throw on additional property on root level', () => { + const manifest = getBaseManifest() + manifest.foo = 'bar' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() +}) + +test('should show multiple errors', () => { + const manifest = getBaseManifest() + manifest.foo = 'bar' + manifest.baz = 'bar' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() +}) + +describe('bundle', () => { + test('should throw on additional property in bundle', () => { + const manifest = getBaseManifest() + manifest.bundles[0].foo = 'bar' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on missing asset', () => { + const manifest = getBaseManifest() + delete manifest.bundles[0].asset + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on missing format', () => { + const manifest = getBaseManifest() + delete manifest.bundles[0].format + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on invalid format', () => { + const manifest = getBaseManifest() + manifest.bundles[0].format = 'foo' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) +}) + +describe('route', () => { + test('should throw on additional property', () => { + const manifest = getBaseManifest() + manifest.routes[0].foo = 'bar' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on invalid pattern', () => { + const manifest = getBaseManifest() + manifest.routes[0].pattern = '/^/hello/?$/' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on missing function', () => { + const manifest = getBaseManifest() + delete manifest.routes[0].function + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on missing pattern', () => { + const manifest = getBaseManifest() + delete manifest.routes[0].pattern + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) +}) + +// No tests for post_cache_routes as schema shared with routes + +describe('layers', () => { + test('should throw on additional property', () => { + const manifest = getBaseManifest() + manifest.layers[0].foo = 'bar' + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on missing name', () => { + const manifest = getBaseManifest() + delete manifest.layers[0].name + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) + + test('should throw on missing flag', () => { + const manifest = getBaseManifest() + delete manifest.layers[0].flag + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) +}) + +describe('import map URL', () => { + test('should accept string value', () => { + const manifest = getBaseManifest() + manifest.import_map = 'file:///root/.netlify/edge-functions-dist/import_map.json' + + expect(() => validateManifest(manifest)).not.toThrowError() + }) + + test('should throw on wrong type', () => { + const manifest = getBaseManifest() + manifest.import_map = ['file:///root/.netlify/edge-functions-dist/import_map.json'] + + expect(() => validateManifest(manifest)).toThrowErrorMatchingSnapshot() + }) +}) diff --git a/packages/edge-bundler/node/validation/manifest/index.ts b/packages/edge-bundler/node/validation/manifest/index.ts new file mode 100644 index 0000000000..3c2e614576 --- /dev/null +++ b/packages/edge-bundler/node/validation/manifest/index.ts @@ -0,0 +1,50 @@ +import Ajv from 'ajv' +import type { ValidateFunction } from 'ajv/dist/core.js' +import ajvErrors from 'ajv-errors' +import betterAjvErrors from 'better-ajv-errors' + +import { FeatureFlags } from '../../feature_flags.js' +import type { Manifest } from '../../manifest.js' + +import ManifestValidationError from './error.js' +import edgeManifestSchema from './schema.js' + +let manifestValidator: ValidateFunction + +const initializeValidator = () => { + if (manifestValidator === undefined) { + const ajv = new Ajv({ allErrors: true }) + ajvErrors(ajv) + + // regex pattern for manifest route pattern + // checks if the pattern string starts with ^ and ends with $ + const normalizedPatternRegex = /^\^.*\$$/ + ajv.addFormat('regexPattern', { + validate: (data: string) => normalizedPatternRegex.test(data), + }) + + manifestValidator = ajv.compile(edgeManifestSchema) + } + + return manifestValidator +} + +// throws on validation error +// eslint-disable-next-line @typescript-eslint/no-unused-vars +export const validateManifest = (manifestData: unknown, _featureFlags: FeatureFlags = {}): void => { + const validate = initializeValidator() + + const valid = validate(manifestData) + + if (!valid) { + let errorOutput + + if (validate.errors) { + errorOutput = betterAjvErrors(edgeManifestSchema, manifestData, validate.errors, { indent: 2 }) + } + + throw new ManifestValidationError(errorOutput) + } +} + +export { ManifestValidationError } diff --git a/packages/edge-bundler/node/validation/manifest/schema.ts b/packages/edge-bundler/node/validation/manifest/schema.ts new file mode 100644 index 0000000000..d244f4999d --- /dev/null +++ b/packages/edge-bundler/node/validation/manifest/schema.ts @@ -0,0 +1,90 @@ +const bundlesSchema = { + type: 'object', + required: ['asset', 'format'], + properties: { + asset: { type: 'string' }, + format: { type: 'string', enum: ['eszip2', 'js'] }, + }, + additionalProperties: false, +} + +const excludedPatternsSchema = { + type: 'array', + items: { + type: 'string', + format: 'regexPattern', + errorMessage: + 'excluded_patterns must be an array of regex that starts with ^ and ends with $ (e.g. ^/blog/[d]{4}$)', + }, +} + +const routesSchema = { + type: 'object', + required: ['function', 'pattern'], + properties: { + name: { type: 'string' }, + function: { type: 'string' }, + pattern: { + type: 'string', + format: 'regexPattern', + errorMessage: 'pattern must be a regex that starts with ^ and ends with $ (e.g. ^/blog/[d]{4}$)', + }, + excluded_patterns: excludedPatternsSchema, + generator: { type: 'string' }, + path: { type: 'string' }, + methods: { + type: 'array', + items: { type: 'string', enum: ['GET', 'POST', 'PUT', 'PATCH', 'DELETE', 'OPTIONS'] }, + }, + }, + additionalProperties: false, +} + +const functionConfigSchema = { + type: 'object', + required: [], + properties: { + excluded_patterns: excludedPatternsSchema, + on_error: { type: 'string' }, + }, +} + +const layersSchema = { + type: 'object', + required: ['flag', 'name'], + properties: { + flag: { type: 'string' }, + name: { type: 'string' }, + local: { type: 'string' }, + }, + additionalProperties: false, +} + +const edgeManifestSchema = { + type: 'object', + required: ['bundles', 'routes', 'bundler_version'], + properties: { + bundles: { + type: 'array', + items: bundlesSchema, + }, + routes: { + type: 'array', + items: routesSchema, + }, + post_cache_routes: { + type: 'array', + items: routesSchema, + }, + layers: { + type: 'array', + items: layersSchema, + }, + import_map: { type: 'string' }, + bundler_version: { type: 'string' }, + function_config: { type: 'object', additionalProperties: functionConfigSchema }, + }, + additionalProperties: false, +} + +export default edgeManifestSchema diff --git a/packages/edge-bundler/node/vendor/module_graph/media_type.ts b/packages/edge-bundler/node/vendor/module_graph/media_type.ts new file mode 100644 index 0000000000..d0b4827955 --- /dev/null +++ b/packages/edge-bundler/node/vendor/module_graph/media_type.ts @@ -0,0 +1,20 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +export enum MediaType { + JavaScript = "JavaScript", + Mjs = "Mjs", + Cjs = "Cjs", + Jsx = "Jsx", + TypeScript = "TypeScript", + Mts = "Mts", + Cts = "Cts", + Dts = "Dts", + Dmts = "Dmts", + Dcts = "Dcts", + Tsx = "Tsx", + Json = "Json", + Wasm = "Wasm", + TsBuildInfo = "TsBuildInfo", + SourceMap = "SourceMap", + Unknown = "Unknown", +} \ No newline at end of file diff --git a/packages/edge-bundler/node/vendor/module_graph/module_graph.ts b/packages/edge-bundler/node/vendor/module_graph/module_graph.ts new file mode 100644 index 0000000000..27b531c286 --- /dev/null +++ b/packages/edge-bundler/node/vendor/module_graph/module_graph.ts @@ -0,0 +1,182 @@ +// Copyright 2018-2023 the Deno authors. All rights reserved. MIT license. + +import type { MediaType } from "./media_type.ts"; + +/** Additional meta data that is used to enrich the output of the module + * graph. */ +export interface CacheInfo { + /** The string path to where the local version of the content is located. For + * non `file:` URLs, this is the location of the cached content, otherwise it + * is the absolute path to the local file. */ + local?: string; + /** The string path to where a transpiled version of the source content is + * located, if any. */ + emit?: string; + /** The string path to where an external source map of the transpiled source + * content is located, if any. */ + map?: string; +} + +export interface TypesDependency { + /** The string URL to the type information for the module. */ + types: string; + /** An optional range which indicates the source of the dependency. */ + source?: Range; +} + +export interface LoadResponseModule { + /** A module with code has been loaded. */ + kind: "module"; + /** The string URL of the resource. If there were redirects, the final + * specifier should be set here, otherwise the requested specifier. */ + specifier: string; + /** For remote resources, a record of headers should be set, where the key's + * have been normalized to be lower case values. */ + headers?: Record; + /** The string value of the loaded resources. */ + content: string; +} + +export interface LoadResponseExternal { + /** The loaded module is either _external_ or _built-in_ to the runtime. */ + kind: "external"; + /** The strung URL of the resource. If there were redirects, the final + * specifier should be set here, otherwise the requested specifier. */ + specifier: string; +} + +export type LoadResponse = LoadResponseModule | LoadResponseExternal; + +export interface PositionJson { + /** The line number of a position within a source file. The number is a zero + * based index. */ + line: number; + /** The character number of a position within a source file. The number is a + * zero based index. */ + character: number; +} + +export interface Range { + /** A string URL representing a source of a dependency. */ + specifier: string; + /** The start location of a range of text in a source file. */ + start?: PositionJson; + /** The end location of a range of text in a source file. */ + end?: PositionJson; +} + +export interface RangeJson { + /** The start location of a range of text in a source file. */ + start: PositionJson; + /** The end location of a range of text in a source file. */ + end: PositionJson; +} + +export interface ResolvedDependency { + /** The fully resolved string URL of the dependency, which should be + * resolvable in the module graph. If there was an error, `error` will be set + * and this will be undefined. */ + specifier?: string; + /** Any error encountered when trying to resolved the specifier. If this is + * defined, `specifier` will be undefined. */ + error?: string; + /** The range within the source code where the specifier was identified. */ + span: RangeJson; +} + +export interface TypesDependencyJson { + /** The string specifier that was used for the dependency. */ + specifier: string; + /** An object pointing to the resolved dependency. */ + dependency: ResolvedDependency; +} + +/** The kind of module. + * + * For asserted modules, the value of the `asserted` property is set to the + * `type` value of the import attribute. + * + * Dependency analysis is not performed for asserted or Script modules + * currently. Synthetic modules were injected into the graph with their own + * dependencies provided. */ +export type ModuleKind = + | "asserted" + | "esm" + | "npm" + | "external"; + +export interface DependencyJson { + /** The string specifier that was used for the dependency. */ + specifier: string; + /** An object pointing to the resolved _code_ dependency. */ + code?: ResolvedDependency; + /** An object pointing to the resolved _type_ dependency of a module. This is + * populated when the `@deno-types` directive was used to supply a type + * definition file for a dependency. */ + type?: ResolvedDependency; + /** A flag indicating if the dependency was dynamic. (e.g. + * `await import("mod.ts")`) */ + isDynamic?: true; + assertionType?: string; +} + +// todo(dsherret): split this up into separate types based on the "kind" + +export interface ModuleJson extends CacheInfo { + /** The string URL of the module. */ + specifier: string; + /** Any error encountered when attempting to load the module. */ + error?: string; + /** The module kind that was determined when the module was resolved. This is + * used by loaders to indicate how a module needs to be loaded at runtime. */ + kind?: ModuleKind; + /** An array of dependencies that were identified in the module. */ + dependencies?: DependencyJson[]; + /** If the module had a types dependency, the information about that + * dependency. */ + typesDependency?: TypesDependencyJson; + /** The resolved media type of the module, which determines how Deno will + * handle the module. */ + mediaType?: MediaType; + /** The size of the source content of the module in bytes. */ + size?: number; +} + +export interface GraphImportJson { + /** The referrer (URL string) that was used as a base when resolving the + * imports added to the graph. */ + referrer: string; + /** An array of resolved dependencies which were imported using the + * referrer. */ + dependencies?: DependencyJson[]; +} + +/** The plain-object representation of a module graph that is suitable for + * serialization to JSON. */ +export interface ModuleGraphJson { + /** The module specifiers (URL string) of the _roots_ of the module graph of + * which the module graph was built for. */ + roots: string[]; + /** An array of modules that are part of the module graph. */ + modules: ModuleJson[]; + /** External imports that were added to the graph when it was being built. + * The key is the referrer which was used as a base to resolve the + * dependency. The value is the resolved dependency. */ + imports?: GraphImportJson[]; + /** A record/map of any redirects encountered when resolving modules. The + * key was the requested module specifier and the value is the redirected + * module specifier. */ + redirects: Record; +} + +export interface Dependency { + /** An object pointing to the resolved _code_ dependency. */ + code?: ResolvedDependency; + /** An object pointing to the resolved _type_ dependency of a module. This is + * populated when the `@deno-types` directive was used to supply a type + * definition file for a dependency. */ + type?: ResolvedDependency; + /** A flag indicating if the dependency was dynamic. (e.g. + * `await import("mod.ts")`) */ + isDynamic?: true; +} \ No newline at end of file diff --git a/packages/edge-bundler/package.json b/packages/edge-bundler/package.json new file mode 100644 index 0000000000..207e8d4a79 --- /dev/null +++ b/packages/edge-bundler/package.json @@ -0,0 +1,87 @@ +{ + "name": "@netlify/edge-bundler", + "version": "11.4.0", + "description": "Intelligently prepare Netlify Edge Functions for deployment", + "type": "module", + "main": "./dist/node/index.js", + "exports": "./dist/node/index.js", + "files": [ + "deno/**", + "!deno/**/*.test.ts", + "dist/**/*.js", + "dist/**/*.d.ts", + "shared/**" + ], + "scripts": { + "build": "tsc", + "build:dev": "tsc -w", + "prepack": "npm run build", + "test": "run-s build test:dev", + "test:dev": "run-s test:dev:*", + "test:ci": "run-s test:integration test:ci:*", + "test:dev:vitest": "vitest run", + "test:dev:vitest:watch": "vitest watch", + "test:dev:deno": "deno test --allow-all deno", + "test:ci:vitest": "vitest run --coverage", + "test:ci:deno": "deno test --allow-all deno", + "test:integration": "node --experimental-modules test/integration/test.js", + "vendor": "deno vendor --force --output deno/vendor https://deno.land/x/eszip@v0.55.2/mod.ts https://deno.land/x/retry@v2.0.0/mod.ts https://deno.land/x/std@0.177.0/path/mod.ts" + }, + "keywords": [], + "license": "MIT", + "repository": { + "type": "git", + "url": "https://github.com/netlify/build.git", + "directory": "packages/edge-bundler" + }, + "bugs": { + "url": "https://github.com/netlify/build/issues" + }, + "author": "Netlify Inc.", + "directories": { + "test": "test/node" + }, + "devDependencies": { + "@types/glob-to-regexp": "^0.4.1", + "@types/node": "^14.18.32", + "@types/semver": "^7.3.9", + "@types/uuid": "^9.0.0", + "@vitest/coverage-v8": "^0.34.0", + "archiver": "^5.3.1", + "chalk": "^4.1.2", + "cpy": "^9.0.1", + "cross-env": "^7.0.3", + "nock": "^13.2.4", + "tar": "^6.1.11", + "typescript": "^5.0.0", + "vitest": "^0.34.0" + }, + "engines": { + "node": "^14.16.0 || >=16.0.0" + }, + "dependencies": { + "@import-maps/resolve": "^1.0.1", + "@vercel/nft": "^0.26.0", + "ajv": "^8.11.2", + "ajv-errors": "^3.0.0", + "better-ajv-errors": "^1.2.0", + "common-path-prefix": "^3.0.0", + "env-paths": "^3.0.0", + "esbuild": "0.20.2", + "execa": "^6.0.0", + "find-up": "^6.3.0", + "get-package-name": "^2.2.0", + "get-port": "^6.1.2", + "is-path-inside": "^4.0.0", + "jsonc-parser": "^3.2.0", + "node-fetch": "^3.1.1", + "node-stream-zip": "^1.15.0", + "p-retry": "^5.1.1", + "p-wait-for": "^4.1.0", + "path-key": "^4.0.0", + "semver": "^7.3.8", + "tmp-promise": "^3.0.3", + "urlpattern-polyfill": "8.0.2", + "uuid": "^9.0.0" + } +} diff --git a/packages/edge-bundler/shared/consts.ts b/packages/edge-bundler/shared/consts.ts new file mode 100644 index 0000000000..1307adb2c7 --- /dev/null +++ b/packages/edge-bundler/shared/consts.ts @@ -0,0 +1,5 @@ +export const importMapSpecifier = 'netlify:import-map' +export const nodePrefix = 'node:' +export const npmPrefix = 'npm:' +export const virtualRoot = 'file:///root/' +export const virtualVendorRoot = 'file:///vendor/' diff --git a/packages/edge-bundler/shared/stage2.ts b/packages/edge-bundler/shared/stage2.ts new file mode 100644 index 0000000000..0b7cdf00ff --- /dev/null +++ b/packages/edge-bundler/shared/stage2.ts @@ -0,0 +1,13 @@ +export interface InputFunction { + name: string + path: string +} + +export interface WriteStage2Options { + basePath: string + destPath: string + externals: string[] + functions: InputFunction[] + importMapData?: string + vendorDirectory?: string +} diff --git a/packages/edge-bundler/test/fixtures/deno.win.zip b/packages/edge-bundler/test/fixtures/deno.win.zip new file mode 100644 index 0000000000..a1188e008c Binary files /dev/null and b/packages/edge-bundler/test/fixtures/deno.win.zip differ diff --git a/packages/edge-bundler/test/fixtures/deno.zip b/packages/edge-bundler/test/fixtures/deno.zip new file mode 100644 index 0000000000..78c88075aa Binary files /dev/null and b/packages/edge-bundler/test/fixtures/deno.zip differ diff --git a/packages/edge-bundler/test/fixtures/imports_json/functions/dict.json b/packages/edge-bundler/test/fixtures/imports_json/functions/dict.json new file mode 100644 index 0000000000..b42f309e7a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_json/functions/dict.json @@ -0,0 +1,3 @@ +{ + "foo": "bar" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_json/functions/func1.ts b/packages/edge-bundler/test/fixtures/imports_json/functions/func1.ts new file mode 100644 index 0000000000..985bd01779 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_json/functions/func1.ts @@ -0,0 +1,4 @@ +import dict from './dict.json' with { type: 'json' } + + +export default async () => Response.json(dict) diff --git a/packages/edge-bundler/test/fixtures/imports_node_specifier/netlify/edge-functions/func1.ts b/packages/edge-bundler/test/fixtures/imports_node_specifier/netlify/edge-functions/func1.ts new file mode 100644 index 0000000000..10c7581be0 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_node_specifier/netlify/edge-functions/func1.ts @@ -0,0 +1,13 @@ +import assert from 'node:assert' +import process from 'node:process' + +export default () => { + Deno.env.set('NETLIFY_TEST', '12345') + assert.deepEqual(process.env.NETLIFY_TEST, '12345') + + return new Response('ok') +} + +export const config = { + path: '/func1', +} diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/functions/func1.ts b/packages/edge-bundler/test/fixtures/imports_npm_module/functions/func1.ts new file mode 100644 index 0000000000..cb73fdbf0d --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/functions/func1.ts @@ -0,0 +1,14 @@ +import parent1 from 'parent-1' +import parent3 from './lib/util.ts' +import { echo, parent2 } from 'alias:helper' +import { HTMLRewriter } from 'html-rewriter' + +await Promise.resolve() + +new HTMLRewriter() + +export default async () => { + const text = [parent1('JavaScript'), parent2('APIs'), parent3('Markup')].join(', ') + + return new Response(echo(text)) +} diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/functions/lib/util.ts b/packages/edge-bundler/test/fixtures/imports_npm_module/functions/lib/util.ts new file mode 100644 index 0000000000..4ff7cd8ac8 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/functions/lib/util.ts @@ -0,0 +1,3 @@ +import parent3 from 'parent-3' + +export default parent3 diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/helper.ts b/packages/edge-bundler/test/fixtures/imports_npm_module/helper.ts new file mode 100644 index 0000000000..c302d8dd80 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/helper.ts @@ -0,0 +1,6 @@ +import parent2 from 'parent-2' + +export const greet = (name: string) => `Hello, ${name}!` +export const echo = (name: string) => name +export const yell = (message: string) => message.toUpperCase() +export { parent2 } diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/import_map.json b/packages/edge-bundler/test/fixtures/imports_npm_module/import_map.json new file mode 100644 index 0000000000..5ef2121b01 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/import_map.json @@ -0,0 +1,6 @@ +{ + "imports": { + "alias:helper": "./helper.ts", + "html-rewriter": "https://ghuc.cc/worker-tools/html-rewriter/index.ts" + } +} diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/files/file1.txt b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/files/file1.txt new file mode 100644 index 0000000000..6dcd8e419a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/files/file1.txt @@ -0,0 +1 @@ +One \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/files/file2.txt b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/files/file2.txt new file mode 100644 index 0000000000..5673baa5b5 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/files/file2.txt @@ -0,0 +1 @@ +Two \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/index.js b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/index.js new file mode 100644 index 0000000000..2d05eb4b62 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/index.js @@ -0,0 +1,16 @@ +import { readFileSync } from "fs" +import { join } from "path" +import { Buffer } from "node:buffer" + +export default (input) => { + try { + const filePath = input === "one" ? 'file1.txt' : 'file2.txt' + const fileContents = readFileSync(join(__dirname, "files", filePath)) + + console.log(Buffer.from(fileContents).toString('utf-8')) + } catch { + // no-op + } + + return `${input}` +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/package.json new file mode 100644 index 0000000000..4b3a6414a4 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-1/package.json @@ -0,0 +1,5 @@ +{ + "name": "child-1", + "version": "1.0.0", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-2/index.js b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-2/index.js new file mode 100644 index 0000000000..8505c7505a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-2/index.js @@ -0,0 +1,3 @@ +import grandchild1 from "grandchild-1" + +export default (input) => `${grandchild1(input)}` \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-2/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-2/package.json new file mode 100644 index 0000000000..1e4b084c6b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/child-2/package.json @@ -0,0 +1,8 @@ +{ + "name": "child-2", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "grandchild-1": "1.0.0" + } +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/grandchild-1/index.js b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/grandchild-1/index.js new file mode 100644 index 0000000000..59c1e941b1 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/grandchild-1/index.js @@ -0,0 +1,3 @@ +import { cwd } from "process" + +export default (input) => `${input}${cwd()}` \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/grandchild-1/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/grandchild-1/package.json new file mode 100644 index 0000000000..bb88071de1 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/grandchild-1/package.json @@ -0,0 +1,5 @@ +{ + "name": "grandchild-1", + "version": "1.0.0", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-1/index.js b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-1/index.js new file mode 100644 index 0000000000..c3bcbb5eef --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-1/index.js @@ -0,0 +1,3 @@ +import child1 from "child-1" + +export default (input) => `${child1(input)}` \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-1/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-1/package.json new file mode 100644 index 0000000000..b18a38c60b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-1/package.json @@ -0,0 +1,8 @@ +{ + "name": "parent-1", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "child-1": "1.0.0" + } +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-2/index.js b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-2/index.js new file mode 100644 index 0000000000..984b0b18eb --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-2/index.js @@ -0,0 +1,4 @@ +import child2 from "child-2" + +export default (input) => `${child2(input)}` + diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-2/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-2/package.json new file mode 100644 index 0000000000..adb0cc330b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-2/package.json @@ -0,0 +1,5 @@ +{ + "name": "parent-2", + "version": "1.0.0", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-3/index.js b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-3/index.js new file mode 100644 index 0000000000..f447613f2b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-3/index.js @@ -0,0 +1,4 @@ +import child2 from "child-2" + +export default (input) => `${child2(input)}` + diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-3/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-3/package.json new file mode 100644 index 0000000000..82b794a5ab --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/node_modules/parent-3/package.json @@ -0,0 +1,8 @@ +{ + "name": "parent-3", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "child-2": "1.0.0" + } +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module/package.json b/packages/edge-bundler/test/fixtures/imports_npm_module/package.json new file mode 100644 index 0000000000..3dbc1ca591 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/edge-bundler/test/fixtures/imports_npm_module_scheme/functions/func1.ts b/packages/edge-bundler/test/fixtures/imports_npm_module_scheme/functions/func1.ts new file mode 100644 index 0000000000..a4ed6e595a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/imports_npm_module_scheme/functions/func1.ts @@ -0,0 +1 @@ +import pRetry from "npm:p-retry" diff --git a/packages/edge-bundler/test/fixtures/invalid_functions/functions/func1.ts b/packages/edge-bundler/test/fixtures/invalid_functions/functions/func1.ts new file mode 100644 index 0000000000..4d181686bb --- /dev/null +++ b/packages/edge-bundler/test/fixtures/invalid_functions/functions/func1.ts @@ -0,0 +1 @@ +export default async () => diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/files/file1.txt b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/files/file1.txt new file mode 100644 index 0000000000..6dcd8e419a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/files/file1.txt @@ -0,0 +1 @@ +One \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/files/file2.txt b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/files/file2.txt new file mode 100644 index 0000000000..5673baa5b5 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/files/file2.txt @@ -0,0 +1 @@ +Two \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/index.js b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/index.js new file mode 100644 index 0000000000..35544be198 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/index.js @@ -0,0 +1,15 @@ +import { readFileSync } from "fs" +import { join } from "path" + +export default (input) => { + try { + const filePath = input === "one" ? 'file1.txt' : 'file2.txt' + const fileContents = readFileSync(join(__dirname, "files", filePath)) + + console.log(fileContents) + } catch { + // no-op + } + + return `${input}` +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/package.json new file mode 100644 index 0000000000..4b3a6414a4 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-1/package.json @@ -0,0 +1,5 @@ +{ + "name": "child-1", + "version": "1.0.0", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-2/index.js b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-2/index.js new file mode 100644 index 0000000000..8505c7505a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-2/index.js @@ -0,0 +1,3 @@ +import grandchild1 from "grandchild-1" + +export default (input) => `${grandchild1(input)}` \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-2/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-2/package.json new file mode 100644 index 0000000000..1e4b084c6b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/child-2/package.json @@ -0,0 +1,8 @@ +{ + "name": "child-2", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "grandchild-1": "1.0.0" + } +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/grandchild-1/index.js b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/grandchild-1/index.js new file mode 100644 index 0000000000..59c1e941b1 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/grandchild-1/index.js @@ -0,0 +1,3 @@ +import { cwd } from "process" + +export default (input) => `${input}${cwd()}` \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/grandchild-1/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/grandchild-1/package.json new file mode 100644 index 0000000000..bb88071de1 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/grandchild-1/package.json @@ -0,0 +1,5 @@ +{ + "name": "grandchild-1", + "version": "1.0.0", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-1/index.js b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-1/index.js new file mode 100644 index 0000000000..c3bcbb5eef --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-1/index.js @@ -0,0 +1,3 @@ +import child1 from "child-1" + +export default (input) => `${child1(input)}` \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-1/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-1/package.json new file mode 100644 index 0000000000..b18a38c60b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-1/package.json @@ -0,0 +1,8 @@ +{ + "name": "parent-1", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "child-1": "1.0.0" + } +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-2/index.js b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-2/index.js new file mode 100644 index 0000000000..984b0b18eb --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-2/index.js @@ -0,0 +1,4 @@ +import child2 from "child-2" + +export default (input) => `${child2(input)}` + diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-2/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-2/package.json new file mode 100644 index 0000000000..adb0cc330b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-2/package.json @@ -0,0 +1,5 @@ +{ + "name": "parent-2", + "version": "1.0.0", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-3/index.js b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-3/index.js new file mode 100644 index 0000000000..f447613f2b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-3/index.js @@ -0,0 +1,4 @@ +import child2 from "child-2" + +export default (input) => `${child2(input)}` + diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-3/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-3/package.json new file mode 100644 index 0000000000..82b794a5ab --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/node_modules/parent-3/package.json @@ -0,0 +1,8 @@ +{ + "name": "parent-3", + "version": "1.0.0", + "main": "index.js", + "dependencies": { + "child-2": "1.0.0" + } +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/package.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/package.json new file mode 100644 index 0000000000..3dbc1ca591 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/package.json @@ -0,0 +1,3 @@ +{ + "type": "module" +} diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/functions/func1.ts b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/functions/func1.ts new file mode 100644 index 0000000000..3afcb92302 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/functions/func1.ts @@ -0,0 +1,20 @@ +import parent1 from 'parent-1' +import parent3 from './lib/util.ts' +import { echo, parent2 } from 'alias:helper' +import { HTMLRewriter } from 'html-rewriter' + +await Promise.resolve() + +new HTMLRewriter() + +export default async () => { + console.error('Something is on fire') + + const text = [parent1('JavaScript'), parent2('APIs'), parent3('Markup')].join(', ') + + return new Response(echo(text)) +} + +export const config = { + path: '/func1', +} diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/functions/lib/util.ts b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/functions/lib/util.ts new file mode 100644 index 0000000000..4ff7cd8ac8 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/functions/lib/util.ts @@ -0,0 +1,3 @@ +import parent3 from 'parent-3' + +export default parent3 diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/helper.ts b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/helper.ts new file mode 100644 index 0000000000..c302d8dd80 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/helper.ts @@ -0,0 +1,6 @@ +import parent2 from 'parent-2' + +export const greet = (name: string) => `Hello, ${name}!` +export const echo = (name: string) => name +export const yell = (message: string) => message.toUpperCase() +export { parent2 } diff --git a/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/import_map.json b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/import_map.json new file mode 100644 index 0000000000..5ef2121b01 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/monorepo_npm_module/packages/frontend/import_map.json @@ -0,0 +1,6 @@ +{ + "imports": { + "alias:helper": "./helper.ts", + "html-rewriter": "https://ghuc.cc/worker-tools/html-rewriter/index.ts" + } +} diff --git a/packages/edge-bundler/test/fixtures/serve_test/.netlify/.gitignore b/packages/edge-bundler/test/fixtures/serve_test/.netlify/.gitignore new file mode 100644 index 0000000000..0829263618 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/.netlify/.gitignore @@ -0,0 +1 @@ +edge-functions-serve \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/.netlify/edge-functions/greet.ts b/packages/edge-bundler/test/fixtures/serve_test/.netlify/edge-functions/greet.ts new file mode 100644 index 0000000000..89acd12a80 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/.netlify/edge-functions/greet.ts @@ -0,0 +1,3 @@ +import { yell } from 'internal-helper' + +export default async () => new Response(yell('Hello!')) diff --git a/packages/edge-bundler/test/fixtures/serve_test/.netlify/edge-functions/import_map.json b/packages/edge-bundler/test/fixtures/serve_test/.netlify/edge-functions/import_map.json new file mode 100644 index 0000000000..41f78f3a46 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/.netlify/edge-functions/import_map.json @@ -0,0 +1,5 @@ +{ + "imports": { + "internal-helper": "../../helper.ts" + } +} diff --git a/packages/edge-bundler/test/fixtures/serve_test/helper.ts b/packages/edge-bundler/test/fixtures/serve_test/helper.ts new file mode 100644 index 0000000000..46c8bb5e47 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/helper.ts @@ -0,0 +1 @@ +export const yell = (message: string) => message.toUpperCase() diff --git a/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/echo_env.ts b/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/echo_env.ts new file mode 100644 index 0000000000..1ed20a62bb --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/echo_env.ts @@ -0,0 +1,21 @@ +import { Config } from 'https://edge.netlify.com' + +import { yell } from 'helper' +import id from 'id' +import identidade from '@pt-committee/identidade' + +import { getWords } from 'dictionary' + +// this will throw since FS access is not available in Edge Functions. +// but we need this line so that `dictionary` is scanned for extraneous dependencies +try { + getWords() +} catch {} + +export default () => { + return new Response(yell(identidade(id(Deno.env.get('very_secret_secret'))) ?? '')) +} + +export const config: Config = { + path: '/my-function', +} diff --git a/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/global_netlify.ts b/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/global_netlify.ts new file mode 100644 index 0000000000..3deeedcc52 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/global_netlify.ts @@ -0,0 +1,14 @@ +import { Config } from 'https://edge.netlify.com/' + +const global = globalThis.Netlify.env.get('very_secret_secret') + +export default () => { + return Response.json({ + global, + local: globalThis.Netlify.env.get('very_secret_secret'), + }) +} + +export const config: Config = { + path: '/global-netlify', +} diff --git a/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/import-map.json b/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/import-map.json new file mode 100644 index 0000000000..0302aad06b --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/netlify/edge-functions/import-map.json @@ -0,0 +1,5 @@ +{ + "imports": { + "helper": "../../helper.ts" + } +} diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/@pt-committee/identidade/index.js b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@pt-committee/identidade/index.js new file mode 100644 index 0000000000..8651210ecc --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@pt-committee/identidade/index.js @@ -0,0 +1 @@ +module.exports = (v) => v diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/@pt-committee/identidade/package.json b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@pt-committee/identidade/package.json new file mode 100644 index 0000000000..b4cc9144d2 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@pt-committee/identidade/package.json @@ -0,0 +1 @@ +{ "name": "@pt-committee/identidade" } \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/@types/pt-committee__identidade/index.d.ts b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@types/pt-committee__identidade/index.d.ts new file mode 100644 index 0000000000..1161e7cc4a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@types/pt-committee__identidade/index.d.ts @@ -0,0 +1,3 @@ +declare function id(v: T): T + +export default id diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/@types/pt-committee__identidade/package.json b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@types/pt-committee__identidade/package.json new file mode 100644 index 0000000000..7a10617da1 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/@types/pt-committee__identidade/package.json @@ -0,0 +1,4 @@ +{ + "name": "@types/pt-committee__identidade", + "typings": "index.d.ts" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/index.js b/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/index.js new file mode 100644 index 0000000000..55023d8926 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/index.js @@ -0,0 +1,6 @@ +import { readFileSync } from 'node:fs' + +export function getWords() { + const wordsFile = readFileSync(new URL('./words.txt', import.meta.url), { encoding: "utf-8" }) + return wordsFile.split('\n') +} diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/package.json b/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/package.json new file mode 100644 index 0000000000..b356768235 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/package.json @@ -0,0 +1,5 @@ +{ + "name": "dictionary", + "type": "module", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/words.txt b/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/words.txt new file mode 100644 index 0000000000..4f060fe22f --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/dictionary/words.txt @@ -0,0 +1,18 @@ +Flibberdegibbet +Quibble +Gobbledygook +Wobblebonk +Blibber-blabber +Malarkey +Flibbertigibbet +Gobbledyguke +Jibber-jabber +Gibberish +Noodlehead +Snickersnee +Skedaddle +Lollygag +Hootenanny +Razzmatazz +Higgledy-piggledy +Wobblegong \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/index.cjs b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/index.cjs new file mode 100644 index 0000000000..067b9e7a8f --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/index.cjs @@ -0,0 +1 @@ +throw new Error('we should always prefer ESM if available'); \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/index.mjs b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/index.mjs new file mode 100644 index 0000000000..7824982b19 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/index.mjs @@ -0,0 +1 @@ +export default (v) => v diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/package.json b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/package.json new file mode 100644 index 0000000000..25c153bfd1 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/package.json @@ -0,0 +1,6 @@ +{ + "name": "id", + "main": "index.cjs", + "module": "index.mjs", + "types": "types.d.ts" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/types.d.ts b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/types.d.ts new file mode 100644 index 0000000000..1161e7cc4a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/serve_test/node_modules/id/types.d.ts @@ -0,0 +1,3 @@ +declare function id(v: T): T + +export default id diff --git a/packages/edge-bundler/test/fixtures/tsx/functions/func1.tsx b/packages/edge-bundler/test/fixtures/tsx/functions/func1.tsx new file mode 100644 index 0000000000..6c650b8026 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/tsx/functions/func1.tsx @@ -0,0 +1,3 @@ +import React from 'react' + +export default () => new Response(

Hello World

) diff --git a/packages/edge-bundler/test/fixtures/tsx/node_modules/react/cjs/react.development.js b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/cjs/react.development.js new file mode 100644 index 0000000000..331cd78da5 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/cjs/react.development.js @@ -0,0 +1 @@ +module.exports.createElement = () => "hippedy hoppedy, createElement is now a debugged property" \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/tsx/node_modules/react/cjs/react.production.min.js b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/cjs/react.production.min.js new file mode 100644 index 0000000000..9fd4f29864 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/cjs/react.production.min.js @@ -0,0 +1,4 @@ +module.exports.createElement = () => + Buffer.from( + `hippedy hoppedy, createElement is now a production property. Here, take this env var: FOO=${process.env.FOO}`, + ).toString('base64') diff --git a/packages/edge-bundler/test/fixtures/tsx/node_modules/react/index.js b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/index.js new file mode 100644 index 0000000000..999ead7789 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/index.js @@ -0,0 +1,7 @@ +'use strict'; + +if (process.env.NODE_ENV === 'production') { + module.exports = require('./cjs/react.production.min.js'); +} else { + module.exports = require('./cjs/react.development.js'); +} diff --git a/packages/edge-bundler/test/fixtures/tsx/node_modules/react/package.json b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/package.json new file mode 100644 index 0000000000..54d7f96005 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/tsx/node_modules/react/package.json @@ -0,0 +1,4 @@ +{ + "name": "react", + "main": "index.js" +} \ No newline at end of file diff --git a/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/config.json b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/config.json new file mode 100644 index 0000000000..bb85fe48d3 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/config.json @@ -0,0 +1,10 @@ +{ + "functions": [ + { + "function": "func2", + "path": "/func2" + } + ], + "import_map": "import_map.json", + "version": 1 +} diff --git a/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/framework-func1.ts b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/framework-func1.ts new file mode 100644 index 0000000000..b05d30b179 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/framework-func1.ts @@ -0,0 +1,12 @@ +import { IntegrationsConfig } from 'https://edge.netlify.com' +import { greet } from 'alias:helper' + +export default async () => { + const greeting = greet('framework function 1') + + return new Response(greeting) +} + +export const config: IntegrationsConfig = { + path: '/framework-func1', +} diff --git a/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/framework-func2.ts b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/framework-func2.ts new file mode 100644 index 0000000000..800f8b5c73 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/framework-func2.ts @@ -0,0 +1,7 @@ +import { greet } from 'alias:helper' + +export default async () => { + const greeting = greet('framework function 2') + + return new Response(greeting) +} diff --git a/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/import_map.json b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/import_map.json new file mode 100644 index 0000000000..7c46723949 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/.netlify/edge-functions/import_map.json @@ -0,0 +1,5 @@ +{ + "imports": { + "alias:helper": "../../helper.ts" + } +} diff --git a/packages/edge-bundler/test/fixtures/with_config/helper.ts b/packages/edge-bundler/test/fixtures/with_config/helper.ts new file mode 100644 index 0000000000..bbaf8c35ad --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/helper.ts @@ -0,0 +1,2 @@ +export const greet = (name: string) => `Hello, ${name}!` +export const echo = (name: string) => name diff --git a/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func1.ts b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func1.ts new file mode 100644 index 0000000000..2577db6dd8 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func1.ts @@ -0,0 +1,17 @@ +import { Config } from '@netlify/edge-functions' +import { greet } from 'alias:helper' + +// Accessing `Deno.env` in the global scope +if (Deno.env.get('FOO')) { + // no-op +} + +export default async () => { + const greeting = greet('user function 1') + + return new Response(greeting) +} + +export const config: Config = { + path: '/user-func1', +} diff --git a/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func2.ts b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func2.ts new file mode 100644 index 0000000000..c7d3fcfe45 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func2.ts @@ -0,0 +1,7 @@ +import { greet } from 'alias:helper' + +export default async () => { + const greeting = greet('user function 2') + + return new Response(greeting) +} diff --git a/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func3.ts b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func3.ts new file mode 100644 index 0000000000..cac227bf17 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func3.ts @@ -0,0 +1,6 @@ +export default async () => new Response('Hello from user function 3') + +export const config = { + cache: 'not_a_supported_value', + path: '/user-func3', +} diff --git a/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func4.ts b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func4.ts new file mode 100644 index 0000000000..b04575ecc4 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func4.ts @@ -0,0 +1,12 @@ +export default async () => + new Response('Hello from user function 4. I will be cached!', { + headers: { + 'cache-control': 'public, s-maxage=60', + }, + }) + +export const config = { + cache: 'manual', + path: '/user-func4', + method: ['POST', 'PUT'], +} diff --git a/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func5.ts b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func5.ts new file mode 100644 index 0000000000..034165f8dd --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_config/netlify/edge-functions/user-func5.ts @@ -0,0 +1,7 @@ +export default async () => new Response('Hello from user function 5.') + +export const config = { + path: '/user-func5/*', + excludedPath: '/user-func5/excluded', + method: 'get', +} diff --git a/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/func2.ts b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/func2.ts new file mode 100644 index 0000000000..39095454fc --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/func2.ts @@ -0,0 +1,9 @@ +import { greet } from 'alias:helper' + +import { echo } from '../../util.ts' + +export default async () => { + const greeting = greet(echo('Jane Doe')) + + return new Response(greeting) +} diff --git a/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/func3.ts b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/func3.ts new file mode 100644 index 0000000000..99510abf69 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/func3.ts @@ -0,0 +1,11 @@ +import { IntegrationsConfig } from 'https://edge.netlify.com' + +export default async () => { + return new Response('Hello world') +} + +export const config: IntegrationsConfig = { + path: '/func-3', + name: 'in-config-function', + onError: 'bypass', +} diff --git a/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/import_map.json b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/import_map.json new file mode 100644 index 0000000000..4f6c1dac81 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/import_map.json @@ -0,0 +1,5 @@ +{ + "imports": { + "alias:helper": "../../util.ts" + } +} diff --git a/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/manifest.json b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/manifest.json new file mode 100644 index 0000000000..fd165bf828 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_deploy_config/.netlify/edge-functions/manifest.json @@ -0,0 +1,13 @@ +{ + "functions": [ + { + "function": "func2", + "path": "/func2/*", + "name": "Function two", + "generator": "@netlify/fake-plugin@1.0.0", + "excludedPath": "/func2/skip" + } + ], + "import_map": "import_map.json", + "version": 1 +} diff --git a/packages/edge-bundler/test/fixtures/with_deploy_config/netlify/edge-functions/func1.ts b/packages/edge-bundler/test/fixtures/with_deploy_config/netlify/edge-functions/func1.ts new file mode 100644 index 0000000000..55764a8a4a --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_deploy_config/netlify/edge-functions/func1.ts @@ -0,0 +1,3 @@ +import { echo } from '../../util.ts' + +export default async () => new Response(echo('Jane Doe')) diff --git a/packages/edge-bundler/test/fixtures/with_deploy_config/util.ts b/packages/edge-bundler/test/fixtures/with_deploy_config/util.ts new file mode 100644 index 0000000000..bbaf8c35ad --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_deploy_config/util.ts @@ -0,0 +1,2 @@ +export const greet = (name: string) => `Hello, ${name}!` +export const echo = (name: string) => name diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/functions/config.json b/packages/edge-bundler/test/fixtures/with_import_maps/functions/config.json new file mode 100644 index 0000000000..8a2e49bad4 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/functions/config.json @@ -0,0 +1,4 @@ +{ + "import_map": "import_map.json", + "version": 1 +} diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/functions/func1.ts b/packages/edge-bundler/test/fixtures/with_import_maps/functions/func1.ts new file mode 100644 index 0000000000..ec9cb017f9 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/functions/func1.ts @@ -0,0 +1,9 @@ +import { greet } from 'alias:helper' +import { yell } from 'util/helper.ts' +import { echo } from '../helper.ts' + +export default async () => { + const greeting = yell(greet(echo('Jane Doe'))) + + return new Response(greeting) +} diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/functions/import_map.json b/packages/edge-bundler/test/fixtures/with_import_maps/functions/import_map.json new file mode 100644 index 0000000000..e6b1f951c7 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/functions/import_map.json @@ -0,0 +1,6 @@ +{ + "imports": { + "alias:helper": "../helper.ts", + "util/": "../" + } +} diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/helper.ts b/packages/edge-bundler/test/fixtures/with_import_maps/helper.ts new file mode 100644 index 0000000000..0415c46e50 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/helper.ts @@ -0,0 +1,3 @@ +export const greet = (name: string) => `Hello, ${name}!` +export const echo = (name: string) => name +export const yell = (message: string) => message.toUpperCase() diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/helper2.ts b/packages/edge-bundler/test/fixtures/with_import_maps/helper2.ts new file mode 100644 index 0000000000..58089b1fd7 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/helper2.ts @@ -0,0 +1 @@ +export const hush = (message: string) => message.toLowerCase() diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/func2.ts b/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/func2.ts new file mode 100644 index 0000000000..ed069a9784 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/func2.ts @@ -0,0 +1,7 @@ +import { echo } from 'helper' + +export default async () => { + const greeting = echo('Jane Doe') + + return new Response(greeting) +} diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/func3/func3.ts b/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/func3/func3.ts new file mode 100644 index 0000000000..25889482b7 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/func3/func3.ts @@ -0,0 +1,7 @@ +import { hush } from 'helper' + +export default async () => { + const greeting = hush('HELLO, NETLIFY!') + + return new Response(greeting) +} diff --git a/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/import_map.json b/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/import_map.json new file mode 100644 index 0000000000..bea25f2985 --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_import_maps/user-functions/import_map.json @@ -0,0 +1,10 @@ +{ + "imports": { + "helper": "../helper.ts" + }, + "scopes": { + "func3/": { + "helper": "../helper2.ts" + } + } +} diff --git a/packages/edge-bundler/test/fixtures/with_layers/functions/config.json b/packages/edge-bundler/test/fixtures/with_layers/functions/config.json new file mode 100644 index 0000000000..20dd72835c --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_layers/functions/config.json @@ -0,0 +1,4 @@ +{ + "layers": [{ "name": "https://edge-function-layer-template.netlify.app/mod.ts", "flag": "edge-functions-layer-test" }], + "version": 1 +} diff --git a/packages/edge-bundler/test/fixtures/with_layers/functions/func1.ts b/packages/edge-bundler/test/fixtures/with_layers/functions/func1.ts new file mode 100644 index 0000000000..328accba0c --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_layers/functions/func1.ts @@ -0,0 +1,3 @@ +import { handleRequest } from '../layer.ts' + +export default (req: Request) => handleRequest(req) diff --git a/packages/edge-bundler/test/fixtures/with_layers/layer.ts b/packages/edge-bundler/test/fixtures/with_layers/layer.ts new file mode 100644 index 0000000000..e8337e14fa --- /dev/null +++ b/packages/edge-bundler/test/fixtures/with_layers/layer.ts @@ -0,0 +1,3 @@ +export const handleRequest = (_req: Request) => { + return new Response('Hello! I come from a custom layer.') +} diff --git a/packages/edge-bundler/test/integration/functions/func1.ts b/packages/edge-bundler/test/integration/functions/func1.ts new file mode 100644 index 0000000000..68ce8236fc --- /dev/null +++ b/packages/edge-bundler/test/integration/functions/func1.ts @@ -0,0 +1 @@ +export default async () => new Response('Hello') diff --git a/packages/edge-bundler/test/integration/internal-functions/func2.ts b/packages/edge-bundler/test/integration/internal-functions/func2.ts new file mode 100644 index 0000000000..ac1d48a042 --- /dev/null +++ b/packages/edge-bundler/test/integration/internal-functions/func2.ts @@ -0,0 +1,3 @@ +export default async () => new Response('Hello') + +export const config = { path: '/func2' } diff --git a/packages/edge-bundler/test/integration/test.js b/packages/edge-bundler/test/integration/test.js new file mode 100644 index 0000000000..57e244abd3 --- /dev/null +++ b/packages/edge-bundler/test/integration/test.js @@ -0,0 +1,117 @@ +import assert from 'assert' +import childProcess from 'child_process' +import { rm } from 'fs/promises' +import { createRequire } from 'module' +import { join, resolve } from 'path' +import process from 'process' +import { fileURLToPath, pathToFileURL } from 'url' +import { promisify } from 'util' + +import cpy from 'cpy' +import tar from 'tar' +import tmp from 'tmp-promise' + +const exec = promisify(childProcess.exec) +const require = createRequire(import.meta.url) +const functionsDir = resolve(fileURLToPath(import.meta.url), '..', 'functions') +const internalFunctionsDir = resolve(fileURLToPath(import.meta.url), '..', 'internal-functions') + +const pathsToCleanup = new Set() + +const installPackage = async () => { + console.log(`Getting package version...`) + + const { name, version } = require('../../package.json') + + console.log(`Running integration tests for ${name} v${version}...`) + + const { path } = await tmp.dir() + + console.log(`Creating tarball with 'npm pack'...`) + + await exec('npm pack --json') + + const normalizedName = name.replace(/@/, '').replace(/\W/g, '-') + const filename = join(process.cwd(), `${normalizedName}-${version}.tgz`) + + console.log(`Uncompressing the tarball at '${filename}'...`) + + await tar.x({ C: path, file: filename, strip: 1 }) + + pathsToCleanup.add(path) + pathsToCleanup.add(filename) + + return path +} + +const bundleFunction = async (bundlerDir) => { + console.log(`Installing dependencies at '${bundlerDir}'...`) + + await exec(`npm --prefix ${bundlerDir} install`) + + const bundlerPath = require.resolve(bundlerDir) + const bundlerURL = pathToFileURL(bundlerPath) + const { bundle } = await import(bundlerURL) + const { path: basePath } = await tmp.dir() + + console.log(`Copying test fixture to '${basePath}'...`) + + await cpy(`${functionsDir}/**`, join(basePath, 'functions')) + await cpy(`${internalFunctionsDir}/**`, join(basePath, 'internal-functions')) + + pathsToCleanup.add(basePath) + + const destPath = join(basePath, '.netlify', 'edge-functions-dist') + + console.log(`Bundling functions at '${basePath}'...`) + + const bundleOutput = await bundle( + [join(basePath, 'functions'), join(basePath, 'internal-functions')], + destPath, + [{ function: 'func1', path: '/func1' }], + { + basePath, + internalSrcFolder: join(basePath, 'internal-functions'), + }, + ) + + return { + basePath, + bundleOutput, + } +} + +const runAssertions = ({ basePath, bundleOutput }) => { + console.log('Running assertions on bundle output:') + console.log(JSON.stringify(bundleOutput, null, 2)) + + const { functions } = bundleOutput + + assert.strictEqual(functions.length, 2) + assert.strictEqual(functions[0].name, 'func2') + assert.strictEqual(functions[0].path, join(basePath, 'internal-functions', 'func2.ts')) + assert.strictEqual(functions[1].name, 'func1') + assert.strictEqual(functions[1].path, join(basePath, 'functions', 'func1.ts')) +} + +const cleanup = async () => { + if (process.env.CI) { + return + } + + console.log(`Cleaning up temporary files...`) + + for (const folder of pathsToCleanup) { + await rm(folder, { force: true, recursive: true, maxRetries: 10 }) + } +} + +installPackage() + .then(bundleFunction) + .then(runAssertions) + .then(cleanup) + .catch((error) => { + console.error(error) + + throw error + }) diff --git a/packages/edge-bundler/test/util.ts b/packages/edge-bundler/test/util.ts new file mode 100644 index 0000000000..2b8d204772 --- /dev/null +++ b/packages/edge-bundler/test/util.ts @@ -0,0 +1,113 @@ +import { promises as fs } from 'fs' +import { join, resolve } from 'path' +import { stderr, stdout } from 'process' +import { fileURLToPath, pathToFileURL } from 'url' + +import { execa } from 'execa' +import tmp from 'tmp-promise' + +import { getLogger } from '../node/logger.js' +import type { Manifest } from '../node/manifest.js' + +const testLogger = getLogger(() => { + // no-op +}) + +const url = new URL(import.meta.url) +const dirname = fileURLToPath(url) +const fixturesDir = resolve(dirname, '..', 'fixtures') + +const useFixture = async (fixtureName: string) => { + const tmpDir = await tmp.dir({ unsafeCleanup: true }) + const fixtureDir = resolve(fixturesDir, fixtureName) + const distPath = join(tmpDir.path, '.netlify', 'edge-functions-dist') + + return { + basePath: fixtureDir, + cleanup: tmpDir.cleanup, + distPath, + } +} + +const inspectFunction = (path: string) => ` + import { functions } from "${pathToFileURL(path)}.js"; + + const responses = {}; + + for (const functionName in functions) { + const req = new Request("https://test.netlify"); + const res = await functions[functionName](req); + + responses[functionName] = await res.text(); + } + + console.log(JSON.stringify(responses)); +` + +const getRouteMatcher = (manifest: Manifest) => (candidate: string) => + manifest.routes.find((route) => { + const regex = new RegExp(route.pattern) + + if (!regex.test(candidate)) { + return false + } + + if (route.excluded_patterns.some((pattern) => new RegExp(pattern).test(candidate))) { + return false + } + + const excludedPatterns = manifest.function_config[route.function]?.excluded_patterns ?? [] + const isExcluded = excludedPatterns.some((pattern) => new RegExp(pattern).test(candidate)) + + return !isExcluded + }) + +const runESZIP = async (eszipPath: string, vendorDirectory?: string) => { + const tmpDir = await tmp.dir({ unsafeCleanup: true }) + + // Extract ESZIP into temporary directory. + const extractCommand = execa('deno', [ + 'run', + '--allow-all', + 'https://deno.land/x/eszip@v0.55.2/eszip.ts', + 'x', + eszipPath, + tmpDir.path, + ]) + + extractCommand.stderr?.pipe(stderr) + extractCommand.stdout?.pipe(stdout) + + await extractCommand + + const virtualRootPath = join(tmpDir.path, 'source', 'root') + const stage2Path = join(virtualRootPath, '..', 'bootstrap-stage2') + const importMapPath = join(virtualRootPath, '..', 'import-map') + + for (const path of [importMapPath, stage2Path]) { + const file = await fs.readFile(path, 'utf8') + + let normalizedFile = file.replace(/file:\/{3}root/g, pathToFileURL(virtualRootPath).toString()) + + if (vendorDirectory !== undefined) { + normalizedFile = normalizedFile.replace(/file:\/{3}vendor/g, pathToFileURL(vendorDirectory).toString()) + } + + await fs.writeFile(path, normalizedFile) + } + + await fs.rename(stage2Path, `${stage2Path}.js`) + + // Run function that imports the extracted stage 2 and invokes each function. + const evalCommand = execa('deno', ['eval', '--no-check', '--import-map', importMapPath, inspectFunction(stage2Path)]) + + evalCommand.stderr?.pipe(stderr) + + const result = await evalCommand + + await tmpDir.cleanup() + + return JSON.parse(result.stdout) +} + +export { fixturesDir, getRouteMatcher, testLogger, runESZIP, useFixture } diff --git a/packages/edge-bundler/tsconfig.json b/packages/edge-bundler/tsconfig.json new file mode 100644 index 0000000000..98e40d81b6 --- /dev/null +++ b/packages/edge-bundler/tsconfig.json @@ -0,0 +1,69 @@ +{ + "compilerOptions": { + /* Visit https://aka.ms/tsconfig.json to read more about this file */ + + /* Basic Options */ + "incremental": true /* Enable incremental compilation */, + "target": "ES2019" /* Specify ECMAScript target version: 'ES3' (default), 'ES5', 'ES2015', 'ES2016', 'ES2017', 'ES2018', 'ES2019', 'ES2020', or 'ESNEXT'. */, + "module": "es2020" /* Specify module code generation: 'none', 'commonjs', 'amd', 'system', 'umd', 'es2015', 'es2020', or 'ESNext'. */, + // "lib": [], /* Specify library files to be included in the compilation. */ + "allowJs": true /* Allow javascript files to be compiled. */, + // "checkJs": true, /* Report errors in .js files. */ + // "jsx": "preserve", /* Specify JSX code generation: 'preserve', 'react-native', or 'react'. */ + "declaration": true /* Generates corresponding '.d.ts' file. */, + "declarationMap": false /* Generates a sourcemap for each corresponding '.d.ts' file. */, + "sourceMap": false /* Generates corresponding '.map' file. */, + // "outFile": "./", /* Concatenate and emit output to single file. */ + "outDir": "./dist" /* Redirect output structure to the directory. */, + // "rootDir": "./", /* Specify the root directory of input files. Use to control the output directory structure with --outDir. */ + // "composite": true, /* Enable project compilation */ + // "tsBuildInfoFile": "./", /* Specify file to store incremental compilation information */ + "removeComments": false /* Do not emit comments to output. */, + // "noEmit": true, /* Do not emit outputs. */ + // "importHelpers": true, /* Import emit helpers from 'tslib'. */ + // "isolatedModules": true, /* Transpile each file as a separate module (similar to 'ts.transpileModule'). */ + + /* Strict Type-Checking Options */ + "strict": true /* Enable all strict type-checking options. */, + // "noImplicitAny": true, /* Raise error on expressions and declarations with an implied 'any' type. */ + // "strictNullChecks": true, /* Enable strict null checks. */ + // "strictFunctionTypes": true, /* Enable strict checking of function types. */ + // "strictBindCallApply": true, /* Enable strict 'bind', 'call', and 'apply' methods on functions. */ + // "strictPropertyInitialization": true, /* Enable strict checking of property initialization in classes. */ + // "noImplicitThis": true, /* Raise error on 'this' expressions with an implied 'any' type. */ + // "alwaysStrict": true, /* Parse in strict mode and emit "use strict" for each source file. */ + + /* Additional Checks */ + // "noUnusedLocals": true, /* Report errors on unused locals. */ + // "noUnusedParameters": true, /* Report errors on unused parameters. */ + // "noImplicitReturns": true, /* Report error when not all code paths in function return a value. */ + // "noFallthroughCasesInSwitch": true, /* Report errors for fallthrough cases in switch statement. */ + + /* Module Resolution Options */ + "moduleResolution": "node" /* Specify module resolution strategy: 'node' (Node.js) or 'classic' (TypeScript pre-1.6). */, + // "baseUrl": "./", /* Base directory to resolve non-absolute module names. */ + // "paths": {}, /* A series of entries which re-map imports to lookup locations relative to the 'baseUrl'. */ + // "rootDirs": [], /* List of root folders whose combined content represents the structure of the project at runtime. */ + // "typeRoots": [], /* List of folders to include type definitions from. */ + // "types": [], /* Type declaration files to be included in compilation. */ + // "allowSyntheticDefaultImports": true, /* Allow default imports from modules with no default export. This does not affect code emit, just typechecking. */ + "esModuleInterop": true /* Enables emit interoperability between CommonJS and ES Modules via creation of namespace objects for all imports. Implies 'allowSyntheticDefaultImports'. */, + // "preserveSymlinks": true, /* Do not resolve the real path of symlinks. */ + // "allowUmdGlobalAccess": true, /* Allow accessing UMD globals from modules. */ + + /* Source Map Options */ + // "sourceRoot": "", /* Specify the location where debugger should locate TypeScript files instead of source locations. */ + // "mapRoot": "", /* Specify the location where debugger should locate map files instead of generated locations. */ + // "inlineSourceMap": true, /* Emit a single file with source maps instead of having a separate file. */ + // "inlineSources": true, /* Emit the source alongside the sourcemaps within a single file; requires '--inlineSourceMap' or '--sourceMap' to be set. */ + + /* Experimental Options */ + // "experimentalDecorators": true, /* Enables experimental support for ES7 decorators. */ + // "emitDecoratorMetadata": true, /* Enables experimental support for emitting type metadata for decorators. */ + + /* Advanced Options */ + "skipLibCheck": true /* Skip type checking of declaration files. */, + "forceConsistentCasingInFileNames": true /* Disallow inconsistently-cased references to the same file. */ + }, + "include": ["node", "shared"] +} diff --git a/packages/edge-bundler/vitest.config.ts b/packages/edge-bundler/vitest.config.ts new file mode 100644 index 0000000000..eca3d5a80d --- /dev/null +++ b/packages/edge-bundler/vitest.config.ts @@ -0,0 +1,14 @@ +import { defineConfig } from 'vitest/config' + +export default defineConfig({ + esbuild: { + target: 'esnext', + }, + test: { + include: ['node/**/*.test.ts'], + testTimeout: 30_000, + env: { + FORCE_COLOR: '0', + }, + }, +}) diff --git a/release-please-config.json b/release-please-config.json index 218abd99ae..5578939838 100644 --- a/release-please-config.json +++ b/release-please-config.json @@ -5,6 +5,7 @@ "packages/build": {}, "packages/cache-utils": {}, "packages/config": {}, + "packages/edge-bundler": {}, "packages/framework-info": {}, "packages/functions-utils": {}, "packages/git-utils": {},