diff --git a/.eslintrc b/.eslintrc index 6ecc1c66e0..714491c19c 100644 --- a/.eslintrc +++ b/.eslintrc @@ -9,6 +9,7 @@ "quotes": 0, "keyword-spacing": 0, "no-undef": 0, + "indent": 0, "unicorn/catch-error-name": 0, "unicorn/no-null": 0, "unicorn/no-useless-undefined": 0, diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000000..aacac379fa --- /dev/null +++ b/.gitattributes @@ -0,0 +1 @@ +*.txt text eol=lf diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 8875ddc1ef..98c1c5fec8 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -9,9 +9,8 @@ on: - main jobs: - ci: + lint: runs-on: ubuntu-latest - steps: - uses: actions/checkout@v3 with: @@ -23,6 +22,23 @@ jobs: cache: pnpm - run: pnpm install - run: pnpm lint + + ci: + runs-on: ${{ matrix.os }} + strategy: + matrix: + os: [ubuntu-latest, windows-latest] + + steps: + - uses: actions/checkout@v3 + with: + fetch-depth: 0 + - run: corepack enable + - uses: actions/setup-node@v3 + with: + node-version: "16" + cache: pnpm + - run: pnpm install - run: pnpm test:types - run: pnpm build - run: pnpm vitest --coverage diff --git a/README.md b/README.md index 9661d0b775..39abf863f3 100644 --- a/README.md +++ b/README.md @@ -8,7 +8,7 @@

⚗️ Nitro

Build and Deploy Universal JavaScript Servers

-## Why using Nitro? +## Why use Nitro? Nitro provides a powerful toolchain and a runtime framework from the [UnJS](https://github.com/unjs) ecosystem to build and deploy **any JavaScript server, anywhere!** diff --git a/docs/content/1.guide/1.introduction/3.routing.md b/docs/content/1.guide/1.introduction/3.routing.md index 247a72c1fd..8f997c4736 100644 --- a/docs/content/1.guide/1.introduction/3.routing.md +++ b/docs/content/1.guide/1.introduction/3.routing.md @@ -39,7 +39,7 @@ export default eventHandler(async event => { ```js // routes/user.post.ts export default eventHandler(async event => { - const body = await useBody(event) + const body = await readBody(event) // TODO: Handle body and update user return `User updated!` }) diff --git a/docs/content/1.guide/1.introduction/5.cache.md b/docs/content/1.guide/1.introduction/5.cache.md index 42394b6d2e..3094c41a2a 100644 --- a/docs/content/1.guide/1.introduction/5.cache.md +++ b/docs/content/1.guide/1.introduction/5.cache.md @@ -6,18 +6,19 @@ description: Nitro provides a powerful caching system built on top of the storag ## Usage ```js -const cachedFn = cachedEventHandler(fn, options) +const cachedFn = cachedEventHandler(fn, options); ``` ### Options -* `name`: Handler name. It will be guessed from function name if not provided and fallback to `_` otherwise. -* `group`: Part of cache name. Useful to organize cache storage. -* `getKey`: A function that accepts same arguments of normal function and should generate cache key. If not provided, a built-in hash function will be used. -* `integrity`: A value that changing it, will invalidate all caches for function. By default will be computed from **function code**. -* `maxAge`: Maximum age that cache is valid in seconds. Default is `1` second. -* `swr`: Enable Stale-While-Revalidate behavior. Enabled by default. -* `shouldInvalidateCache`: A function that returns a boolean to invalidate the current cache and create a new one. +- `name`: Handler name. It will be guessed from function name if not provided and fallback to `_` otherwise. +- `group`: Part of cache name. Useful to organize cache storage. +- `getKey`: A function that accepts same arguments of normal function and should generate cache key. If not provided, a built-in hash function will be used. +- `integrity`: A value that changing it, will invalidate all caches for function. By default will be computed from **function code**. +- `maxAge`: Maximum age that cache is valid in seconds. Default is `1` second. +- `swr`: Enable Stale-While-Revalidate behavior. Enabled by default. +- `base`: Name of the storage mointpoint to use for caching (`/cache` by default) +- `shouldInvalidateCache`: A function that returns a boolean to invalidate the current cache and create a new one. ## Examples @@ -25,39 +26,67 @@ const cachedFn = cachedEventHandler(fn, options) ```js // routes/cached.ts -const myFn = cachedEventHandler(async () => { - new Promise(resolve => setTimeout(resolve, 1000)) - return `Response generated at ${new Date().toISOString()}` -}, { - swr: true -}) +const myFn = cachedEventHandler( + async () => { + new Promise((resolve) => setTimeout(resolve, 1000)); + return `Response generated at ${new Date().toISOString()}`; + }, + { + swr: true, + } +); ``` **Example:** Cache a utility function ```js // utils/index.ts -const myFn = cachedFunction(async () => { - new Promise(resolve => setTimeout(resolve, 1000)) - return Math.random() -}, { - swr: true -}) +const myFn = cachedFunction( + async () => { + new Promise((resolve) => setTimeout(resolve, 1000)); + return Math.random(); + }, + { + swr: true, + } +); ``` **Example:** Enable Cache on a group of routes (**🧪 Experimental!**) ```js // nitro.config.ts -import { - defineNitroConfig -} from 'nitropack' +import { defineNitroConfig } from "nitropack"; export default defineNitroConfig({ - routeRules: { - '/blog/**': { - swr: true - } - } -}) + routeRules: { + "/blog/**": { + swr: true, + }, + }, +}); +``` + +**Example:** Set cache storage mountpoint for a group of routes (**🧪 Experimental!**) + +```js +// nitro.config.ts +import { defineNitroConfig } from "nitropack"; + +export default defineNitroConfig({ + storage: { + "my-custom-storage": { + driver: "redis", + url: "redis://localhost:6379", + }, + }, + routeRules: { + "/blog/**": { + swr: true, + cache: { + base: "/my-custom-storage", + }, + }, + }, +}); ``` diff --git a/docs/content/2.deploy/providers/render.md b/docs/content/2.deploy/providers/render.md index 1bfcac06f9..5d3160e960 100644 --- a/docs/content/2.deploy/providers/render.md +++ b/docs/content/2.deploy/providers/render.md @@ -21,4 +21,24 @@ Nitro supports deploying on [Render](https://render.com/) with minimal configura 1. Click 'Create Web Service'. +## Infrastructure as Code (IaC) + +1. Create a file called `render.yaml` with following content at the root of your repository. +> This file followed by [Infrastructure as Code](https://render.com/docs/infrastructure-as-code) on Render + +``` +services: + - type: web + name: + env: node + branch: main + startCommand: node .output/server/index.mjs + buildCommand: npm install && npm run build + envVars: + - key: NITRO_PRESET + value: render-com +``` +2. [Create a new Blueprint Instance](https://dashboard.render.com/select-repo?type=blueprint) and select the repository containing your `render.yaml` file. + + You should be good to go! diff --git a/docs/content/3.config/index.md b/docs/content/3.config/index.md index 295ecd612c..c856457ba0 100644 --- a/docs/content/3.config/index.md +++ b/docs/content/3.config/index.md @@ -40,7 +40,6 @@ Server runtime configuration. **Note:**: `nitro` namespace is reserved. - ## `experimental` @@ -59,7 +58,10 @@ Storage configuration. - Default: `false` -Enable timing information. +Enable timing information: + +- Nitro startup time log +- `Server-Timing` header on HTTP responses ## `renderer` @@ -171,8 +173,6 @@ An array of paths to nitro plugins. They will be executed by order on the first A map from dynamic virtual import names to their contents or an (async) function that returns it. - - ## `baseURL` @@ -242,7 +242,6 @@ Route options. It is a map from route pattern (following [unjs/radix3](https://g When `cache` option is set, handlers matching pattern will be automatically wrapped with `defineCachedEventHandler`. See [Cache API](/guide/introduction/cache) for all available cache options. (`swr: true|number` is shortcut for `cache: { swr: true, maxAge: number }`.) - **Example:** ```js @@ -267,8 +266,6 @@ Prerendered options. Any route specified will be fetched during the build and co If `crawlLinks` option is set to `true`, nitro starts with `/` by default (or all routes in `routes` array) and for HTML pages extracts `` tags and prerender them as well. - - ## `rootDir` @@ -297,8 +294,6 @@ nitro's temporary working directory for generating build-related files. Output directories for production bundle. - - ## `dev` @@ -335,7 +330,6 @@ Preview and deploy command hints are usually filled by deployment presets. A custom error handler function for development errors. - ## `rollupConfig` diff --git a/package.json b/package.json index 373dc29222..4468ee42ca 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "docs:dev": "vitepress dev docs", "docs:serve": "vitepress serve docs", "lint": "eslint --ext .ts,.mjs,.cjs . && prettier -c src", + "lint:fix": "eslint --fix --ext .ts,.mjs,.cjs . && prettier --write -c src", "nitro": "jiti ./src/cli.ts", "prepack": "pnpm build", "release": "pnpm test && pnpm build && changelogen --release && pnpm publish && git push --follow-tags", @@ -43,14 +44,14 @@ }, "dependencies": { "@cloudflare/kv-asset-handler": "^0.3.0", - "@netlify/functions": "^1.3.0", + "@netlify/functions": "^1.4.0", "@rollup/plugin-alias": "^4.0.2", "@rollup/plugin-commonjs": "^24.0.0", "@rollup/plugin-inject": "^5.0.3", "@rollup/plugin-json": "^6.0.0", "@rollup/plugin-node-resolve": "^15.0.1", "@rollup/plugin-replace": "^5.0.2", - "@rollup/plugin-terser": "^0.2.1", + "@rollup/plugin-terser": "^0.3.0", "@rollup/plugin-wasm": "^6.1.1", "@rollup/pluginutils": "^5.0.2", "@vercel/nft": "^0.22.6", @@ -63,7 +64,7 @@ "defu": "^6.1.1", "destr": "^1.2.2", "dot-prop": "^7.2.0", - "esbuild": "^0.16.14", + "esbuild": "^0.17.0", "escape-string-regexp": "^5.0.0", "etag": "^1.8.1", "fs-extra": "^11.1.0", @@ -73,12 +74,12 @@ "hookable": "^5.4.2", "http-proxy": "^1.18.1", "is-primitive": "^3.0.1", - "jiti": "^1.16.1", + "jiti": "^1.16.2", "klona": "^2.0.5", "knitwork": "^1.0.0", "listhen": "^1.0.1", "mime": "^3.0.0", - "mlly": "^1.0.0", + "mlly": "^1.1.0", "mri": "^1.2.0", "node-fetch-native": "^1.0.1", "ofetch": "^1.0.0", @@ -88,7 +89,7 @@ "pkg-types": "^1.0.1", "pretty-bytes": "^6.0.0", "radix3": "^1.0.0", - "rollup": "^3.9.1", + "rollup": "^3.10.0", "rollup-plugin-visualizer": "^5.9.0", "scule": "^1.0.0", "semver": "^7.3.8", @@ -98,32 +99,32 @@ "std-env": "^3.3.1", "ufo": "^1.0.1", "unenv": "^1.0.1", - "unimport": "^1.1.0", + "unimport": "^1.2.0", "unstorage": "^1.0.1" }, "devDependencies": { "@types/aws-lambda": "^8.10.109", "@types/etag": "^1.8.1", - "@types/fs-extra": "^9.0.13", + "@types/fs-extra": "^11.0.1", "@types/http-proxy": "^1.17.9", "@types/node-fetch": "^2.6.2", "@types/semver": "^7.3.13", "@types/serve-static": "^1.15.0", - "@vitest/coverage-c8": "^0.26.3", + "@vitest/coverage-c8": "^0.27.1", "c8": "^7.12.0", "changelogen": "^0.4.0", "edge-runtime": "2.0.2", - "eslint": "^8.31.0", + "eslint": "^8.32.0", "eslint-config-unjs": "^0.0.3", "execa": "^6.1.0", "expect-type": "^0.15.0", "miniflare": "^2.11.0", - "prettier": "^2.8.1", + "prettier": "^2.8.3", "typescript": "^4.9.4", - "unbuild": "^1.0.2", - "vitest": "^0.26.3" + "unbuild": "^1.1.1", + "vitest": "^0.27.1" }, - "packageManager": "pnpm@7.22.0", + "packageManager": "pnpm@7.25.0", "engines": { "node": "^14.16.0 || ^16.11.0 || ^17.0.0 || ^18.0.0 || ^19.0.0" }, diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4deca90be4..eebc552b9a 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -8,25 +8,25 @@ importers: .: specifiers: '@cloudflare/kv-asset-handler': ^0.3.0 - '@netlify/functions': ^1.3.0 + '@netlify/functions': ^1.4.0 '@rollup/plugin-alias': ^4.0.2 '@rollup/plugin-commonjs': ^24.0.0 '@rollup/plugin-inject': ^5.0.3 '@rollup/plugin-json': ^6.0.0 '@rollup/plugin-node-resolve': ^15.0.1 '@rollup/plugin-replace': ^5.0.2 - '@rollup/plugin-terser': ^0.2.1 + '@rollup/plugin-terser': ^0.3.0 '@rollup/plugin-wasm': ^6.1.1 '@rollup/pluginutils': ^5.0.2 '@types/aws-lambda': ^8.10.109 '@types/etag': ^1.8.1 - '@types/fs-extra': ^9.0.13 + '@types/fs-extra': ^11.0.1 '@types/http-proxy': ^1.17.9 '@types/node-fetch': ^2.6.2 '@types/semver': ^7.3.13 '@types/serve-static': ^1.15.0 '@vercel/nft': ^0.22.6 - '@vitest/coverage-c8': ^0.26.3 + '@vitest/coverage-c8': ^0.27.1 archiver: ^5.3.1 c12: ^1.1.0 c8: ^7.12.0 @@ -39,9 +39,9 @@ importers: destr: ^1.2.2 dot-prop: ^7.2.0 edge-runtime: 2.0.2 - esbuild: ^0.16.14 + esbuild: ^0.17.0 escape-string-regexp: ^5.0.0 - eslint: ^8.31.0 + eslint: ^8.32.0 eslint-config-unjs: ^0.0.3 etag: ^1.8.1 execa: ^6.1.0 @@ -53,13 +53,13 @@ importers: hookable: ^5.4.2 http-proxy: ^1.18.1 is-primitive: ^3.0.1 - jiti: ^1.16.1 + jiti: ^1.16.2 klona: ^2.0.5 knitwork: ^1.0.0 listhen: ^1.0.1 mime: ^3.0.0 miniflare: ^2.11.0 - mlly: ^1.0.0 + mlly: ^1.1.0 mri: ^1.2.0 node-fetch-native: ^1.0.1 ofetch: ^1.0.0 @@ -67,10 +67,10 @@ importers: pathe: ^1.0.0 perfect-debounce: ^0.1.3 pkg-types: ^1.0.1 - prettier: ^2.8.1 + prettier: ^2.8.3 pretty-bytes: ^6.0.0 radix3: ^1.0.0 - rollup: ^3.9.1 + rollup: ^3.10.0 rollup-plugin-visualizer: ^5.9.0 scule: ^1.0.0 semver: ^7.3.8 @@ -80,23 +80,23 @@ importers: std-env: ^3.3.1 typescript: ^4.9.4 ufo: ^1.0.1 - unbuild: ^1.0.2 + unbuild: ^1.1.1 unenv: ^1.0.1 - unimport: ^1.1.0 + unimport: ^1.2.0 unstorage: ^1.0.1 - vitest: ^0.26.3 + vitest: ^0.27.1 dependencies: '@cloudflare/kv-asset-handler': 0.3.0 - '@netlify/functions': 1.3.0 - '@rollup/plugin-alias': 4.0.2_rollup@3.9.1 - '@rollup/plugin-commonjs': 24.0.0_rollup@3.9.1 - '@rollup/plugin-inject': 5.0.3_rollup@3.9.1 - '@rollup/plugin-json': 6.0.0_rollup@3.9.1 - '@rollup/plugin-node-resolve': 15.0.1_rollup@3.9.1 - '@rollup/plugin-replace': 5.0.2_rollup@3.9.1 - '@rollup/plugin-terser': 0.2.1_rollup@3.9.1 - '@rollup/plugin-wasm': 6.1.1_rollup@3.9.1 - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@netlify/functions': 1.4.0 + '@rollup/plugin-alias': 4.0.2_rollup@3.10.0 + '@rollup/plugin-commonjs': 24.0.0_rollup@3.10.0 + '@rollup/plugin-inject': 5.0.3_rollup@3.10.0 + '@rollup/plugin-json': 6.0.0_rollup@3.10.0 + '@rollup/plugin-node-resolve': 15.0.1_rollup@3.10.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.10.0 + '@rollup/plugin-terser': 0.3.0_rollup@3.10.0 + '@rollup/plugin-wasm': 6.1.1_rollup@3.10.0 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 '@vercel/nft': 0.22.6 archiver: 5.3.1 c12: 1.1.0 @@ -107,7 +107,7 @@ importers: defu: 6.1.1 destr: 1.2.2 dot-prop: 7.2.0 - esbuild: 0.16.14 + esbuild: 0.17.0 escape-string-regexp: 5.0.0 etag: 1.8.1 fs-extra: 11.1.0 @@ -117,12 +117,12 @@ importers: hookable: 5.4.2 http-proxy: 1.18.1 is-primitive: 3.0.1 - jiti: 1.16.1 + jiti: 1.16.2 klona: 2.0.5 knitwork: 1.0.0 listhen: 1.0.1 mime: 3.0.0 - mlly: 1.0.0 + mlly: 1.1.0 mri: 1.2.0 node-fetch-native: 1.0.1 ofetch: 1.0.0 @@ -132,8 +132,8 @@ importers: pkg-types: 1.0.1 pretty-bytes: 6.0.0 radix3: 1.0.0 - rollup: 3.9.1 - rollup-plugin-visualizer: 5.9.0_rollup@3.9.1 + rollup: 3.10.0 + rollup-plugin-visualizer: 5.9.0_rollup@3.10.0 scule: 1.0.0 semver: 7.3.8 serve-placeholder: 2.0.1 @@ -142,29 +142,29 @@ importers: std-env: 3.3.1 ufo: 1.0.1 unenv: 1.0.1 - unimport: 1.1.0_rollup@3.9.1 + unimport: 1.2.0_rollup@3.10.0 unstorage: 1.0.1 devDependencies: '@types/aws-lambda': 8.10.109 '@types/etag': 1.8.1 - '@types/fs-extra': 9.0.13 + '@types/fs-extra': 11.0.1 '@types/http-proxy': 1.17.9 '@types/node-fetch': 2.6.2 '@types/semver': 7.3.13 '@types/serve-static': 1.15.0 - '@vitest/coverage-c8': 0.26.3 + '@vitest/coverage-c8': 0.27.1 c8: 7.12.0 changelogen: 0.4.0 edge-runtime: 2.0.2 - eslint: 8.31.0 - eslint-config-unjs: 0.0.3_iukboom6ndih5an6iafl45j2fe + eslint: 8.32.0 + eslint-config-unjs: 0.0.3_7uibuqfxkfaozanbtbziikiqje execa: 6.1.0 expect-type: 0.15.0 miniflare: 2.11.0 - prettier: 2.8.1 + prettier: 2.8.3 typescript: 4.9.4 - unbuild: 1.0.2 - vitest: 0.26.3 + unbuild: 1.1.1 + vitest: 0.27.1 examples/api-routes: specifiers: @@ -209,7 +209,7 @@ packages: engines: {node: '>=6.0.0'} dependencies: '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/trace-mapping': 0.3.17 dev: true /@babel/code-frame/7.18.6: @@ -219,53 +219,54 @@ packages: '@babel/highlight': 7.18.6 dev: true - /@babel/compat-data/7.20.1: - resolution: {integrity: sha512-EWZ4mE2diW3QALKvDMiXnbZpRvlj+nayZ112nK93SnhqOtpdsbVD4W+2tEoT3YNBAG9RBR0ISY758ZkOgsn6pQ==} + /@babel/compat-data/7.20.10: + resolution: {integrity: sha512-sEnuDPpOJR/fcafHMjpcpGN5M2jbUGUHwmuWKM/YdPzeEDJg8bgmbcWQFUfE32MQjti1koACvoPVsDe8Uq+idg==} engines: {node: '>=6.9.0'} dev: true - /@babel/core/7.20.2: - resolution: {integrity: sha512-w7DbG8DtMrJcFOi4VrLm+8QM4az8Mo+PuLBKLp2zrYRCow8W/f9xiXm5sN53C8HksCyDQwCKha9JiDoIyPjT2g==} + /@babel/core/7.20.12: + resolution: {integrity: sha512-XsMfHovsUYHFMdrIHkZphTN/2Hzzi78R08NuHfDBehym2VsPDL6Zn/JAD/JQdnRvbSsbQc4mVaU1m6JgtTEElg==} engines: {node: '>=6.9.0'} dependencies: '@ampproject/remapping': 2.2.0 '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 - '@babel/helper-compilation-targets': 7.20.0_@babel+core@7.20.2 - '@babel/helper-module-transforms': 7.20.2 - '@babel/helpers': 7.20.1 - '@babel/parser': 7.20.3 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 - convert-source-map: 1.8.0 + '@babel/generator': 7.20.7 + '@babel/helper-compilation-targets': 7.20.7_@babel+core@7.20.12 + '@babel/helper-module-transforms': 7.20.11 + '@babel/helpers': 7.20.7 + '@babel/parser': 7.20.7 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.12 + '@babel/types': 7.20.7 + convert-source-map: 1.9.0 debug: 4.3.4 gensync: 1.0.0-beta.2 - json5: 2.2.1 + json5: 2.2.3 semver: 6.3.0 transitivePeerDependencies: - supports-color dev: true - /@babel/generator/7.20.4: - resolution: {integrity: sha512-luCf7yk/cm7yab6CAW1aiFnmEfBJplb/JojV56MYEK7ziWfGmFlTfmL9Ehwfy4gFhbjBfWO1wj7/TuSbVNEEtA==} + /@babel/generator/7.20.7: + resolution: {integrity: sha512-7wqMOJq8doJMZmP4ApXTzLxSr7+oO2jroJURrVEp6XShrQUObV8Tq/D0NCcoYg2uHqUrjzO0zwBjoYzelxK+sw==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 '@jridgewell/gen-mapping': 0.3.2 jsesc: 2.5.2 dev: true - /@babel/helper-compilation-targets/7.20.0_@babel+core@7.20.2: - resolution: {integrity: sha512-0jp//vDGp9e8hZzBc6N/KwA5ZK3Wsm/pfm4CrY7vzegkVxc65SgSn6wYOnwHe9Js9HRQ1YTCKLGPzDtaS3RoLQ==} + /@babel/helper-compilation-targets/7.20.7_@babel+core@7.20.12: + resolution: {integrity: sha512-4tGORmfQcrc+bvrjb5y3dG9Mx1IOZjsHqQVUz7XCNHO+iTmqxWnVg3KRygjGmpRLJGdQSKuvFinbIb0CnZwHAQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 dependencies: - '@babel/compat-data': 7.20.1 - '@babel/core': 7.20.2 + '@babel/compat-data': 7.20.10 + '@babel/core': 7.20.12 '@babel/helper-validator-option': 7.18.6 - browserslist: 4.21.3 + browserslist: 4.21.4 + lru-cache: 5.1.1 semver: 6.3.0 dev: true @@ -278,26 +279,26 @@ packages: resolution: {integrity: sha512-WAwHBINyrpqywkUH0nTnNgI5ina5TFn85HKS0pbPDfxFfhyR/aNQEn4hGi1P1JyT//I0t4OgXUlofzWILRvS5w==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/types': 7.20.7 dev: true /@babel/helper-hoist-variables/7.18.6: resolution: {integrity: sha512-UlJQPkFqFULIcyW5sbzgbkxn2FKRgwWiRexcuaR8RNJRy8+LLveqPjwZV/bwrLZCN0eUHD/x8D0heK1ozuoo6Q==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 dev: true /@babel/helper-module-imports/7.18.6: resolution: {integrity: sha512-0NFvs3VkuSYbFi1x2Vd6tKrywq+z/cLeYC/RJNFrIX/30Bf5aiGYbtvGXolEktzJH8o5E5KJ3tT+nkxuuZFVlA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 dev: true - /@babel/helper-module-transforms/7.20.2: - resolution: {integrity: sha512-zvBKyJXRbmK07XhMuujYoJ48B5yvvmM6+wcpv6Ivj4Yg6qO7NOZOSnvZN9CRl1zz1Z4cKf8YejmCMh8clOoOeA==} + /@babel/helper-module-transforms/7.20.11: + resolution: {integrity: sha512-uRy78kN4psmji1s2QtbtcCSaj/LILFDp0f/ymhpQH5QY3nljUZCaNWz9X1dEj/8MBdBEFECs7yRhKn8i7NjZgg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-environment-visitor': 7.18.9 @@ -305,9 +306,9 @@ packages: '@babel/helper-simple-access': 7.20.2 '@babel/helper-split-export-declaration': 7.18.6 '@babel/helper-validator-identifier': 7.19.1 - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.12 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color dev: true @@ -316,14 +317,14 @@ packages: resolution: {integrity: sha512-+0woI/WPq59IrqDYbVGfshjT5Dmk/nnbdpcF8SnMhhXObpTq2KNBdLFRFrkVdbDOyUmHBCxzm5FHV1rACIkIbA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 dev: true /@babel/helper-split-export-declaration/7.18.6: resolution: {integrity: sha512-bde1etTx6ZyTmobl9LLMMQsaizFVZrquTEHOqKeQESMKo4PlObf+8+JA25ZsIpZhT/WEd39+vOdLXAFG/nELpA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 dev: true /@babel/helper-string-parser/7.19.4: @@ -341,13 +342,13 @@ packages: engines: {node: '>=6.9.0'} dev: true - /@babel/helpers/7.20.1: - resolution: {integrity: sha512-J77mUVaDTUJFZ5BpP6mMn6OIl3rEWymk2ZxDBQJUG3P+PbmyMcF3bYWvz0ma69Af1oobDqT/iAsvzhB58xhQUg==} + /@babel/helpers/7.20.7: + resolution: {integrity: sha512-PBPjs5BppzsGaxHQCDKnZ6Gd9s6xl8bBCluz3vEInLGRJmnZan4F6BYCeqtyXqkk4W5IlPmjK4JlOuZkpJ3xZA==} engines: {node: '>=6.9.0'} dependencies: - '@babel/template': 7.18.10 - '@babel/traverse': 7.20.1 - '@babel/types': 7.20.2 + '@babel/template': 7.20.7 + '@babel/traverse': 7.20.12 + '@babel/types': 7.20.7 transitivePeerDependencies: - supports-color dev: true @@ -361,48 +362,48 @@ packages: js-tokens: 4.0.0 dev: true - /@babel/parser/7.20.3: - resolution: {integrity: sha512-OP/s5a94frIPXwjzEcv5S/tpQfc6XhxYUnmWpgdqMWGgYCuErA3SzozaRAMQgSZWKeTJxht9aWAkUY+0UzvOFg==} + /@babel/parser/7.20.7: + resolution: {integrity: sha512-T3Z9oHybU+0vZlY9CiDSJQTD5ZapcW18ZctFMi0MOAl/4BjFF4ul7NVSARLdbGO5vDqy9eQiGTV0LtKfvCYvcg==} engines: {node: '>=6.0.0'} hasBin: true dependencies: - '@babel/types': 7.20.2 + '@babel/types': 7.20.7 dev: true - /@babel/standalone/7.20.4: - resolution: {integrity: sha512-27bv4h47jbaFZ7+e7gT1VEo9PNL1ynxqUX6/BERLz1qxm/5gzpbcHX+47VnSeYHyEyGZkRznpSOd8zPBhiz6tw==} + /@babel/standalone/7.20.12: + resolution: {integrity: sha512-hK/X+m1il3w1tYS4H8LDaGCEdiT47SVqEXY8RiEAgou26BystipSU8ZL6EvBR6t5l7lTv0ilBiChXWblKJ5iUA==} engines: {node: '>=6.9.0'} dev: true - /@babel/template/7.18.10: - resolution: {integrity: sha512-TI+rCtooWHr3QJ27kJxfjutghu44DLnasDMwpDqCXVTal9RLp3RSYNh4NdBrRP2cQAoG9A8juOQl6P6oZG4JxA==} + /@babel/template/7.20.7: + resolution: {integrity: sha512-8SegXApWe6VoNw0r9JHpSteLKTpTiLZ4rMlGIm9JQ18KiCtyQiAMEazujAHrUS5flrcqYZa75ukev3P6QmUwUw==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 dev: true - /@babel/traverse/7.20.1: - resolution: {integrity: sha512-d3tN8fkVJwFLkHkBN479SOsw4DMZnz8cdbL/gvuDuzy3TS6Nfw80HuQqhw1pITbIruHyh7d1fMA47kWzmcUEGA==} + /@babel/traverse/7.20.12: + resolution: {integrity: sha512-MsIbFN0u+raeja38qboyF8TIT7K0BFzz/Yd/77ta4MsUsmP2RAnidIlwq7d5HFQrH/OZJecGV6B71C4zAgpoSQ==} engines: {node: '>=6.9.0'} dependencies: '@babel/code-frame': 7.18.6 - '@babel/generator': 7.20.4 + '@babel/generator': 7.20.7 '@babel/helper-environment-visitor': 7.18.9 '@babel/helper-function-name': 7.19.0 '@babel/helper-hoist-variables': 7.18.6 '@babel/helper-split-export-declaration': 7.18.6 - '@babel/parser': 7.20.3 - '@babel/types': 7.20.2 + '@babel/parser': 7.20.7 + '@babel/types': 7.20.7 debug: 4.3.4 globals: 11.12.0 transitivePeerDependencies: - supports-color dev: true - /@babel/types/7.20.2: - resolution: {integrity: sha512-FnnvsNWgZCr232sqtXggapvlkk/tuwR/qhGzcmxI0GXLCjmPYQPzio2FbdlWuY6y1sHFfQKk+rRbUZ9VStQMog==} + /@babel/types/7.20.7: + resolution: {integrity: sha512-69OnhBxSSgK0OzTJai4kyPDiKTIe3j+ctaHdIGVbRahTLAT7L3R9oeXHC2aVSuGYt3cVnoAMDmOCgJ2yaiLMvg==} engines: {node: '>=6.9.0'} dependencies: '@babel/helper-string-parser': 7.19.4 @@ -434,8 +435,8 @@ packages: '@edge-runtime/primitives': 2.0.2 dev: true - /@esbuild/android-arm/0.15.18: - resolution: {integrity: sha512-5GT+kcs2WVGjVs7+boataCkO5Fg0y4kCjzkB5bAip7H4jfnOS3dA6KPiww9W1OEKTKeAcUVhdZGvgI65OXmUnw==} + /@esbuild/android-arm/0.16.17: + resolution: {integrity: sha512-N9x1CMXVhtWEAMS7pNNONyA14f71VPQN9Cnavj1XQh6T7bskqiLLrSca4O0Vr8Wdcga943eThxnVp3JLnBMYtw==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -443,8 +444,8 @@ packages: dev: true optional: true - /@esbuild/android-arm/0.16.14: - resolution: {integrity: sha512-u0rITLxFIeYAvtJXBQNhNuV4YZe+MD1YvIWT7Nicj8hZAtRVZk2PgNH6KclcKDVHz1ChLKXRfX7d7tkbQBUfrg==} + /@esbuild/android-arm/0.17.0: + resolution: {integrity: sha512-hlbX5ym1V5kIKvnwFhm6rhar7MNqfJrZyYTNfk6+WS1uQfQmszFgXeyPH2beP3lSCumZyqX0zMBfOqftOpZ7GA==} engines: {node: '>=12'} cpu: [arm] os: [android] @@ -452,8 +453,17 @@ packages: dev: false optional: true - /@esbuild/android-arm64/0.16.14: - resolution: {integrity: sha512-hTqB6Iq13pW4xaydeqQrs8vPntUnMjbkq+PgGiBMi69eYk74naG2ftHWqKnxn874kNrt5Or3rQ0PJutx2doJuQ==} + /@esbuild/android-arm64/0.16.17: + resolution: {integrity: sha512-MIGl6p5sc3RDTLLkYL1MyL8BMRN4tLMRCn+yRJJmEDvYZ2M7tmAf80hx1kbNEUX2KJ50RRtxZ4JHLvCfuB6kBg==} + engines: {node: '>=12'} + cpu: [arm64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-arm64/0.17.0: + resolution: {integrity: sha512-77GVyD7ToESy/7+9eI8z62GGBdS/hsqsrpM+JA4kascky86wHbN29EEFpkVvxajPL7k6mbLJ5VBQABdj7n9FhQ==} engines: {node: '>=12'} cpu: [arm64] os: [android] @@ -461,8 +471,17 @@ packages: dev: false optional: true - /@esbuild/android-x64/0.16.14: - resolution: {integrity: sha512-jir51K4J0K5Rt0KOcippjSNdOl7akKDVz5I6yrqdk4/m9y+rldGptQUF7qU4YpX8U61LtR+w2Tu2Ph+K/UaJOw==} + /@esbuild/android-x64/0.16.17: + resolution: {integrity: sha512-a3kTv3m0Ghh4z1DaFEuEDfz3OLONKuFvI4Xqczqx4BqLyuFaFkuaG4j2MtA6fuWEFeC5x9IvqnX7drmRq/fyAQ==} + engines: {node: '>=12'} + cpu: [x64] + os: [android] + requiresBuild: true + dev: true + optional: true + + /@esbuild/android-x64/0.17.0: + resolution: {integrity: sha512-TroxZdZhtAz0JyD0yahtjcbKuIXrBEAoAazaYSeR2e2tUtp9uXrcbpwFJF6oxxOiOOne6y7l4hx4YVnMW/tdFw==} engines: {node: '>=12'} cpu: [x64] os: [android] @@ -470,8 +489,17 @@ packages: dev: false optional: true - /@esbuild/darwin-arm64/0.16.14: - resolution: {integrity: sha512-vrlaP81IuwPaw1fyX8fHCmivP3Gr73ojVEZy+oWJLAiZVcG8o8Phwun/XDnYIFUHxIoUnMFEpg9o38MIvlw8zw==} + /@esbuild/darwin-arm64/0.16.17: + resolution: {integrity: sha512-/2agbUEfmxWHi9ARTX6OQ/KgXnOWfsNlTeLcoV7HSuSTv63E4DqtAc+2XqGw1KHxKMHGZgbVCZge7HXWX9Vn+w==} + engines: {node: '>=12'} + cpu: [arm64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-arm64/0.17.0: + resolution: {integrity: sha512-wP/v4cgdWt1m8TS/WmbaBc3NZON10eCbm6XepdVc3zJuqruHCzCKcC9dTSTEk50zX04REcRcbIbdhTMciQoFIg==} engines: {node: '>=12'} cpu: [arm64] os: [darwin] @@ -479,8 +507,17 @@ packages: dev: false optional: true - /@esbuild/darwin-x64/0.16.14: - resolution: {integrity: sha512-KV1E01eC2hGYA2qzFDRCK4wdZCRUvMwCNcobgpiiOzp5QXpJBqFPdxI69j8vvzuU7oxFXDgANwEkXvpeQqyOyg==} + /@esbuild/darwin-x64/0.16.17: + resolution: {integrity: sha512-2By45OBHulkd9Svy5IOCZt376Aa2oOkiE9QWUK9fe6Tb+WDr8hXL3dpqi+DeLiMed8tVXspzsTAvd0jUl96wmg==} + engines: {node: '>=12'} + cpu: [x64] + os: [darwin] + requiresBuild: true + dev: true + optional: true + + /@esbuild/darwin-x64/0.17.0: + resolution: {integrity: sha512-R4WB6D6V9KGO/3LVTT8UlwRJO26IBFatOdo/bRXksfJR0vyOi2/lgmAAMBSpgcnnwvts9QsWiyM++mTTlwRseA==} engines: {node: '>=12'} cpu: [x64] os: [darwin] @@ -488,8 +525,17 @@ packages: dev: false optional: true - /@esbuild/freebsd-arm64/0.16.14: - resolution: {integrity: sha512-xRM1RQsazSvL42BNa5XC7ytD4ZDp0ZyJcH7aB0SlYUcHexJUKiDNKR7dlRVlpt6W0DvoRPU2nWK/9/QWS4u2fw==} + /@esbuild/freebsd-arm64/0.16.17: + resolution: {integrity: sha512-mt+cxZe1tVx489VTb4mBAOo2aKSnJ33L9fr25JXpqQqzbUIw/yzIzi+NHwAXK2qYV1lEFp4OoVeThGjUbmWmdw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-arm64/0.17.0: + resolution: {integrity: sha512-FO7+UEZv79gen2df8StFYFHZPI9ADozpFepLZCxY+O8sYLDa1rirvenmLwJiOHmeQRJ5orYedFeLk1PFlZ6t8Q==} engines: {node: '>=12'} cpu: [arm64] os: [freebsd] @@ -497,8 +543,17 @@ packages: dev: false optional: true - /@esbuild/freebsd-x64/0.16.14: - resolution: {integrity: sha512-7ALTAn6YRRf1O6fw9jmn0rWmOx3XfwDo7njGtjy1LXhDGUjTY/vohEPM3ii5MQ411vJv1r498EEx2aBQTJcrEw==} + /@esbuild/freebsd-x64/0.16.17: + resolution: {integrity: sha512-8ScTdNJl5idAKjH8zGAsN7RuWcyHG3BAvMNpKOBaqqR7EbUhhVHOqXRdL7oZvz8WNHL2pr5+eIT5c65kA6NHug==} + engines: {node: '>=12'} + cpu: [x64] + os: [freebsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/freebsd-x64/0.17.0: + resolution: {integrity: sha512-qCsNRsVTaC3ekwZcb2sa7l1gwCtJK3EqCWyDgpoQocYf3lRpbAzaCvqZSF2+NOO64cV+JbedXPsFiXU1aaVcIg==} engines: {node: '>=12'} cpu: [x64] os: [freebsd] @@ -506,8 +561,17 @@ packages: dev: false optional: true - /@esbuild/linux-arm/0.16.14: - resolution: {integrity: sha512-X6xULug66ulrr4IzrW7qq+eq9n4MtEyagdWvj4o4cmWr+JXOT47atjpDF9j5M2zHY0UQBmqnHhwl+tXpkpIb2w==} + /@esbuild/linux-arm/0.16.17: + resolution: {integrity: sha512-iihzrWbD4gIT7j3caMzKb/RsFFHCwqqbrbH9SqUSRrdXkXaygSZCZg1FybsZz57Ju7N/SHEgPyaR0LZ8Zbe9gQ==} + engines: {node: '>=12'} + cpu: [arm] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm/0.17.0: + resolution: {integrity: sha512-Y2G2NU6155gcfNKvrakVmZV5xUAEhXjsN/uKtbKKRnvee0mHUuaT3OdQJDJKjHVGr6B0898pc3slRpI1PqspoQ==} engines: {node: '>=12'} cpu: [arm] os: [linux] @@ -515,8 +579,17 @@ packages: dev: false optional: true - /@esbuild/linux-arm64/0.16.14: - resolution: {integrity: sha512-TLh2OcbBUQcMYRH4GbiDkDZfZ4t1A3GgmeXY27dHSI6xrU7IkO00MGBiJySmEV6sH3Wa6pAN6UtaVL0DwkGW4Q==} + /@esbuild/linux-arm64/0.16.17: + resolution: {integrity: sha512-7S8gJnSlqKGVJunnMCrXHU9Q8Q/tQIxk/xL8BqAP64wchPCTzuM6W3Ra8cIa1HIflAvDnNOt2jaL17vaW+1V0g==} + engines: {node: '>=12'} + cpu: [arm64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-arm64/0.17.0: + resolution: {integrity: sha512-js4Vlch5XJQYISbDVJd2hsI/MsfVUz6d/FrclCE73WkQmniH37vFpuQI42ntWAeBghDIfaPZ6f9GilhwGzVFUg==} engines: {node: '>=12'} cpu: [arm64] os: [linux] @@ -524,8 +597,17 @@ packages: dev: false optional: true - /@esbuild/linux-ia32/0.16.14: - resolution: {integrity: sha512-oBZkcZ56UZDFCAfE3Fd/Jgy10EoS7Td77NzNGenM+HSY8BkdQAcI9VF9qgwdOLZ+tuftWD7UqZ26SAhtvA3XhA==} + /@esbuild/linux-ia32/0.16.17: + resolution: {integrity: sha512-kiX69+wcPAdgl3Lonh1VI7MBr16nktEvOfViszBSxygRQqSpzv7BffMKRPMFwzeJGPxcio0pdD3kYQGpqQ2SSg==} + engines: {node: '>=12'} + cpu: [ia32] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ia32/0.17.0: + resolution: {integrity: sha512-7tl/jSPkF59R3zeFDB2/09zLGhcM7DM+tCoOqjJbQjuL6qbMWomGT2RglCqRFpCSdzBx0hukmPPgUAMlmdj0sQ==} engines: {node: '>=12'} cpu: [ia32] os: [linux] @@ -533,8 +615,8 @@ packages: dev: false optional: true - /@esbuild/linux-loong64/0.15.18: - resolution: {integrity: sha512-L4jVKS82XVhw2nvzLg/19ClLWg0y27ulRwuP7lcyL6AbUWB5aPglXY3M21mauDQMDfRLs8cQmeT03r/+X3cZYQ==} + /@esbuild/linux-loong64/0.16.17: + resolution: {integrity: sha512-dTzNnQwembNDhd654cA4QhbS9uDdXC3TKqMJjgOWsC0yNCbpzfWoXdZvp0mY7HU6nzk5E0zpRGGx3qoQg8T2DQ==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -542,8 +624,8 @@ packages: dev: true optional: true - /@esbuild/linux-loong64/0.16.14: - resolution: {integrity: sha512-udz/aEHTcuHP+xdWOJmZ5C9RQXHfZd/EhCnTi1Hfay37zH3lBxn/fNs85LA9HlsniFw2zccgcbrrTMKk7Cn1Qg==} + /@esbuild/linux-loong64/0.17.0: + resolution: {integrity: sha512-OG356F7dIVVF+EXJx5UfzFr1I5l6ES53GlMNSr3U1MhlaVyrP9um5PnrSJ+7TSDAzUC7YGjxb2GQWqHLd5XFoA==} engines: {node: '>=12'} cpu: [loong64] os: [linux] @@ -551,8 +633,17 @@ packages: dev: false optional: true - /@esbuild/linux-mips64el/0.16.14: - resolution: {integrity: sha512-kJ2iEnikUOdC1SiTGbH0fJUgpZwa0ITDTvj9EHf9lm3I0hZ4Yugsb3M6XSl696jVxrEocLe519/8CbSpQWFSrg==} + /@esbuild/linux-mips64el/0.16.17: + resolution: {integrity: sha512-ezbDkp2nDl0PfIUn0CsQ30kxfcLTlcx4Foz2kYv8qdC6ia2oX5Q3E/8m6lq84Dj/6b0FrkgD582fJMIfHhJfSw==} + engines: {node: '>=12'} + cpu: [mips64el] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-mips64el/0.17.0: + resolution: {integrity: sha512-LWQJgGpxrjh2x08UYf6G5R+Km7zhkpCvKXtFQ6SX0fimDvy1C8kslgFHGxLS0wjGV8C4BNnENW/HNy57+RB7iA==} engines: {node: '>=12'} cpu: [mips64el] os: [linux] @@ -560,8 +651,17 @@ packages: dev: false optional: true - /@esbuild/linux-ppc64/0.16.14: - resolution: {integrity: sha512-kclKxvZvX5YhykwlJ/K9ljiY4THe5vXubXpWmr7q3Zu3WxKnUe1VOZmhkEZlqtnJx31GHPEV4SIG95IqTdfgfg==} + /@esbuild/linux-ppc64/0.16.17: + resolution: {integrity: sha512-dzS678gYD1lJsW73zrFhDApLVdM3cUF2MvAa1D8K8KtcSKdLBPP4zZSLy6LFZ0jYqQdQ29bjAHJDgz0rVbLB3g==} + engines: {node: '>=12'} + cpu: [ppc64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-ppc64/0.17.0: + resolution: {integrity: sha512-f40N8fKiTQslUcUuhof2/syOQ+DC9Mqdnm9d063pew+Ptv9r6dBNLQCz4300MOfCLAbb0SdnrcMSzHbMehXWLw==} engines: {node: '>=12'} cpu: [ppc64] os: [linux] @@ -569,8 +669,17 @@ packages: dev: false optional: true - /@esbuild/linux-riscv64/0.16.14: - resolution: {integrity: sha512-fdwP9Dc+Kx/cZwp9T9kNqjAE/PQjfrxbio4rZ3XnC3cVvZBjuxpkiyu/tuCwt6SbAK5th6AYNjFdEV9kGC020A==} + /@esbuild/linux-riscv64/0.16.17: + resolution: {integrity: sha512-ylNlVsxuFjZK8DQtNUwiMskh6nT0vI7kYl/4fZgV1llP5d6+HIeL/vmmm3jpuoo8+NuXjQVZxmKuhDApK0/cKw==} + engines: {node: '>=12'} + cpu: [riscv64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-riscv64/0.17.0: + resolution: {integrity: sha512-sc/pvLexRvxgEbmeq7LfLGnzUBFi/E2MGbnQj3CG8tnQ90tWPTi+9CbZEgIADhj6CAlCCmqxpUclIV1CRVUOTw==} engines: {node: '>=12'} cpu: [riscv64] os: [linux] @@ -578,8 +687,17 @@ packages: dev: false optional: true - /@esbuild/linux-s390x/0.16.14: - resolution: {integrity: sha512-++fw3P4fQk9nqvdzbANRqimKspL8pDCnSpXomyhV7V/ISha/BZIYvZwLBWVKp9CVWKwWPJ4ktsezuLIvlJRHqA==} + /@esbuild/linux-s390x/0.16.17: + resolution: {integrity: sha512-gzy7nUTO4UA4oZ2wAMXPNBGTzZFP7mss3aKR2hH+/4UUkCOyqmjXiKpzGrY2TlEUhbbejzXVKKGazYcQTZWA/w==} + engines: {node: '>=12'} + cpu: [s390x] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-s390x/0.17.0: + resolution: {integrity: sha512-7xq9/kY0vunCL2vjHKdHGI+660pCdeEC6K6TWBVvbTGXvT8s/qacfxMgr8PCeQRbNUZLOA13G6/G1+c0lYXO1A==} engines: {node: '>=12'} cpu: [s390x] os: [linux] @@ -587,8 +705,17 @@ packages: dev: false optional: true - /@esbuild/linux-x64/0.16.14: - resolution: {integrity: sha512-TomtswAuzBf2NnddlrS4W01Tv85RM9YtATB3OugY6On0PLM4Ksz5qvQKVAjtzPKoLgL1FiZtfc8mkZc4IgoMEA==} + /@esbuild/linux-x64/0.16.17: + resolution: {integrity: sha512-mdPjPxfnmoqhgpiEArqi4egmBAMYvaObgn4poorpUaqmvzzbvqbowRllQ+ZgzGVMGKaPkqUmPDOOFQRUFDmeUw==} + engines: {node: '>=12'} + cpu: [x64] + os: [linux] + requiresBuild: true + dev: true + optional: true + + /@esbuild/linux-x64/0.17.0: + resolution: {integrity: sha512-o7FhBLONk1mLT2ytlj/j/WuJcPdhWcVpysSJn1s9+zRdLwLKveipbPi5SIasJIqMq0T4CkQW76pxJYMqz9HrQA==} engines: {node: '>=12'} cpu: [x64] os: [linux] @@ -596,8 +723,17 @@ packages: dev: false optional: true - /@esbuild/netbsd-x64/0.16.14: - resolution: {integrity: sha512-U06pfx8P5CqyoPNfqIJmnf+5/r4mJ1S62G4zE6eOjS59naQcxi6GnscUCPH3b+hRG0qdKoGX49RAyiqW+M9aSw==} + /@esbuild/netbsd-x64/0.16.17: + resolution: {integrity: sha512-/PzmzD/zyAeTUsduZa32bn0ORug+Jd1EGGAUJvqfeixoEISYpGnAezN6lnJoskauoai0Jrs+XSyvDhppCPoKOA==} + engines: {node: '>=12'} + cpu: [x64] + os: [netbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/netbsd-x64/0.17.0: + resolution: {integrity: sha512-V6xXsv71b8vwFCW/ky82Rs//SbyA+ORty6A7Mzkg33/4NbYZ/1Vcbk7qAN5oi0i/gS4Q0+7dYT7NqaiVZ7+Xjw==} engines: {node: '>=12'} cpu: [x64] os: [netbsd] @@ -605,8 +741,17 @@ packages: dev: false optional: true - /@esbuild/openbsd-x64/0.16.14: - resolution: {integrity: sha512-/Jl8XVaWEZNu9rZw+n792GIBupQwHo6GDoapHSb/2xp/Ku28eK6QpR2O9cPBkzHH4OOoMH0LB6zg/qczJ5TTGg==} + /@esbuild/openbsd-x64/0.16.17: + resolution: {integrity: sha512-2yaWJhvxGEz2RiftSk0UObqJa/b+rIAjnODJgv2GbGGpRwAfpgzyrg1WLK8rqA24mfZa9GvpjLcBBg8JHkoodg==} + engines: {node: '>=12'} + cpu: [x64] + os: [openbsd] + requiresBuild: true + dev: true + optional: true + + /@esbuild/openbsd-x64/0.17.0: + resolution: {integrity: sha512-StlQor6A0Y9SSDxraytr46Qbz25zsSDmsG3MCaNkBnABKHP3QsngOCfdBikqHVVrXeK0KOTmtX92/ncTGULYgQ==} engines: {node: '>=12'} cpu: [x64] os: [openbsd] @@ -614,8 +759,17 @@ packages: dev: false optional: true - /@esbuild/sunos-x64/0.16.14: - resolution: {integrity: sha512-2iI7D34uTbDn/TaSiUbEHz+fUa8KbN90vX5yYqo12QGpu6T8Jl+kxODsWuMCwoTVlqUpwfPV22nBbFPME9OPtw==} + /@esbuild/sunos-x64/0.16.17: + resolution: {integrity: sha512-xtVUiev38tN0R3g8VhRfN7Zl42YCJvyBhRKw1RJjwE1d2emWTVToPLNEQj/5Qxc6lVFATDiy6LjVHYhIPrLxzw==} + engines: {node: '>=12'} + cpu: [x64] + os: [sunos] + requiresBuild: true + dev: true + optional: true + + /@esbuild/sunos-x64/0.17.0: + resolution: {integrity: sha512-K64Wqw57j8KrwjR3QjsuzN/qDGK6Cno6QYtIlWAmGab5iYPBZCWz7HFtF2a86/130LmUsdXqOID7J0SmjjRFIQ==} engines: {node: '>=12'} cpu: [x64] os: [sunos] @@ -623,8 +777,17 @@ packages: dev: false optional: true - /@esbuild/win32-arm64/0.16.14: - resolution: {integrity: sha512-SjlM7AHmQVTiGBJE/nqauY1aDh80UBsXZ94g4g60CDkrDMseatiqALVcIuElg4ZSYzJs8hsg5W6zS2zLpZTVgg==} + /@esbuild/win32-arm64/0.16.17: + resolution: {integrity: sha512-ga8+JqBDHY4b6fQAmOgtJJue36scANy4l/rL97W+0wYmijhxKetzZdKOJI7olaBaMhWt8Pac2McJdZLxXWUEQw==} + engines: {node: '>=12'} + cpu: [arm64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-arm64/0.17.0: + resolution: {integrity: sha512-hly6iSWAf0hf3aHD18/qW7iFQbg9KAQ0RFGG9plcxkhL4uGw43O+lETGcSO/PylNleFowP/UztpF6U4oCYgpPw==} engines: {node: '>=12'} cpu: [arm64] os: [win32] @@ -632,8 +795,17 @@ packages: dev: false optional: true - /@esbuild/win32-ia32/0.16.14: - resolution: {integrity: sha512-z06t5zqk8ak0Xom5HG81z2iOQ1hNWYsFQp3sczVLVx+dctWdgl80tNRyTbwjaFfui2vFO12dfE3trCTvA+HO4g==} + /@esbuild/win32-ia32/0.16.17: + resolution: {integrity: sha512-WnsKaf46uSSF/sZhwnqE4L/F89AYNMiD4YtEcYekBt9Q7nj0DiId2XH2Ng2PHM54qi5oPrQ8luuzGszqi/veig==} + engines: {node: '>=12'} + cpu: [ia32] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-ia32/0.17.0: + resolution: {integrity: sha512-aL4EWPh0nyC5uYRfn+CHkTgawd4DjtmwquthNDmGf6Ht6+mUc+bQXyZNH1QIw8x20hSqFc4Tf36aLLWP/TPR3g==} engines: {node: '>=12'} cpu: [ia32] os: [win32] @@ -641,8 +813,17 @@ packages: dev: false optional: true - /@esbuild/win32-x64/0.16.14: - resolution: {integrity: sha512-ED1UpWcM6lAbalbbQ9TrGqJh4Y9TaASUvu8bI/0mgJcxhSByJ6rbpgqRhxYMaQ682WfA71nxUreaTO7L275zrw==} + /@esbuild/win32-x64/0.16.17: + resolution: {integrity: sha512-y+EHuSchhL7FjHgvQL/0fnnFmO4T1bhvWANX6gcnqTjtnKWbTvUMCpGnv2+t+31d7RzyEAYAd4u2fnIhHL6N/Q==} + engines: {node: '>=12'} + cpu: [x64] + os: [win32] + requiresBuild: true + dev: true + optional: true + + /@esbuild/win32-x64/0.17.0: + resolution: {integrity: sha512-W6IIQ9Rt43I/GqfXeBFLk0TvowKBoirs9sw2LPfhHax6ayMlW5PhFzSJ76I1ac9Pk/aRcSMrHWvVyZs8ZPK2wA==} engines: {node: '>=12'} cpu: [x64] os: [win32] @@ -656,9 +837,9 @@ packages: dependencies: ajv: 6.12.6 debug: 4.3.4 - espree: 9.4.0 + espree: 9.4.1 globals: 13.19.0 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -691,8 +872,8 @@ packages: resolution: {integrity: sha512-trnsAYxU3xnS1gPHPyU961coFyLkh4gAD/0zQ5mymY4yOZ+CYvsPqUbOFSw0aDM4y0tV7tiFxL/1XfXPNC6IPg==} dev: true - /@ioredis/commands/1.1.1: - resolution: {integrity: sha512-fsR4P/ROllzf/7lXYyElUJCheWdTJVJvOTps8v9IWKFATxR61ANOlnoPqhH099xYLrJGpc2ZQ28B3rMeUt5VQg==} + /@ioredis/commands/1.2.0: + resolution: {integrity: sha512-Sx1pU8EM64o2BrqNpEO1CNLtKQwyhuXuqyfH7oGKCk+1a33d2r5saW8zNwm3j6BTExtjrv2BxTgzzkMwts6vGg==} dev: false /@istanbuljs/schema/0.1.3: @@ -714,10 +895,10 @@ packages: dependencies: '@jridgewell/set-array': 1.1.2 '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/trace-mapping': 0.3.17 - /@jridgewell/resolve-uri/3.0.6: - resolution: {integrity: sha512-R7xHtBSNm+9SyvpJkdQl+qrM3Hm2fea3Ef197M3mUug+v+yR+Rhfbs7PBtcBUVnIWJ4JcAdjvij+c8hXS9p5aw==} + /@jridgewell/resolve-uri/3.1.0: + resolution: {integrity: sha512-F2msla3tad+Mfht5cJq7LSXcdudKTWCVYUgw6pLFOOHSTtZlj6SWNYAp+AhuqLmWdBO2X5hPrLcu8cVP8fy28w==} engines: {node: '>=6.0.0'} /@jridgewell/set-array/1.1.2: @@ -728,26 +909,26 @@ packages: resolution: {integrity: sha512-m7O9o2uR8k2ObDysZYzdfhb08VuEml5oWGiosa1VdaPZ/A6QyPkAJuwN0Q1lhULOf6B7MtQmHENS743hWtCrgw==} dependencies: '@jridgewell/gen-mapping': 0.3.2 - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/trace-mapping': 0.3.17 dev: false /@jridgewell/sourcemap-codec/1.4.14: resolution: {integrity: sha512-XPSJHWmi394fuUuzDnGz1wiKqWfo1yXecHQMRf2l6hztTO+nPru658AyDngaBe7isIxEkRsPR3FZh+s7iVa4Uw==} - /@jridgewell/trace-mapping/0.3.9: - resolution: {integrity: sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ==} + /@jridgewell/trace-mapping/0.3.17: + resolution: {integrity: sha512-MCNzAp77qzKca9+W/+I0+sEpaUnZoeasnghNeVc41VZCEKaCH73Vq3BZZ/SzWIgrqE4H4ceI+p+b6C0mHf9T4g==} dependencies: - '@jridgewell/resolve-uri': 3.0.6 + '@jridgewell/resolve-uri': 3.1.0 '@jridgewell/sourcemap-codec': 1.4.14 - /@mapbox/node-pre-gyp/1.0.9: - resolution: {integrity: sha512-aDF3S3rK9Q2gey/WAttUlISduDItz5BU3306M9Eyv6/oS40aMprnopshtlKTykxRNIBEZuRMaZAnbrQ4QtKGyw==} + /@mapbox/node-pre-gyp/1.0.10: + resolution: {integrity: sha512-4ySo4CjzStuprMwk35H5pPbkymjv1SF3jGLj6rAHp/xT/RF7TL7bd9CTm1xDY49K2qF7jmR/g7k+SkLETP6opA==} hasBin: true dependencies: detect-libc: 2.0.1 https-proxy-agent: 5.0.1 make-dir: 3.1.0 - node-fetch: 2.6.7 + node-fetch: 2.6.8 nopt: 5.0.0 npmlog: 5.0.1 rimraf: 3.0.2 @@ -773,7 +954,7 @@ packages: engines: {node: '>=16.13'} dependencies: '@miniflare/shared': 2.11.0 - kleur: 4.1.4 + kleur: 4.1.5 dev: true /@miniflare/core/2.11.0: @@ -786,8 +967,8 @@ packages: '@miniflare/watcher': 2.11.0 busboy: 1.6.0 dotenv: 10.0.0 - kleur: 4.1.4 - set-cookie-parser: 2.4.8 + kleur: 4.1.5 + set-cookie-parser: 2.5.1 undici: 5.9.1 urlpattern-polyfill: 4.0.3 dev: true @@ -827,10 +1008,10 @@ packages: '@miniflare/core': 2.11.0 '@miniflare/shared': 2.11.0 '@miniflare/web-sockets': 2.11.0 - kleur: 4.1.4 - selfsigned: 2.0.1 + kleur: 4.1.5 + selfsigned: 2.1.1 undici: 5.9.1 - ws: 8.9.0 + ws: 8.12.0 youch: 2.2.2 transitivePeerDependencies: - bufferutil @@ -879,9 +1060,9 @@ packages: resolution: {integrity: sha512-fWMqq3ZkWAg+k7CnyzMV/rZHugwn+/JxvVzCxrtvxzwotTN547THlOxgZe8JAP23U9BiTxOfpTfnLvFEjAmegw==} engines: {node: '>=16.13'} dependencies: - '@types/better-sqlite3': 7.6.0 - kleur: 4.1.4 - npx-import: 1.1.3 + '@types/better-sqlite3': 7.6.3 + kleur: 4.1.5 + npx-import: 1.1.4 picomatch: 2.3.1 dev: true @@ -923,14 +1104,14 @@ packages: '@miniflare/core': 2.11.0 '@miniflare/shared': 2.11.0 undici: 5.9.1 - ws: 8.9.0 + ws: 8.12.0 transitivePeerDependencies: - bufferutil - utf-8-validate dev: true - /@netlify/functions/1.3.0: - resolution: {integrity: sha512-hN/Fgpz8XIOBfsBPLYUMxVKBlCopgeqGB0popayicnmkFLnvKByTTMYgF01wcF9DBtBQdV0H2h1kPFpMl34I8w==} + /@netlify/functions/1.4.0: + resolution: {integrity: sha512-gy7ULTIRroc2/jyFVGx1djCmmBMVisIwrvkqggq5B6iDcInRSy2Tpkm+V5C63hKJVkNRskKWtLQKm9ecCaQTjA==} engines: {node: '>=8.3.0'} dependencies: is-promise: 4.0.0 @@ -952,7 +1133,7 @@ packages: engines: {node: '>= 8'} dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.13.0 + fastq: 1.15.0 /@pkgr/utils/2.3.1: resolution: {integrity: sha512-wfzX8kc1PMyUILA+1Z/EqoE4UCXGy0iRGMhPwdfae1+f0OXlLqCk+By+aMzgJBzR9AzS4CDizioG6Ss1gvAFJw==} @@ -963,10 +1144,10 @@ packages: open: 8.4.0 picocolors: 1.0.0 tiny-glob: 0.2.9 - tslib: 2.4.0 + tslib: 2.4.1 dev: true - /@rollup/plugin-alias/4.0.2_rollup@3.9.1: + /@rollup/plugin-alias/4.0.2_rollup@3.10.0: resolution: {integrity: sha512-1hv7dBOZZwo3SEupxn4UA2N0EDThqSSS+wI1St1TNTBtOZvUchyIClyHcnDcjjrReTPZ47Faedrhblv4n+T5UQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -975,28 +1156,10 @@ packages: rollup: optional: true dependencies: - rollup: 3.9.1 + rollup: 3.10.0 slash: 4.0.0 - /@rollup/plugin-commonjs/23.0.7_rollup@3.9.1: - resolution: {integrity: sha512-hsSD5Qzyuat/swzrExGG5l7EuIlPhwTsT7KwKbSCQzIcJWjRxiimi/0tyMYY2bByitNb3i1p+6JWEDGa0NvT0Q==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^2.68.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 - commondir: 1.0.1 - estree-walker: 2.0.2 - glob: 8.0.3 - is-reference: 1.2.1 - magic-string: 0.27.0 - rollup: 3.9.1 - dev: true - - /@rollup/plugin-commonjs/24.0.0_rollup@3.9.1: + /@rollup/plugin-commonjs/24.0.0_rollup@3.10.0: resolution: {integrity: sha512-0w0wyykzdyRRPHOb0cQt14mIBLujfAv6GgP6g8nvg/iBxEm112t3YPPq+Buqe2+imvElTka+bjNlJ/gB56TD8g==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1005,16 +1168,15 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 commondir: 1.0.1 estree-walker: 2.0.2 glob: 8.0.3 is-reference: 1.2.1 magic-string: 0.27.0 - rollup: 3.9.1 - dev: false + rollup: 3.10.0 - /@rollup/plugin-inject/5.0.3_rollup@3.9.1: + /@rollup/plugin-inject/5.0.3_rollup@3.10.0: resolution: {integrity: sha512-411QlbL+z2yXpRWFXSmw/teQRMkXcAAC8aYTemc15gwJRpvEVDQwoe+N/HTFD8RFG8+88Bme9DK2V9CVm7hJdA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1023,26 +1185,13 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 estree-walker: 2.0.2 magic-string: 0.27.0 - rollup: 3.9.1 + rollup: 3.10.0 dev: false - /@rollup/plugin-json/5.0.2_rollup@3.9.1: - resolution: {integrity: sha512-D1CoOT2wPvadWLhVcmpkDnesTzjhNIQRWLsc3fA49IFOP2Y84cFOOJ+nKGYedvXHKUsPeq07HR4hXpBBr+CHlA==} - engines: {node: '>=14.0.0'} - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0 - peerDependenciesMeta: - rollup: - optional: true - dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 - rollup: 3.9.1 - dev: true - - /@rollup/plugin-json/6.0.0_rollup@3.9.1: + /@rollup/plugin-json/6.0.0_rollup@3.10.0: resolution: {integrity: sha512-i/4C5Jrdr1XUarRhVu27EEwjt4GObltD7c+MkCIpO2QIbojw8MUs+CCTqOphQi3Qtg1FLmYt+l+6YeoIf51J7w==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1051,11 +1200,10 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 - rollup: 3.9.1 - dev: false + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 + rollup: 3.10.0 - /@rollup/plugin-node-resolve/15.0.1_rollup@3.9.1: + /@rollup/plugin-node-resolve/15.0.1_rollup@3.10.0: resolution: {integrity: sha512-ReY88T7JhJjeRVbfCyNj+NXAG3IIsVMsX9b5/9jC98dRP8/yxlZdz7mHZbHk5zHr24wZZICS5AcXsFZAXYUQEg==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1064,15 +1212,15 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 '@types/resolve': 1.20.2 deepmerge: 4.2.2 is-builtin-module: 3.2.0 is-module: 1.0.0 resolve: 1.22.1 - rollup: 3.9.1 + rollup: 3.10.0 - /@rollup/plugin-replace/5.0.2_rollup@3.9.1: + /@rollup/plugin-replace/5.0.2_rollup@3.10.0: resolution: {integrity: sha512-M9YXNekv/C/iHHK+cvORzfRYfPbq0RDD8r0G+bMiTXjNGKulPnCT9O3Ss46WfhI6ZOCgApOP7xAdmCQJ+U2LAA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1081,12 +1229,12 @@ packages: rollup: optional: true dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 magic-string: 0.27.0 - rollup: 3.9.1 + rollup: 3.10.0 - /@rollup/plugin-terser/0.2.1_rollup@3.9.1: - resolution: {integrity: sha512-hV52c8Oo6/cXZZxVVoRNBb4zh+EKSHS4I1sedWV5pf0O+hTLSkrf6w86/V0AZutYtwBguB6HLKwz89WDBfwGOA==} + /@rollup/plugin-terser/0.3.0_rollup@3.10.0: + resolution: {integrity: sha512-mYTkNW9KjOscS/3QWU5LfOKsR3/fAAVDaqcAe2TZ7ng6pN46f+C7FOZbITuIW/neA+PhcjoKl7yMyB3XcmA4gw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.x || ^3.x @@ -1094,13 +1242,13 @@ packages: rollup: optional: true dependencies: - rollup: 3.9.1 + rollup: 3.10.0 serialize-javascript: 6.0.0 smob: 0.0.6 terser: 5.16.1 dev: false - /@rollup/plugin-wasm/6.1.1_rollup@3.9.1: + /@rollup/plugin-wasm/6.1.1_rollup@3.10.0: resolution: {integrity: sha512-dccyb8OvtpY21KiYjaNmibWlQJd/kBg+IVP24x9l1dsIRXBmGqLt+wsPjU296FNO8ap0SSEsTpi/7AfrlvQvBQ==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1109,7 +1257,7 @@ packages: rollup: optional: true dependencies: - rollup: 3.9.1 + rollup: 3.10.0 dev: false /@rollup/pluginutils/4.2.1: @@ -1120,7 +1268,7 @@ packages: picomatch: 2.3.1 dev: false - /@rollup/pluginutils/5.0.2_rollup@3.9.1: + /@rollup/pluginutils/5.0.2_rollup@3.10.0: resolution: {integrity: sha512-pTd9rIsP92h+B6wWwFbW8RkZv4hiR/xKsqre4SIuAOaOEQRxi0lqLke9k2/7WegC85GgUs9pjmOjCUi3In4vwA==} engines: {node: '>=14.0.0'} peerDependencies: @@ -1132,16 +1280,16 @@ packages: '@types/estree': 1.0.0 estree-walker: 2.0.2 picomatch: 2.3.1 - rollup: 3.9.1 + rollup: 3.10.0 /@types/aws-lambda/8.10.109: resolution: {integrity: sha512-/ME92FneNyXQzrAfcnQQlW1XkCZGPDlpi2ao1MJwecN+6SbeonKeggU8eybv1DfKli90FAVT1MlIZVXfwVuCyg==} dev: true - /@types/better-sqlite3/7.6.0: - resolution: {integrity: sha512-rnSP9vY+fVsF3iJja5yRGBJV63PNBiezJlYrCkqUmQWFoB16cxAHwOkjsAYEu317miOfKaJpa65cbp0P4XJ/jw==} + /@types/better-sqlite3/7.6.3: + resolution: {integrity: sha512-YS64N9SNDT/NAvou3QNdzAu3E2om/W/0dhORimtPGLef+zSK5l1vDzfsWb4xgXOgfhtOI5ZDTRxnvRPb22AIVQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true /@types/chai-subset/1.3.3: @@ -1160,19 +1308,20 @@ packages: /@types/etag/1.8.1: resolution: {integrity: sha512-bsKkeSqN7HYyYntFRAmzcwx/dKW4Wa+KVMTInANlI72PWLQmOpZu96j0OqHZGArW4VQwCmJPteQlXaUDeOB0WQ==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true - /@types/fs-extra/9.0.13: - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} + /@types/fs-extra/11.0.1: + resolution: {integrity: sha512-MxObHvNl4A69ofaTRU8DFqvgzzv8s9yRtaPPm5gud9HDNvpB3GPQFvNuTWAI59B9huVGV5jXYJwbCsmBsOGYWA==} dependencies: - '@types/node': 17.0.31 + '@types/jsonfile': 6.1.1 + '@types/node': 18.11.18 dev: true /@types/http-proxy/1.17.9: resolution: {integrity: sha512-QsbSjA/fSk7xB+UXlCT3wHBy5ai9wOcNDWwZAtud+jXhwOM3l+EYZh8Lng4+/6n8uar0J7xILzqftJdJ/Wdfkw==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 dev: true /@types/istanbul-lib-coverage/2.0.4: @@ -1187,19 +1336,25 @@ packages: resolution: {integrity: sha512-dRLjCWHYg4oaA77cxO64oO+7JwCwnIzkZPdrrC71jQmQtlhM556pwKo5bUzqvZndkVbeFLIIi+9TC40JNF5hNQ==} dev: true - /@types/mime/1.3.2: - resolution: {integrity: sha512-YATxVxgRqNH6nHEIsvg6k2Boc1JHI9ZbH5iWFFv/MTkchz3b1ieGDa5T0a9RznNdI0KhVbdbWSN+KWWrQZRxTw==} + /@types/jsonfile/6.1.1: + resolution: {integrity: sha512-GSgiRCVeapDN+3pqA35IkQwasaCh/0YFH5dEF6S88iDvEn901DjOeH3/QPY+XYP1DFzDZPvIvfeEgk+7br5png==} + dependencies: + '@types/node': 18.11.18 + dev: true + + /@types/mime/3.0.1: + resolution: {integrity: sha512-Y4XFY5VJAuw0FgAqPNd6NNoV44jbq9Bz2L7Rh/J6jLTiHBSBJa9fxqQIvkIld4GsoDOcCbvzOUAbLPsSKKg+uA==} dev: true /@types/node-fetch/2.6.2: resolution: {integrity: sha512-DHqhlq5jeESLy19TYhLakJ07kNumXWjcDdxXsLUMJZ6ue8VZJj4kLPQVE/2mdHh3xZziNF1xppu5lwmS53HR+A==} dependencies: - '@types/node': 17.0.31 + '@types/node': 18.11.18 form-data: 3.0.1 dev: true - /@types/node/17.0.31: - resolution: {integrity: sha512-AR0x5HbXGqkEx9CadRH3EBYx/VkiUgZIhP4wvPn/+5KIsgpNoyFaRlVe0Zlx9gRtg8fA06a9tskE2MSN7TcG4Q==} + /@types/node/18.11.18: + resolution: {integrity: sha512-DHQpWGjyQKSHj3ebjFI/wRKcqQcdR+MoFBygntYOZytCqNfkd2ZC4ARDJ2DQqhjH5p85Nnd3jhUJIXrszFX/JA==} dev: true /@types/normalize-package-data/2.4.1: @@ -1216,16 +1371,16 @@ packages: /@types/serve-static/1.15.0: resolution: {integrity: sha512-z5xyF6uh8CbjAu9760KDKsH2FcDxZ2tFCsA4HIMWE6IkiYMXfVoa+4f9KX+FN0ZLsaMw1WNG2ETLA6N+/YA+cg==} dependencies: - '@types/mime': 1.3.2 - '@types/node': 17.0.31 + '@types/mime': 3.0.1 + '@types/node': 18.11.18 dev: true /@types/stack-trace/0.0.29: resolution: {integrity: sha512-TgfOX+mGY/NyNxJLIbDWrO9DjGoVSW9+aB8H2yy1fy32jsvxijhmyJI9fDFgvz3YP4lvJaq9DzdR/M1bOgVc9g==} dev: true - /@typescript-eslint/eslint-plugin/5.36.1_nfrwbcaoefngb5umesrjte6oqm: - resolution: {integrity: sha512-iC40UK8q1tMepSDwiLbTbMXKDxzNy+4TfPWgIL661Ym0sD42vRcQU93IsZIrmi+x292DBr60UI/gSwfdVYexCA==} + /@typescript-eslint/eslint-plugin/5.48.1_oomjohfipuyaxs2zyomcx4f5by: + resolution: {integrity: sha512-9nY5K1Rp2ppmpb9s9S2aBiF3xo5uExCehMDmYmmFqqyxgenbHJ3qbarcLt4ITgaD6r/2ypdlcFRdcuVPnks+fQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: '@typescript-eslint/parser': ^5.0.0 @@ -1235,14 +1390,14 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/parser': 5.36.1_iukboom6ndih5an6iafl45j2fe - '@typescript-eslint/scope-manager': 5.36.1 - '@typescript-eslint/type-utils': 5.36.1_iukboom6ndih5an6iafl45j2fe - '@typescript-eslint/utils': 5.36.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/parser': 5.48.1_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/scope-manager': 5.48.1 + '@typescript-eslint/type-utils': 5.48.1_7uibuqfxkfaozanbtbziikiqje + '@typescript-eslint/utils': 5.48.1_7uibuqfxkfaozanbtbziikiqje debug: 4.3.4 - eslint: 8.31.0 - functional-red-black-tree: 1.0.1 - ignore: 5.2.0 + eslint: 8.32.0 + ignore: 5.2.4 + natural-compare-lite: 1.4.0 regexpp: 3.2.0 semver: 7.3.8 tsutils: 3.21.0_typescript@4.9.4 @@ -1251,8 +1406,8 @@ packages: - supports-color dev: true - /@typescript-eslint/parser/5.36.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-/IsgNGOkBi7CuDfUbwt1eOqUXF9WGVBW9dwEe1pi+L32XrTsZIgmDFIi2RxjzsvB/8i+MIf5JIoTEH8LOZ368A==} + /@typescript-eslint/parser/5.48.1_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-4yg+FJR/V1M9Xoq56SF9Iygqm+r5LMXvheo6DQ7/yUWynQ4YfCRnsKuRgqH4EQ5Ya76rVwlEpw4Xu+TgWQUcdA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1261,26 +1416,26 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/scope-manager': 5.36.1 - '@typescript-eslint/types': 5.36.1 - '@typescript-eslint/typescript-estree': 5.36.1_typescript@4.9.4 + '@typescript-eslint/scope-manager': 5.48.1 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.32.0 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/scope-manager/5.36.1: - resolution: {integrity: sha512-pGC2SH3/tXdu9IH3ItoqciD3f3RRGCh7hb9zPdN2Drsr341zgd6VbhP5OHQO/reUqihNltfPpMpTNihFMarP2w==} + /@typescript-eslint/scope-manager/5.48.1: + resolution: {integrity: sha512-S035ueRrbxRMKvSTv9vJKIWgr86BD8s3RqoRZmsSh/s8HhIs90g6UlK8ZabUSjUZQkhVxt7nmZ63VJ9dcZhtDQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.36.1 - '@typescript-eslint/visitor-keys': 5.36.1 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/visitor-keys': 5.48.1 dev: true - /@typescript-eslint/type-utils/5.36.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-xfZhfmoQT6m3lmlqDvDzv9TiCYdw22cdj06xY0obSznBsT///GK5IEZQdGliXpAOaRL34o8phEvXzEo/VJx13Q==} + /@typescript-eslint/type-utils/5.48.1_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-Hyr8HU8Alcuva1ppmqSYtM/Gp0q4JOp1F+/JH5D1IZm/bUBrV0edoewQZiEc1r6I8L4JL21broddxK8HAcZiqQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: '*' @@ -1289,23 +1444,23 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/typescript-estree': 5.36.1_typescript@4.9.4 - '@typescript-eslint/utils': 5.36.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 + '@typescript-eslint/utils': 5.48.1_7uibuqfxkfaozanbtbziikiqje debug: 4.3.4 - eslint: 8.31.0 + eslint: 8.32.0 tsutils: 3.21.0_typescript@4.9.4 typescript: 4.9.4 transitivePeerDependencies: - supports-color dev: true - /@typescript-eslint/types/5.36.1: - resolution: {integrity: sha512-jd93ShpsIk1KgBTx9E+hCSEuLCUFwi9V/urhjOWnOaksGZFbTOxAT47OH2d4NLJnLhkVD+wDbB48BuaycZPLBg==} + /@typescript-eslint/types/5.48.1: + resolution: {integrity: sha512-xHyDLU6MSuEEdIlzrrAerCGS3T7AA/L8Hggd0RCYBi0w3JMvGYxlLlXHeg50JI9Tfg5MrtsfuNxbS/3zF1/ATg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /@typescript-eslint/typescript-estree/5.36.1_typescript@4.9.4: - resolution: {integrity: sha512-ih7V52zvHdiX6WcPjsOdmADhYMDN15SylWRZrT2OMy80wzKbc79n8wFW0xpWpU0x3VpBz/oDgTm2xwDAnFTl+g==} + /@typescript-eslint/typescript-estree/5.48.1_typescript@4.9.4: + resolution: {integrity: sha512-Hut+Osk5FYr+sgFh8J/FHjqX6HFcDzTlWLrFqGoK5kVUN3VBHF/QzZmAsIXCQ8T/W9nQNBTqalxi1P3LSqWnRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: typescript: '*' @@ -1313,8 +1468,8 @@ packages: typescript: optional: true dependencies: - '@typescript-eslint/types': 5.36.1 - '@typescript-eslint/visitor-keys': 5.36.1 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/visitor-keys': 5.48.1 debug: 4.3.4 globby: 11.1.0 is-glob: 4.0.3 @@ -1325,29 +1480,31 @@ packages: - supports-color dev: true - /@typescript-eslint/utils/5.36.1_iukboom6ndih5an6iafl45j2fe: - resolution: {integrity: sha512-lNj4FtTiXm5c+u0pUehozaUWhh7UYKnwryku0nxJlYUEWetyG92uw2pr+2Iy4M/u0ONMKzfrx7AsGBTCzORmIg==} + /@typescript-eslint/utils/5.48.1_7uibuqfxkfaozanbtbziikiqje: + resolution: {integrity: sha512-SmQuSrCGUOdmGMwivW14Z0Lj8dxG1mOFZ7soeJ0TQZEJcs3n5Ndgkg0A4bcMFzBELqLJ6GTHnEU+iIoaD6hFGA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 dependencies: '@types/json-schema': 7.0.11 - '@typescript-eslint/scope-manager': 5.36.1 - '@typescript-eslint/types': 5.36.1 - '@typescript-eslint/typescript-estree': 5.36.1_typescript@4.9.4 - eslint: 8.31.0 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.48.1 + '@typescript-eslint/types': 5.48.1 + '@typescript-eslint/typescript-estree': 5.48.1_typescript@4.9.4 + eslint: 8.32.0 eslint-scope: 5.1.1 - eslint-utils: 3.0.0_eslint@8.31.0 + eslint-utils: 3.0.0_eslint@8.32.0 + semver: 7.3.8 transitivePeerDependencies: - supports-color - typescript dev: true - /@typescript-eslint/visitor-keys/5.36.1: - resolution: {integrity: sha512-ojB9aRyRFzVMN3b5joSYni6FAS10BBSCAfKJhjJAV08t/a95aM6tAhz+O1jF+EtgxktuSO3wJysp2R+Def/IWQ==} + /@typescript-eslint/visitor-keys/5.48.1: + resolution: {integrity: sha512-Ns0XBwmfuX7ZknznfXozgnydyR8F6ev/KEGePP4i74uL3ArsKbEhJ7raeKr1JSa997DBDwol/4a0Y+At82c9dA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: - '@typescript-eslint/types': 5.36.1 + '@typescript-eslint/types': 5.48.1 eslint-visitor-keys: 3.3.0 dev: true @@ -1356,27 +1513,27 @@ packages: engines: {node: '>=14'} hasBin: true dependencies: - '@mapbox/node-pre-gyp': 1.0.9 + '@mapbox/node-pre-gyp': 1.0.10 '@rollup/pluginutils': 4.2.1 acorn: 8.8.1 async-sema: 3.1.1 bindings: 1.5.0 estree-walker: 2.0.2 - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 micromatch: 4.0.5 - node-gyp-build: 4.4.0 + node-gyp-build: 4.6.0 resolve-from: 5.0.0 transitivePeerDependencies: - encoding - supports-color dev: false - /@vitest/coverage-c8/0.26.3: - resolution: {integrity: sha512-sjmVYPozajWY2DawzuvhYX6hEe/LD6p2xv9VmPvh1zzDeNNVCAnyLcvXoaSMQD522x9bqciuyPrlrnh2iNkE/w==} + /@vitest/coverage-c8/0.27.1: + resolution: {integrity: sha512-/9VTGDIAp4hv8PBawfyijxhkiyucfOxFRRP+7kzy3Dj0wONy1Mc2MBoPmiH4aZVc0LViQqecrQLs8JVGt42keA==} dependencies: c8: 7.12.0 - vitest: 0.26.3 + vitest: 0.27.1 transitivePeerDependencies: - '@edge-runtime/vm' - '@vitest/browser' @@ -1386,6 +1543,7 @@ packages: - less - sass - stylus + - sugarss - supports-color - terser dev: true @@ -1447,8 +1605,8 @@ packages: dependencies: color-convert: 2.0.1 - /anymatch/3.1.2: - resolution: {integrity: sha512-P43ePfOAIupkguHUycrc4qJ9kz8ZiuOUijaETwX7THt0Y/GNK7v0aa8rY816xWjZ7rJdA5XdMcpVFTKMq+RvWg==} + /anymatch/3.1.3: + resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} dependencies: normalize-path: 3.0.0 @@ -1467,7 +1625,7 @@ packages: resolution: {integrity: sha512-bEL/yUb/fNNiNTuUz979Z0Yg5L+LzLxGJz8x79lYmR54fmTIb6ob/hNQgkQnIUDWIFjZVQwl9Xs356I6BAMHfw==} engines: {node: '>= 6'} dependencies: - glob: 7.2.0 + glob: 7.2.3 graceful-fs: 4.2.10 lazystream: 1.0.1 lodash.defaults: 4.2.0 @@ -1484,10 +1642,10 @@ packages: engines: {node: '>= 10'} dependencies: archiver-utils: 2.1.0 - async: 3.2.3 + async: 3.2.4 buffer-crc32: 0.2.13 readable-stream: 3.6.0 - readdir-glob: 1.1.1 + readdir-glob: 1.1.2 tar-stream: 2.2.0 zip-stream: 4.1.0 dev: false @@ -1504,14 +1662,14 @@ packages: resolution: {integrity: sha512-8+9WqebbFzpX9OR+Wa6O29asIogeRMzcGtAINdpMHHyAg10f05aSFVBbcEqGf/PXw1EjAZ+q2/bEBg3DvurK3Q==} dev: true - /array-includes/3.1.5: - resolution: {integrity: sha512-iSDYZMMyTPkiFasVqfuAQnWAYcvO/SeBSCGKePoEthjp4LEMTe4uLc7b025o4jAZpHhihh8xPo99TNWUWWkGDQ==} + /array-includes/3.1.6: + resolution: {integrity: sha512-sgTbLvL6cNnw24FnbaDyjmvddQ2ML8arZsgaJhoABMoplz/4QRhtrYS+alr1BUM1Bwp6dhx8vVCBSLG+StwOFw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.19.5 - get-intrinsic: 1.1.1 + es-abstract: 1.21.1 + get-intrinsic: 1.1.3 is-string: 1.0.7 dev: true @@ -1520,13 +1678,23 @@ packages: engines: {node: '>=8'} dev: true - /array.prototype.flat/1.3.0: - resolution: {integrity: sha512-12IUEkHsAhA4DY5s0FPgNXIdc8VRSqD9Zp78a5au9abH/SOBrsp082JOWFNTjkMozh8mqcdiKuaLGhPeYztxSw==} + /array.prototype.flat/1.3.1: + resolution: {integrity: sha512-roTU0KWIOmJ4DRLmwKd19Otg0/mT3qPNt0Qb3GWW8iObuZXxrjB/pzn0R3hqpRSWg4HCwqx+0vwOnWnvlOyeIA==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.19.5 + es-abstract: 1.21.1 + es-shim-unscopables: 1.0.0 + dev: true + + /array.prototype.flatmap/1.3.1: + resolution: {integrity: sha512-8UGn9O1FDVvMNB0UlLv4voxRMze7+FpHyF5mSMRjWHUMlpoDViniy05870VlxhfgTnLbpuwTzvD76MTtWxB/mQ==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 es-shim-unscopables: 1.0.0 dev: true @@ -1538,14 +1706,19 @@ packages: resolution: {integrity: sha512-tLRNUXati5MFePdAk8dw7Qt7DpxPB60ofAgn8WRhW6a2rcimZnYBP9oxHiv0OHy+Wz7kPMG+t4LGdt31+4EmGg==} dev: false - /async/3.2.3: - resolution: {integrity: sha512-spZRyzKL5l5BZQrr/6m/SqFdBN0q3OCI0f9rjfBzCMBIP4p75P620rR3gTmaksNOhmzgdxcaxdNfMy6anrbM0g==} + /async/3.2.4: + resolution: {integrity: sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ==} dev: false /asynckit/0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} dev: true + /available-typed-arrays/1.0.5: + resolution: {integrity: sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw==} + engines: {node: '>= 0.4'} + dev: true + /balanced-match/1.0.2: resolution: {integrity: sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==} @@ -1589,19 +1762,19 @@ packages: dependencies: fill-range: 7.0.1 - /browserslist/4.21.3: - resolution: {integrity: sha512-898rgRXLAyRkM1GryrrBHGkqA5hlpkV5MhtZwg9QXeiyLUYs2k00Un05aX5l2/yJIOObYKOpS2JNo8nJDE7fWQ==} + /browserslist/4.21.4: + resolution: {integrity: sha512-CBHJJdDmgjl3daYjN5Cp5kbTf1mUhZoS+beLklHIvkOWscs83YAhLlF3Wsh/lciQYAcbBJgTOD44VtG31ZM4Hw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true dependencies: - caniuse-lite: 1.0.30001375 - electron-to-chromium: 1.4.213 - node-releases: 2.0.6 - update-browserslist-db: 1.0.5_browserslist@4.21.3 + caniuse-lite: 1.0.30001444 + electron-to-chromium: 1.4.284 + node-releases: 2.0.8 + update-browserslist-db: 1.0.10_browserslist@4.21.4 dev: true /buffer-crc32/0.2.13: - resolution: {integrity: sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=} + resolution: {integrity: sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ==} dev: false /buffer-from/1.1.2: @@ -1635,13 +1808,13 @@ packages: resolution: {integrity: sha512-wJL0/knDbqM/3moLb+8Xd+w3JdkggkIIhiNBkxZ1mWlskKC/vajb85wM3UPg/D9nK6RbI1NgaVTg6AeXBVbknA==} dependencies: defu: 6.1.1 - dotenv: 16.0.2 + dotenv: 16.0.3 gittar: 0.1.1 - jiti: 1.16.1 + jiti: 1.16.2 mlly: 0.5.17 pathe: 0.3.9 pkg-types: 0.3.6 - rc9: 1.2.2 + rc9: 1.2.4 dev: true /c12/1.1.0: @@ -1650,8 +1823,8 @@ packages: defu: 6.1.1 dotenv: 16.0.3 giget: 1.0.0 - jiti: 1.16.1 - mlly: 1.0.0 + jiti: 1.16.2 + mlly: 1.1.0 pathe: 1.0.0 pkg-types: 1.0.1 rc9: 2.0.0 @@ -1670,19 +1843,24 @@ packages: foreground-child: 2.0.0 istanbul-lib-coverage: 3.2.0 istanbul-lib-report: 3.0.0 - istanbul-reports: 3.1.4 + istanbul-reports: 3.1.5 rimraf: 3.0.2 test-exclude: 6.0.0 - v8-to-istanbul: 9.0.0 + v8-to-istanbul: 9.0.1 yargs: 16.2.0 yargs-parser: 20.2.9 dev: true + /cac/6.7.14: + resolution: {integrity: sha512-b6Ilus+c3RrdDk+JhLKUAQfzzgLEPy6wcXqS7f/xe1EETvsDP6GORG7SFuOs6cID5YkqchW/LXZbX5bc8j7ZcQ==} + engines: {node: '>=8'} + dev: true + /call-bind/1.0.2: resolution: {integrity: sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA==} dependencies: function-bind: 1.1.1 - get-intrinsic: 1.1.1 + get-intrinsic: 1.1.3 dev: true /callsites/3.1.0: @@ -1690,8 +1868,8 @@ packages: engines: {node: '>=6'} dev: true - /caniuse-lite/1.0.30001375: - resolution: {integrity: sha512-kWIMkNzLYxSvnjy0hL8w1NOaWNr2rn39RTAVyIwcw8juu60bZDWiF1/loOYANzjtJmy6qPgNmn38ro5Pygagdw==} + /caniuse-lite/1.0.30001444: + resolution: {integrity: sha512-ecER9xgJQVMqcrxThKptsW0pPxSae8R2RB87LNa+ivW9ppNWRHEplXcDzkCOP4LYWGj8hunXLqaiC41iBATNyg==} dev: true /chai/4.3.7: @@ -1702,7 +1880,7 @@ packages: check-error: 1.0.2 deep-eql: 4.1.3 get-func-name: 2.0.0 - loupe: 2.3.4 + loupe: 2.3.6 pathval: 1.1.1 type-detect: 4.0.8 dev: true @@ -1751,7 +1929,7 @@ packages: resolution: {integrity: sha512-Dr3sfKRP6oTcjf2JmUmFJfeVMvXBdegxB0iVQ5eb2V10uFJUCAS8OByZdVAyVb8xXNz3GjjTgj9kLWsZTqE6kw==} engines: {node: '>= 8.10.0'} dependencies: - anymatch: 3.1.2 + anymatch: 3.1.3 braces: 3.0.2 glob-parent: 5.1.2 is-binary-path: 2.1.0 @@ -1771,8 +1949,9 @@ packages: engines: {node: '>=10'} dev: false - /ci-info/3.3.2: - resolution: {integrity: sha512-xmDt/QIAdeZ9+nfdPsaBCpMvHNLFiLdjj59qjqn+6iPe6YmHGQ35sBnQ8uslRBXFmXkiZQOJRjvQeoGppoTjjg==} + /ci-info/3.7.1: + resolution: {integrity: sha512-4jYS4MOAaCIStSRwiuxc4B8MYhIe676yO1sYGzARnjXkWpmzZMMYxY6zu8WYWDhSuth5zhrQ1rhNSibyyvv4/w==} + engines: {node: '>=8'} dev: true /clean-regexp/1.0.0: @@ -1797,9 +1976,19 @@ packages: string-width: 4.2.3 strip-ansi: 6.0.1 wrap-ansi: 7.0.0 + dev: true - /cluster-key-slot/1.1.0: - resolution: {integrity: sha512-2Nii8p3RwAPiFwsnZvukotvow2rIHM+yQ6ZcBXGHdniadkYGZYiGmkHJIbZPIV9nfv7m/U1IPMVVcAhoWFeklw==} + /cliui/8.0.1: + resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} + engines: {node: '>=12'} + dependencies: + string-width: 4.2.3 + strip-ansi: 6.0.1 + wrap-ansi: 7.0.0 + dev: false + + /cluster-key-slot/1.1.2: + resolution: {integrity: sha512-RMr0FhtfXemyinomL4hrWcYJxmX6deFdCxpJzhDttxgO1+bcCnkk+9drydLVDmAMG7NE6aN/fl4F7ucU/90gAA==} engines: {node: '>=0.10.0'} dev: false @@ -1874,10 +2063,8 @@ packages: engines: {node: '>=8'} dev: true - /convert-source-map/1.8.0: - resolution: {integrity: sha512-+OQdjP49zViI/6i7nIJpA8rAl4sV/JdPfU9nZs3VqOwGIgizICvuN2ru6fMd+4llL0tar18UYJXfZ/TWtmhUjA==} - dependencies: - safe-buffer: 5.1.2 + /convert-source-map/1.9.0: + resolution: {integrity: sha512-ASFBup0Mz1uyiIjANan1jzLQami9z1PoYSZCiiYW2FczPbenXc45FZdBZLzOT+r6+iciuEModtmCti+hjaAk0A==} dev: true /cookie-es/0.5.0: @@ -1928,6 +2115,7 @@ packages: optional: true dependencies: ms: 2.0.0 + dev: false /debug/3.2.7: resolution: {integrity: sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==} @@ -1990,8 +2178,8 @@ packages: resolution: {integrity: sha512-bd2L678uiWATM6m5Z1VzNCErI3jiGzt6HGY8OVICs40JQq/HALfbyNJmp0UDakEY4pMMaN0Ly5om/B1VI/+xfQ==} dev: false - /denque/2.0.1: - resolution: {integrity: sha512-tfiWc6BQLXNLpNiR5iGd0Ocu3P3VpxfzFiqubLgMfhfOw9WyvgJBd46CClNn9k3qfbjvT//0cf7AlYRX/OslMQ==} + /denque/2.1.0: + resolution: {integrity: sha512-HVQE3AAb/pxF8fQAoiqpvg9i3evqug3hoiwakOyZAwJm+6vZehbkYXZ0l4JxS+I3QxM97v5aaRNhj8v5oBhekw==} engines: {node: '>=0.10'} dev: false @@ -2037,7 +2225,7 @@ packages: resolution: {integrity: sha512-Ol/IPXUARn9CSbkrdV4VJo7uCy1I3VuSiWCaFSg+8BdUOzF9n3jefIpcgAydvUZbTdEBZs2vEiTiS9m61ssiDA==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dependencies: - type-fest: 2.12.2 + type-fest: 2.19.0 dev: false /dotenv/10.0.0: @@ -2045,15 +2233,9 @@ packages: engines: {node: '>=10'} dev: true - /dotenv/16.0.2: - resolution: {integrity: sha512-JvpYKUmzQhYoIFgK2MOnF3bciIZoItIIoryihy0rIA+H4Jy0FmgyKYAHCTN98P5ybGSJcIFbh6QKeJdtZd1qhA==} - engines: {node: '>=12'} - dev: true - /dotenv/16.0.3: resolution: {integrity: sha512-7GO6HghkA5fYG9TYnNxi14/7K9f5occMlp3zXAuSxn7CKCxt9xbNWG7yF8hTCSUchlfWSe3uLmlPfigevRItzQ==} engines: {node: '>=12'} - dev: false /duplexer/0.1.2: resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} @@ -2075,18 +2257,18 @@ packages: dev: true /ee-first/1.1.1: - resolution: {integrity: sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=} + resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} dev: false - /electron-to-chromium/1.4.213: - resolution: {integrity: sha512-+3DbGHGOCHTVB/Ms63bGqbyC1b8y7Fk86+7ltssB8NQrZtSCvZG6eooSl9U2Q0yw++fL2DpHKOdTU0NVEkFObg==} + /electron-to-chromium/1.4.284: + resolution: {integrity: sha512-M8WEXFuKXMYMVr45fo8mq0wUrrJHheiKZf6BArTKk9ZBYCKJEOU5H8cdWgDT+qCVZf7Na4lVUaZsA+h6uA9+PA==} dev: true /emoji-regex/8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} /encodeurl/1.0.2: - resolution: {integrity: sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k=} + resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} dev: false @@ -2096,8 +2278,8 @@ packages: once: 1.4.0 dev: false - /enhanced-resolve/5.10.0: - resolution: {integrity: sha512-T0yTFjdpldGY8PmuXXR0PyQ1ufZpEGiHVrp7zHKB7jdR4qlmZHhONVM5AQOAWXuF/w3dnHbEQVrNptJgt7F+cQ==} + /enhanced-resolve/5.12.0: + resolution: {integrity: sha512-QHTXI/sZQmko1cbDoNAa3mJ5qhWUUNAq3vR0/YiD379fWQrcfuoX1+HW2S0MTt7XmoPLapdaDKUtelUSPic7hQ==} engines: {node: '>=10.13.0'} dependencies: graceful-fs: 4.2.10 @@ -2110,30 +2292,52 @@ packages: is-arrayish: 0.2.1 dev: true - /es-abstract/1.19.5: - resolution: {integrity: sha512-Aa2G2+Rd3b6kxEUKTF4TaW67czBLyAv3z7VOhYRU50YBx+bbsYZ9xQP4lMNazePuFlybXI0V4MruPos7qUo5fA==} + /es-abstract/1.21.1: + resolution: {integrity: sha512-QudMsPOz86xYz/1dG1OuGBKOELjCh99IIWHLzy5znUB6j8xG2yMA7bfTV86VSqKF+Y/H08vQPR+9jyXpuC6hfg==} engines: {node: '>= 0.4'} dependencies: + available-typed-arrays: 1.0.5 call-bind: 1.0.2 + es-set-tostringtag: 2.0.1 es-to-primitive: 1.2.1 function-bind: 1.1.1 - get-intrinsic: 1.1.1 + function.prototype.name: 1.1.5 + get-intrinsic: 1.1.3 get-symbol-description: 1.0.0 + globalthis: 1.0.3 + gopd: 1.0.1 has: 1.0.3 + has-property-descriptors: 1.0.0 + has-proto: 1.0.1 has-symbols: 1.0.3 - internal-slot: 1.0.3 - is-callable: 1.2.4 + internal-slot: 1.0.4 + is-array-buffer: 3.0.1 + 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.10 is-weakref: 1.0.2 - object-inspect: 1.12.0 + object-inspect: 1.12.3 object-keys: 1.1.1 - object.assign: 4.1.2 - string.prototype.trimend: 1.0.5 - string.prototype.trimstart: 1.0.5 + object.assign: 4.1.4 + regexp.prototype.flags: 1.4.3 + safe-regex-test: 1.0.0 + string.prototype.trimend: 1.0.6 + string.prototype.trimstart: 1.0.6 + typed-array-length: 1.0.4 unbox-primitive: 1.0.2 + which-typed-array: 1.1.9 + dev: true + + /es-set-tostringtag/2.0.1: + resolution: {integrity: sha512-g3OMbtlwY3QewlqAiMLI47KywjWZoEytKr8pf6iTC8uJq5bIAH52Z9pnQ8pVL6whrCto53JZDuUIsifGeLorTg==} + engines: {node: '>= 0.4'} + dependencies: + get-intrinsic: 1.1.3 + has: 1.0.3 + has-tostringtag: 1.0.0 dev: true /es-shim-unscopables/1.0.0: @@ -2146,249 +2350,69 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} dependencies: - is-callable: 1.2.4 + is-callable: 1.2.7 is-date-object: 1.0.5 is-symbol: 1.0.4 dev: true - /esbuild-android-64/0.15.18: - resolution: {integrity: sha512-wnpt3OXRhcjfIDSZu9bnzT4/TNTDsOUvip0foZOUBG7QbSt//w3QV4FInVJxNhKc/ErhUxc5z4QjHtMi7/TbgA==} - engines: {node: '>=12'} - cpu: [x64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-android-arm64/0.15.18: - resolution: {integrity: sha512-G4xu89B8FCzav9XU8EjsXacCKSG2FT7wW9J6hOc18soEHJdtWu03L3TQDGf0geNxfLTtxENKBzMSq9LlbjS8OQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [android] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-64/0.15.18: - resolution: {integrity: sha512-2WAvs95uPnVJPuYKP0Eqx+Dl/jaYseZEUUT1sjg97TJa4oBtbAKnPnl3b5M9l51/nbx7+QAEtuummJZW0sBEmg==} - engines: {node: '>=12'} - cpu: [x64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-darwin-arm64/0.15.18: - resolution: {integrity: sha512-tKPSxcTJ5OmNb1btVikATJ8NftlyNlc8BVNtyT/UAr62JFOhwHlnoPrhYWz09akBLHI9nElFVfWSTSRsrZiDUA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [darwin] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-64/0.15.18: - resolution: {integrity: sha512-TT3uBUxkteAjR1QbsmvSsjpKjOX6UkCstr8nMr+q7zi3NuZ1oIpa8U41Y8I8dJH2fJgdC3Dj3CXO5biLQpfdZA==} - engines: {node: '>=12'} - cpu: [x64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-freebsd-arm64/0.15.18: - resolution: {integrity: sha512-R/oVr+X3Tkh+S0+tL41wRMbdWtpWB8hEAMsOXDumSSa6qJR89U0S/PpLXrGF7Wk/JykfpWNokERUpCeHDl47wA==} - engines: {node: '>=12'} - cpu: [arm64] - os: [freebsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-32/0.15.18: - resolution: {integrity: sha512-lphF3HiCSYtaa9p1DtXndiQEeQDKPl9eN/XNoBf2amEghugNuqXNZA/ZovthNE2aa4EN43WroO0B85xVSjYkbg==} - engines: {node: '>=12'} - cpu: [ia32] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-64/0.15.18: - resolution: {integrity: sha512-hNSeP97IviD7oxLKFuii5sDPJ+QHeiFTFLoLm7NZQligur8poNOWGIgpQ7Qf8Balb69hptMZzyOBIPtY09GZYw==} - engines: {node: '>=12'} - cpu: [x64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm/0.15.18: - resolution: {integrity: sha512-UH779gstRblS4aoS2qpMl3wjg7U0j+ygu3GjIeTonCcN79ZvpPee12Qun3vcdxX+37O5LFxz39XeW2I9bybMVA==} - engines: {node: '>=12'} - cpu: [arm] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-arm64/0.15.18: - resolution: {integrity: sha512-54qr8kg/6ilcxd+0V3h9rjT4qmjc0CccMVWrjOEM/pEcUzt8X62HfBSeZfT2ECpM7104mk4yfQXkosY8Quptug==} - engines: {node: '>=12'} - cpu: [arm64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-mips64le/0.15.18: - resolution: {integrity: sha512-Mk6Ppwzzz3YbMl/ZZL2P0q1tnYqh/trYZ1VfNP47C31yT0K8t9s7Z077QrDA/guU60tGNp2GOwCQnp+DYv7bxQ==} - engines: {node: '>=12'} - cpu: [mips64el] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-ppc64le/0.15.18: - resolution: {integrity: sha512-b0XkN4pL9WUulPTa/VKHx2wLCgvIAbgwABGnKMY19WhKZPT+8BxhZdqz6EgkqCLld7X5qiCY2F/bfpUUlnFZ9w==} - engines: {node: '>=12'} - cpu: [ppc64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-riscv64/0.15.18: - resolution: {integrity: sha512-ba2COaoF5wL6VLZWn04k+ACZjZ6NYniMSQStodFKH/Pu6RxzQqzsmjR1t9QC89VYJxBeyVPTaHuBMCejl3O/xg==} - engines: {node: '>=12'} - cpu: [riscv64] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-linux-s390x/0.15.18: - resolution: {integrity: sha512-VbpGuXEl5FCs1wDVp93O8UIzl3ZrglgnSQ+Hu79g7hZu6te6/YHgVJxCM2SqfIila0J3k0csfnf8VD2W7u2kzQ==} - engines: {node: '>=12'} - cpu: [s390x] - os: [linux] - requiresBuild: true - dev: true - optional: true - - /esbuild-netbsd-64/0.15.18: - resolution: {integrity: sha512-98ukeCdvdX7wr1vUYQzKo4kQ0N2p27H7I11maINv73fVEXt2kyh4K4m9f35U1K43Xc2QGXlzAw0K9yoU7JUjOg==} - engines: {node: '>=12'} - cpu: [x64] - os: [netbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-openbsd-64/0.15.18: - resolution: {integrity: sha512-yK5NCcH31Uae076AyQAXeJzt/vxIo9+omZRKj1pauhk3ITuADzuOx5N2fdHrAKPxN+zH3w96uFKlY7yIn490xQ==} - engines: {node: '>=12'} - cpu: [x64] - os: [openbsd] - requiresBuild: true - dev: true - optional: true - - /esbuild-sunos-64/0.15.18: - resolution: {integrity: sha512-On22LLFlBeLNj/YF3FT+cXcyKPEI263nflYlAhz5crxtp3yRG1Ugfr7ITyxmCmjm4vbN/dGrb/B7w7U8yJR9yw==} - engines: {node: '>=12'} - cpu: [x64] - os: [sunos] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-32/0.15.18: - resolution: {integrity: sha512-o+eyLu2MjVny/nt+E0uPnBxYuJHBvho8vWsC2lV61A7wwTWC3jkN2w36jtA+yv1UgYkHRihPuQsL23hsCYGcOQ==} - engines: {node: '>=12'} - cpu: [ia32] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-64/0.15.18: - resolution: {integrity: sha512-qinug1iTTaIIrCorAUjR0fcBk24fjzEedFYhhispP8Oc7SFvs+XeW3YpAKiKp8dRpizl4YYAhxMjlftAMJiaUw==} - engines: {node: '>=12'} - cpu: [x64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild-windows-arm64/0.15.18: - resolution: {integrity: sha512-q9bsYzegpZcLziq0zgUi5KqGVtfhjxGbnksaBFYmWLxeV/S1fK4OLdq2DFYnXcLMjlZw2L0jLsk1eGoB522WXQ==} - engines: {node: '>=12'} - cpu: [arm64] - os: [win32] - requiresBuild: true - dev: true - optional: true - - /esbuild/0.15.18: - resolution: {integrity: sha512-x/R72SmW3sSFRm5zrrIjAhCeQSAWoni3CmHEqfQrZIQTM3lVCdehdwuIqaOtfC2slvpdlLa62GYoN8SxT23m6Q==} + /esbuild/0.16.17: + resolution: {integrity: sha512-G8LEkV0XzDMNwXKgM0Jwu3nY3lSTwSGY6XbxM9cr9+s0T/qSV1q1JVPBGzm3dcjhCic9+emZDmMffkwgPeOeLg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.15.18 - '@esbuild/linux-loong64': 0.15.18 - esbuild-android-64: 0.15.18 - esbuild-android-arm64: 0.15.18 - esbuild-darwin-64: 0.15.18 - esbuild-darwin-arm64: 0.15.18 - esbuild-freebsd-64: 0.15.18 - esbuild-freebsd-arm64: 0.15.18 - esbuild-linux-32: 0.15.18 - esbuild-linux-64: 0.15.18 - esbuild-linux-arm: 0.15.18 - esbuild-linux-arm64: 0.15.18 - esbuild-linux-mips64le: 0.15.18 - esbuild-linux-ppc64le: 0.15.18 - esbuild-linux-riscv64: 0.15.18 - esbuild-linux-s390x: 0.15.18 - esbuild-netbsd-64: 0.15.18 - esbuild-openbsd-64: 0.15.18 - esbuild-sunos-64: 0.15.18 - esbuild-windows-32: 0.15.18 - esbuild-windows-64: 0.15.18 - esbuild-windows-arm64: 0.15.18 - dev: true - - /esbuild/0.16.14: - resolution: {integrity: sha512-6xAn3O6ZZyoxZAEkwfI9hw4cEqSr/o1ViJtnkvImVkblmUN65Md04o0S/7H1WNu1XGf1Cjij/on7VO4psIYjkw==} + '@esbuild/android-arm': 0.16.17 + '@esbuild/android-arm64': 0.16.17 + '@esbuild/android-x64': 0.16.17 + '@esbuild/darwin-arm64': 0.16.17 + '@esbuild/darwin-x64': 0.16.17 + '@esbuild/freebsd-arm64': 0.16.17 + '@esbuild/freebsd-x64': 0.16.17 + '@esbuild/linux-arm': 0.16.17 + '@esbuild/linux-arm64': 0.16.17 + '@esbuild/linux-ia32': 0.16.17 + '@esbuild/linux-loong64': 0.16.17 + '@esbuild/linux-mips64el': 0.16.17 + '@esbuild/linux-ppc64': 0.16.17 + '@esbuild/linux-riscv64': 0.16.17 + '@esbuild/linux-s390x': 0.16.17 + '@esbuild/linux-x64': 0.16.17 + '@esbuild/netbsd-x64': 0.16.17 + '@esbuild/openbsd-x64': 0.16.17 + '@esbuild/sunos-x64': 0.16.17 + '@esbuild/win32-arm64': 0.16.17 + '@esbuild/win32-ia32': 0.16.17 + '@esbuild/win32-x64': 0.16.17 + dev: true + + /esbuild/0.17.0: + resolution: {integrity: sha512-4yGk3rD95iS/wGzrx0Ji5czZcx1j2wvfF1iAJaX2FIYLB6sU6wYkDeplpZHzfwQw2yXGXsAoxmO6LnMQkl04Kg==} engines: {node: '>=12'} hasBin: true requiresBuild: true optionalDependencies: - '@esbuild/android-arm': 0.16.14 - '@esbuild/android-arm64': 0.16.14 - '@esbuild/android-x64': 0.16.14 - '@esbuild/darwin-arm64': 0.16.14 - '@esbuild/darwin-x64': 0.16.14 - '@esbuild/freebsd-arm64': 0.16.14 - '@esbuild/freebsd-x64': 0.16.14 - '@esbuild/linux-arm': 0.16.14 - '@esbuild/linux-arm64': 0.16.14 - '@esbuild/linux-ia32': 0.16.14 - '@esbuild/linux-loong64': 0.16.14 - '@esbuild/linux-mips64el': 0.16.14 - '@esbuild/linux-ppc64': 0.16.14 - '@esbuild/linux-riscv64': 0.16.14 - '@esbuild/linux-s390x': 0.16.14 - '@esbuild/linux-x64': 0.16.14 - '@esbuild/netbsd-x64': 0.16.14 - '@esbuild/openbsd-x64': 0.16.14 - '@esbuild/sunos-x64': 0.16.14 - '@esbuild/win32-arm64': 0.16.14 - '@esbuild/win32-ia32': 0.16.14 - '@esbuild/win32-x64': 0.16.14 + '@esbuild/android-arm': 0.17.0 + '@esbuild/android-arm64': 0.17.0 + '@esbuild/android-x64': 0.17.0 + '@esbuild/darwin-arm64': 0.17.0 + '@esbuild/darwin-x64': 0.17.0 + '@esbuild/freebsd-arm64': 0.17.0 + '@esbuild/freebsd-x64': 0.17.0 + '@esbuild/linux-arm': 0.17.0 + '@esbuild/linux-arm64': 0.17.0 + '@esbuild/linux-ia32': 0.17.0 + '@esbuild/linux-loong64': 0.17.0 + '@esbuild/linux-mips64el': 0.17.0 + '@esbuild/linux-ppc64': 0.17.0 + '@esbuild/linux-riscv64': 0.17.0 + '@esbuild/linux-s390x': 0.17.0 + '@esbuild/linux-x64': 0.17.0 + '@esbuild/netbsd-x64': 0.17.0 + '@esbuild/openbsd-x64': 0.17.0 + '@esbuild/sunos-x64': 0.17.0 + '@esbuild/win32-arm64': 0.17.0 + '@esbuild/win32-ia32': 0.17.0 + '@esbuild/win32-x64': 0.17.0 dev: false /escalade/3.1.1: @@ -2396,7 +2420,7 @@ packages: engines: {node: '>=6'} /escape-html/1.0.3: - resolution: {integrity: sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=} + resolution: {integrity: sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==} dev: false /escape-string-regexp/1.0.5: @@ -2414,16 +2438,16 @@ packages: engines: {node: '>=12'} dev: false - /eslint-config-prettier/8.5.0_eslint@8.31.0: - resolution: {integrity: sha512-obmWKLUNCnhtQRKc+tmnYuQl0pFU1ibYJQ5BGhTVB08bHe9wC8qUeG7c08dj9XX+AuPj1YSGSQIHl1pnDHZR0Q==} + /eslint-config-prettier/8.6.0_eslint@8.32.0: + resolution: {integrity: sha512-bAF0eLpLVqP5oEVUFKpMA+NnRFICwn9X8B5jrR9FcqnYBuPbqWEjTEspPWMj5ye6czoSLDweCzSo3Ko7gGrZaA==} hasBin: true peerDependencies: eslint: '>=7.0.0' dependencies: - eslint: 8.31.0 + eslint: 8.32.0 dev: true - /eslint-config-standard/17.0.0_2yckyfxpkmvl2u5nbasjngys7e: + /eslint-config-standard/17.0.0_knjsdjla7zq4pr5eqowrnedrcm: resolution: {integrity: sha512-/2ks1GKyqSOkH7JFvXJicu0iMpoojkwB+f5Du/1SC0PtBL+s8v30k9njRZ21pm2drKYm2342jFnGWzttxPmZVg==} peerDependencies: eslint: ^8.0.1 @@ -2431,75 +2455,79 @@ packages: eslint-plugin-n: ^15.0.0 eslint-plugin-promise: ^6.0.0 dependencies: - eslint: 8.31.0 - eslint-plugin-import: 2.26.0_ze7uy3qvleeqk4lwyk7ly5viwa - eslint-plugin-n: 15.2.5_eslint@8.31.0 - eslint-plugin-promise: 6.0.1_eslint@8.31.0 + eslint: 8.32.0 + eslint-plugin-import: 2.27.4_26i2w5mui4ucix7iyirx6fcd3i + eslint-plugin-n: 15.6.1_eslint@8.32.0 + eslint-plugin-promise: 6.1.1_eslint@8.32.0 dev: true - /eslint-config-unjs/0.0.3_iukboom6ndih5an6iafl45j2fe: + /eslint-config-unjs/0.0.3_7uibuqfxkfaozanbtbziikiqje: resolution: {integrity: sha512-kL3QJ4uY+oFQu285J3Z1OUuZj9Ou2dAtzXd8d1UdUh6iA4iB+4yiUxPl/tDEEoGrCzu/w+gn4E8gbx3pP5T9KA==} peerDependencies: eslint: '*' typescript: '*' dependencies: - '@typescript-eslint/eslint-plugin': 5.36.1_nfrwbcaoefngb5umesrjte6oqm - '@typescript-eslint/parser': 5.36.1_iukboom6ndih5an6iafl45j2fe - eslint: 8.31.0 - eslint-config-prettier: 8.5.0_eslint@8.31.0 - eslint-config-standard: 17.0.0_2yckyfxpkmvl2u5nbasjngys7e - eslint-import-resolver-typescript: 3.5.0_ol7jqilc3wemtdbq3nzhywgxq4 - eslint-plugin-import: 2.26.0_ze7uy3qvleeqk4lwyk7ly5viwa - eslint-plugin-n: 15.2.5_eslint@8.31.0 - eslint-plugin-node: 11.1.0_eslint@8.31.0 - eslint-plugin-promise: 6.0.1_eslint@8.31.0 - eslint-plugin-unicorn: 43.0.2_eslint@8.31.0 + '@typescript-eslint/eslint-plugin': 5.48.1_oomjohfipuyaxs2zyomcx4f5by + '@typescript-eslint/parser': 5.48.1_7uibuqfxkfaozanbtbziikiqje + eslint: 8.32.0 + eslint-config-prettier: 8.6.0_eslint@8.32.0 + eslint-config-standard: 17.0.0_knjsdjla7zq4pr5eqowrnedrcm + eslint-import-resolver-typescript: 3.5.3_yx6e7nyocrpjlofwba2pq5a2ny + eslint-plugin-import: 2.27.4_26i2w5mui4ucix7iyirx6fcd3i + eslint-plugin-n: 15.6.1_eslint@8.32.0 + eslint-plugin-node: 11.1.0_eslint@8.32.0 + eslint-plugin-promise: 6.1.1_eslint@8.32.0 + eslint-plugin-unicorn: 43.0.2_eslint@8.32.0 typescript: 4.9.4 transitivePeerDependencies: - eslint-import-resolver-webpack - supports-color dev: true - /eslint-import-resolver-node/0.3.6: - resolution: {integrity: sha512-0En0w03NRVMn9Uiyn8YRPDKvWjxCWkslUEhGNTdGx15RvPJYQ+lbOlqrlNI2vEAs4pDYK4f/HN2TbDmk5TP0iw==} + /eslint-import-resolver-node/0.3.7: + resolution: {integrity: sha512-gozW2blMLJCeFpBwugLTGyvVjNoeo1knonXAcatC6bjPBZitotxdWf7Gimr25N4c0AAOo4eOUfaG82IJPDpqCA==} dependencies: debug: 3.2.7 + is-core-module: 2.11.0 resolve: 1.22.1 transitivePeerDependencies: - supports-color dev: true - /eslint-import-resolver-typescript/3.5.0_ol7jqilc3wemtdbq3nzhywgxq4: - resolution: {integrity: sha512-DEfpfuk+O/T5e9HBZOxocmwMuUGkvQQd5WRiMJF9kKNT9amByqOyGlWoAZAQiv0SZSy4GMtG1clmnvQA/RzA0A==} - engines: {node: ^12.20.0 || ^14.18.0 || >=16.0.0} + /eslint-import-resolver-typescript/3.5.3_yx6e7nyocrpjlofwba2pq5a2ny: + resolution: {integrity: sha512-njRcKYBc3isE42LaTcJNVANR3R99H9bAxBDMNDr2W7yq5gYPxbU3MkdhsQukxZ/Xg9C2vcyLlDsbKfRDg0QvCQ==} + engines: {node: ^14.18.0 || >=16.0.0} peerDependencies: eslint: '*' eslint-plugin-import: '*' dependencies: debug: 4.3.4 - enhanced-resolve: 5.10.0 - eslint: 8.31.0 - eslint-plugin-import: 2.26.0_ze7uy3qvleeqk4lwyk7ly5viwa - get-tsconfig: 4.2.0 + enhanced-resolve: 5.12.0 + eslint: 8.32.0 + eslint-plugin-import: 2.27.4_26i2w5mui4ucix7iyirx6fcd3i + get-tsconfig: 4.3.0 globby: 13.1.3 - is-core-module: 2.10.0 + is-core-module: 2.11.0 is-glob: 4.0.3 synckit: 0.8.4 transitivePeerDependencies: - supports-color dev: true - /eslint-module-utils/2.7.3_557a6ieby6o22fltd5pqi5vjdq: - resolution: {integrity: sha512-088JEC7O3lDZM9xGe0RerkOMd0EjFl+Yvd1jPWIkMT5u3H9+HC34mWWPnqPrN13gieT9pBOO+Qt07Nb/6TresQ==} + /eslint-module-utils/2.7.4_rpz7i6nyb2gcadtrnuvbqgewpm: + resolution: {integrity: sha512-j4GT+rqzCoRKHwURX7pddtIPGySnX9Si/cgMI5ztrcqOPtk5dDEeZ34CQVPphnqkJytlc97Vuk05Um2mJ3gEQA==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' + eslint: '*' eslint-import-resolver-node: '*' eslint-import-resolver-typescript: '*' eslint-import-resolver-webpack: '*' peerDependenciesMeta: '@typescript-eslint/parser': optional: true + eslint: + optional: true eslint-import-resolver-node: optional: true eslint-import-resolver-typescript: @@ -2507,39 +2535,39 @@ packages: eslint-import-resolver-webpack: optional: true dependencies: - '@typescript-eslint/parser': 5.36.1_iukboom6ndih5an6iafl45j2fe + '@typescript-eslint/parser': 5.48.1_7uibuqfxkfaozanbtbziikiqje debug: 3.2.7 - eslint-import-resolver-node: 0.3.6 - eslint-import-resolver-typescript: 3.5.0_ol7jqilc3wemtdbq3nzhywgxq4 - find-up: 2.1.0 + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + eslint-import-resolver-typescript: 3.5.3_yx6e7nyocrpjlofwba2pq5a2ny transitivePeerDependencies: - supports-color dev: true - /eslint-plugin-es/3.0.1_eslint@8.31.0: + /eslint-plugin-es/3.0.1_eslint@8.32.0: resolution: {integrity: sha512-GUmAsJaN4Fc7Gbtl8uOBlayo2DqhwWvEzykMHSCZHU3XdJ+NSzzZcVhXh3VxX5icqQ+oQdIEawXX8xkR3mIFmQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.31.0 + eslint: 8.32.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-es/4.1.0_eslint@8.31.0: + /eslint-plugin-es/4.1.0_eslint@8.32.0: resolution: {integrity: sha512-GILhQTnjYE2WorX5Jyi5i4dz5ALWxBIdQECVQavL6s7cI76IZTDWleTHkxz/QT3kvcs2QlGHvKLYsSlPOlPXnQ==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=4.19.1' dependencies: - eslint: 8.31.0 + eslint: 8.32.0 eslint-utils: 2.1.0 regexpp: 3.2.0 dev: true - /eslint-plugin-import/2.26.0_ze7uy3qvleeqk4lwyk7ly5viwa: - resolution: {integrity: sha512-hYfi3FXaM8WPLf4S1cikh/r4IxnO6zrhZbEGz2b660EJRbuxgpDS5gkCuYgGWg2xxh2rBuIr4Pvhve/7c31koA==} + /eslint-plugin-import/2.27.4_26i2w5mui4ucix7iyirx6fcd3i: + resolution: {integrity: sha512-Z1jVt1EGKia1X9CnBCkpAOhWy8FgQ7OmJ/IblEkT82yrFU/xJaxwujaTzLWqigewwynRQ9mmHfX9MtAfhxm0sA==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -2548,20 +2576,22 @@ packages: '@typescript-eslint/parser': optional: true dependencies: - '@typescript-eslint/parser': 5.36.1_iukboom6ndih5an6iafl45j2fe - array-includes: 3.1.5 - array.prototype.flat: 1.3.0 - debug: 2.6.9 + '@typescript-eslint/parser': 5.48.1_7uibuqfxkfaozanbtbziikiqje + array-includes: 3.1.6 + array.prototype.flat: 1.3.1 + array.prototype.flatmap: 1.3.1 + debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.31.0 - eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3_557a6ieby6o22fltd5pqi5vjdq + eslint: 8.32.0 + eslint-import-resolver-node: 0.3.7 + eslint-module-utils: 2.7.4_rpz7i6nyb2gcadtrnuvbqgewpm has: 1.0.3 - is-core-module: 2.10.0 + is-core-module: 2.11.0 is-glob: 4.0.3 minimatch: 3.1.2 - object.values: 1.1.5 + object.values: 1.1.6 resolve: 1.22.1 + semver: 6.3.0 tsconfig-paths: 3.14.1 transitivePeerDependencies: - eslint-import-resolver-typescript @@ -2569,58 +2599,58 @@ packages: - supports-color dev: true - /eslint-plugin-n/15.2.5_eslint@8.31.0: - resolution: {integrity: sha512-8+BYsqiyZfpu6NXmdLOXVUfk8IocpCjpd8nMRRH0A9ulrcemhb2VI9RSJMEy5udx++A/YcVPD11zT8hpFq368g==} + /eslint-plugin-n/15.6.1_eslint@8.32.0: + resolution: {integrity: sha512-R9xw9OtCRxxaxaszTQmQAlPgM+RdGjaL1akWuY/Fv9fRAi8Wj4CUKc6iYVG8QNRjRuo8/BqVYIpfqberJUEacA==} engines: {node: '>=12.22.0'} peerDependencies: eslint: '>=7.0.0' dependencies: builtins: 5.0.1 - eslint: 8.31.0 - eslint-plugin-es: 4.1.0_eslint@8.31.0 - eslint-utils: 3.0.0_eslint@8.31.0 - ignore: 5.2.0 - is-core-module: 2.10.0 + eslint: 8.32.0 + eslint-plugin-es: 4.1.0_eslint@8.32.0 + eslint-utils: 3.0.0_eslint@8.32.0 + ignore: 5.2.4 + is-core-module: 2.11.0 minimatch: 3.1.2 resolve: 1.22.1 semver: 7.3.8 dev: true - /eslint-plugin-node/11.1.0_eslint@8.31.0: + /eslint-plugin-node/11.1.0_eslint@8.32.0: resolution: {integrity: sha512-oUwtPJ1W0SKD0Tr+wqu92c5xuCeQqB3hSCHasn/ZgjFdA9iDGNkNf2Zi9ztY7X+hNuMib23LNGRm6+uN+KLE3g==} engines: {node: '>=8.10.0'} peerDependencies: eslint: '>=5.16.0' dependencies: - eslint: 8.31.0 - eslint-plugin-es: 3.0.1_eslint@8.31.0 + eslint: 8.32.0 + eslint-plugin-es: 3.0.1_eslint@8.32.0 eslint-utils: 2.1.0 - ignore: 5.2.0 + ignore: 5.2.4 minimatch: 3.1.2 resolve: 1.22.1 semver: 6.3.0 dev: true - /eslint-plugin-promise/6.0.1_eslint@8.31.0: - resolution: {integrity: sha512-uM4Tgo5u3UWQiroOyDEsYcVMOo7re3zmno0IZmB5auxoaQNIceAbXEkSt8RNrKtaYehARHG06pYK6K1JhtP0Zw==} + /eslint-plugin-promise/6.1.1_eslint@8.32.0: + resolution: {integrity: sha512-tjqWDwVZQo7UIPMeDReOpUgHCmCiH+ePnVT+5zVapL0uuHnegBUs2smM13CzOs2Xb5+MHMRFTs9v24yjba4Oig==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^7.0.0 || ^8.0.0 dependencies: - eslint: 8.31.0 + eslint: 8.32.0 dev: true - /eslint-plugin-unicorn/43.0.2_eslint@8.31.0: + /eslint-plugin-unicorn/43.0.2_eslint@8.32.0: resolution: {integrity: sha512-DtqZ5mf/GMlfWoz1abIjq5jZfaFuHzGBZYIeuJfEoKKGWRHr2JiJR+ea+BF7Wx2N1PPRoT/2fwgiK1NnmNE3Hg==} engines: {node: '>=14.18'} peerDependencies: eslint: '>=8.18.0' dependencies: '@babel/helper-validator-identifier': 7.19.1 - ci-info: 3.3.2 + ci-info: 3.7.1 clean-regexp: 1.0.0 - eslint: 8.31.0 - eslint-utils: 3.0.0_eslint@8.31.0 + eslint: 8.32.0 + eslint-utils: 3.0.0_eslint@8.32.0 esquery: 1.4.0 indent-string: 4.0.0 is-builtin-module: 3.2.0 @@ -2656,13 +2686,13 @@ packages: eslint-visitor-keys: 1.3.0 dev: true - /eslint-utils/3.0.0_eslint@8.31.0: + /eslint-utils/3.0.0_eslint@8.32.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} peerDependencies: eslint: '>=5' dependencies: - eslint: 8.31.0 + eslint: 8.32.0 eslint-visitor-keys: 2.1.0 dev: true @@ -2681,8 +2711,8 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true - /eslint/8.31.0: - resolution: {integrity: sha512-0tQQEVdmPZ1UtUKXjX7EMm9BlgJ08G90IhWh0PKDCb3ZLsgAOHI8fYSIzYVZej92zsgq+ft0FGsxhJ3xo2tbuA==} + /eslint/8.32.0: + resolution: {integrity: sha512-nETVXpnthqKPFyuY2FNjz/bEd6nbosRgKbkgS/y1C7LJop96gYHWpiguLecMHQ2XCPxn77DS0P+68WzG6vkZSQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true dependencies: @@ -2697,9 +2727,9 @@ packages: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0_eslint@8.31.0 + eslint-utils: 3.0.0_eslint@8.32.0 eslint-visitor-keys: 3.3.0 - espree: 9.4.0 + espree: 9.4.1 esquery: 1.4.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -2708,12 +2738,12 @@ packages: glob-parent: 6.0.2 globals: 13.19.0 grapheme-splitter: 1.0.4 - ignore: 5.2.0 + ignore: 5.2.4 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.1.4 + js-sdsl: 4.2.0 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 levn: 0.4.1 @@ -2729,8 +2759,8 @@ packages: - supports-color dev: true - /espree/9.4.0: - resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} + /espree/9.4.1: + resolution: {integrity: sha512-XwctdmTO6SIvCzd9810yyNzIrOrqNYV9Koizx4C/mRhf9uq0o4yHoCEU/670pOxOL/MSraektvSAji79kX90Vg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dependencies: acorn: 8.8.1 @@ -2771,7 +2801,7 @@ packages: dev: true /etag/1.8.1: - resolution: {integrity: sha1-Qa4u62XvpiJorr/qg6x9eSmbCIc=} + resolution: {integrity: sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==} engines: {node: '>= 0.6'} dev: false @@ -2840,8 +2870,8 @@ packages: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} dev: true - /fastq/1.13.0: - resolution: {integrity: sha512-YpkpUnK8od0o1hmeSc7UUs/eB/vIPWJYjKck2QKIzAf71Vm1AAQ3EbuZB3g2JIy+pg+ERD0vqI79KyZiB2e2Nw==} + /fastq/1.15.0: + resolution: {integrity: sha512-wBrocU2LCXXa+lWBt8RoIRD89Fi8OdABODa/kEnyeyjS5aZO5/GNvI5sEINADqP/h8M29UHTHUb53sUu5Ihqdw==} dependencies: reusify: 1.0.4 @@ -2862,13 +2892,6 @@ packages: dependencies: to-regex-range: 5.0.1 - /find-up/2.1.0: - resolution: {integrity: sha512-NWzkk0jSJtTt08+FBFMvXoeZnOJD+jTtsRmBYbAIzJdX6l7dLgR7CTubCM5/eDdPUBvLCeVasP1brfVR/9/EZQ==} - engines: {node: '>=4'} - dependencies: - locate-path: 2.0.0 - dev: true - /find-up/4.1.0: resolution: {integrity: sha512-PpOwAdQ/YlXQ2vj8a3h8IipDuYRi3wceVQQGYWxNINccq40Anw7BlsEXCMbt1Zt+OLA6Fq9suIpIWD0OsnISlw==} engines: {node: '>=8'} @@ -2889,7 +2912,7 @@ packages: resolution: {integrity: sha512-dm9s5Pw7Jc0GvMYbshN6zchCA9RgQlzzEZX3vylR9IqFfS8XciblUXOKfW6SiuJ0e13eDYZoZV5wdrev7P3Nwg==} engines: {node: ^10.12.0 || >=12.0.0} dependencies: - flatted: 3.2.5 + flatted: 3.2.7 rimraf: 3.0.2 dev: true @@ -2897,12 +2920,12 @@ packages: resolution: {integrity: sha512-b6suED+5/3rTpUBdG1gupIl8MPFCAMA0QXwmljLhvCUKcUvdE4gWky9zpuGCcXHOsz4J9wPGNWq6OKpmIzz3hQ==} hasBin: true - /flatted/3.2.5: - resolution: {integrity: sha512-WIWGi2L3DyTUvUrwRKgGi9TwxQMUEqPOPQBVi71R96jZXJdFskXEmf54BoZaS1kknGODoIGASGEzBUYdyMCBJg==} + /flatted/3.2.7: + resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} dev: true - /follow-redirects/1.15.0: - resolution: {integrity: sha512-aExlJShTV4qOUOL7yF1U5tvLCB0xQuudbf6toyYA0E/acBNw71mvjFTnLaRp50aQaYocMR0a/RMMBIHeZnGyjQ==} + /follow-redirects/1.15.2: + resolution: {integrity: sha512-VQLG33o04KaQ8uYi2tVNbdrWp1QWxNNea+nmIB4EVM28v0hmP17z7aG1+wAkNzVq4KeXTq3221ye5qTJP91JwA==} engines: {node: '>=4.0'} peerDependencies: debug: '*' @@ -2911,6 +2934,12 @@ packages: optional: true dev: false + /for-each/0.3.3: + resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} + dependencies: + is-callable: 1.2.7 + dev: true + /foreground-child/2.0.0: resolution: {integrity: sha512-dCIq9FpEcyQyXKCkyzmlPTFNgrCzPudOe+mhvJU5zAtlBnGVy2yKxtfsxK2tQBThwq225jcvBjpw1Gr40uzZCA==} engines: {node: '>=8.0.0'} @@ -2929,7 +2958,7 @@ packages: dev: true /fresh/0.5.2: - resolution: {integrity: sha1-PYyt2Q2XZWn6g1qx+OSyOhBWBac=} + resolution: {integrity: sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==} engines: {node: '>= 0.6'} dev: false @@ -2937,15 +2966,6 @@ packages: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} dev: false - /fs-extra/10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - dev: true - /fs-extra/11.1.0: resolution: {integrity: sha512-0rcTq621PD5jM/e0a3EJoGC/1TC5ZBCERW82LQuwfGnCa1V8w7dpYH1yNu+SLb6E5dkeCBzKEyLGlFrnr+dUyw==} engines: {node: '>=14.14'} @@ -2953,7 +2973,6 @@ packages: graceful-fs: 4.2.10 jsonfile: 6.1.0 universalify: 2.0.0 - dev: false /fs-memo/1.2.0: resolution: {integrity: sha512-YEexkCpL4j03jn5SxaMHqcO6IuWuqm8JFUYhyCep7Ao89JIYmB8xoKhK7zXXJ9cCaNXpyNH5L3QtAmoxjoHW2w==} @@ -2969,7 +2988,7 @@ packages: resolution: {integrity: sha512-V/JgOLFCS+R6Vcq0slCuaeWEdNC3ouDlJMNIsacH2VtALiu9mV4LPrHc5cDl8k5aw6J8jwgWWpiTo5RYhmIzvg==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.6 + minipass: 3.3.6 dev: false /fs.realpath/1.0.0: @@ -2985,8 +3004,18 @@ packages: /function-bind/1.1.1: resolution: {integrity: sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==} - /functional-red-black-tree/1.0.1: - resolution: {integrity: sha512-dsKNQNdj6xA3T+QlADDA7mOSlX0qiMINjn0cgr+eGHGsbSHzTabcIogz2+p/iqP1Xs6EP/sS2SbqH+brGTbq0g==} + /function.prototype.name/1.1.5: + resolution: {integrity: sha512-uN7m/BzVKQnCUF/iW8jYea67v++2u7m5UgENbHRtdDVclOUP+FMPlCNdmk0h/ysGyo2tavMJEDqJAkJdRa1vMA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + es-abstract: 1.21.1 + functions-have-names: 1.2.3 + dev: true + + /functions-have-names/1.2.3: + resolution: {integrity: sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ==} dev: true /gauge/3.0.2: @@ -3017,8 +3046,8 @@ packages: resolution: {integrity: sha512-Hm0ixYtaSZ/V7C8FJrtZIuBBI+iSgL+1Aq82zSu8VQNB4S3Gk8e7Qs3VwBDJAhmRZcFqkl3tQu36g/Foh5I5ig==} dev: true - /get-intrinsic/1.1.1: - resolution: {integrity: sha512-kWZrnVM42QCiEA2Ig1bG8zjoIMOgxWwYCEeNdwY6Tv/cOSeGpcoX4pXHfKUxNKVoArnrEr2e9srnAxxGIraS9Q==} + /get-intrinsic/1.1.3: + resolution: {integrity: sha512-QJVz1Tj7MS099PevUG5jvnt9tSkXN8K14dxQlikJuPt4uD9hHAHjLyLBiLR5zELelBdD9QNRAXZzsJx0WaDL9A==} dependencies: function-bind: 1.1.1 has: 1.0.3 @@ -3040,11 +3069,11 @@ packages: engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.1 + get-intrinsic: 1.1.3 dev: true - /get-tsconfig/4.2.0: - resolution: {integrity: sha512-X8u8fREiYOE6S8hLbq99PeykTDoLVnxvF4DjWKJmz9xy2nNRdUcV8ZN9tniJFeKyTU3qnC9lL8n4Chd6LmVKHg==} + /get-tsconfig/4.3.0: + resolution: {integrity: sha512-YCcF28IqSay3fqpIu5y3Krg/utCBHBeoflkZyHj/QcqI2nrLPC3ZegS9CmIo+hJb8K7aiGsuUl7PwWVjNG2HQQ==} dev: true /giget/1.0.0: @@ -3083,8 +3112,8 @@ packages: is-glob: 4.0.3 dev: true - /glob/7.2.0: - resolution: {integrity: sha512-lmLf6gtyrPq8tTjSmrO94wBeQbFR3HbLHbuyD69wuyQkImp2hWqMGB47OX65FBkPffO641IP9jWa1z4ivqG26Q==} + /glob/7.2.3: + resolution: {integrity: sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q==} dependencies: fs.realpath: 1.0.0 inflight: 1.0.6 @@ -3100,7 +3129,7 @@ packages: fs.realpath: 1.0.0 inflight: 1.0.6 inherits: 2.0.4 - minimatch: 5.1.0 + minimatch: 5.1.2 once: 1.4.0 /globals/11.12.0: @@ -3115,6 +3144,13 @@ packages: type-fest: 0.20.2 dev: true + /globalthis/1.0.3: + resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} + engines: {node: '>= 0.4'} + dependencies: + define-properties: 1.1.4 + dev: true + /globalyzer/0.1.0: resolution: {integrity: sha512-40oNTM9UfG6aBmuKxk/giHn5nQ8RVz/SS4Ir6zgzOv9/qC3kKZ9v4etGTcJbEl/NyVQH7FGU7d+X1egr57Md2Q==} dev: true @@ -3126,7 +3162,7 @@ packages: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 3.0.0 dev: true @@ -3137,7 +3173,7 @@ packages: dependencies: dir-glob: 3.0.1 fast-glob: 3.2.12 - ignore: 5.2.0 + ignore: 5.2.4 merge2: 1.4.1 slash: 4.0.0 @@ -3145,6 +3181,12 @@ packages: resolution: {integrity: sha512-uHJgbwAMwNFf5mLst7IWLNg14x1CkeqglJb/K3doi4dw6q2IvAAmM/Y81kevy83wP+Sst+nutFTYOGg3d1lsxg==} dev: true + /gopd/1.0.1: + resolution: {integrity: sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==} + dependencies: + get-intrinsic: 1.1.3 + dev: true + /graceful-fs/4.2.10: resolution: {integrity: sha512-9ByhssR2fPVsNZj478qUUbKfmL0+t5BDVyjShtyZZLiK7ZDAArFFfopyOTj0M05wE2tJPisA4iTnnXl2YoPvOA==} @@ -3185,7 +3227,12 @@ packages: /has-property-descriptors/1.0.0: resolution: {integrity: sha512-62DVLZGoiEBDHQyqG4w9xCuZ7eJEwNmJRWw2VY84Oedb7WFcA27fiEVe8oUQx9hAUJ4ekurquucTGwsyO1XGdQ==} dependencies: - get-intrinsic: 1.1.1 + get-intrinsic: 1.1.3 + dev: true + + /has-proto/1.0.1: + resolution: {integrity: sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==} + engines: {node: '>= 0.4'} dev: true /has-symbols/1.0.3: @@ -3245,7 +3292,7 @@ packages: engines: {node: '>=8.0.0'} dependencies: eventemitter3: 4.0.7 - follow-redirects: 1.15.0 + follow-redirects: 1.15.2 requires-port: 1.0.0 transitivePeerDependencies: - debug @@ -3285,8 +3332,8 @@ packages: resolution: {integrity: sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA==} dev: false - /ignore/5.2.0: - resolution: {integrity: sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==} + /ignore/5.2.4: + resolution: {integrity: sha512-MAb38BcSbH0eHNBxn7ql2NH/kX33OkB3lZ1BNdh7ENeRChHTYsTvWrMubiIAMNS2llXEEgZ1MUOBtXChP3kaFQ==} engines: {node: '>= 4'} /import-fresh/3.3.0: @@ -3316,11 +3363,11 @@ packages: /inherits/2.0.4: resolution: {integrity: sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==} - /internal-slot/1.0.3: - resolution: {integrity: sha512-O0DB1JC/sPyZl7cIo78n5dR7eUSwwpYPiXRhTzNxZVAMUuB8vlnRFyLxdrVToks6XPLVnFfbzaVd5WLjhgg+vA==} + /internal-slot/1.0.4: + resolution: {integrity: sha512-tA8URYccNzMo94s5MQZgH8NB/XTa6HsOo0MLfXTKKEnHVVdegzaQoFZ7Jp44bdvLvY2waT5dc+j5ICEswhi7UQ==} engines: {node: '>= 0.4'} dependencies: - get-intrinsic: 1.1.1 + get-intrinsic: 1.1.3 has: 1.0.3 side-channel: 1.0.4 dev: true @@ -3329,10 +3376,10 @@ packages: resolution: {integrity: sha512-qIpuAEt32lZJQ0XyrloCRdlEdUUNGG9i0UOk6zgzK6igyudNWqEBxfH6OlbnOOoBBvr1WB02mm8fR55CnikRng==} engines: {node: '>=12.22.0'} dependencies: - '@ioredis/commands': 1.1.1 - cluster-key-slot: 1.1.0 + '@ioredis/commands': 1.2.0 + cluster-key-slot: 1.1.2 debug: 4.3.4 - denque: 2.0.1 + denque: 2.1.0 lodash.defaults: 4.2.0 lodash.isarguments: 3.1.0 redis-errors: 1.2.0 @@ -3347,6 +3394,14 @@ packages: engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} dev: false + /is-array-buffer/3.0.1: + resolution: {integrity: sha512-ASfLknmY8Xa2XtB4wmbz13Wu202baeA18cJBCeCy0wXUHZF0IPyVEXqKEcd+t2fNSLLL1vC6k7lxZEojNbISXQ==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + is-typed-array: 1.1.10 + dev: true + /is-arrayish/0.2.1: resolution: {integrity: sha512-zz06S8t0ozoDXMG+ube26zeCTNXcKIPJZJi8hBrF4idCLms4CG9QtK7qBl1boi5ODzFpjswb5JPmHCbMpjaYzg==} dev: true @@ -3378,13 +3433,13 @@ packages: dependencies: builtin-modules: 3.3.0 - /is-callable/1.2.4: - resolution: {integrity: sha512-nsuwtxZfMX67Oryl9LCQ+upnC0Z0BgpwntpS89m1H/TLF0zNfzfLMV/9Wa/6MZsj0acpEjAO0KF1xT6ZdLl95w==} + /is-callable/1.2.7: + resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} dev: true - /is-core-module/2.10.0: - resolution: {integrity: sha512-Erxj2n/LDAZ7H8WNJXd9tw38GYM3dv8rk8Zcs+jJuxYTW7sozH+SS8NtrSjVL1/vpLvWi1hxy96IzjJ3EHTJJg==} + /is-core-module/2.11.0: + resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} dependencies: has: 1.0.3 @@ -3490,6 +3545,17 @@ packages: has-symbols: 1.0.3 dev: true + /is-typed-array/1.1.10: + resolution: {integrity: sha512-PJqgEHiWZvMpaFZ3uTc8kHPM4+4ADTlDniuQL7cU/UDA0Ql7F70yGfHph3cLNe+c9toaigv+DFzTJKhc2CtO6A==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + dev: true + /is-weakref/1.0.2: resolution: {integrity: sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ==} dependencies: @@ -3523,20 +3589,20 @@ packages: supports-color: 7.2.0 dev: true - /istanbul-reports/3.1.4: - resolution: {integrity: sha512-r1/DshN4KSE7xWEknZLLLLDn5CJybV3nw01VTkp6D5jzLuELlcbudfj/eSQFvrKsJuTVCGnePO7ho82Nw9zzfw==} + /istanbul-reports/3.1.5: + resolution: {integrity: sha512-nUsEMa9pBt/NOHqbcbeJEgqIlY/K7rVWUX6Lql2orY5e9roQOthbR3vtY4zzf2orPELg80fnxxk9zUyPlgwD1w==} engines: {node: '>=8'} dependencies: html-escaper: 2.0.2 istanbul-lib-report: 3.0.0 dev: true - /jiti/1.16.1: - resolution: {integrity: sha512-kJUp4Bj44uTaZAwG6R2/GjbodOWHULn8Swue0B7tY8v5BpTkUvDR+zBM5tsbC4x/jCeYDZ+mAdrUIScwIo4oPw==} + /jiti/1.16.2: + resolution: {integrity: sha512-OKBOVWmU3FxDt/UH4zSwiKPuc1nihFZiOD722FuJlngvLz2glX1v2/TJIgoA4+mrpnXxHV6dSAoCvPcYQtoG5A==} hasBin: true - /js-sdsl/4.1.4: - resolution: {integrity: sha512-Y2/yD55y5jteOAmY50JbUZYwk3CP3wnLPEZnlR1w9oKhITrBEtAxwuWKebFf8hMrPMgbYwFoWK/lH2sBkErELw==} + /js-sdsl/4.2.0: + resolution: {integrity: sha512-dyBIzQBDkCqCu+0upx25Y2jGdbTGxE9fshMsCdK0ViOongpV+n5tXRcZY9v7CaVQ79AGS9KA1KHtojxiM7aXSQ==} dev: true /js-tokens/4.0.0: @@ -3568,15 +3634,15 @@ packages: resolution: {integrity: sha512-Bdboy+l7tA3OGW6FjyFHWkP5LuByj1Tk33Ljyq0axyzdk9//JSi2u3fP1QSmd1KNwq6VOKYGlAu87CisVir6Pw==} dev: true - /json5/1.0.1: - resolution: {integrity: sha512-aKS4WQjPenRxiQsC93MNfjx+nbF4PAdYzmd/1JIj8HYzqfbu86beTuNgXDzPknWk0n0uARlyewZo4s++ES36Ow==} + /json5/1.0.2: + resolution: {integrity: sha512-g1MWMLBiz8FKi1e4w0UyVL3w+iJceWAFBAaBnnGKOpNa5f8TLktkbre1+s6oICydWAm+HRUGTmI+//xv2hvXYA==} hasBin: true dependencies: - minimist: 1.2.6 + minimist: 1.2.7 dev: true - /json5/2.2.1: - resolution: {integrity: sha512-1hqLFMSrGHRHxav9q9gNjJ5EXznIxGVO09xQRrwplcS8qs28pZ8s8hupZAmqDwZUmVZ2Qb2jnyPOWcDH8m8dlA==} + /json5/2.2.3: + resolution: {integrity: sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg==} engines: {node: '>=6'} hasBin: true dev: true @@ -3591,8 +3657,8 @@ packages: optionalDependencies: graceful-fs: 4.2.10 - /kleur/4.1.4: - resolution: {integrity: sha512-8QADVssbrFjivHWQU7KkMgptGTl6WAcSdlbBPY4uNF+mWr6DGcKrvY2w4FQJoXch7+fKMjj0dRrL75vk3k23OA==} + /kleur/4.1.5: + resolution: {integrity: sha512-o+NO+8WrRiQEE4/7nwRJhN1HWpVmJm511pBHUxPLtp0BUISzlBplORYSmTclCnJvQq2tKu/sgl3xVpkc7ZWuQQ==} engines: {node: '>=6'} dev: true @@ -3641,14 +3707,6 @@ packages: resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} engines: {node: '>=14'} - /locate-path/2.0.0: - resolution: {integrity: sha512-NCI2kiDkyR7VeEKm27Kda/iQHyKJe1Bu0FlTbYp3CqJu+9IFe9bLyAjMxf5ZDDbEg+iMPzB5zYyUTSm8wVTKmA==} - engines: {node: '>=4'} - dependencies: - p-locate: 2.0.0 - path-exists: 3.0.0 - dev: true - /locate-path/5.0.0: resolution: {integrity: sha512-t7hw9pI+WvuwNJXwk5zVHpyhIqzg2qTlklJOf0mVxGSbe3Fp2VieZcduNYjaLDoy6p9uGpQEGWG87WpMKlNq8g==} engines: {node: '>=8'} @@ -3668,11 +3726,11 @@ packages: dev: false /lodash.difference/4.5.0: - resolution: {integrity: sha1-nMtOUF1Ia5FlE0V3KIWi3yf9AXw=} + resolution: {integrity: sha512-dS2j+W26TQ7taQBGN8Lbbq04ssV3emRw4NY58WErlTO29pIqS0HmoT5aJ9+TUQ1N3G+JOZSji4eugsWwGp9yPA==} dev: false /lodash.flatten/4.4.0: - resolution: {integrity: sha1-8xwiIlqWMtK7+OSt2+8kCqdlph8=} + resolution: {integrity: sha512-C5N2Z3DgnnKr0LOpv/hKCgKdb7ZZwafIrsesve6lmzvZIRZRGaZ/l6Q8+2W7NaT+ZwO3fFlSCzCzrDCFdJfZ4g==} dev: false /lodash.isarguments/3.1.0: @@ -3680,7 +3738,7 @@ packages: dev: false /lodash.isplainobject/4.0.6: - resolution: {integrity: sha1-fFJqUtibRcRcxpC4gWO+BJf1UMs=} + resolution: {integrity: sha512-oSXzaWypCMHkPC3NvBEaPHf0KsA5mvPrOPgQWDsbg8n7orZ290M0BmC/jgRZ4vcJ6DTAhjrsSYgdsW/F+MFOBA==} dev: false /lodash.merge/4.6.2: @@ -3688,32 +3746,31 @@ packages: dev: true /lodash.union/4.6.0: - resolution: {integrity: sha1-SLtQiECfFvGCFmZkHETdGqrjzYg=} + resolution: {integrity: sha512-c4pB2CdGrGdjMKYLA+XiRDO7Y0PRQbm/Gzg8qMj+QH+pFVAoTp5sBpO0odL3FjoPCGjK96p6qsP+yQoiLoOBcw==} dev: false /lodash/4.17.21: resolution: {integrity: sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==} dev: true - /loupe/2.3.4: - resolution: {integrity: sha512-OvKfgCC2Ndby6aSTREl5aCCPTNIzlDfQZvZxNUrBrihDhL3xcrYegTblhmEiCrg2kKQz4XsFIaemE5BF4ybSaQ==} + /loupe/2.3.6: + resolution: {integrity: sha512-RaPMZKiMy8/JruncMU5Bt6na1eftNoo++R4Y+N2FrxkDVTrGvcyzFTsaGif4QTeKESheMGegbhw6iUAq+5A8zA==} dependencies: get-func-name: 2.0.0 dev: true + /lru-cache/5.1.1: + resolution: {integrity: sha512-KpNARQA3Iwv+jTA0utUVVbrh+Jlrr1Fv0e56GGzAFOXN7dk/FviaDW8LHmK52DlcH4WP2n6gI8vN1aesBFgo9w==} + dependencies: + yallist: 3.1.1 + dev: true + /lru-cache/6.0.0: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} dependencies: yallist: 4.0.0 - /magic-string/0.26.7: - resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} - engines: {node: '>=12'} - dependencies: - sourcemap-codec: 1.4.8 - dev: true - /magic-string/0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} @@ -3812,7 +3869,7 @@ packages: '@miniflare/storage-file': 2.11.0 '@miniflare/storage-memory': 2.11.0 '@miniflare/web-sockets': 2.11.0 - kleur: 4.1.4 + kleur: 4.1.5 semiver: 1.1.0 source-map-support: 0.5.21 undici: 5.9.1 @@ -3826,14 +3883,14 @@ packages: dependencies: brace-expansion: 1.1.11 - /minimatch/5.1.0: - resolution: {integrity: sha512-9TPBGGak4nHfGZsPBohm9AWg6NoT7QTCehS3BIJABslyZbzxfV78QM2Y6+i741OPZIafFAaiiEMh5OyIrJPgtg==} + /minimatch/5.1.2: + resolution: {integrity: sha512-bNH9mmM9qsJ2X4r2Nat1B//1dJVcn3+iBLa3IgqJ7EbGaDNepL9QSHOxN4ng33s52VMMhhIfgCYDk3C4ZmlDAg==} engines: {node: '>=10'} dependencies: brace-expansion: 2.0.1 - /minimist/1.2.6: - resolution: {integrity: sha512-Jsjnk4bw3YJqYzbdyBiNsPWHPfO++UGG749Cxs6peCu5Xg4nrena6OVxOYxrQTqww0Jmwt+Ref8rggumkTLz9Q==} + /minimist/1.2.7: + resolution: {integrity: sha512-bzfL1YUZsP41gmu/qjrEk0Q6i2ix/cVeAhbCbqH9u3zYutS1cLg00qhrD0M2MVdCcx4Sc0UpP2eBWo9rotpq6g==} dev: true /minipass/2.9.0: @@ -3843,8 +3900,8 @@ packages: yallist: 3.1.1 dev: true - /minipass/3.1.6: - resolution: {integrity: sha512-rty5kpw9/z8SX9dmxblFA6edItUmwJgMeYDZRrwlIVN27i8gysGbznJwUggw2V/FVqFSDdWy040ZPS811DYAqQ==} + /minipass/3.3.6: + resolution: {integrity: sha512-DxiNidxSEK+tHG6zOIklvNOwm3hvCrbUrdtzY74U6HKTJxvIDfOUL5W5P2Ghd3DTkhhKPYGqeNUIh5qcM4YBfw==} engines: {node: '>=8'} dependencies: yallist: 4.0.0 @@ -3867,7 +3924,7 @@ packages: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} dependencies: - minipass: 3.1.6 + minipass: 3.3.6 yallist: 4.0.0 dev: false @@ -3880,7 +3937,7 @@ packages: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true dependencies: - minimist: 1.2.6 + minimist: 1.2.7 dev: true /mkdirp/1.0.4: @@ -3888,12 +3945,12 @@ packages: engines: {node: '>=10'} hasBin: true - /mkdist/1.0.0_typescript@4.9.4: - resolution: {integrity: sha512-aJke+yvXwwcrOh+3KfAdDgDA+MPe7c+R8hQ7IPfp0gqL1/WPZZUS9rwS6CNjdwDJmHm6DTMA9KwX1FNjZG3I1Q==} + /mkdist/1.1.0_typescript@4.9.4: + resolution: {integrity: sha512-eTw467KIfd/ilsY/yS6N/fjCe/glP99bTU+ydVJFRUZYaZ3UnL09Q5SGVhMrHLr4Q5qL1pDVDgitQTmLLpUa2A==} hasBin: true peerDependencies: - sass: ^1.56.1 - typescript: '>=4.8.4' + sass: ^1.57.1 + typescript: '>=4.9.4' peerDependenciesMeta: sass: optional: true @@ -3901,10 +3958,10 @@ packages: optional: true dependencies: defu: 6.1.1 - esbuild: 0.15.18 - fs-extra: 10.1.0 + esbuild: 0.16.17 + fs-extra: 11.1.0 globby: 13.1.3 - jiti: 1.16.1 + jiti: 1.16.2 mri: 1.2.0 pathe: 1.0.0 typescript: 4.9.4 @@ -3919,8 +3976,8 @@ packages: ufo: 1.0.1 dev: true - /mlly/1.0.0: - resolution: {integrity: sha512-QL108Hwt+u9bXdWgOI0dhzZfACovn5Aen4Xvc8Jasd9ouRH4NjnrXEiyP3nVvJo91zPlYjVRckta0Nt2zfoR6g==} + /mlly/1.1.0: + resolution: {integrity: sha512-cwzBrBfwGC1gYJyfcy8TcZU1f+dbH/T+TuOhtYP2wLv/Fb51/uV7HJQfBPtEupZ2ORLRU1EKFS/QfS3eo9+kBQ==} dependencies: acorn: 8.8.1 pathe: 1.0.0 @@ -3933,6 +3990,7 @@ packages: /ms/2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} + dev: false /ms/2.1.2: resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} @@ -3951,6 +4009,10 @@ packages: hasBin: true dev: true + /natural-compare-lite/1.4.0: + resolution: {integrity: sha512-Tj+HTDSJJKaZnfiuw+iaF9skdPpTo2GtEly5JHnWV/hfv2Qj/9RKsGISQtLh2ox3l5EAGw487hnBee0sIJ6v2g==} + dev: true + /natural-compare/1.4.0: resolution: {integrity: sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==} dev: true @@ -3963,8 +4025,8 @@ packages: resolution: {integrity: sha512-VzW+TAk2wE4X9maiKMlT+GsPU4OMmR1U9CrHSmd3DFLn2IcZ9VJ6M6BBugGfYUnPCLSYxXdZy17M0BEJyhUTwg==} dev: false - /node-fetch/2.6.7: - resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} + /node-fetch/2.6.8: + resolution: {integrity: sha512-RZ6dBYuj8dRSfxpUSu+NsdF1dpPpluJxwOp+6IoDp/sH2QNDSvurYsAa+F1WxY2RjA1iP93xhcsUoYbF2XBqVg==} engines: {node: 4.x || >=6.0.0} peerDependencies: encoding: ^0.1.0 @@ -3979,13 +4041,13 @@ packages: resolution: {integrity: sha512-dPEtOeMvF9VMcYV/1Wb8CPoVAXtp6MKMlcbAt4ddqmGqUJ6fQZFXkNZNkNlfevtNkGtaSoXf/vNNNSvgrdXwtA==} engines: {node: '>= 6.13.0'} - /node-gyp-build/4.4.0: - resolution: {integrity: sha512-amJnQCcgtRVw9SvoebO3BKGESClrfXGCUTX9hSn1OuGQTQBOZmVd0Z0OlecpuRksKvbsUqALE8jls/ErClAPuQ==} + /node-gyp-build/4.6.0: + resolution: {integrity: sha512-NTZVKn9IylLwUzaKjkas1e4u2DLNcV4rdYagA4PWdPwW87Bi7z+BznyKSRwS/761tV/lzCGXplWsiaMjLqP2zQ==} hasBin: true dev: false - /node-releases/2.0.6: - resolution: {integrity: sha512-PiVXnNuFm5+iYkLBNeq5211hvO38y63T0i2KKh2KnUs3RpzJ+JtODFjkD8yjLwnDkTYF1eKXheUwdssR+NRZdg==} + /node-releases/2.0.8: + resolution: {integrity: sha512-dFSmB8fFHEH/s81Xi+Y/15DQY6VHW81nXRj86EMSL3lmuTmK1e+aT4wrFCkTbm+gSwkw4KpX+rT/pMM2c1mF+A==} dev: true /nopt/5.0.0: @@ -4033,8 +4095,8 @@ packages: set-blocking: 2.0.0 dev: false - /npx-import/1.1.3: - resolution: {integrity: sha512-zy6249FJ81OtPsvz2y0+rgis31EN5wbdwBG2umtEh65W/4onYArHuoUSZ+W+T7BQYK7YF+h9G4CuGPusMCcLOw==} + /npx-import/1.1.4: + resolution: {integrity: sha512-3ShymTWOgqGyNlh5lMJAejLuIv3W1K3fbI5Ewc6YErZU3Sp0PqsNs8UIU1O8z5+KVl/Du5ag56Gza9vdorGEoA==} dependencies: execa: 6.1.0 parse-package-name: 1.0.0 @@ -4047,8 +4109,8 @@ packages: engines: {node: '>=0.10.0'} dev: false - /object-inspect/1.12.0: - resolution: {integrity: sha512-Ho2z80bVIvJloH+YzRmpZVQe87+qASmBUKZDWgx9cu+KDrX2ZDH/3tMy+gXbZETVGs2M8YdxObOh7XAtim9Y0g==} + /object-inspect/1.12.3: + resolution: {integrity: sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g==} dev: true /object-keys/1.1.1: @@ -4056,8 +4118,8 @@ packages: engines: {node: '>= 0.4'} dev: true - /object.assign/4.1.2: - resolution: {integrity: sha512-ixT2L5THXsApyiUPYKmW+2EHpXXe5Ii3M+f4e+aJFAHao5amFRW6J0OO6c/LU8Be47utCx2GL89hxGB6XSmKuQ==} + /object.assign/4.1.4: + resolution: {integrity: sha512-1mxKf0e58bvyjSCtKYY4sRe9itRk3PJpquJOjeIkz885CczcI4IvJJDLPS72oowuSh+pBxUFROpX+TU++hxhZQ==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 @@ -4066,13 +4128,13 @@ packages: object-keys: 1.1.1 dev: true - /object.values/1.1.5: - resolution: {integrity: sha512-QUZRW0ilQ3PnPpbNtgdNV1PDbEqLIiSFB3l+EnGtBQ/8SUTLj1PZwtQHABZtLgwpJZTSZhuGLOGk57Drx2IvYg==} + /object.values/1.1.6: + resolution: {integrity: sha512-FVVTkD1vENCsAcwNs9k6jea2uHC/X0+JcjG8YA60FN5CMaJmG95wT9jek/xX9nornqGRrBkKtzuAu2wuHpKqvw==} engines: {node: '>= 0.4'} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.19.5 + es-abstract: 1.21.1 dev: true /ofetch/1.0.0: @@ -4133,13 +4195,6 @@ packages: word-wrap: 1.2.3 dev: true - /p-limit/1.3.0: - resolution: {integrity: sha512-vvcXsLAJ9Dr5rQOPk7toZQZJApBl2K4J6dANSsEuh6QI41JYcsS/qhTGa9ErIUUgK3WNQoJYvylxvjqmiqEA9Q==} - engines: {node: '>=4'} - dependencies: - p-try: 1.0.0 - dev: true - /p-limit/2.3.0: resolution: {integrity: sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w==} engines: {node: '>=6'} @@ -4154,13 +4209,6 @@ packages: yocto-queue: 0.1.0 dev: true - /p-locate/2.0.0: - resolution: {integrity: sha512-nQja7m7gSKuewoVRen45CtVfODR3crN3goVQ0DDZ9N3yHxgpkuBhZqsaiotSQRrADUrne346peY7kT3TSACykg==} - engines: {node: '>=4'} - dependencies: - p-limit: 1.3.0 - dev: true - /p-locate/4.1.0: resolution: {integrity: sha512-R79ZZ/0wAxKGu3oYMlz8jy/kbhsNrS7SKZ7PxEHBgJ5+F2mtFW2fK2cOtBh1cHYkQsbzFV7I+EoRKe6Yt0oK7A==} engines: {node: '>=8'} @@ -4175,11 +4223,6 @@ packages: p-limit: 3.1.0 dev: true - /p-try/1.0.0: - resolution: {integrity: sha512-U1etNYuMJoIz3ZXSrrySFjsXQTWOx2/jdi86L+2pRvph/qMKL6sbcCYdH23fqsbm8TH2Gn0OybpT4eSFlCVHww==} - engines: {node: '>=4'} - dev: true - /p-try/2.2.0: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} @@ -4216,11 +4259,6 @@ packages: engines: {node: '>= 0.8'} dev: false - /path-exists/3.0.0: - resolution: {integrity: sha512-bpC7GYwiDYQ4wYLe+FA8lhRjhQCMcQGuSgGGqDkg/QerRWw9CmGRT0iSOVRSZJ29NMLZgIzqaljJ63oaL4NIJQ==} - engines: {node: '>=4'} - dev: true - /path-exists/4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} engines: {node: '>=8'} @@ -4285,7 +4323,7 @@ packages: resolution: {integrity: sha512-jHv9HB+Ho7dj6ItwppRDDl0iZRYBD0jsakHXtFgoLr+cHSF6xC+QL54sJmWxyGxOLYSHm0afhXhXcQDQqH9z8g==} dependencies: jsonc-parser: 3.2.0 - mlly: 1.0.0 + mlly: 1.1.0 pathe: 1.0.0 /pluralize/8.0.0: @@ -4293,8 +4331,8 @@ packages: engines: {node: '>=4'} dev: true - /postcss/8.4.17: - resolution: {integrity: sha512-UNxNOLQydcOFi41yHNMcKRZ39NeXlr8AxGuZJsdub8vIb12fHzcq37DTU/QtbI6WLxNg2gF9Z+8qtRwTj1UI1Q==} + /postcss/8.4.21: + resolution: {integrity: sha512-tP7u/Sn/dVxK2NnruI4H9BG+x+Wxz6oeZ1cJ8P6G/PZY0IKk4k/63TDsQf2kQq3+qoJeLm2kIBUNlZe3zgb4Zg==} engines: {node: ^10 || ^12 || >=14} dependencies: nanoid: 3.3.4 @@ -4307,8 +4345,8 @@ packages: engines: {node: '>= 0.8.0'} dev: true - /prettier/2.8.1: - resolution: {integrity: sha512-lqGoSJBQNJidqCHE80vqZJHWHRFoNYsSpP9AjFhlhi9ODCJA541svILes/+/1GM3VaL/abZi7cpFzOpdR9UPKg==} + /prettier/2.8.3: + resolution: {integrity: sha512-tJ/oJ4amDihPoufT5sM0Z1SKEuKay8LfVAMlbbhnnkvt6BUserZylqo2PN+p9KeljLr0OHa2rXHU1T8reeoTrw==} engines: {node: '>=10.13.0'} hasBin: true dev: true @@ -4333,8 +4371,8 @@ packages: resolution: {integrity: sha512-3ouUOpQhtgrbOa17J7+uxOTpITYWaGP7/AhoR3+A+/1e9skrzelGi/dXzEYyvbxubEF6Wn2ypscTKiKJFFn1ag==} dev: false - /punycode/2.1.1: - resolution: {integrity: sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A==} + /punycode/2.2.0: + resolution: {integrity: sha512-LN6QV1IJ9ZhxWTNdktaPClrNfp8xdSAYS0Zk2ddX7XsXZAxckMHPCBcHRo0cTcEIgYPRiGEkmji3Idkh2yFtYw==} engines: {node: '>=6'} dev: true @@ -4356,8 +4394,8 @@ packages: engines: {node: '>= 0.6'} dev: false - /rc9/1.2.2: - resolution: {integrity: sha512-zbe8+HR2X28eZepAwohuKkebbEsA67h0DO9I7g12QrHa2CQopR9gztOLPIPXXGTvcxeUjAN4wZ+b29t3m/u05g==} + /rc9/1.2.4: + resolution: {integrity: sha512-YD1oJO9LUzMdmr2sAsVlwQVtEoDCmvuyDwmSWrg2GKFprl3BckP5cmw9rHPunei0lV6Xl4E5t2esT+0trY1xfQ==} dependencies: defu: 6.1.1 destr: 1.2.2 @@ -4412,10 +4450,10 @@ packages: util-deprecate: 1.0.2 dev: false - /readdir-glob/1.1.1: - resolution: {integrity: sha512-91/k1EzZwDx6HbERR+zucygRFfiPl2zkIYZtv3Jjr6Mn7SkKcVct8aVO+sSRiGMc6fLf72du3d92/uY63YPdEA==} + /readdir-glob/1.1.2: + resolution: {integrity: sha512-6RLVvwJtVwEDfPdn6X6Ille4/lxGl0ATOY4FN/B9nxQcgOazvvI0nodiD19ScKq0PvA/29VpaOQML36o5IzZWA==} dependencies: - minimatch: 3.1.2 + minimatch: 5.1.2 dev: false /readdirp/3.6.0: @@ -4442,6 +4480,15 @@ packages: hasBin: true dev: true + /regexp.prototype.flags/1.4.3: + resolution: {integrity: sha512-fjggEOO3slI6Wvgjwflkc4NFRCTZAu5CnNfBd5qOMYhWdn67nJBBu34/TkD++eeFmd8C9r9jfXJ27+nSiRkSUA==} + engines: {node: '>= 0.4'} + dependencies: + call-bind: 1.0.2 + define-properties: 1.1.4 + functions-have-names: 1.2.3 + dev: true + /regexpp/3.2.0: resolution: {integrity: sha512-pq2bWo9mVD43nbts2wGv17XLiNLya+GklZ8kaDLV2Z08gDCsGpnKn9BFMepvWuHCbyVvY7J5o5+BVvoQbmlJLg==} engines: {node: '>=8'} @@ -4452,7 +4499,7 @@ packages: engines: {node: '>=0.10.0'} /requires-port/1.0.0: - resolution: {integrity: sha1-kl0mAdOaxIXgkc8NpcbmlNw9yv8=} + resolution: {integrity: sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==} dev: false /resolve-from/4.0.0: @@ -4469,7 +4516,7 @@ packages: resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} hasBin: true dependencies: - is-core-module: 2.10.0 + is-core-module: 2.11.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -4481,23 +4528,23 @@ packages: resolution: {integrity: sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA==} hasBin: true dependencies: - glob: 7.2.0 + glob: 7.2.3 - /rollup-plugin-dts/5.0.0_esmavzhadgk2idmxtiodxm33ma: - resolution: {integrity: sha512-OO8ayCvuJCKaQSShyVTARxGurVVk4ulzbuvz+0zFd1f93vlnWFU5pBMT7HFeS6uj7MvvZLx4kUAarGATSU1+Ng==} + /rollup-plugin-dts/5.1.1_eymahajmafh3u7vrzmo7ylp2pa: + resolution: {integrity: sha512-zpgo52XmnLg8w4k3MScinFHZK1+ro6r7uVe34fJ0Ee8AM45FvgvTuvfWWaRgIpA4pQ1BHJuu2ospncZhkcJVeA==} engines: {node: '>=v14'} peerDependencies: rollup: ^3.0.0 typescript: ^4.1 dependencies: - magic-string: 0.26.7 - rollup: 3.9.1 + magic-string: 0.27.0 + rollup: 3.10.0 typescript: 4.9.4 optionalDependencies: '@babel/code-frame': 7.18.6 dev: true - /rollup-plugin-visualizer/5.9.0_rollup@3.9.1: + /rollup-plugin-visualizer/5.9.0_rollup@3.10.0: resolution: {integrity: sha512-bbDOv47+Bw4C/cgs0czZqfm8L82xOZssk4ayZjG40y9zbXclNk7YikrZTDao6p7+HDiGxrN0b65SgZiVm9k1Cg==} engines: {node: '>=14'} hasBin: true @@ -4509,21 +4556,13 @@ packages: dependencies: open: 8.4.0 picomatch: 2.3.1 - rollup: 3.9.1 + rollup: 3.10.0 source-map: 0.7.4 - yargs: 17.5.1 + yargs: 17.6.2 dev: false - /rollup/2.78.1: - resolution: {integrity: sha512-VeeCgtGi4P+o9hIg+xz4qQpRl6R401LWEXBmxYKOV4zlF82lyhgh2hTZnheFUbANE8l2A41F458iwj2vEYaXJg==} - engines: {node: '>=10.0.0'} - hasBin: true - optionalDependencies: - fsevents: 2.3.2 - dev: true - - /rollup/3.9.1: - resolution: {integrity: sha512-GswCYHXftN8ZKGVgQhTFUJB/NBXxrRGgO2NCy6E8s1rwEJ4Q9/VttNqcYfEvx4dTo4j58YqdC3OVztPzlKSX8w==} + /rollup/3.10.0: + resolution: {integrity: sha512-JmRYz44NjC1MjVF2VKxc0M1a97vn+cDxeqWmnwyAF4FvpjK8YFdHpaqvQB+3IxCvX05vJxKZkoMDU8TShhmJVA==} engines: {node: '>=14.18.0', npm: '>=8.0.0'} hasBin: true optionalDependencies: @@ -4536,10 +4575,19 @@ packages: /safe-buffer/5.1.2: resolution: {integrity: sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g==} + dev: false /safe-buffer/5.2.1: resolution: {integrity: sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==} + /safe-regex-test/1.0.0: + resolution: {integrity: sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA==} + dependencies: + call-bind: 1.0.2 + get-intrinsic: 1.1.3 + is-regex: 1.1.4 + dev: true + /safe-regex/2.1.1: resolution: {integrity: sha512-rx+x8AMzKb5Q5lQ95Zoi6ZbJqwCLkqi3XuJXp5P3rT8OEc6sZCJG5AE5dU3lsgRr/F4Bs31jSlVN+j5KrsGu9A==} dependencies: @@ -4553,8 +4601,8 @@ packages: /scule/1.0.0: resolution: {integrity: sha512-4AsO/FrViE/iDNEPaAQlb77tf0csuq27EsVpy6ett584EcRTp6pTDLoGWVxCD77y5iU5FauOvhsI4o1APwPoSQ==} - /selfsigned/2.0.1: - resolution: {integrity: sha512-LmME957M1zOsUhG+67rAjKfiWFox3SBxE/yymatMZsAx+oMrJ0YQ8AToOnyCm7xbeg2ep37IHLxdu0o2MavQOQ==} + /selfsigned/2.1.1: + resolution: {integrity: sha512-GSL3aowiF7wa/WtSFwnUrludWFoNhftq8bUkH9pkzjpN2XSPOAYEgg6e0sS9s0rZwgJzJiQRPU18A6clnoW5wQ==} engines: {node: '>=10'} dependencies: node-forge: 1.3.1 @@ -4630,8 +4678,8 @@ packages: resolution: {integrity: sha512-KiKBS8AnWGEyLzofFfmvKwpdPzqiy16LvQfK3yv/fVH7Bj13/wl3JSR1J+rfgRE9q7xUJK4qvgS8raSOeLUehw==} dev: false - /set-cookie-parser/2.4.8: - resolution: {integrity: sha512-edRH8mBKEWNVIVMKejNnuJxleqYE/ZSdcT8/Nem9/mmosx12pctd80s2Oy00KNZzrogMZS5mauK2/ymL1bvlvg==} + /set-cookie-parser/2.5.1: + resolution: {integrity: sha512-1jeBGaKNGdEq4FgIrORu/N570dwoPYio8lSoYLWmX7sQ//0JY08Xh9o5pBcgmHQ/MbsYp/aZnOe1s1lIsbLprQ==} dev: true /setprototypeof/1.2.0: @@ -4652,8 +4700,12 @@ packages: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} dependencies: call-bind: 1.0.2 - get-intrinsic: 1.1.1 - object-inspect: 1.12.0 + get-intrinsic: 1.1.3 + object-inspect: 1.12.3 + dev: true + + /siginfo/2.0.0: + resolution: {integrity: sha512-ybx0WO1/8bSBLEWXZvEd7gMW3Sn3JFlW3TvX1nREbDLRNQNaeNN8WK0meBwPdAaOI7TtRRRJn/Es1zhrrCHu7g==} dev: true /signal-exit/3.0.7: @@ -4692,15 +4744,11 @@ packages: engines: {node: '>= 8'} dev: false - /sourcemap-codec/1.4.8: - resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} - dev: true - /spdx-correct/3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} dependencies: spdx-expression-parse: 3.0.1 - spdx-license-ids: 3.0.11 + spdx-license-ids: 3.0.12 dev: true /spdx-exceptions/2.3.0: @@ -4711,17 +4759,21 @@ packages: resolution: {integrity: sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==} dependencies: spdx-exceptions: 2.3.0 - spdx-license-ids: 3.0.11 + spdx-license-ids: 3.0.12 dev: true - /spdx-license-ids/3.0.11: - resolution: {integrity: sha512-Ctl2BrFiM0X3MANYgj3CkygxhRmr9mi6xhejbdO960nF6EDJApTYpn0BQnDKlnNBULKiCN1n3w9EBkHK8ZWg+g==} + /spdx-license-ids/3.0.12: + resolution: {integrity: sha512-rr+VVSXtRhO4OHbXUiAF7xW3Bo9DuuF6C5jH+q/x15j2jniycgKbxU09Hr0WqlSLUs4i4ltHGXqTe7VHclYWyA==} dev: true /stack-trace/0.0.10: resolution: {integrity: sha512-KGzahc7puUKkzyMt+IqAep+TVNbKP+k2Lmwhub39m1AsTSkaDutx56aDCo+HLDzf/D26BIHTJWNiTG1KAJiQCg==} dev: true + /stackback/0.0.2: + resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} + dev: true + /standard-as-callback/2.1.0: resolution: {integrity: sha512-qoRRSyROncaz1z0mvYqIE4lCd9p2R90i6GxW3uZv5ucSu8tU7B5HXUP1gG8pVZsYNVaXjk8ClXHPttLyxAL48A==} dev: false @@ -4748,20 +4800,20 @@ packages: is-fullwidth-code-point: 3.0.0 strip-ansi: 6.0.1 - /string.prototype.trimend/1.0.5: - resolution: {integrity: sha512-I7RGvmjV4pJ7O3kdf+LXFpVfdNOxtCW/2C8f6jNiW4+PQchwxkCDzlk1/7p+Wl4bqFIZeF47qAHXLuHHWKAxog==} + /string.prototype.trimend/1.0.6: + resolution: {integrity: sha512-JySq+4mrPf9EsDBEDYMOb/lM7XQLulwg5R/m1r0PXEFqrV0qHvl58sdTilSXtKOflCsK2E8jxf+GKC0T07RWwQ==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.19.5 + es-abstract: 1.21.1 dev: true - /string.prototype.trimstart/1.0.5: - resolution: {integrity: sha512-THx16TJCGlsN0o6dl2o6ncWUsdgnLRSA23rRE5pyGBw/mLr3Ej/R2LaqCtgP8VNMGZsvMWnf9ooZPyY2bHvUFg==} + /string.prototype.trimstart/1.0.6: + resolution: {integrity: sha512-omqjMDaY92pbn5HOX7f9IccLA+U1tA9GvtU4JrodiXFfYB7jPzzHpRzpglLAjtUV6bB557zwClJezTqnAiYnQA==} dependencies: call-bind: 1.0.2 define-properties: 1.1.4 - es-abstract: 1.19.5 + es-abstract: 1.21.1 dev: true /string_decoder/1.1.1: @@ -4837,7 +4889,7 @@ packages: engines: {node: ^14.18.0 || >=16.0.0} dependencies: '@pkgr/utils': 2.3.1 - tslib: 2.4.0 + tslib: 2.4.1 dev: true /tapable/2.2.1: @@ -4897,7 +4949,7 @@ packages: engines: {node: '>=8'} dependencies: '@istanbuljs/schema': 0.1.3 - glob: 7.2.0 + glob: 7.2.3 minimatch: 3.1.2 dev: true @@ -4957,8 +5009,8 @@ packages: resolution: {integrity: sha512-fxDhWnFSLt3VuTwtvJt5fpwxBHg5AdKWMsgcPOOIilyjymcYVZoCQF8fvFRezCNfblEXmi+PcM1eYHeOAgXCOQ==} dependencies: '@types/json5': 0.0.29 - json5: 1.0.1 - minimist: 1.2.6 + json5: 1.0.2 + minimist: 1.2.7 strip-bom: 3.0.0 dev: true @@ -4966,8 +5018,8 @@ packages: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} dev: true - /tslib/2.4.0: - resolution: {integrity: sha512-d6xOpEDfsi2CZVlPQzGeux8XMwLT9hssAsaPYExaQMuYskwb+x1x7J371tWlbBdWHroy99KnVB6qIkUbs5X3UQ==} + /tslib/2.4.1: + resolution: {integrity: sha512-tGyy4dAjRIEwI7BzsB0lynWgOpfqjUdq91XXAlIWD2OwKBH7oCl/GZG/HT4BOHrTlPMOASlMQ7veyTqpmRcrNA==} dev: true /tsutils/3.21.0_typescript@4.9.4: @@ -5007,11 +5059,19 @@ packages: engines: {node: '>=8'} dev: true - /type-fest/2.12.2: - resolution: {integrity: sha512-qt6ylCGpLjZ7AaODxbpyBZSs9fCI9SkL3Z9q2oxMBQhs/uyY+VD8jHA8ULCGmWQJlBgqvO3EJeAngOHD8zQCrQ==} + /type-fest/2.19.0: + resolution: {integrity: sha512-RAH822pAdBgcNMAfWnCBU3CFZcfZ/i1eZjwFU/dsLKumyuuP3niueg2UAukXYF0E2AAoc82ZSSf9J0WQBinzHA==} engines: {node: '>=12.20'} dev: false + /typed-array-length/1.0.4: + resolution: {integrity: sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==} + dependencies: + call-bind: 1.0.2 + for-each: 0.3.3 + is-typed-array: 1.1.10 + dev: true + /typescript/4.9.4: resolution: {integrity: sha512-Uz+dTXYzxXXbsFpM86Wh3dKCxrQqUcVMxwU54orwlJjOpO3ao8L7j5lH+dWfTwgCwIuM9GQ2kvVotzYJMXTBZg==} engines: {node: '>=4.2.0'} @@ -5030,37 +5090,36 @@ packages: which-boxed-primitive: 1.0.2 dev: true - /unbuild/1.0.2: - resolution: {integrity: sha512-nQ2rxQ9aqIPzVhOEs6T/YcDGb6PWf6BAtQ0as+YWoaWCfezAdeL3KlNWSh279D6euOeCt94t0b/vAGr3GKu9Gw==} + /unbuild/1.1.1: + resolution: {integrity: sha512-HlhHj6cUPBQJmhoczQoU6dzdTFO0Jr9EiGWEZ1EwHGXlGRR6LXcKyfX3PMrkM48uWJjBWiCgTQdkFOAk3tlK6Q==} hasBin: true dependencies: - '@rollup/plugin-alias': 4.0.2_rollup@3.9.1 - '@rollup/plugin-commonjs': 23.0.7_rollup@3.9.1 - '@rollup/plugin-json': 5.0.2_rollup@3.9.1 - '@rollup/plugin-node-resolve': 15.0.1_rollup@3.9.1 - '@rollup/plugin-replace': 5.0.2_rollup@3.9.1 - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@rollup/plugin-alias': 4.0.2_rollup@3.10.0 + '@rollup/plugin-commonjs': 24.0.0_rollup@3.10.0 + '@rollup/plugin-json': 6.0.0_rollup@3.10.0 + '@rollup/plugin-node-resolve': 15.0.1_rollup@3.10.0 + '@rollup/plugin-replace': 5.0.2_rollup@3.10.0 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 chalk: 5.2.0 consola: 2.15.3 defu: 6.1.1 - esbuild: 0.15.18 + esbuild: 0.16.17 globby: 13.1.3 hookable: 5.4.2 - jiti: 1.16.1 + jiti: 1.16.2 magic-string: 0.27.0 mkdirp: 1.0.4 - mkdist: 1.0.0_typescript@4.9.4 - mlly: 1.0.0 + mkdist: 1.1.0_typescript@4.9.4 + mlly: 1.1.0 mri: 1.2.0 pathe: 1.0.0 pkg-types: 1.0.1 pretty-bytes: 6.0.0 - rimraf: 3.0.2 - rollup: 3.9.1 - rollup-plugin-dts: 5.0.0_esmavzhadgk2idmxtiodxm33ma + rollup: 3.10.0 + rollup-plugin-dts: 5.1.1_eymahajmafh3u7vrzmo7ylp2pa scule: 1.0.0 typescript: 4.9.4 - untyped: 1.0.0 + untyped: 1.2.2 transitivePeerDependencies: - sass - supports-color @@ -5080,15 +5139,15 @@ packages: pathe: 1.0.0 dev: false - /unimport/1.1.0_rollup@3.9.1: - resolution: {integrity: sha512-dSufi3POQWUVAMU6DxXu39U0cWzz5m3FtQBUbgDJTkCpeRfyiYhDg+BOz6UPKfDPtEhkbshV8JoMV3I8i/mQ+A==} + /unimport/1.2.0_rollup@3.10.0: + resolution: {integrity: sha512-yMok/ubppurBE7Png1QH70Om96AxIoWCcfdxW3J/pziozShMc1UGpPgWpSckfo9ndAO5M74yNnRDdLAZy/gWQg==} dependencies: - '@rollup/pluginutils': 5.0.2_rollup@3.9.1 + '@rollup/pluginutils': 5.0.2_rollup@3.10.0 escape-string-regexp: 5.0.0 fast-glob: 3.2.12 local-pkg: 0.4.2 magic-string: 0.27.0 - mlly: 1.0.0 + mlly: 1.1.0 pathe: 1.0.0 pkg-types: 1.0.1 scule: 1.0.0 @@ -5114,7 +5173,7 @@ packages: /unstorage/1.0.1: resolution: {integrity: sha512-J1c4b8K2KeihHrQtdgl/ybIapArUbPaPb+TyJy/nGSauDwDYqciZsEKdkee568P3c8SSH4TIgnGRHDWMPGw+Lg==} dependencies: - anymatch: 3.1.2 + anymatch: 3.1.3 chokidar: 3.5.3 destr: 1.2.2 h3: 1.0.2 @@ -5124,31 +5183,31 @@ packages: mri: 1.2.0 ofetch: 1.0.0 ufo: 1.0.1 - ws: 8.11.0 + ws: 8.12.0 transitivePeerDependencies: - bufferutil - supports-color - utf-8-validate dev: false - /untyped/1.0.0: - resolution: {integrity: sha512-aBeR3Z51038d7zVzsNShYEdO7u/VCp5R17fxpPXlD2QvG9g6uVJ+JM+zMJ7KFPIt1BNf3I6bU6PhAlsAFkIfdA==} + /untyped/1.2.2: + resolution: {integrity: sha512-EANYd5L6AdpgfldlgMcmvOOnj092nWhy0ybhc7uhEH12ipytDYz89EOegBQKj8qWL3u1wgYnmFjADhsuCJs5Aw==} dependencies: - '@babel/core': 7.20.2 - '@babel/standalone': 7.20.4 - '@babel/types': 7.20.2 + '@babel/core': 7.20.12 + '@babel/standalone': 7.20.12 + '@babel/types': 7.20.7 scule: 1.0.0 transitivePeerDependencies: - supports-color dev: true - /update-browserslist-db/1.0.5_browserslist@4.21.3: - resolution: {integrity: sha512-dteFFpCyvuDdr9S/ff1ISkKt/9YZxKjI9WlRR99c180GaztJtRa/fn18FdxGVKVsnPY7/a/FDN68mcvUmP4U7Q==} + /update-browserslist-db/1.0.10_browserslist@4.21.4: + resolution: {integrity: sha512-OztqDenkfFkbSG+tRxBeAnCVPckDBcvibKd35yDONx6OU8N7sqgwc7rCbkJ/WcYtVRZ4ba68d6byhC21GFh7sQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' dependencies: - browserslist: 4.21.3 + browserslist: 4.21.4 escalade: 3.1.1 picocolors: 1.0.0 dev: true @@ -5156,7 +5215,7 @@ packages: /uri-js/4.4.1: resolution: {integrity: sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==} dependencies: - punycode: 2.1.1 + punycode: 2.2.0 dev: true /urlpattern-polyfill/4.0.3: @@ -5164,16 +5223,16 @@ packages: dev: true /util-deprecate/1.0.2: - resolution: {integrity: sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=} + resolution: {integrity: sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==} dev: false - /v8-to-istanbul/9.0.0: - resolution: {integrity: sha512-HcvgY/xaRm7isYmyx+lFKA4uQmfUbN0J4M0nNItvzTvH/iQ9kW5j/t4YSR+Ge323/lrgDAWJoF46tzGQHwBHFw==} + /v8-to-istanbul/9.0.1: + resolution: {integrity: sha512-74Y4LqY74kLE6IFyIjPtkSTWzUZmj8tdHT9Ii/26dvQ6K9Dl2NbEfj0XgU2sHCtKgt5VupqhlO/5aWuqS+IY1w==} engines: {node: '>=10.12.0'} dependencies: - '@jridgewell/trace-mapping': 0.3.9 + '@jridgewell/trace-mapping': 0.3.17 '@types/istanbul-lib-coverage': 2.0.4 - convert-source-map: 1.8.0 + convert-source-map: 1.9.0 dev: true /validate-npm-package-license/3.0.4: @@ -5190,54 +5249,65 @@ packages: builtins: 5.0.1 dev: true - /vite-node/0.26.3: - resolution: {integrity: sha512-Te2bq0Bfvq6XiO718I+1EinMjpNYKws6SNHKOmVbILAQimKoZKDd+IZLlkaYcBXPpK3HFe2U80k8Zw+m3w/a2w==} + /vite-node/0.27.1_@types+node@18.11.18: + resolution: {integrity: sha512-d6+ue/3NzsfndWaPbYh/bFkHbmAWfDXI4B874zRx+WREnG6CUHUbBC8lKaRYZjeR6gCPN5m1aVNNRXBYICA9XA==} engines: {node: '>=v14.16.0'} hasBin: true dependencies: + cac: 6.7.14 debug: 4.3.4 - mlly: 1.0.0 + mlly: 1.1.0 pathe: 0.2.0 + picocolors: 1.0.0 source-map: 0.6.1 source-map-support: 0.5.21 - vite: 3.1.6 + vite: 4.0.4_@types+node@18.11.18 transitivePeerDependencies: + - '@types/node' - less - sass - stylus + - sugarss - supports-color - terser dev: true - /vite/3.1.6: - resolution: {integrity: sha512-qMXIwnehvvcK5XfJiXQUiTxoYAEMKhM+jqCY6ZSTKFBKu1hJnAKEzP3AOcnTerI0cMZYAaJ4wpW1wiXLMDt4mA==} + /vite/4.0.4_@types+node@18.11.18: + resolution: {integrity: sha512-xevPU7M8FU0i/80DMR+YhgrzR5KS2ORy1B4xcX/cXLsvnUWvfHuqMmVU6N0YiJ4JWGRJJsLCgjEzKjG9/GKoSw==} engines: {node: ^14.18.0 || >=16.0.0} hasBin: true peerDependencies: + '@types/node': '>= 14' less: '*' sass: '*' stylus: '*' + sugarss: '*' terser: ^5.4.0 peerDependenciesMeta: + '@types/node': + optional: true less: optional: true sass: optional: true stylus: optional: true + sugarss: + optional: true terser: optional: true dependencies: - esbuild: 0.15.18 - postcss: 8.4.17 + '@types/node': 18.11.18 + esbuild: 0.16.17 + postcss: 8.4.21 resolve: 1.22.1 - rollup: 2.78.1 + rollup: 3.10.0 optionalDependencies: fsevents: 2.3.2 dev: true - /vitest/0.26.3: - resolution: {integrity: sha512-FmHxU9aUCxTi23keF3vxb/Qp0lYXaaJ+jRLGOUmMS3qVTOJvgGE+f1VArupA6pEhaG2Ans4X+zV9dqM5WISMbg==} + /vitest/0.27.1: + resolution: {integrity: sha512-1sIpQ1DVFTEn7c1ici1XHcVfdU4nKiBmPtPAtGKJJJLuJjojTv/OHGgcf69P57alM4ty8V4NMv+7Yoi5Cxqx9g==} engines: {node: '>=v14.16.0'} hasBin: true peerDependencies: @@ -5260,23 +5330,27 @@ packages: dependencies: '@types/chai': 4.3.4 '@types/chai-subset': 1.3.3 - '@types/node': 17.0.31 + '@types/node': 18.11.18 acorn: 8.8.1 acorn-walk: 8.2.0 + cac: 6.7.14 chai: 4.3.7 debug: 4.3.4 local-pkg: 0.4.2 + picocolors: 1.0.0 source-map: 0.6.1 strip-literal: 1.0.0 tinybench: 2.3.1 tinypool: 0.3.0 tinyspy: 1.0.2 - vite: 3.1.6 - vite-node: 0.26.3 + vite: 4.0.4_@types+node@18.11.18 + vite-node: 0.27.1_@types+node@18.11.18 + why-is-node-running: 2.2.2 transitivePeerDependencies: - less - sass - stylus + - sugarss - supports-color - terser dev: true @@ -5311,6 +5385,18 @@ packages: is-symbol: 1.0.4 dev: true + /which-typed-array/1.1.9: + resolution: {integrity: sha512-w9c4xkx6mPidwp7180ckYWfMmvxpjlZuIudNtDf4N/tTAUB8VJbX25qZoAsrtGuYNnGw3pa0AXgbGKRB8/EceA==} + engines: {node: '>= 0.4'} + dependencies: + available-typed-arrays: 1.0.5 + call-bind: 1.0.2 + for-each: 0.3.3 + gopd: 1.0.1 + has-tostringtag: 1.0.0 + is-typed-array: 1.1.10 + dev: true + /which/2.0.2: resolution: {integrity: sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==} engines: {node: '>= 8'} @@ -5318,6 +5404,15 @@ packages: dependencies: isexe: 2.0.0 + /why-is-node-running/2.2.2: + resolution: {integrity: sha512-6tSwToZxTOcotxHeA+qGCq1mVzKR3CwcJGmVcY+QE8SHy6TnpFnh8PAvPNHYr7EcuVeG0QSMxtYCuO1ta/G/oA==} + engines: {node: '>=8'} + hasBin: true + dependencies: + siginfo: 2.0.0 + stackback: 0.0.2 + dev: true + /wide-align/1.1.5: resolution: {integrity: sha512-eDMORYaPNZ4sQIuuYPDHdQvf4gyCF9rEEV/yPxGfwPkRodwEgiMUUXTx/dex+Me0wxx53S+NgUHaP7y3MGlDmg==} dependencies: @@ -5340,31 +5435,17 @@ packages: /wrappy/1.0.2: resolution: {integrity: sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ==} - /ws/8.11.0: - resolution: {integrity: sha512-HPG3wQd9sNQoT9xHyNCXoDUa+Xw/VevmY9FoHyQ+g+rrMn4j6FB4np7Z0OhdTgjx6MgQLK7jwSy1YecU1+4Asg==} + /ws/8.12.0: + resolution: {integrity: sha512-kU62emKIdKVeEIOIKVegvqpXMSTAMLJozpHZaJNDYqBjzlSYXQGviYwN1osDLJ9av68qHd4a2oSjd7yD4pacig==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 + utf-8-validate: '>=5.0.2' peerDependenciesMeta: bufferutil: optional: true utf-8-validate: optional: true - dev: false - - /ws/8.9.0: - resolution: {integrity: sha512-Ja7nszREasGaYUYCI2k4lCKIRTt+y7XuqVoHR44YpI49TtryyqbqvDMn5eqfW7e6HzTukDRIsXqzVHScqRcafg==} - engines: {node: '>=10.0.0'} - peerDependencies: - bufferutil: ^4.0.1 - utf-8-validate: ^5.0.2 - peerDependenciesMeta: - bufferutil: - optional: true - utf-8-validate: - optional: true - dev: true /y18n/5.0.8: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} @@ -5382,8 +5463,8 @@ packages: engines: {node: '>=10'} dev: true - /yargs-parser/21.0.1: - resolution: {integrity: sha512-9BK1jFpLzJROCI5TzwZL/TU4gqjK5xiHV/RfWLOahrjAko/e4DJkRDZQXfvqAsiZzzYhgAzbgz6lg48jcm4GLg==} + /yargs-parser/21.1.1: + resolution: {integrity: sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==} engines: {node: '>=12'} dev: false @@ -5400,17 +5481,17 @@ packages: yargs-parser: 20.2.9 dev: true - /yargs/17.5.1: - resolution: {integrity: sha512-t6YAJcxDkNX7NFYiVtKvWUz8l+PaKTLiL63mJYWR2GnHq2gjEWISzsLp9wg3aY36dY1j+gfIEL3pIF+XlJJfbA==} + /yargs/17.6.2: + resolution: {integrity: sha512-1/9UrdHjDZc0eOU0HxOHoS78C69UD3JRMvzlJ7S79S2nTaWRA/whGCTV8o9e/N/1Va9YIV7Q4sOxD8VV4pCWOw==} engines: {node: '>=12'} dependencies: - cliui: 7.0.4 + 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.8 - yargs-parser: 21.0.1 + yargs-parser: 21.1.1 dev: false /yocto-queue/0.1.0: diff --git a/src/build.ts b/src/build.ts index a31b897969..6d99267c14 100644 --- a/src/build.ts +++ b/src/build.ts @@ -40,7 +40,8 @@ export async function copyPublicAssets(nitro: Nitro) { if (await isDirectory(asset.dir)) { await fse.copy( asset.dir, - join(nitro.options.output.publicDir, asset.baseURL!) + join(nitro.options.output.publicDir, asset.baseURL!), + { overwrite: false } ); } } diff --git a/src/dev/error.ts b/src/dev/error.ts index 12818f0101..5be10ac6d8 100644 --- a/src/dev/error.ts +++ b/src/dev/error.ts @@ -1,14 +1,14 @@ import { NitroErrorHandler } from "../types"; function errorHandler(error, event) { - event.res.setHeader("Content-Type", "text/html; charset=UTF-8"); - event.res.statusCode = 503; - event.res.statusMessage = "Server Unavailable"; + event.node.res.setHeader("Content-Type", "text/html; charset=UTF-8"); + event.node.res.statusCode = 503; + event.node.res.statusMessage = "Server Unavailable"; let body; let title; if (error) { - title = `${event.res.statusCode} ${event.res.statusMessage}`; + title = `${event.node.res.statusCode} ${event.node.res.statusMessage}`; body = `
${error.stack}
`; } else { title = "Reloading server..."; @@ -16,7 +16,7 @@ function errorHandler(error, event) { ""; } - event.res.end(` + event.node.res.end(` diff --git a/src/dev/server.ts b/src/dev/server.ts index 44a5d8e9cb..64dffe5dd8 100644 --- a/src/dev/server.ts +++ b/src/dev/server.ts @@ -172,7 +172,7 @@ export function createDevServer(nitro: Nitro): NitroDevServer { app.use( eventHandler(async (event) => { await reloadPromise; - const address = currentWorker?.address; + const address = currentWorker && currentWorker.address; if (!address || (address.socketPath && !existsSync(address.socketPath))) { return errorHandler(lastError, event); } @@ -223,8 +223,8 @@ function createProxy(defaults: HTTPProxyOptions = {}) { const handle = (event: H3Event, opts: HTTPProxyOptions = {}) => { return new Promise((resolve, reject) => { proxy.web( - event.req, - event.res, + event.node.req, + event.node.res, { ...defaults, ...opts }, (error: any) => { if (error.code !== "ECONNRESET") { diff --git a/src/dev/vfs.ts b/src/dev/vfs.ts index db57384963..4c13af2f92 100644 --- a/src/dev/vfs.ts +++ b/src/dev/vfs.ts @@ -8,52 +8,74 @@ export function createVFSHandler(nitro: Nitro) { ...nitro.options.virtual, }; + const url = event.node.req.url || ""; + const isJson = + event.node.req.headers.accept?.includes("application/json") || + url.startsWith(".json"); + const id = decodeURIComponent(url.replace(/^(\.json)?\/?/, "") || ""); + + if (id && !(id in vfsEntries)) { + throw createError({ message: "File not found", statusCode: 404 }); + } + + let content = id ? vfsEntries[id] : undefined; + if (typeof content === "function") { + content = await content(); + } + + if (isJson) { + return { + rootDir: nitro.options.rootDir, + entries: Object.keys(vfsEntries).map((id) => ({ + id, + path: "/_vfs.json/" + encodeURIComponent(id), + })), + current: id + ? { + id, + content, + } + : null, + }; + } + const items = Object.keys(vfsEntries) .map((key) => { const linkClass = - event.req.url === `/${encodeURIComponent(key)}` + url === `/${encodeURIComponent(key)}` ? "bg-gray-700 text-white" : "hover:bg-gray-800 text-gray-200"; return `
  • ${key.replace( + )}" class="w-full text-sm px-2 py-1 border-b border-gray-10 ${linkClass}">${key.replace( nitro.options.rootDir, "" )}
  • `; }) .join("\n"); + const files = ` -
    -

    virtual files

    +
    +

    Virtual Files

      ${items}
    `; - const id = decodeURIComponent(event.req.url?.slice(1) || ""); - - let file = ""; - if (id in vfsEntries) { - let contents = vfsEntries[id]; - if (typeof contents === "function") { - contents = await contents(); - } - file = editorTemplate({ - readOnly: true, - language: id.endsWith("html") ? "html" : "javascript", - theme: "vs-dark", - value: contents, - wordWrap: "wordWrapColumn", - wordWrapColumn: 80, - }); - } else if (id) { - throw createError({ message: "File not found", statusCode: 404 }); - } else { - file = ` -
    -

    Select a virtual file to inspect

    + const file = id + ? editorTemplate({ + readOnly: true, + language: id.endsWith("html") ? "html" : "javascript", + theme: "vs-dark", + value: content, + wordWrap: "wordWrapColumn", + wordWrapColumn: 80, + }) + : ` +
    +

    Select a virtual file to inspect

    `; - } + return ` @@ -61,9 +83,18 @@ export function createVFSHandler(nitro: Nitro) { + -
    +
    ${files} ${file}
    @@ -77,7 +108,7 @@ const monacoUrl = `https://cdnjs.cloudflare.com/ajax/libs/monaco-editor/${monaco const vsUrl = `${monacoUrl}/vs`; const editorTemplate = (options: Record) => ` -
    +
    `; diff --git a/src/nitro.ts b/src/nitro.ts index 773a390b0b..9414efee82 100644 --- a/src/nitro.ts +++ b/src/nitro.ts @@ -34,6 +34,10 @@ export async function createNitro(config: NitroConfig = {}): Promise { nitro.options.plugins.push("#internal/nitro/debug"); } + if (nitro.options.timing) { + nitro.options.plugins.push("#internal/nitro/timing"); + } + // Logger config if (nitro.options.logLevel !== undefined) { nitro.logger.level = nitro.options.logLevel; diff --git a/src/options.ts b/src/options.ts index 6cd1bbc139..ec69f5af40 100644 --- a/src/options.ts +++ b/src/options.ts @@ -1,11 +1,10 @@ -import { pathToFileURL } from "node:url"; -import { resolve, join, isAbsolute } from "pathe"; +import { resolve, join, normalize } from "pathe"; import { loadConfig } from "c12"; import { klona } from "klona/full"; import { camelCase } from "scule"; import { defu } from "defu"; import { resolveModuleExportNames, resolvePath as resolveModule } from "mlly"; -// import escapeRE from 'escape-string-regexp' +import escapeRE from "escape-string-regexp"; import { withLeadingSlash, withoutTrailingSlash, withTrailingSlash } from "ufo"; import { isTest, isDebug } from "std-env"; import { findWorkspaceDir } from "pkg-types"; @@ -35,7 +34,7 @@ const NitroDefaults: NitroConfig = { publicDir: "{{ output.dir }}/public", }, - // Featueres + // Features experimental: {}, storage: {}, devStorage: {}, @@ -44,7 +43,7 @@ const NitroDefaults: NitroConfig = { serverAssets: [], plugins: [], imports: { - exclude: [/[/\\]node_modules[/\\]/, /[/\\]\.git[/\\]/], + exclude: [], presets: nitroImports, }, virtual: {}, @@ -190,19 +189,32 @@ export async function loadOptions( if (options.scanDirs.length === 0) { options.scanDirs = [options.srcDir]; } + options.scanDirs = options.scanDirs.map((dir) => + resolve(options.srcDir, dir) + ); - if (options.imports && Array.isArray(options.imports.exclude)) { + if ( + options.imports && + Array.isArray(options.imports.exclude) && + options.imports.exclude.length === 0 + ) { + // Exclude .git and buildDir by default + options.imports.exclude.push(/[/\\]\.git[/\\]/); options.imports.exclude.push(options.buildDir); - } - // Normalise absolute auto-import paths for windows machines - if (options.imports && options.dev) { - options.imports.imports = options.imports.imports || []; - for (const entry of options.imports.imports) { - if (isAbsolute(entry.from)) { - entry.from = pathToFileURL(entry.from).href; - } - } + // Exclude all node modules that are not a scanDir + const scanDirsInNodeModules = options.scanDirs + .map((dir) => dir.match(/(?<=\/)node_modules\/(.+)$/)?.[1]) + .filter(Boolean); + options.imports.exclude.push( + scanDirsInNodeModules.length > 0 + ? new RegExp( + `node_modules\\/(?!${scanDirsInNodeModules + .map((dir) => escapeRE(dir)) + .join("|")})` + ) + : /[/\\]node_modules[/\\]/ + ); } // Add h3 auto imports preset @@ -306,13 +318,7 @@ export async function loadOptions( } // Resolve plugin paths - options.plugins = options.plugins.map((p) => { - const path = resolvePath(p, options); - if (options.dev && isAbsolute(path)) { - return pathToFileURL(path).href; - } - return path; - }); + options.plugins = options.plugins.map((p) => resolvePath(p, options)); return options; } diff --git a/src/prerender.ts b/src/prerender.ts index d237bd9ad2..781e0942b7 100644 --- a/src/prerender.ts +++ b/src/prerender.ts @@ -281,6 +281,7 @@ function extractLinks( const EXT_REGEX = /\.[\da-z]+$/; -function getExtension(path: string): string { - return (path.match(EXT_REGEX) || [])[0] || ""; +function getExtension(link: string): string { + const pathname = parseURL(link).pathname; + return (pathname.match(EXT_REGEX) || [])[0] || ""; } diff --git a/src/presets/netlify.ts b/src/presets/netlify.ts index 875e0439a2..db760aa982 100644 --- a/src/presets/netlify.ts +++ b/src/presets/netlify.ts @@ -21,20 +21,15 @@ export const netlify = defineNitroPreset({ await writeHeaders(nitro); await writeRedirects(nitro); - const serverCJSPath = join(nitro.options.output.serverDir, "server.js"); - const serverJSCode = ` -let _handler -exports.handler = function handler (event, context) { - if (_handler) { - return _handler(event, context) - } - return import('./server.mjs').then(m => { - _handler = m.handler - return _handler(event, context) - }) -} -`.trim(); - await fsp.writeFile(serverCJSPath, serverJSCode); + const functionConfig = { + config: { nodeModuleFormat: "esm" }, + version: 1, + }; + const functionConfigPath = join( + nitro.options.output.serverDir, + "server.json" + ); + await fsp.writeFile(functionConfigPath, JSON.stringify(functionConfig)); }, }, }); @@ -55,7 +50,7 @@ export const netlifyEdge = defineNitroPreset({ }, rollupConfig: { output: { - entryFileNames: "server.js", + entryFileNames: "server.mjs", format: "esm", }, }, @@ -89,12 +84,18 @@ async function writeRedirects(nitro: Nitro) { ); // Rewrite static cached paths to builder functions - for (const [key] of rules.filter( - ([_, routeRules]) => - routeRules.cache && (routeRules.cache?.static || routeRules.cache?.swr) + for (const [key, value] of rules.filter( + ([_, value]) => + value.cache === false || + (value.cache && value.cache.swr === false) || + (value.cache && (value.cache?.static || value.cache?.swr)) )) { contents = - `${key.replace("/**", "/*")}\t/.netlify/builders/server 200\n` + contents; + value.cache === false || value.cache.swr === false + ? `${key.replace("/**", "/*")}\t/.netlify/functions/server 200\n` + + contents + : `${key.replace("/**", "/*")}\t/.netlify/builders/server 200\n` + + contents; } for (const [key, routeRules] of rules.filter( diff --git a/src/presets/vercel.ts b/src/presets/vercel.ts index da3e5a5ff9..d2be2fea22 100644 --- a/src/presets/vercel.ts +++ b/src/presets/vercel.ts @@ -167,14 +167,29 @@ function generateBuildConfig(nitro: Nitro) { ...rules .filter( ([key, value]) => - value.cache && - (value.cache.swr || value.cache.static) && - key.includes("/**") + value.cache === false || + (value.cache && value.cache.swr === false) || + (value.cache && + (value.cache.swr || value.cache.static) && + key.includes("/**")) ) - .map(([key]) => ({ - src: key.replace(/^(.*)\/\*\*/, "(?$1/.*)"), - dest: generateEndpoint(key) + "?url=$url", - })), + .map(([key, value]) => { + const src = key.replace(/^(.*)\/\*\*/, "(?$1/.*)"); + if ( + value.cache === false || + (value.cache && value.cache.swr === false) + ) { + // we need to write a rule to avoid route being shadowed by another cache rule elsewhere + return { + src, + dest: "/__nitro", + }; + } + return { + src, + dest: generateEndpoint(key) + "?url=$url", + }; + }), // If we are using a prerender function as a fallback, then we do not need to output // the below fallback route as well ...(!nitro.options.routeRules["/**"]?.cache || diff --git a/src/rollup/config.ts b/src/rollup/config.ts index 3782f94d4b..61170d715a 100644 --- a/src/rollup/config.ts +++ b/src/rollup/config.ts @@ -25,6 +25,7 @@ import { replace } from "./plugins/replace"; import { virtual } from "./plugins/virtual"; import { dynamicRequire } from "./plugins/dynamic-require"; import { externals } from "./plugins/externals"; +import { externals as legacyExternals } from "./plugins/externals-legacy"; import { timing } from "./plugins/timing"; import { publicAssets } from "./plugins/public-assets"; import { serverAssets } from "./plugins/server-assets"; @@ -305,8 +306,11 @@ export const plugins = [ // Externals Plugin if (!nitro.options.noExternals) { + const externalsPlugin = nitro.options.experimental.legacyExternals + ? legacyExternals + : externals; rollupConfig.plugins.push( - externals( + externalsPlugin( defu(nitro.options.externals, { outDir: nitro.options.output.serverDir, moduleDirectories: nitro.options.nodeModulesDirs, diff --git a/src/rollup/plugins/externals-legacy.ts b/src/rollup/plugins/externals-legacy.ts new file mode 100644 index 0000000000..6b1c57e8dd --- /dev/null +++ b/src/rollup/plugins/externals-legacy.ts @@ -0,0 +1,338 @@ +import { existsSync, promises as fsp } from "node:fs"; +import { resolve, dirname, normalize, join, isAbsolute } from "pathe"; +import consola from "consola"; +import { nodeFileTrace, NodeFileTraceOptions } from "@vercel/nft"; +import type { Plugin } from "rollup"; +import { resolvePath, isValidNodeImport, normalizeid } from "mlly"; +import semver from "semver"; +import { isDirectory, retry } from "../../utils"; + +export interface NodeExternalsOptions { + inline?: string[]; + external?: string[]; + outDir?: string; + trace?: boolean; + traceOptions?: NodeFileTraceOptions; + moduleDirectories?: string[]; + exportConditions?: string[]; + traceInclude?: string[]; +} + +export function externals(opts: NodeExternalsOptions): Plugin { + const trackedExternals = new Set(); + + const _resolveCache = new Map(); + const _resolve = async (id: string) => { + let resolved = _resolveCache.get(id); + if (resolved) { + return resolved; + } + resolved = await resolvePath(id, { + conditions: opts.exportConditions, + url: opts.moduleDirectories, + }); + _resolveCache.set(id, resolved); + return resolved; + }; + + // Normalize options + opts.inline = (opts.inline || []).map((p) => normalize(p)); + opts.external = (opts.external || []).map((p) => normalize(p)); + + return { + name: "node-externals", + async resolveId(originalId, importer, options) { + // Skip internals + if ( + !originalId || + originalId.startsWith("\u0000") || + originalId.includes("?") || + originalId.startsWith("#") + ) { + return null; + } + + // Skip relative paths + if (originalId.startsWith(".")) { + return null; + } + + // Normalize path (windows) + const id = normalize(originalId); + + // Id without .../node_modules/ + const idWithoutNodeModules = id.split("node_modules/").pop(); + + // Check for explicit inlines + if ( + opts.inline.some( + (i) => id.startsWith(i) || idWithoutNodeModules.startsWith(i) + ) + ) { + return null; + } + + // Check for explicit externals + if ( + opts.external.some( + (i) => id.startsWith(i) || idWithoutNodeModules.startsWith(i) + ) + ) { + return { id, external: true }; + } + + // Resolve id using rollup resolver + const resolved = (await this.resolve(originalId, importer, { + ...options, + skipSelf: true, + })) || { id }; + + // Try resolving with mlly as fallback + if ( + !isAbsolute(resolved.id) || + !existsSync(resolved.id) || + (await isDirectory(resolved.id)) + ) { + resolved.id = await _resolve(resolved.id).catch(() => resolved.id); + } + + // Inline invalid node imports + if (!(await isValidNodeImport(resolved.id).catch(() => false))) { + return null; + } + + // Externalize with full path if trace is disabled + if (opts.trace === false) { + return { + ...resolved, + id: isAbsolute(resolved.id) ? normalizeid(resolved.id) : resolved.id, + external: true, + }; + } + + // -- Trace externals -- + + // Try to extract package name from path + const { pkgName, subpath } = parseNodeModulePath(resolved.id); + + // Inline if cannot detect package name + if (!pkgName) { + return null; + } + + // Normally package name should be same as originalId + // Edge cases: Subpath export and full paths + if (pkgName !== originalId) { + // Subpath export + if (!isAbsolute(originalId)) { + const fullPath = await _resolve(originalId); + trackedExternals.add(fullPath); + return { + id: originalId, + external: true, + }; + } + + // Absolute path, we are not sure about subpath to generate import statement + // Guess as main subpath export + const packageEntry = await _resolve(pkgName).catch(() => null); + if (packageEntry !== originalId) { + // Guess subpathexport + const guessedSubpath = pkgName + subpath.replace(/\.[a-z]+$/, ""); + const resolvedGuess = await _resolve(guessedSubpath).catch( + () => null + ); + if (resolvedGuess === originalId) { + trackedExternals.add(resolvedGuess); + return { + id: guessedSubpath, + external: true, + }; + } + // Inline since we cannot guess subpath + return null; + } + } + + trackedExternals.add(resolved.id); + return { + id: pkgName, + external: true, + }; + }, + async buildEnd() { + if (opts.trace === false) { + return; + } + + // Force trace paths + for (const pkgName of opts.traceInclude || []) { + const path = await this.resolve(pkgName); + if (path?.id) { + trackedExternals.add(path.id.replace(/\?.+/, "")); + } + } + + // Trace files + let tracedFiles = await nodeFileTrace( + [...trackedExternals], + opts.traceOptions + ) + .then((r) => + [...r.fileList].map((f) => resolve(opts.traceOptions.base, f)) + ) + .then((r) => r.filter((file) => file.includes("node_modules"))); + + // Resolve symlinks + tracedFiles = await Promise.all( + tracedFiles.map((file) => fsp.realpath(file)) + ); + + // Read package.json with cache + const packageJSONCache = new Map(); // pkgDir => contents + const getPackageJson = async (pkgDir: string) => { + if (packageJSONCache.has(pkgDir)) { + return packageJSONCache.get(pkgDir); + } + const pkgJSON = JSON.parse( + await fsp.readFile(resolve(pkgDir, "package.json"), "utf8") + ); + packageJSONCache.set(pkgDir, pkgJSON); + return pkgJSON; + }; + + // Keep track of npm packages + const tracedPackages = new Map(); // name => pkgDir + const ignoreDirs = []; + const ignoreWarns = new Set(); + for (const file of tracedFiles) { + const { baseDir, pkgName } = parseNodeModulePath(file); + if (!pkgName) { + continue; + } + let pkgDir = resolve(baseDir, pkgName); + + // Check for duplicate versions + const existingPkgDir = tracedPackages.get(pkgName); + if (existingPkgDir && existingPkgDir !== pkgDir) { + const v1 = await getPackageJson(existingPkgDir).then( + (r) => r.version + ); + const v2 = await getPackageJson(pkgDir).then((r) => r.version); + const isNewer = semver.gt(v2, v1); + + // Warn about major version differences + const getMajor = (v: string) => v.split(".").find((s) => s !== "0"); + if (getMajor(v1) !== getMajor(v2)) { + const warn = + `Multiple major versions of package \`${pkgName}\` are being externalized. Picking latest version:\n\n` + + [ + ` ${isNewer ? "-" : "+"} ` + existingPkgDir + "@" + v1, + ` ${isNewer ? "+" : "-"} ` + pkgDir + "@" + v2, + ].join("\n"); + if (!ignoreWarns.has(warn)) { + consola.warn(warn); + ignoreWarns.add(warn); + } + } + + const [newerDir, olderDir] = isNewer + ? [pkgDir, existingPkgDir] + : [existingPkgDir, pkgDir]; + // Try to map traced files from one package to another for minor/patch versions + if (getMajor(v1) === getMajor(v2)) { + tracedFiles = tracedFiles.map((f) => + f.startsWith(olderDir + "/") ? f.replace(olderDir, newerDir) : f + ); + } + // Exclude older version files + ignoreDirs.push(olderDir + "/"); + pkgDir = newerDir; // Update for tracedPackages + } + + // Add to traced packages + tracedPackages.set(pkgName, pkgDir); + } + + // Filter out files from ignored packages and dedup + tracedFiles = tracedFiles.filter( + (f) => !ignoreDirs.some((d) => f.startsWith(d)) + ); + tracedFiles = [...new Set(tracedFiles)]; + + // Ensure all package.json files are traced + for (const pkgDir of tracedPackages.values()) { + const pkgJSON = join(pkgDir, "package.json"); + if (!tracedFiles.includes(pkgJSON)) { + tracedFiles.push(pkgJSON); + } + } + + const writeFile = async (file: string) => { + if (!(await isFile(file))) { + return; + } + const src = resolve(opts.traceOptions.base, file); + const { pkgName, subpath } = parseNodeModulePath(file); + const dst = resolve(opts.outDir, `node_modules/${pkgName + subpath}`); + await fsp.mkdir(dirname(dst), { recursive: true }); + try { + await fsp.copyFile(src, dst); + } catch { + consola.warn(`Could not resolve \`${src}\`. Skipping.`); + } + }; + + // Write traced files + await Promise.all( + tracedFiles.map((file) => retry(() => writeFile(file), 3)) + ); + + // Write an informative package.json + await fsp.writeFile( + resolve(opts.outDir, "package.json"), + JSON.stringify( + { + name: "nitro-output", + version: "0.0.0", + private: true, + bundledDependencies: [...tracedPackages.keys()], + }, + null, + 2 + ), + "utf8" + ); + }, + }; +} + +function parseNodeModulePath(path: string) { + if (!path) { + return {}; + } + const match = /^(.+\/node_modules\/)([^/@]+|@[^/]+\/[^/]+)(\/?.*?)?$/.exec( + normalize(path) + ); + if (!match) { + return {}; + } + const [, baseDir, pkgName, subpath] = match; + return { + baseDir, + pkgName, + subpath, + }; +} + +async function isFile(file: string) { + try { + const stat = await fsp.stat(file); + return stat.isFile(); + } catch (err) { + if (err.code === "ENOENT") { + return false; + } + throw err; + } +} diff --git a/src/rollup/plugins/externals.ts b/src/rollup/plugins/externals.ts index 1b018a1411..38f60de5a3 100644 --- a/src/rollup/plugins/externals.ts +++ b/src/rollup/plugins/externals.ts @@ -1,10 +1,8 @@ import { existsSync, promises as fsp } from "node:fs"; import { resolve, dirname, normalize, join, isAbsolute } from "pathe"; -import consola from "consola"; import { nodeFileTrace, NodeFileTraceOptions } from "@vercel/nft"; import type { Plugin } from "rollup"; import { resolvePath, isValidNodeImport, normalizeid } from "mlly"; -import semver from "semver"; import { isDirectory, retry } from "../../utils"; export interface NodeExternalsOptions { @@ -35,6 +33,10 @@ export function externals(opts: NodeExternalsOptions): Plugin { return resolved; }; + // Normalize options + opts.inline = (opts.inline || []).map((p) => normalize(p)); + opts.external = (opts.external || []).map((p) => normalize(p)); + return { name: "node-externals", async resolveId(originalId, importer, options) { @@ -161,7 +163,7 @@ export function externals(opts: NodeExternalsOptions): Plugin { return; } - // Force trace paths + // Manually traced paths for (const pkgName of opts.traceInclude || []) { const path = await this.resolve(pkgName); if (path?.id) { @@ -169,19 +171,10 @@ export function externals(opts: NodeExternalsOptions): Plugin { } } - // Trace files - let tracedFiles = await nodeFileTrace( + // Trace used files using nft + const _fileTrace = await nodeFileTrace( [...trackedExternals], opts.traceOptions - ) - .then((r) => - [...r.fileList].map((f) => resolve(opts.traceOptions.base, f)) - ) - .then((r) => r.filter((file) => file.includes("node_modules"))); - - // Resolve symlinks - tracedFiles = await Promise.all( - tracedFiles.map((file) => fsp.realpath(file)) ); // Read package.json with cache @@ -197,94 +190,199 @@ export function externals(opts: NodeExternalsOptions): Plugin { return pkgJSON; }; - // Keep track of npm packages - const tracedPackages = new Map(); // name => pkgDir - const ignoreDirs = []; - const ignoreWarns = new Set(); - for (const file of tracedFiles) { - const { baseDir, pkgName } = parseNodeModulePath(file); - if (!pkgName) { - continue; - } - let pkgDir = resolve(baseDir, pkgName); + // Resolve traced files + type TracedFile = { + path: string; + subpath: string; + parents: string[]; - // Check for duplicate versions - const existingPkgDir = tracedPackages.get(pkgName); - if (existingPkgDir && existingPkgDir !== pkgDir) { - const v1 = await getPackageJson(existingPkgDir).then( - (r) => r.version - ); - const v2 = await getPackageJson(pkgDir).then((r) => r.version); - const isNewer = semver.gt(v2, v1); - - // Warn about major version differences - const getMajor = (v: string) => v.split(".").find((s) => s !== "0"); - if (getMajor(v1) !== getMajor(v2)) { - const warn = - `Multiple major versions of package \`${pkgName}\` are being externalized. Picking latest version:\n\n` + - [ - ` ${isNewer ? "-" : "+"} ` + existingPkgDir + "@" + v1, - ` ${isNewer ? "+" : "-"} ` + pkgDir + "@" + v2, - ].join("\n"); - if (!ignoreWarns.has(warn)) { - consola.warn(warn); - ignoreWarns.add(warn); + pkgPath: string; + pkgName: string; + pkgVersion: string; + }; + const _resolveTracedPath = (p) => + fsp.realpath(resolve(opts.traceOptions.base, p)); + const tracedFiles: Record = Object.fromEntries( + await Promise.all( + [..._fileTrace.reasons.entries()].map(async ([_path, reasons]) => { + if (reasons.ignored) { + return; } - } - - const [newerDir, olderDir] = isNewer - ? [pkgDir, existingPkgDir] - : [existingPkgDir, pkgDir]; - // Try to map traced files from one package to another for minor/patch versions - if (getMajor(v1) === getMajor(v2)) { - tracedFiles = tracedFiles.map((f) => - f.startsWith(olderDir + "/") ? f.replace(olderDir, newerDir) : f + const path = await _resolveTracedPath(_path); + if (!path.includes("node_modules")) { + return; + } + if (!(await isFile(path))) { + return; + } + const { baseDir, pkgName, subpath } = parseNodeModulePath(path); + const pkgPath = join(baseDir, pkgName); + const parents = await Promise.all( + [...reasons.parents].map((p) => _resolveTracedPath(p)) ); - } - // Exclude older version files - ignoreDirs.push(olderDir + "/"); - pkgDir = newerDir; // Update for tracedPackages - } + const tracedFile = { + path, + parents, - // Add to traced packages - tracedPackages.set(pkgName, pkgDir); - } + subpath, + pkgName, + pkgPath, + }; + return [path, tracedFile]; + }) + ).then((r) => r.filter(Boolean)) + ); - // Filter out files from ignored packages and dedup - tracedFiles = tracedFiles.filter( - (f) => !ignoreDirs.some((d) => f.startsWith(d)) + // Resolve traced packages + type TracedPackage = { + name: string; + versions: Record< + string, + { + path: string; + files: string[]; + } + >; + }; + const tracedPackages: Record = {}; + await Promise.all( + Object.values(tracedFiles).map(async (tracedFile) => { + const pkgJSON = await getPackageJson(tracedFile.pkgPath); + const pkgName = tracedFile.pkgName; // Use file path as name to support aliases + let tracedPackage = tracedPackages[pkgName]; + if (!tracedPackage) { + tracedPackage = { + name: pkgName, + versions: {}, + }; + tracedPackages[pkgName] = tracedPackage; + } + let tracedPackageVersion = tracedPackage.versions[pkgJSON.version]; + if (!tracedPackageVersion) { + tracedPackageVersion = { path: tracedFile.pkgPath, files: [] }; + tracedPackage.versions[pkgJSON.version] = tracedPackageVersion; + } + tracedPackageVersion.files.push(tracedFile.path); + tracedFile.pkgName = pkgName; + tracedFile.pkgVersion = pkgJSON.version; + }) ); - tracedFiles = [...new Set(tracedFiles)]; - // Ensure all package.json files are traced - for (const pkgDir of tracedPackages.values()) { - const pkgJSON = join(pkgDir, "package.json"); - if (!tracedFiles.includes(pkgJSON)) { - tracedFiles.push(pkgJSON); + const writePackage = async ( + name: string, + version: string, + outputName?: string + ) => { + // Find pkg + const pkg = tracedPackages[name]; + + // Copy files + for (const src of pkg.versions[version].files) { + const { subpath } = parseNodeModulePath(src); + const dst = join( + opts.outDir, + "node_modules", + outputName || pkg.name, + subpath + ); + await fsp.mkdir(dirname(dst), { recursive: true }); + await fsp.copyFile(src, dst); } - } - const writeFile = async (file: string) => { - if (!(await isFile(file))) { - return; + // Copy package.json + const pkgJSONPath = join( + opts.outDir, + "node_modules", + outputName || pkg.name, + "package.json" + ); + await fsp.mkdir(dirname(pkgJSONPath), { recursive: true }); + await fsp.copyFile( + join(pkg.versions[version].path, "package.json"), + pkgJSONPath + ); + }; + + const linkPackage = async (from: string, to: string) => { + const src = join(opts.outDir, "node_modules", from); + const dst = join(opts.outDir, "node_modules", to); + if (existsSync(dst)) { + return; // TODO: Warn? } - const src = resolve(opts.traceOptions.base, file); - const { pkgName, subpath } = parseNodeModulePath(file); - const dst = resolve(opts.outDir, `node_modules/${pkgName + subpath}`); await fsp.mkdir(dirname(dst), { recursive: true }); - try { - await fsp.copyFile(src, dst); - } catch { - consola.warn(`Could not resolve \`${src}\`. Skipping.`); - } + // TODO: Use copy for windows for portable output? + await fsp.symlink(src, dst, "junction").catch((err) => { + console.error("Cannot link", src, "to", dst, ":", err.message); + }); }; - // Write traced files + // Utility to find package parents + const findPackageParents = (pkg: TracedPackage, version: string) => { + // Try to find parent packages + const versionFiles: TracedFile[] = pkg.versions[version].files.map( + (path) => tracedFiles[path] + ); + const parentPkgs = [ + ...new Set( + versionFiles.flatMap((file) => + file.parents.flatMap( + (parentPath) => + tracedFiles[parentPath].pkgName + + "@" + + tracedFiles[parentPath].pkgVersion + ) + ) + ), + ]; + return parentPkgs; + }; + + // Write traced packages await Promise.all( - tracedFiles.map((file) => retry(() => writeFile(file), 3)) + Object.values(tracedPackages).map(async (tracedPackage) => { + const versions = Object.keys(tracedPackage.versions); // TODO: sort by semver + if (versions.length === 1) { + // Write the only version into node_modules/{name} + await writePackage(tracedPackage.name, versions[0]); + } else { + for (const version of versions) { + const parentPkgs = findPackageParents(tracedPackage, version); + if (parentPkgs.length === 0) { + // No parent packages, assume as the hoisted version + await writePackage(tracedPackage.name, version); + } else { + // Write alternative version into node_modules/{name}@{version} + await writePackage( + tracedPackage.name, + version, + `${tracedPackage.name}@${version}` + ); + // For each parent, link into node_modules/{parent}/node_modules/{name} + for (const parentPath of parentPkgs) { + await linkPackage( + `${tracedPackage.name}@${version}`, + `${parentPath}/node_modules/${tracedPackage.name}` + ); + await linkPackage( + `${tracedPackage.name}@${version}`, + `${parentPath.split("@")[0]}/node_modules/${ + tracedPackage.name + }` + ); + } + } + } + } + }) ); // Write an informative package.json + const bundledDependencies = Object.fromEntries( + Object.values(tracedPackages).map((pkg) => [ + pkg.name, + Object.keys(pkg.versions).join(" | "), + ]) + ); await fsp.writeFile( resolve(opts.outDir, "package.json"), JSON.stringify( @@ -292,7 +390,7 @@ export function externals(opts: NodeExternalsOptions): Plugin { name: "nitro-output", version: "0.0.0", private: true, - bundledDependencies: [...tracedPackages.keys()], + bundledDependencies, }, null, 2 diff --git a/src/runtime/app.ts b/src/runtime/app.ts index cfda794306..08cd7d1fe1 100644 --- a/src/runtime/app.ts +++ b/src/runtime/app.ts @@ -14,7 +14,6 @@ import { } from "unenv/runtime/fetch/index"; import { createHooks, Hookable } from "hookable"; import { useRuntimeConfig } from "./config"; -import { timingMiddleware } from "./timing"; import { cachedEventHandler } from "./cache"; import { createRouteRulesHandler, getRouteRulesForPath } from "./route-rules"; import { plugins } from "#internal/nitro/virtual/plugins"; @@ -40,8 +39,6 @@ function createNitroApp(): NitroApp { onError: errorHandler, }); - h3App.use(config.app.baseURL, timingMiddleware); - const router = createRouter(); h3App.use(createRouteRulesHandler()); diff --git a/src/runtime/cache.ts b/src/runtime/cache.ts index 47653d8aaa..9afe909089 100644 --- a/src/runtime/cache.ts +++ b/src/runtime/cache.ts @@ -154,7 +154,7 @@ export function defineCachedEventHandler( if (key) { return escapeKey(key); } - const url = event.req.originalUrl || event.req.url; + const url = event.node.req.originalUrl || event.node.req.url; const friendlyName = escapeKey(decodeURI(parseURL(url).pathname)).slice( 0, 16 @@ -178,10 +178,10 @@ export function defineCachedEventHandler( const _cachedHandler = cachedFunction>( async (incomingEvent: H3Event) => { // Create proxies to avoid sharing state with user request - const reqProxy = cloneWithProxy(incomingEvent.req, { headers: {} }); + const reqProxy = cloneWithProxy(incomingEvent.node.req, { headers: {} }); const resHeaders: Record = {}; let _resSendBody; - const resProxy = cloneWithProxy(incomingEvent.res, { + const resProxy = cloneWithProxy(incomingEvent.node.res, { statusCode: 200, getHeader(name) { return resHeaders[name]; @@ -243,7 +243,7 @@ export function defineCachedEventHandler( const body = (await handler(event)) || _resSendBody; // Collect cachable headers - const headers = event.res.getHeaders(); + const headers = event.node.res.getHeaders(); headers.etag = headers.Etag || headers.etag || `W/"${hash(body)}"`; headers["last-modified"] = headers["Last-Modified"] || @@ -268,7 +268,7 @@ export function defineCachedEventHandler( // Create cache entry for response const cacheEntry: ResponseCacheEntry = { - code: event.res.statusCode, + code: event.node.res.statusCode, headers, body, }; @@ -292,7 +292,7 @@ export function defineCachedEventHandler( const response = await _cachedHandler(event); // Don't continue if response is already handled by user - if (event.res.headersSent || event.res.writableEnded) { + if (event.node.res.headersSent || event.node.res.writableEnded) { return response.body; } @@ -308,9 +308,9 @@ export function defineCachedEventHandler( } // Send status and headers - event.res.statusCode = response.code; + event.node.res.statusCode = response.code; for (const name in response.headers) { - event.res.setHeader(name, response.headers[name]); + event.node.res.setHeader(name, response.headers[name]); } // Send body diff --git a/src/runtime/entries/aws-lambda.ts b/src/runtime/entries/aws-lambda.ts index 08b78c5fd7..8fb0fca6f4 100644 --- a/src/runtime/entries/aws-lambda.ts +++ b/src/runtime/entries/aws-lambda.ts @@ -10,25 +10,18 @@ import "#internal/nitro/virtual/polyfill"; import { withQuery } from "ufo"; import { nitroApp } from "../app"; -// Compatibility types that work with AWS v1, AWS v2 & Netlify -type Event = - | Omit< - APIGatewayProxyEvent, - "pathParameters" | "stageVariables" | "requestContext" | "resource" - > - | Omit< - APIGatewayProxyEventV2, - "pathParameters" | "stageVariables" | "requestContext" | "resource" - >; -type Result = Exclude< - APIGatewayProxyResult | APIGatewayProxyResultV2, - string -> & { statusCode: number }; - -export const handler = async function handler( - event: Event, +export async function handler( + event: APIGatewayProxyEvent, + context: Context +): Promise; +export async function handler( + event: APIGatewayProxyEventV2, context: Context -): Promise { +): Promise; +export async function handler( + event: APIGatewayProxyEvent | APIGatewayProxyEventV2, + context: Context +): Promise { const query = { ...event.queryStringParameters, ...(event as APIGatewayProxyEvent).multiValueQueryStringParameters, @@ -57,18 +50,26 @@ export const handler = async function handler( body: event.body, // TODO: handle event.isBase64Encoded }); - const outgoingCookies = r.headers["set-cookie"]; - const cookies = Array.isArray(outgoingCookies) - ? outgoingCookies - : outgoingCookies?.split(",") || []; + if ("cookies" in event || "rawPath" in event) { + const outgoingCookies = r.headers["set-cookie"]; + const cookies = Array.isArray(outgoingCookies) + ? outgoingCookies + : outgoingCookies?.split(",") || []; + + return { + cookies, + statusCode: r.status, + headers: normalizeOutgoingHeaders(r.headers, true), + body: r.body.toString(), + }; + } return { - cookies, statusCode: r.status, headers: normalizeOutgoingHeaders(r.headers), body: r.body.toString(), }; -}; +} function normalizeIncomingHeaders(headers?: APIGatewayProxyEventHeaders) { return Object.fromEntries( @@ -80,11 +81,14 @@ function normalizeIncomingHeaders(headers?: APIGatewayProxyEventHeaders) { } function normalizeOutgoingHeaders( - headers: Record + headers: Record, + stripCookies = false ) { + const entries = stripCookies + ? Object.entries(headers).filter(([key]) => !["set-cookie"].includes(key)) + : Object.entries(headers); + return Object.fromEntries( - Object.entries(headers) - .filter(([key]) => !["set-cookie"].includes(key)) - .map(([k, v]) => [k, Array.isArray(v) ? v.join(",") : v!]) + entries.map(([k, v]) => [k, Array.isArray(v) ? v.join(",") : v!]) ); } diff --git a/src/runtime/entries/netlify-builder.ts b/src/runtime/entries/netlify-builder.ts index 45562aa043..d7d5b49096 100644 --- a/src/runtime/entries/netlify-builder.ts +++ b/src/runtime/entries/netlify-builder.ts @@ -1,4 +1,4 @@ import { builder } from "@netlify/functions"; -import { handler as _handler } from "#internal/nitro/entries/aws-lambda"; +import { lambda } from "./netlify-lambda"; -export const handler = builder(_handler); +export const handler = builder(lambda); diff --git a/src/runtime/entries/netlify-lambda.ts b/src/runtime/entries/netlify-lambda.ts new file mode 100644 index 0000000000..1fdc27700a --- /dev/null +++ b/src/runtime/entries/netlify-lambda.ts @@ -0,0 +1,58 @@ +import "#internal/nitro/virtual/polyfill"; +import type { + Handler, + HandlerResponse, + HandlerContext, + HandlerEvent, +} from "@netlify/functions/dist/main"; +import type { APIGatewayProxyEventHeaders } from "aws-lambda"; +import { withQuery } from "ufo"; +import { nitroApp } from "../app"; + +export async function lambda( + event: HandlerEvent, + context: HandlerContext +): Promise { + const query = { + ...event.queryStringParameters, + ...event.multiValueQueryStringParameters, + }; + const url = withQuery(event.path, query); + const method = event.httpMethod || "get"; + + const r = await nitroApp.localCall({ + event, + url, + context, + headers: normalizeIncomingHeaders(event.headers), + method, + query, + body: event.body, // TODO: handle event.isBase64Encoded + }); + + return { + statusCode: r.status, + headers: normalizeOutgoingHeaders(r.headers), + body: r.body.toString(), + }; +} + +function normalizeIncomingHeaders(headers?: APIGatewayProxyEventHeaders) { + return Object.fromEntries( + Object.entries(headers || {}).map(([key, value]) => [ + key.toLowerCase(), + value!, + ]) + ); +} + +function normalizeOutgoingHeaders( + headers: Record +) { + return Object.fromEntries( + Object.entries(headers).map(([k, v]) => [ + k, + Array.isArray(v) ? v.join(",") : v!, + ]) + ); +} diff --git a/src/runtime/entries/netlify.ts b/src/runtime/entries/netlify.ts index e86cd3de58..c67633b0e1 100644 --- a/src/runtime/entries/netlify.ts +++ b/src/runtime/entries/netlify.ts @@ -1,14 +1,8 @@ import "#internal/nitro/virtual/polyfill"; -import type { - Handler, - HandlerResponse, - HandlerContext, - HandlerEvent, -} from "@netlify/functions/dist/main"; -import type { APIGatewayProxyEventHeaders } from "aws-lambda"; +import type { Handler } from "@netlify/functions/dist/main"; import { withQuery } from "ufo"; -import { nitroApp } from "../app"; import { getRouteRulesForPath } from "../route-rules"; +import { lambda } from "./netlify-lambda"; export const handler: Handler = async function handler(event, context) { const query = { @@ -33,50 +27,3 @@ export const handler: Handler = async function handler(event, context) { return lambda(event, context); }; - -async function lambda( - event: HandlerEvent, - context: HandlerContext -): Promise { - const query = { - ...event.queryStringParameters, - ...event.multiValueQueryStringParameters, - }; - const url = withQuery(event.path, query); - const method = event.httpMethod || "get"; - - const r = await nitroApp.localCall({ - event, - url, - context, - headers: normalizeIncomingHeaders(event.headers), - method, - query, - body: event.body, // TODO: handle event.isBase64Encoded - }); - - return { - statusCode: r.status, - headers: normalizeOutgoingHeaders(r.headers), - body: r.body.toString(), - }; -} - -function normalizeIncomingHeaders(headers?: APIGatewayProxyEventHeaders) { - return Object.fromEntries( - Object.entries(headers || {}).map(([key, value]) => [ - key.toLowerCase(), - value!, - ]) - ); -} - -function normalizeOutgoingHeaders( - headers: Record -) { - return Object.fromEntries( - Object.entries(headers) - .filter(([key]) => !["set-cookie"].includes(key)) - .map(([k, v]) => [k, Array.isArray(v) ? v.join(",") : v!]) - ); -} diff --git a/src/runtime/error.ts b/src/runtime/error.ts index 63cf236f0e..b90a57a510 100644 --- a/src/runtime/error.ts +++ b/src/runtime/error.ts @@ -18,7 +18,7 @@ export default function (error, event) { const showDetails = isDev && statusCode !== 404; const errorObject = { - url: event.req.url || "", + url: event.node.req.url || "", statusCode, statusMessage, message, @@ -41,17 +41,17 @@ export default function (error, event) { ); } - event.res.statusCode = statusCode; + event.node.res.statusCode = statusCode; if (statusMessage) { - event.res.statusMessage = statusMessage; + event.node.res.statusMessage = statusMessage; } if (isJsonRequest(event)) { - event.res.setHeader("Content-Type", "application/json"); - event.res.end(JSON.stringify(errorObject)); + event.node.res.setHeader("Content-Type", "application/json"); + event.node.res.end(JSON.stringify(errorObject)); } else { - event.res.setHeader("Content-Type", "text/html"); - event.res.end(renderHTMLError(errorObject)); + event.node.res.setHeader("Content-Type", "text/html"); + event.node.res.end(renderHTMLError(errorObject)); } }; diff --git a/src/runtime/renderer.ts b/src/runtime/renderer.ts index c77853ac02..5d125d0db5 100644 --- a/src/runtime/renderer.ts +++ b/src/runtime/renderer.ts @@ -15,9 +15,9 @@ export type RenderHandler = ( export function defineRenderHandler(handler: RenderHandler) { return eventHandler(async (event) => { // TODO: Use serve-placeholder - if (event.req.url.endsWith("/favicon.ico")) { - event.res.setHeader("Content-Type", "image/x-icon"); - event.res.end( + if (event.node.req.url.endsWith("/favicon.ico")) { + event.node.res.setHeader("Content-Type", "image/x-icon"); + event.node.res.end( "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///yH5BAEAAAAALAAAAAABAAEAAAIBRAA7" ); return; @@ -25,11 +25,11 @@ export function defineRenderHandler(handler: RenderHandler) { const response = await handler(event); if (!response) { - if (!event.res.writableEnded) { - event.res.statusCode = - event.res.statusCode === 200 ? 500 : event.res.statusCode; - event.res.end( - "No response returned from render handler: " + event.req.url + if (!event.node.res.writableEnded) { + event.node.res.statusCode = + event.node.res.statusCode === 200 ? 500 : event.node.res.statusCode; + event.node.res.end( + "No response returned from render handler: " + event.node.req.url ); } return; @@ -44,15 +44,15 @@ export function defineRenderHandler(handler: RenderHandler) { // TODO: Caching support // Send headers - if (!event.res.headersSent && response.headers) { + if (!event.node.res.headersSent && response.headers) { for (const header in response.headers) { - event.res.setHeader(header, response.headers[header]); + event.node.res.setHeader(header, response.headers[header]); } if (response.statusCode) { - event.res.statusCode = response.statusCode; + event.node.res.statusCode = response.statusCode; } if (response.statusMessage) { - event.res.statusMessage = response.statusMessage; + event.node.res.statusMessage = response.statusMessage; } } diff --git a/src/runtime/route-rules.ts b/src/runtime/route-rules.ts index 42613aaa30..522f04fc5c 100644 --- a/src/runtime/route-rules.ts +++ b/src/runtime/route-rules.ts @@ -32,7 +32,7 @@ export function createRouteRulesHandler() { export function getRouteRules(event: H3Event): NitroRouteRules { event.context._nitro = event.context._nitro || {}; if (!event.context._nitro.routeRules) { - const path = new URL(event.req.url, "http://localhost").pathname; + const path = new URL(event.node.req.url, "http://localhost").pathname; event.context._nitro.routeRules = getRouteRulesForPath( withoutBase(path, useRuntimeConfig().app.baseURL) ); diff --git a/src/runtime/static.ts b/src/runtime/static.ts index 3e50a4ecfe..fca8f7922e 100644 --- a/src/runtime/static.ts +++ b/src/runtime/static.ts @@ -11,16 +11,20 @@ const METHODS = new Set(["HEAD", "GET"]); const EncodingMap = { gzip: ".gz", br: ".br" }; export default eventHandler((event) => { - if (event.req.method && !METHODS.has(event.req.method)) { + if (event.node.req.method && !METHODS.has(event.node.req.method)) { return; } let id = decodeURIComponent( - withLeadingSlash(withoutTrailingSlash(parseURL(event.req.url).pathname)) + withLeadingSlash( + withoutTrailingSlash(parseURL(event.node.req.url).pathname) + ) ); let asset; - const encodingHeader = String(event.req.headers["accept-encoding"] || ""); + const encodingHeader = String( + event.node.req.headers["accept-encoding"] || "" + ); const encodings = [ ...encodingHeader .split(",") @@ -30,7 +34,7 @@ export default eventHandler((event) => { "", ]; if (encodings.length > 1) { - event.res.setHeader("Vary", "Accept-Encoding"); + event.node.res.setHeader("Vary", "Accept-Encoding"); } for (const encoding of encodings) { @@ -54,48 +58,48 @@ export default eventHandler((event) => { return; } - const ifNotMatch = event.req.headers["if-none-match"] === asset.etag; + const ifNotMatch = event.node.req.headers["if-none-match"] === asset.etag; if (ifNotMatch) { - event.res.statusCode = 304; - event.res.end(); + event.node.res.statusCode = 304; + event.node.res.end(); return; } - const ifModifiedSinceH = event.req.headers["if-modified-since"]; + const ifModifiedSinceH = event.node.req.headers["if-modified-since"]; if ( ifModifiedSinceH && asset.mtime && new Date(ifModifiedSinceH) >= new Date(asset.mtime) ) { - event.res.statusCode = 304; - event.res.end(); + event.node.res.statusCode = 304; + event.node.res.end(); return; } - if (asset.type && !event.res.getHeader("Content-Type")) { - event.res.setHeader("Content-Type", asset.type); + if (asset.type && !event.node.res.getHeader("Content-Type")) { + event.node.res.setHeader("Content-Type", asset.type); } - if (asset.etag && !event.res.getHeader("ETag")) { - event.res.setHeader("ETag", asset.etag); + if (asset.etag && !event.node.res.getHeader("ETag")) { + event.node.res.setHeader("ETag", asset.etag); } - if (asset.mtime && !event.res.getHeader("Last-Modified")) { - event.res.setHeader("Last-Modified", asset.mtime); + if (asset.mtime && !event.node.res.getHeader("Last-Modified")) { + event.node.res.setHeader("Last-Modified", asset.mtime); } - if (asset.encoding && !event.res.getHeader("Content-Encoding")) { - event.res.setHeader("Content-Encoding", asset.encoding); + if (asset.encoding && !event.node.res.getHeader("Content-Encoding")) { + event.node.res.setHeader("Content-Encoding", asset.encoding); } - if (asset.size > 0 && !event.res.getHeader("Content-Length")) { - event.res.setHeader("Content-Length", asset.size); + if (asset.size > 0 && !event.node.res.getHeader("Content-Length")) { + event.node.res.setHeader("Content-Length", asset.size); } // TODO: Asset dir cache control // if (isBuildAsset) { // const TWO_DAYS = 2 * 60 * 60 * 24 - // event.res.setHeader('Cache-Control', `max-age=${TWO_DAYS}, immutable`) + // event.node.res.setHeader('Cache-Control', `max-age=${TWO_DAYS}, immutable`) // } return readAsset(id); diff --git a/src/runtime/timing.ts b/src/runtime/timing.ts index db79705c0a..94467c4515 100644 --- a/src/runtime/timing.ts +++ b/src/runtime/timing.ts @@ -1,17 +1,19 @@ import { eventHandler } from "h3"; -export const globalTiming = globalThis.__timing__ || { +import { defineNitroPlugin } from "./plugin"; + +const globalTiming = globalThis.__timing__ || { start: () => 0, end: () => 0, metrics: [], }; // https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Server-Timing -export const timingMiddleware = eventHandler((event) => { +const timingMiddleware = eventHandler((event) => { const start = globalTiming.start(); - const _end = event.res.end; - event.res.end = function ( + const _end = event.node.res.end; + event.node.res.end = function ( chunk: any, encoding: BufferEncoding, cb?: () => void @@ -23,10 +25,18 @@ export const timingMiddleware = eventHandler((event) => { const serverTiming = metrics .map((m) => `-;dur=${m[1]};desc="${encodeURIComponent(m[0])}"`) .join(", "); - if (!event.res.headersSent) { - event.res.setHeader("Server-Timing", serverTiming); + if (!event.node.res.headersSent) { + event.node.res.setHeader("Server-Timing", serverTiming); } - _end.call(event.res, chunk, encoding, cb); + _end.call(event.node.res, chunk, encoding, cb); return this; - }.bind(event.res); + }.bind(event.node.res); +}); + +export default defineNitroPlugin((nitro) => { + // Always add timing middleware to the beginning of handler stack + nitro.h3App.stack.unshift({ + route: "/", + handler: timingMiddleware, + }); }); diff --git a/src/runtime/utils.ts b/src/runtime/utils.ts index 8014c54c0f..2bbe586dcf 100644 --- a/src/runtime/utils.ts +++ b/src/runtime/utils.ts @@ -41,8 +41,8 @@ export function isJsonRequest(event: H3Event) { hasReqHeader(event, "accept", "application/json") || hasReqHeader(event, "user-agent", "curl/") || hasReqHeader(event, "user-agent", "httpie/") || - event.req.url?.endsWith(".json") || - event.req.url?.includes("/api/") + event.node.req.url?.endsWith(".json") || + event.node.req.url?.includes("/api/") ); } diff --git a/src/scan.ts b/src/scan.ts index 7d08777ae9..f0d255c97e 100644 --- a/src/scan.ts +++ b/src/scan.ts @@ -17,7 +17,15 @@ export async function scanHandlers(nitro: Nitro) { scanRoutes(nitro, "routes", "/"), ]).then((r) => r.flat()); - nitro.scannedHandlers = handlers.flatMap((h) => h.handlers); + nitro.scannedHandlers = handlers + .flatMap((h) => h.handlers) + .filter((h, index, array) => { + return ( + array.findIndex( + (h2) => h.route === h2.route && h.method === h2.method + ) === index + ); + }); return handlers; } diff --git a/src/types/nitro.ts b/src/types/nitro.ts index 1fdfc1b80b..70f27e1861 100644 --- a/src/types/nitro.ts +++ b/src/types/nitro.ts @@ -174,6 +174,7 @@ export interface NitroOptions extends PresetOptions { noPublicDir: boolean; experimental?: { wasm?: boolean | RollupWasmOptions; + legacyExternals?: boolean; }; serverAssets: ServerAssetDir[]; publicAssets: PublicAssetDir[]; diff --git a/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/index.mjs b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/index.mjs index 3d64381bce..0029f235ab 100644 --- a/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/index.mjs +++ b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/index.mjs @@ -1 +1,3 @@ -export default '1.0.0'; +import nestedLib from 'nested-lib' + +export default 'nitro-lib@1.0.0+' + nestedLib diff --git a/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/node_modules/nested-lib/index.mjs b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/node_modules/nested-lib/index.mjs new file mode 100644 index 0000000000..da8927e1e8 --- /dev/null +++ b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/node_modules/nested-lib/index.mjs @@ -0,0 +1 @@ +export default 'nested-lib@1.0.0' diff --git a/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/node_modules/nested-lib/package.json b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/node_modules/nested-lib/package.json new file mode 100644 index 0000000000..5993dae833 --- /dev/null +++ b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/node_modules/nested-lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "nested-lib", + "version": "1.0.0", + "exports": "./index.mjs" +} diff --git a/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/package.json b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/package.json index dd674789ba..b8bd61c01d 100644 --- a/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/package.json +++ b/test/fixture/_/node_modules/nitro-dep-a/node_modules/nitro-lib/package.json @@ -1,5 +1,8 @@ { "name": "nitro-lib", "version": "1.0.0", - "exports": "./index.mjs" + "exports": "./index.mjs", + "dependencies": { + "nested-lib": "1.0.0" + } } diff --git a/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/index.mjs b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/index.mjs index c9e08004a5..53aaa0be76 100644 --- a/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/index.mjs +++ b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/index.mjs @@ -1 +1,3 @@ -export default '2.0.1'; +import nestedLib from 'nested-lib' + +export default 'nitro-lib@2.0.1+' + nestedLib diff --git a/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/node_modules/nested-lib/index.mjs b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/node_modules/nested-lib/index.mjs new file mode 100644 index 0000000000..caace8b77b --- /dev/null +++ b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/node_modules/nested-lib/index.mjs @@ -0,0 +1 @@ +export default 'nested-lib@2.0.1' diff --git a/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/node_modules/nested-lib/package.json b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/node_modules/nested-lib/package.json new file mode 100644 index 0000000000..fbc00e77b8 --- /dev/null +++ b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/node_modules/nested-lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "nested-lib", + "version": "2.0.1", + "exports": "./index.mjs" +} diff --git a/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/package.json b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/package.json index bfb99596eb..3396d6ee1d 100644 --- a/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/package.json +++ b/test/fixture/_/node_modules/nitro-dep-b/node_modules/nitro-lib/package.json @@ -4,5 +4,8 @@ "exports": { ".": "./index.mjs", "./subpath": "./subpath.mjs" + }, + "dependencies": { + "nested-lib": "2.0.0" } } diff --git a/test/fixture/_/node_modules/nitro-dep-b/package.json b/test/fixture/_/node_modules/nitro-dep-b/package.json index 7e30c8dd8f..d7235353b7 100644 --- a/test/fixture/_/node_modules/nitro-dep-b/package.json +++ b/test/fixture/_/node_modules/nitro-dep-b/package.json @@ -3,6 +3,6 @@ "version": "1.0.0", "exports": "./index.mjs", "dependencies": { - "nitro-lib": "2.0.0" + "nitro-lib": "2.0.1" } } diff --git a/test/fixture/_/node_modules/nitro-lib/index.mjs b/test/fixture/_/node_modules/nitro-lib/index.mjs index ff603d7009..5e07a96ab0 100644 --- a/test/fixture/_/node_modules/nitro-lib/index.mjs +++ b/test/fixture/_/node_modules/nitro-lib/index.mjs @@ -1 +1,3 @@ -export default '2.0.0'; +import nestedLib from 'nested-lib' + +export default 'nitro-lib@2.0.0+' + nestedLib diff --git a/test/fixture/_/node_modules/nitro-lib/node_modules/nested-lib/index.mjs b/test/fixture/_/node_modules/nitro-lib/node_modules/nested-lib/index.mjs new file mode 100644 index 0000000000..69cb6433e5 --- /dev/null +++ b/test/fixture/_/node_modules/nitro-lib/node_modules/nested-lib/index.mjs @@ -0,0 +1 @@ +export default 'nested-lib@2.0.0' diff --git a/test/fixture/_/node_modules/nitro-lib/node_modules/nested-lib/package.json b/test/fixture/_/node_modules/nitro-lib/node_modules/nested-lib/package.json new file mode 100644 index 0000000000..e8d4a98a0a --- /dev/null +++ b/test/fixture/_/node_modules/nitro-lib/node_modules/nested-lib/package.json @@ -0,0 +1,5 @@ +{ + "name": "nested-lib", + "version": "2.0.0", + "exports": "./index.mjs" +} diff --git a/test/fixture/_/node_modules/nitro-lib/package.json b/test/fixture/_/node_modules/nitro-lib/package.json index 81618a9dc9..3709569af3 100644 --- a/test/fixture/_/node_modules/nitro-lib/package.json +++ b/test/fixture/_/node_modules/nitro-lib/package.json @@ -1,5 +1,5 @@ { - "name": "nitro-lib", + "name": "nitro-lib-aliased-from-another-name", "version": "2.0.0", "exports": { ".": "./index.mjs", diff --git a/test/fixture/_/node_modules/nitro-lib/subpath.mjs b/test/fixture/_/node_modules/nitro-lib/subpath.mjs index ff603d7009..c4ac86cb68 100644 --- a/test/fixture/_/node_modules/nitro-lib/subpath.mjs +++ b/test/fixture/_/node_modules/nitro-lib/subpath.mjs @@ -1 +1 @@ -export default '2.0.0'; +export default 'nitro-lib@2.0.0'; diff --git a/test/presets/netlify.test.ts b/test/presets/netlify.test.ts index c8844042a5..99571d6765 100644 --- a/test/presets/netlify.test.ts +++ b/test/presets/netlify.test.ts @@ -9,7 +9,7 @@ describe("nitro:preset:netlify", async () => { const ctx = await setupTest("netlify"); testNitro(ctx, async () => { const { handler } = (await import( - resolve(ctx.outDir, "server/server.js") + resolve(ctx.outDir, "server/server.mjs") )) as { handler: Handler }; return async ({ url: rawRelativeUrl, headers, method, body }) => { // creating new URL object to parse query easier @@ -47,6 +47,7 @@ describe("nitro:preset:netlify", async () => { /rules/swr-ttl/* /.netlify/builders/server 200 /rules/swr/* /.netlify/builders/server 200 /rules/static /.netlify/builders/server 200 + /rules/dynamic /.netlify/functions/server 200 /* /.netlify/functions/server 200" `); /* eslint-enable no-tabs */ diff --git a/test/presets/vercel.test.ts b/test/presets/vercel.test.ts index 84a287a598..51079876ea 100644 --- a/test/presets/vercel.test.ts +++ b/test/presets/vercel.test.ts @@ -97,6 +97,10 @@ describe("nitro:preset:vercel", async () => { { "handle": "filesystem", }, + { + "dest": "/__nitro", + "src": "/rules/dynamic", + }, { "dest": "/__nitro--rules-swr?url=$url", "src": "(?/rules/swr/.*)", diff --git a/test/tests.ts b/test/tests.ts index 6cbc11cc63..aa3ffcf361 100644 --- a/test/tests.ts +++ b/test/tests.ts @@ -3,6 +3,7 @@ import { listen, Listener } from "listhen"; import destr from "destr"; import { fetch } from "ofetch"; import { expect, it, afterAll } from "vitest"; +import { isWindows } from "std-env"; import { fileURLToPath } from "mlly"; import { joinURL } from "ufo"; import * as _nitro from "../src"; @@ -46,6 +47,7 @@ export async function setupTest(preset: string) { cors: true, headers: { "access-control-allowed-methods": "GET" }, }, + "/rules/dynamic": { cache: false }, "/rules/redirect": { redirect: "/base" }, "/rules/static": { static: true }, "/rules/swr/**": { swr: true }, @@ -56,6 +58,7 @@ export async function setupTest(preset: string) { "/rules/nested/**": { redirect: "/base", headers: { "x-test": "test" } }, "/rules/nested/override": { redirect: { to: "/other" } }, }, + timing: preset !== "cloudflare" && preset !== "vercel-edge", })); if (ctx.isDev) { @@ -195,7 +198,7 @@ export function testNitro( it("universal import.meta", async () => { const { status, data } = await callHandler({ url: "/api/import-meta" }); expect(status).toBe(200); - expect(data.testFile).toMatch(/\/test.txt$/); + expect(data.testFile).toMatch(/[/\\]test.txt$/); expect(data.hasEnv).toBe(true); }); @@ -228,10 +231,10 @@ export function testNitro( it("resolve module version conflicts", async () => { const { data } = await callHandler({ url: "/modules" }); expect(data).toMatchObject({ - depA: "2.0.1", - depB: "2.0.1", - depLib: "2.0.1", - subpathLib: "2.0.1", + depA: "nitro-lib@1.0.0+nested-lib@1.0.0", + depB: "nitro-lib@2.0.1+nested-lib@2.0.1", + depLib: "nitro-lib@2.0.0+nested-lib@2.0.0", + subpathLib: "nitro-lib@2.0.0", }); }); @@ -239,4 +242,14 @@ export function testNitro( additionalTests(ctx, callHandler); } } + + if (ctx.nitro!.options.timing) { + it("set server timing header", async () => { + const { data, status, headers } = await callHandler({ + url: "/api/hello", + }); + expect(status).toBe(200); + expect(headers["server-timing"]).toMatch(/-;dur=\d+;desc="Generate"/); + }); + } }