From 863a006ee7d616d24cc2fc794695c74d541ec5ff Mon Sep 17 00:00:00 2001 From: Aaron Date: Mon, 3 Jun 2024 16:43:25 -0700 Subject: [PATCH] docs: Restructure wxt.dev (#701) --- .gitignore | 2 +- docs/{guide => .old}/development.md | 6 +- .../.vitepress/components/UsingWxtSection.vue | 120 +++---- docs/.vitepress/config.ts | 181 +++++++--- docs/.vitepress/loaders/cli.data.ts | 60 ++++ docs/.vitepress/plugins/cli.tpl.md | 5 - docs/.vitepress/plugins/generate-cli-docs.ts | 118 ------- docs/api/cli/wxt-build.md | 7 + docs/api/cli/wxt-clean.md | 7 + docs/api/cli/wxt-init.md | 7 + docs/api/cli/wxt-prepare.md | 7 + docs/api/cli/wxt-submit-init.md | 9 + docs/api/cli/wxt-submit.md | 9 + docs/api/cli/wxt-zip.md | 7 + docs/api/cli/wxt.md | 7 + docs/get-started/assets.md | 33 ++ docs/{guide => get-started}/compare.md | 19 +- docs/get-started/configuration.md | 57 +++ docs/get-started/entrypoints.md | 60 ++++ docs/{guide => get-started}/installation.md | 72 +--- docs/{guide => get-started}/introduction.md | 8 + docs/{guide => get-started}/migrate-to-wxt.md | 30 +- docs/{guide => get-started}/publishing.md | 4 +- docs/get-started/testing.md | 25 ++ docs/guide/assets.md | 85 ----- docs/guide/configuration.md | 99 ------ docs/guide/directory-structure/assets.md | 42 +++ docs/guide/directory-structure/components.md | 5 + docs/guide/directory-structure/composables.md | 5 + .../entrypoints/background.md | 0 .../entrypoints/bookmarks.md | 0 .../entrypoints/content-scripts.md | 2 +- .../directory-structure}/entrypoints/css.md | 4 +- .../entrypoints/devtools.md | 0 .../entrypoints/history.md | 0 .../entrypoints/newtab.md | 0 .../entrypoints/options.md | 0 .../directory-structure}/entrypoints/popup.md | 0 .../entrypoints/sandbox.md | 0 .../entrypoints/sidepanel.md | 0 .../entrypoints/unlisted-pages.md | 0 .../entrypoints/unlisted-scripts.md | 0 docs/guide/directory-structure/env.md | 5 + docs/guide/directory-structure/hooks.md | 5 + docs/guide/directory-structure/output.md | 5 + docs/guide/directory-structure/package.md | 5 + .../guide/directory-structure/public/index.md | 35 ++ .../directory-structure/public/locales.md | 5 + docs/guide/directory-structure/tsconfig.md | 5 + docs/guide/directory-structure/utils.md | 5 + .../directory-structure/web-ext-config.md | 5 + docs/guide/directory-structure/wxt-config.md | 5 + docs/guide/directory-structure/wxt.md | 5 + docs/guide/entrypoints.md | 141 -------- docs/guide/extension-apis.md | 94 ----- docs/guide/extension-apis/messaging.md | 36 ++ docs/guide/extension-apis/others.md | 5 + docs/guide/extension-apis/scripting.md | 26 ++ docs/guide/{ => extension-apis}/storage.md | 6 +- docs/guide/go-further/custom-events.md | 5 + docs/guide/go-further/debugging.md | 5 + .../go-further/entrypoint-side-effects.md | 52 +++ .../{esm.md => go-further/es-modules.md} | 0 .../{ => go-further}/handling-updates.md | 2 +- docs/guide/go-further/how-wxt-works.md | 5 + docs/guide/{ => go-further}/remote-code.md | 0 docs/guide/{ => go-further}/testing.md | 2 +- docs/guide/{ => go-further}/vite.md | 0 docs/guide/{ => key-concepts}/auto-imports.md | 24 +- .../{ => key-concepts}/content-script-ui.md | 14 +- .../guide/key-concepts/frontend-frameworks.md | 92 +++++ docs/guide/{ => key-concepts}/manifest.md | 328 +++++++++--------- .../{ => key-concepts}/multiple-browsers.md | 2 +- .../key-concepts/web-extension-polyfill.md | 108 ++++++ docs/guide/key-concepts/wxt-submit.md | 9 + docs/index.md | 37 +- docs/public/_redirects | 4 +- docs/typedoc.json | 2 +- package.json | 2 +- packages/wxt-demo/vitest.config.ts | 1 + packages/wxt/CHANGELOG.md | 2 +- .../src/client/content-scripts/ui/index.ts | 6 +- packages/wxt/vitest.config.ts | 1 + pnpm-lock.yaml | 317 ++++++++++++----- 84 files changed, 1447 insertions(+), 1068 deletions(-) rename docs/{guide => .old}/development.md (91%) create mode 100644 docs/.vitepress/loaders/cli.data.ts delete mode 100644 docs/.vitepress/plugins/cli.tpl.md delete mode 100644 docs/.vitepress/plugins/generate-cli-docs.ts create mode 100644 docs/api/cli/wxt-build.md create mode 100644 docs/api/cli/wxt-clean.md create mode 100644 docs/api/cli/wxt-init.md create mode 100644 docs/api/cli/wxt-prepare.md create mode 100644 docs/api/cli/wxt-submit-init.md create mode 100644 docs/api/cli/wxt-submit.md create mode 100644 docs/api/cli/wxt-zip.md create mode 100644 docs/api/cli/wxt.md create mode 100644 docs/get-started/assets.md rename docs/{guide => get-started}/compare.md (77%) create mode 100644 docs/get-started/configuration.md create mode 100644 docs/get-started/entrypoints.md rename docs/{guide => get-started}/installation.md (56%) rename docs/{guide => get-started}/introduction.md (80%) rename docs/{guide => get-started}/migrate-to-wxt.md (61%) rename docs/{guide => get-started}/publishing.md (97%) create mode 100644 docs/get-started/testing.md delete mode 100644 docs/guide/assets.md delete mode 100644 docs/guide/configuration.md create mode 100644 docs/guide/directory-structure/assets.md create mode 100644 docs/guide/directory-structure/components.md create mode 100644 docs/guide/directory-structure/composables.md rename docs/{ => guide/directory-structure}/entrypoints/background.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/bookmarks.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/content-scripts.md (95%) rename docs/{ => guide/directory-structure}/entrypoints/css.md (79%) rename docs/{ => guide/directory-structure}/entrypoints/devtools.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/history.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/newtab.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/options.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/popup.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/sandbox.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/sidepanel.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/unlisted-pages.md (100%) rename docs/{ => guide/directory-structure}/entrypoints/unlisted-scripts.md (100%) create mode 100644 docs/guide/directory-structure/env.md create mode 100644 docs/guide/directory-structure/hooks.md create mode 100644 docs/guide/directory-structure/output.md create mode 100644 docs/guide/directory-structure/package.md create mode 100644 docs/guide/directory-structure/public/index.md create mode 100644 docs/guide/directory-structure/public/locales.md create mode 100644 docs/guide/directory-structure/tsconfig.md create mode 100644 docs/guide/directory-structure/utils.md create mode 100644 docs/guide/directory-structure/web-ext-config.md create mode 100644 docs/guide/directory-structure/wxt-config.md create mode 100644 docs/guide/directory-structure/wxt.md delete mode 100644 docs/guide/entrypoints.md delete mode 100644 docs/guide/extension-apis.md create mode 100644 docs/guide/extension-apis/messaging.md create mode 100644 docs/guide/extension-apis/others.md create mode 100644 docs/guide/extension-apis/scripting.md rename docs/guide/{ => extension-apis}/storage.md (97%) create mode 100644 docs/guide/go-further/custom-events.md create mode 100644 docs/guide/go-further/debugging.md create mode 100644 docs/guide/go-further/entrypoint-side-effects.md rename docs/guide/{esm.md => go-further/es-modules.md} (100%) rename docs/guide/{ => go-further}/handling-updates.md (94%) create mode 100644 docs/guide/go-further/how-wxt-works.md rename docs/guide/{ => go-further}/remote-code.md (100%) rename docs/guide/{ => go-further}/testing.md (92%) rename docs/guide/{ => go-further}/vite.md (100%) rename docs/guide/{ => key-concepts}/auto-imports.md (60%) rename docs/guide/{ => key-concepts}/content-script-ui.md (89%) create mode 100644 docs/guide/key-concepts/frontend-frameworks.md rename docs/guide/{ => key-concepts}/manifest.md (51%) rename docs/guide/{ => key-concepts}/multiple-browsers.md (97%) create mode 100644 docs/guide/key-concepts/web-extension-polyfill.md create mode 100644 docs/guide/key-concepts/wxt-submit.md diff --git a/.gitignore b/.gitignore index 68774079..31fbfa9f 100644 --- a/.gitignore +++ b/.gitignore @@ -17,6 +17,6 @@ web-ext.config.ts templates/*/pnpm-lock.yaml templates/*/yarn.lock templates/*/package-lock.json -docs/api +docs/api/reference stats.html .tool-versions diff --git a/docs/guide/development.md b/docs/.old/development.md similarity index 91% rename from docs/guide/development.md rename to docs/.old/development.md index 0ccdd499..50098add 100644 --- a/docs/guide/development.md +++ b/docs/.old/development.md @@ -33,7 +33,7 @@ For production builds, none of the above modifications will be applied, and you' ## Configure Browser Startup -WXT uses [`web-ext` by Mozilla](https://github.com/mozilla/web-ext) to automatically open a browser with the extension installed. You can configure the runner's behavior via the [`runner`](/api/wxt/interfaces/InlineConfig#runner) option, or in a separate gitignored file, `web-ext.config.ts`. +WXT uses [`web-ext` by Mozilla](https://github.com/mozilla/web-ext) to automatically open a browser with the extension installed. You can configure the runner's behavior via the [`runner`](/api/reference/wxt/interfaces/InlineConfig#runner) option, or in a separate gitignored file, `web-ext.config.ts`. :::code-group @@ -59,7 +59,7 @@ export default defineRunnerConfig({ ### Browser Binaries -`web-ext`'s browser discovery is very limited. By default, it only guesses at where Chrome and Firefox are installed. If you've customized your install locations, you may need to tell `web-ext` where the binaries/executables are located using the [`binaries` option](/api/wxt/interfaces/ExtensionRunnerConfig#binaries). For other Chromium based browsers, like Edge or Opera, you'll need to explicitly list them in the `binaries` option as well, otherwise they will open in Chrome by default. +`web-ext`'s browser discovery is very limited. By default, it only guesses at where Chrome and Firefox are installed. If you've customized your install locations, you may need to tell `web-ext` where the binaries/executables are located using the [`binaries` option](/api/reference/wxt/interfaces/ExtensionRunnerConfig#binaries). For other Chromium based browsers, like Edge or Opera, you'll need to explicitly list them in the `binaries` option as well, otherwise they will open in Chrome by default. ```ts // ~/web-ext.config.ts @@ -93,7 +93,7 @@ export default defineRunnerConfig({ }); ``` -For a full list of options, see the [API Reference](/api/wxt/interfaces/ExtensionRunnerConfig). +For a full list of options, see the [API Reference](/api/reference/wxt/interfaces/ExtensionRunnerConfig). ## Reload the Extension diff --git a/docs/.vitepress/components/UsingWxtSection.vue b/docs/.vitepress/components/UsingWxtSection.vue index ca6072ce..3181db63 100644 --- a/docs/.vitepress/components/UsingWxtSection.vue +++ b/docs/.vitepress/components/UsingWxtSection.vue @@ -54,90 +54,56 @@ function getStoreUrl(extension: ChromeExtension) { diff --git a/docs/public/_redirects b/docs/public/_redirects index 922e8902..595e8d0e 100644 --- a/docs/public/_redirects +++ b/docs/public/_redirects @@ -2,8 +2,8 @@ # https://docs.netlify.com/routing/redirects/ # Old URLs -> New URLs -/config.html /api/wxt/interfaces/InlineConfig.html -/api/config.html /api/wxt/interfaces/InlineConfig.html +/config.html /api/reference/wxt/interfaces/InlineConfig.html +/api/config.html /api/reference/wxt/interfaces/InlineConfig.html /entrypoints /entrypoints/background.html /get-started/assets.html /guide/assets.html /get-started/build-targets.html /guide/multiple-browsers.html diff --git a/docs/typedoc.json b/docs/typedoc.json index f09aff57..5ac20200 100644 --- a/docs/typedoc.json +++ b/docs/typedoc.json @@ -3,7 +3,7 @@ "entryPointStrategy": "packages", "entryPoints": ["../packages/wxt"], "plugin": ["typedoc-plugin-markdown", "typedoc-vitepress-theme"], - "out": "./api", + "out": "./api/reference", "githubPages": false, "excludePrivate": true, "excludeProtected": true, diff --git a/package.json b/package.json index e3936e18..d285b152 100644 --- a/package.json +++ b/package.json @@ -30,7 +30,7 @@ "typedoc-plugin-markdown": "4.0.0-next.23", "typedoc-vitepress-theme": "1.0.0-next.3", "typescript": "^5.3.2", - "vitepress": "1.0.0-rc.34", + "vitepress": "^1.2.2", "vitest": "^1.5.3", "vitest-mock-extended": "^1.3.1", "vitest-plugin-random-seed": "^1.0.2", diff --git a/packages/wxt-demo/vitest.config.ts b/packages/wxt-demo/vitest.config.ts index bec0c7c2..7bd958d5 100644 --- a/packages/wxt-demo/vitest.config.ts +++ b/packages/wxt-demo/vitest.config.ts @@ -6,5 +6,6 @@ export default defineProject({ mockReset: true, restoreMocks: true, }, + // @ts-expect-error plugins: [WxtVitest()], }); diff --git a/packages/wxt/CHANGELOG.md b/packages/wxt/CHANGELOG.md index 0bc99bdd..ea1cd905 100644 --- a/packages/wxt/CHANGELOG.md +++ b/packages/wxt/CHANGELOG.md @@ -1046,7 +1046,7 @@ Renamed undocumented constants for detecting the build config at runtime in [#38 #### ⚠️ Breaking Changes -- `wxt/storage` no longer relies on [`unstorage`](https://www.npmjs.com/package/unstorage). Some `unstorage` APIs, like `prefixStorage`, have been removed, while others, like `snapshot`, are methods on the new `storage` object. Most of the standard usage remains the same. See https://wxt.dev/guide/storage and https://wxt.dev/api/wxt/storage/ for more details ([#300](https://github.com/wxt-dev/wxt/pull/300)) +- `wxt/storage` no longer relies on [`unstorage`](https://www.npmjs.com/package/unstorage). Some `unstorage` APIs, like `prefixStorage`, have been removed, while others, like `snapshot`, are methods on the new `storage` object. Most of the standard usage remains the same. See https://wxt.dev/guide/storage and https://wxt.dev/api/reference/wxt/storage/ for more details ([#300](https://github.com/wxt-dev/wxt/pull/300)) ## v0.12.5 diff --git a/packages/wxt/src/client/content-scripts/ui/index.ts b/packages/wxt/src/client/content-scripts/ui/index.ts index 62d6a9a4..14e8283d 100644 --- a/packages/wxt/src/client/content-scripts/ui/index.ts +++ b/packages/wxt/src/client/content-scripts/ui/index.ts @@ -17,7 +17,7 @@ export * from './types'; /** * Create a content script UI without any isolation. * - * @see https://wxt.dev/guide/content-script-ui.html#integrated + * @see https://wxt.dev/guide/key-concepts/content-script-ui.html#integrated */ export function createIntegratedUi( ctx: ContentScriptContext, @@ -53,7 +53,7 @@ export function createIntegratedUi( /** * Create a content script UI using an iframe. * - * @see https://wxt.dev/guide/content-script-ui.html#iframe + * @see https://wxt.dev/guide/key-concepts/content-script-ui.html#iframe */ export function createIframeUi( ctx: ContentScriptContext, @@ -95,7 +95,7 @@ export function createIframeUi( * * > This function is async because it has to load the CSS via a network call. * - * @see https://wxt.dev/guide/content-script-ui.html#shadowroot + * @see https://wxt.dev/guide/key-concepts/content-script-ui.html#shadowroot */ export async function createShadowRootUi( ctx: ContentScriptContext, diff --git a/packages/wxt/vitest.config.ts b/packages/wxt/vitest.config.ts index 1aa9b1db..485aecaf 100644 --- a/packages/wxt/vitest.config.ts +++ b/packages/wxt/vitest.config.ts @@ -16,6 +16,7 @@ export default defineProject({ setupFiles: ['vitest.setup.ts'], testTimeout: 120e3, }, + // @ts-expect-error plugins: [RandomSeed()], resolve: { alias: { diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index c0cb9487..6f2e4b13 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -45,8 +45,8 @@ importers: specifier: ^5.3.2 version: 5.3.3 vitepress: - specifier: 1.0.0-rc.34 - version: 1.0.0-rc.34(typescript@5.3.3) + specifier: ^1.2.2 + version: 1.2.2(typescript@5.3.3) vitest: specifier: ^1.5.3 version: 1.5.3 @@ -515,14 +515,14 @@ packages: - supports-color dev: false - /@docsearch/css@3.5.2: - resolution: {integrity: sha512-SPiDHaWKQZpwR2siD0KQUwlStvIAnEyK6tAE2h2Wuoq8ue9skzhlyVQ1ddzOxX6khULnAALDiR/isSF3bnuciA==} + /@docsearch/css@3.6.0: + resolution: {integrity: sha512-+sbxb71sWre+PwDK7X2T8+bhS6clcVMLwBPznX45Qu6opJcgRjAp7gYSDzVFp187J+feSj5dNBN1mJoi6ckkUQ==} dev: true - /@docsearch/js@3.5.2: - resolution: {integrity: sha512-p1YFTCDflk8ieHgFJYfmyHBki1D61+U9idwrLh+GQQMrBSP3DLGKpy0XUJtPjAOPltcVbqsTjiPFfH7JImjUNg==} + /@docsearch/js@3.6.0: + resolution: {integrity: sha512-QujhqINEElrkIfKwyyyTfbsfMAYCkylInLYMRqHy7PHc8xTBQCow73tlo/Kc7oIwBrCLf0P3YhjlOeV4v8hevQ==} dependencies: - '@docsearch/react': 3.5.2 + '@docsearch/react': 3.6.0 preact: 10.18.1 transitivePeerDependencies: - '@algolia/client-search' @@ -532,8 +532,8 @@ packages: - search-insights dev: true - /@docsearch/react@3.5.2: - resolution: {integrity: sha512-9Ahcrs5z2jq/DcAvYtvlqEBHImbm4YJI8M9y0x6Tqg598P40HTEkX7hsMcIuThI+hTFxRGZ9hll0Wygm2yEjng==} + /@docsearch/react@3.6.0: + resolution: {integrity: sha512-HUFut4ztcVNmqy9gp/wxNbC7pTOHhgVVkHVGCACTuLhUKUhKAF9KYHJtMiLUJxEqiFLQiuri1fWF8zqwM/cu1w==} peerDependencies: '@types/react': '>= 16.8.0 < 19.0.0' react: '>= 16.8.0 < 19.0.0' @@ -551,7 +551,7 @@ packages: dependencies: '@algolia/autocomplete-core': 1.9.3(algoliasearch@4.20.0) '@algolia/autocomplete-preset-algolia': 1.9.3(algoliasearch@4.20.0) - '@docsearch/css': 3.5.2 + '@docsearch/css': 3.6.0 algoliasearch: 4.20.0 transitivePeerDependencies: - '@algolia/client-search' @@ -1358,6 +1358,16 @@ packages: resolution: {integrity: sha512-831qok9r2t8AlxLko40y2ebgSDhenenCatLVeW/uBtnHPyhHOvG0C7TvfgecV+wHzIm5KUICgzmVpWS+IMEAeg==} dev: true + /@shikijs/core@1.6.2: + resolution: {integrity: sha512-guW5JeDzZ7uwOjTfCOFZ2VtVXk5tmkMzBYbKGfXsmAH1qYOej49L5jQDcGmwd6/OgvpmWhzO2GNJkQIFnbwLPQ==} + dev: true + + /@shikijs/transformers@1.6.2: + resolution: {integrity: sha512-ndqTWyHnxmsLkowhKWTam26opw8hg5a34y6FAUG/Xf6E49n3MM//nenKxXiWpPYkNPl1KZnYXB1k+Ia46wjOZg==} + dependencies: + shiki: 1.6.2 + dev: true + /@sinclair/typebox@0.27.8: resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} dev: true @@ -1403,8 +1413,8 @@ packages: '@types/node': 20.10.3 dev: true - /@types/linkify-it@3.0.4: - resolution: {integrity: sha512-hPpIeeHb/2UuCw06kSNAOVWgehBLXEo0/fUs0mw3W2qhqX89PI2yvok83MnuctYGCPrabGIoi0fFso4DQ+sNUQ==} + /@types/linkify-it@5.0.0: + resolution: {integrity: sha512-sVDA58zAw4eWAffKOaQH5/5j3XeayukzDk+ewSsnv3p4yJEZHCCzMDiZM8e0OUrRvmpGZ85jf4yDHkHsgBNr9Q==} dev: true /@types/lodash.merge@4.6.9: @@ -1417,15 +1427,15 @@ packages: resolution: {integrity: sha512-YI/M/4HRImtNf3pJgbF+W6FrXovqj+T+/HpENLTooK9PnkacBsDpeP3IpHab40CClUfhNmdM2WTNP2sa2dni5Q==} dev: true - /@types/markdown-it@13.0.7: - resolution: {integrity: sha512-U/CBi2YUUcTHBt5tjO2r5QV/x0Po6nsYwQU4Y04fBS6vfoImaiZ6f8bi3CjTCxBPQSO1LMyUqkByzi8AidyxfA==} + /@types/markdown-it@14.1.1: + resolution: {integrity: sha512-4NpsnpYl2Gt1ljyBGrKMxFYAYvpqbnnkgP/i/g+NLpjEUa3obn1XJCur9YbEXKDAkaXqsR1LbDnGEJ0MmKFxfg==} dependencies: - '@types/linkify-it': 3.0.4 - '@types/mdurl': 1.0.4 + '@types/linkify-it': 5.0.0 + '@types/mdurl': 2.0.0 dev: true - /@types/mdurl@1.0.4: - resolution: {integrity: sha512-ARVxjAEX5TARFRzpDRVC6cEk0hUIXCCwaMhz8y7S1/PxU6zZS1UMjyobz7q4w/D/R552r4++EhwmXK1N2rAy0A==} + /@types/mdurl@2.0.0: + resolution: {integrity: sha512-RGdgjQUZba5p6QEFAVx2OGb8rQDL/cPRG7GiedRzMcJ1tYnUANBncjbSB1NRGwbvjcPeikRABz2nshyPk1bhWg==} dev: true /@types/minimatch@3.0.5: @@ -1496,15 +1506,15 @@ packages: '@types/node': 20.10.3 optional: true - /@vitejs/plugin-vue@5.0.2(vite@5.2.8)(vue@3.4.21): - resolution: {integrity: sha512-kEjJHrLb5ePBvjD0SPZwJlw1QTRcjjCA9sB5VyfonoXVBxTS7TMnqL6EkLt1Eu61RDeiuZ/WN9Hf6PxXhPI2uA==} + /@vitejs/plugin-vue@5.0.5(vite@5.2.12)(vue@3.4.27): + resolution: {integrity: sha512-LOjm7XeIimLBZyzinBQ6OSm3UBCNVCpLkxGC0oWmm2YPzVZoxMsdvNVimLTBzpAnR9hl/yn1SHGuRfe6/Td9rQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: vite: ^5.0.0 vue: ^3.2.25 dependencies: - vite: 5.2.8(@types/node@20.10.3) - vue: 3.4.21(typescript@5.3.3) + vite: 5.2.12 + vue: 3.4.27(typescript@5.3.3) dev: true /@vitest/coverage-v8@1.2.2(vitest@1.5.3): @@ -1579,6 +1589,16 @@ packages: source-map-js: 1.2.0 dev: true + /@vue/compiler-core@3.4.27: + resolution: {integrity: sha512-E+RyqY24KnyDXsCuQrI+mlcdW3ALND6U7Gqa/+bVwbcpcR3BRRIckFoz7Qyd4TTlnugtwuI7YgjbvsLmxb+yvg==} + dependencies: + '@babel/parser': 7.24.5 + '@vue/shared': 3.4.27 + entities: 4.5.0 + estree-walker: 2.0.2 + source-map-js: 1.2.0 + dev: true + /@vue/compiler-dom@3.4.21: resolution: {integrity: sha512-IZC6FKowtT1sl0CR5DpXSiEB5ayw75oT2bma1BEhV7RRR1+cfwLrxc2Z8Zq/RGFzJ8w5r9QtCOvTjQgdn0IKmA==} dependencies: @@ -1586,6 +1606,13 @@ packages: '@vue/shared': 3.4.21 dev: true + /@vue/compiler-dom@3.4.27: + resolution: {integrity: sha512-kUTvochG/oVgE1w5ViSr3KUBh9X7CWirebA3bezTbB5ZKBQZwR2Mwj9uoSKRMFcz4gSMzzLXBPD6KpCLb9nvWw==} + dependencies: + '@vue/compiler-core': 3.4.27 + '@vue/shared': 3.4.27 + dev: true + /@vue/compiler-sfc@3.4.21: resolution: {integrity: sha512-me7epoTxYlY+2CUM7hy9PCDdpMPfIwrOvAXud2Upk10g4YLv9UBW7kL798TvMeDhPthkZ0CONNrK2GoeI1ODiQ==} dependencies: @@ -1600,6 +1627,20 @@ packages: source-map-js: 1.2.0 dev: true + /@vue/compiler-sfc@3.4.27: + resolution: {integrity: sha512-nDwntUEADssW8e0rrmE0+OrONwmRlegDA1pD6QhVeXxjIytV03yDqTey9SBDiALsvAd5U4ZrEKbMyVXhX6mCGA==} + dependencies: + '@babel/parser': 7.24.5 + '@vue/compiler-core': 3.4.27 + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + estree-walker: 2.0.2 + magic-string: 0.30.10 + postcss: 8.4.38 + source-map-js: 1.2.0 + dev: true + /@vue/compiler-ssr@3.4.21: resolution: {integrity: sha512-M5+9nI2lPpAsgXOGQobnIueVqc9sisBFexh5yMIMRAPYLa7+5wEJs8iqOZc1WAa9WQbx9GR2twgznU8LTIiZ4Q==} dependencies: @@ -1607,8 +1648,38 @@ packages: '@vue/shared': 3.4.21 dev: true - /@vue/devtools-api@6.5.1: - resolution: {integrity: sha512-+KpckaAQyfbvshdDW5xQylLni1asvNSGme1JFs8I1+/H5pHEhqUKMEQD/qn3Nx5+/nycBq11qAEi8lk+LXI2dA==} + /@vue/compiler-ssr@3.4.27: + resolution: {integrity: sha512-CVRzSJIltzMG5FcidsW0jKNQnNRYC8bT21VegyMMtHmhW3UOI7knmUehzswXLrExDLE6lQCZdrhD4ogI7c+vuw==} + dependencies: + '@vue/compiler-dom': 3.4.27 + '@vue/shared': 3.4.27 + dev: true + + /@vue/devtools-api@7.2.1(vue@3.4.27): + resolution: {integrity: sha512-6oNCtyFOrNdqm6GUkFujsCgFlpbsHLnZqq7edeM/+cxAbMyCWvsaCsIMUaz7AiluKLccCGEM8fhOsjaKgBvb7g==} + dependencies: + '@vue/devtools-kit': 7.2.1(vue@3.4.27) + transitivePeerDependencies: + - vue + dev: true + + /@vue/devtools-kit@7.2.1(vue@3.4.27): + resolution: {integrity: sha512-Wak/fin1X0Q8LLIfCAHBrdaaB+R6IdpSXsDByPHbQ3BmkCP0/cIo/oEGp9i0U2+gEqD4L3V9RDjNf1S34DTzQQ==} + peerDependencies: + vue: ^3.0.0 + dependencies: + '@vue/devtools-shared': 7.2.1 + hookable: 5.5.3 + mitt: 3.0.1 + perfect-debounce: 1.0.0 + speakingurl: 14.0.1 + vue: 3.4.27(typescript@5.3.3) + dev: true + + /@vue/devtools-shared@7.2.1: + resolution: {integrity: sha512-PCJF4UknJmOal68+X9XHyVeQ+idv0LFujkTOIW30+GaMJqwFVN9LkQKX4gLqn61KkGMdJTzQ1bt7EJag3TI6AA==} + dependencies: + rfdc: 1.3.1 dev: true /@vue/reactivity@3.4.21: @@ -1617,6 +1688,12 @@ packages: '@vue/shared': 3.4.21 dev: true + /@vue/reactivity@3.4.27: + resolution: {integrity: sha512-kK0g4NknW6JX2yySLpsm2jlunZJl2/RJGZ0H9ddHdfBVHcNzxmQ0sS0b09ipmBoQpY8JM2KmUw+a6sO8Zo+zIA==} + dependencies: + '@vue/shared': 3.4.27 + dev: true + /@vue/runtime-core@3.4.21: resolution: {integrity: sha512-pQthsuYzE1XcGZznTKn73G0s14eCJcjaLvp3/DKeYWoFacD9glJoqlNBxt3W2c5S40t6CCcpPf+jG01N3ULyrA==} dependencies: @@ -1624,6 +1701,13 @@ packages: '@vue/shared': 3.4.21 dev: true + /@vue/runtime-core@3.4.27: + resolution: {integrity: sha512-7aYA9GEbOOdviqVvcuweTLe5Za4qBZkUY7SvET6vE8kyypxVgaT1ixHLg4urtOlrApdgcdgHoTZCUuTGap/5WA==} + dependencies: + '@vue/reactivity': 3.4.27 + '@vue/shared': 3.4.27 + dev: true + /@vue/runtime-dom@3.4.21: resolution: {integrity: sha512-gvf+C9cFpevsQxbkRBS1NpU8CqxKw0ebqMvLwcGQrNpx6gqRDodqKqA+A2VZZpQ9RpK2f9yfg8VbW/EpdFUOJw==} dependencies: @@ -1632,6 +1716,14 @@ packages: csstype: 3.1.3 dev: true + /@vue/runtime-dom@3.4.27: + resolution: {integrity: sha512-ScOmP70/3NPM+TW9hvVAz6VWWtZJqkbdf7w6ySsws+EsqtHvkhxaWLecrTorFxsawelM5Ys9FnDEMt6BPBDS0Q==} + dependencies: + '@vue/runtime-core': 3.4.27 + '@vue/shared': 3.4.27 + csstype: 3.1.3 + dev: true + /@vue/server-renderer@3.4.21(vue@3.4.21): resolution: {integrity: sha512-aV1gXyKSN6Rz+6kZ6kr5+Ll14YzmIbeuWe7ryJl5muJ4uwSwY/aStXTixx76TwkZFJLm1aAlA/HSWEJ4EyiMkg==} peerDependencies: @@ -1642,24 +1734,38 @@ packages: vue: 3.4.21(typescript@5.3.3) dev: true + /@vue/server-renderer@3.4.27(vue@3.4.27): + resolution: {integrity: sha512-dlAMEuvmeA3rJsOMJ2J1kXU7o7pOxgsNHVr9K8hB3ImIkSuBrIdy0vF66h8gf8Tuinf1TK3mPAz2+2sqyf3KzA==} + peerDependencies: + vue: 3.4.27 + dependencies: + '@vue/compiler-ssr': 3.4.27 + '@vue/shared': 3.4.27 + vue: 3.4.27(typescript@5.3.3) + dev: true + /@vue/shared@3.4.21: resolution: {integrity: sha512-PuJe7vDIi6VYSinuEbUIQgMIRZGgM8e4R+G+/dQTk0X1NEdvgvvgv7m+rfmDH1gZzyA1OjjoWskvHlfRNfQf3g==} dev: true - /@vueuse/core@10.7.1(vue@3.4.21): - resolution: {integrity: sha512-74mWHlaesJSWGp1ihg76vAnfVq9NTv1YT0SYhAQ6zwFNdBkkP+CKKJmVOEHcdSnLXCXYiL5e7MaewblfiYLP7g==} + /@vue/shared@3.4.27: + resolution: {integrity: sha512-DL3NmY2OFlqmYYrzp39yi3LDkKxa5vZVwxWdQ3rG0ekuWscHraeIbnI8t+aZK7qhYqEqWKTUdijadunb9pnrgA==} + dev: true + + /@vueuse/core@10.10.0(vue@3.4.27): + resolution: {integrity: sha512-vexJ/YXYs2S42B783rI95lMt3GzEwkxzC8Hb0Ndpd8rD+p+Lk/Za4bd797Ym7yq4jXqdSyj3JLChunF/vyYjUw==} dependencies: '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.7.1 - '@vueuse/shared': 10.7.1(vue@3.4.21) - vue-demi: 0.14.6(vue@3.4.21) + '@vueuse/metadata': 10.10.0 + '@vueuse/shared': 10.10.0(vue@3.4.27) + vue-demi: 0.14.8(vue@3.4.27) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/integrations@10.7.1(focus-trap@7.5.4)(vue@3.4.21): - resolution: {integrity: sha512-cKo5LEeKVHdBRBtMTOrDPdR0YNtrmN9IBfdcnY2P3m5LHVrsD0xiHUtAH1WKjHQRIErZG6rJUa6GA4tWZt89Og==} + /@vueuse/integrations@10.10.0(focus-trap@7.5.4)(vue@3.4.27): + resolution: {integrity: sha512-vHGeK7X6mkdkpcm1eE9t3Cpm21pNVfZRwrjwwbrEs9XftnSgszF4831G2rei8Dt9cIYJIfFV+iyx/29muimJPQ==} peerDependencies: async-validator: '*' axios: '*' @@ -1699,23 +1805,23 @@ packages: universal-cookie: optional: true dependencies: - '@vueuse/core': 10.7.1(vue@3.4.21) - '@vueuse/shared': 10.7.1(vue@3.4.21) + '@vueuse/core': 10.10.0(vue@3.4.27) + '@vueuse/shared': 10.10.0(vue@3.4.27) focus-trap: 7.5.4 - vue-demi: 0.14.6(vue@3.4.21) + vue-demi: 0.14.8(vue@3.4.27) transitivePeerDependencies: - '@vue/composition-api' - vue dev: true - /@vueuse/metadata@10.7.1: - resolution: {integrity: sha512-jX8MbX5UX067DYVsbtrmKn6eG6KMcXxLRLlurGkZku5ZYT3vxgBjui2zajvUZ18QLIjrgBkFRsu7CqTAg18QFw==} + /@vueuse/metadata@10.10.0: + resolution: {integrity: sha512-UNAo2sTCAW5ge6OErPEHb5z7NEAg3XcO9Cj7OK45aZXfLLH1QkexDcZD77HBi5zvEiLOm1An+p/4b5K3Worpug==} dev: true - /@vueuse/shared@10.7.1(vue@3.4.21): - resolution: {integrity: sha512-v0jbRR31LSgRY/C5i5X279A/WQjD6/JsMzGa+eqt658oJ75IvQXAeONmwvEMrvJQKnRElq/frzBR7fhmWY5uLw==} + /@vueuse/shared@10.10.0(vue@3.4.27): + resolution: {integrity: sha512-2aW33Ac0Uk0U+9yo3Ypg9s5KcR42cuehRWl7vnUHadQyFvCktseyxxEPBi1Eiq4D2yBGACOnqLZpx1eMc7g5Og==} dependencies: - vue-demi: 0.14.6(vue@3.4.21) + vue-demi: 0.14.8(vue@3.4.27) transitivePeerDependencies: - '@vue/composition-api' - vue @@ -3218,7 +3324,6 @@ packages: /hookable@5.5.3: resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - dev: false /hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -3914,6 +4019,12 @@ packages: resolution: {integrity: sha512-zTU3DaZaF3Rt9rhN3uBMGQD3dD2/vFQqnvZCDv4dl5iOzq2IZQqTxu90r4E5J+nP70J3ilqVCrbho2eWaeW8Ow==} dev: true + /magic-string@0.30.10: + resolution: {integrity: sha512-iIRwTIf0QKV3UAnYK4PU8uiEc4SRh5jX0mwpIwETPpHdhVM4f53RSwS/vXvN1JhGX+Cs7B8qIq3d6AH49O5fAQ==} + dependencies: + '@jridgewell/sourcemap-codec': 1.4.15 + dev: true + /magic-string@0.30.8: resolution: {integrity: sha512-ISQTe55T2ao7XtlAStud6qwYPZjE4GK1S/BeVPus4jrq6JuOnQ00YKQC581RWhR122W7msZV263KzVeLoqidyQ==} engines: {node: '>=12'} @@ -4035,6 +4146,10 @@ packages: yallist: 4.0.0 dev: false + /mitt@3.0.1: + resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} + dev: true + /mkdirp@0.5.6: resolution: {integrity: sha512-FP+p8RB8OWpF3YZBCrP5gtADmtXApB5AMLn+vdyA+PyxCjrCs00mjyUozssO33cwDeT3wNGdLxJ5M//YqtHAJw==} hasBin: true @@ -4068,11 +4183,6 @@ packages: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - /mrmime@2.0.0: - resolution: {integrity: sha512-eu38+hdgojoyq63s+yTpN4XMBdt5l8HhMhc4VKLO9KM5caLIBvUm4thi7fFaxyTmCKeNnXZ5pAlBwCUnhA09uw==} - engines: {node: '>=10'} - dev: true - /ms@2.0.0: resolution: {integrity: sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==} dev: false @@ -4471,7 +4581,6 @@ packages: /perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} - dev: false /picocolors@1.0.0: resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} @@ -4972,20 +5081,10 @@ packages: vscode-textmate: 8.0.0 dev: true - /shikiji-core@0.9.16: - resolution: {integrity: sha512-eJIK8/IpzvAGnbckCE2Qf/fOSfpjVLSosUfI3pQAnbphGXagEqiRcT/gyVtL4llqmBh0nexqRdJKMFZF3A6ayw==} - dev: true - - /shikiji-transformers@0.9.16: - resolution: {integrity: sha512-DcvhYtLc3Xtme070vgyyeHX0XrNK0zHrKIiPk8wcptFbFUuS65qYDd/UFl68+R8KhdoSFTM9EXlBa9MhrGlbaw==} + /shiki@1.6.2: + resolution: {integrity: sha512-X3hSm5GzzBd/BmPmGfkueOUADLyBoZo1ojYQXhd+NU2VJn458yt4duaS0rVzC+WtqftSV7mTVvDw+OB9AHi3Eg==} dependencies: - shikiji: 0.9.16 - dev: true - - /shikiji@0.9.16: - resolution: {integrity: sha512-QeSwiW88gHke9deQ5Av1f6CEVPGW/riRMPT3vMDGPnASCOhBZK4TYk5ZRoa2qYLncPZS5kXKwcggccQvg3+U7Q==} - dependencies: - shikiji-core: 0.9.16 + '@shikijs/core': 1.6.2 dev: true /side-channel@1.0.4: @@ -5093,6 +5192,11 @@ packages: resolution: {integrity: sha512-XkD+zwiqXHikFZm4AX/7JSCXA98U5Db4AFd5XUg/+9UNtnH75+Z9KxtpYiJZx36mUDVOwH83pl7yvCer6ewM3w==} dev: true + /speakingurl@14.0.1: + resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} + engines: {node: '>=0.10.0'} + dev: true + /split@1.0.1: resolution: {integrity: sha512-mTyOoPbrivtXnwnIxZRFYRrPNtEFKlpB2fvjSnCQUiAA6qAZzqwna5envK4uk6OIeP17CsdF3rSBGYVBsU0Tkg==} dependencies: @@ -5631,7 +5735,7 @@ packages: debug: 4.3.4 pathe: 1.1.2 picocolors: 1.0.0 - vite: 5.2.8(@types/node@20.10.3) + vite: 5.2.12 transitivePeerDependencies: - '@types/node' - less @@ -5643,6 +5747,41 @@ packages: - terser dev: true + /vite@5.2.12: + resolution: {integrity: sha512-/gC8GxzxMK5ntBwb48pR32GGhENnjtY30G4A0jemunsBkiEZFw60s8InGpN8gkhHEkjnRK1aSAxeQgwvFhUHAA==} + engines: {node: ^18.0.0 || >=20.0.0} + hasBin: true + peerDependencies: + '@types/node': ^18.0.0 || >=20.0.0 + less: '*' + lightningcss: ^1.21.0 + sass: '*' + stylus: '*' + sugarss: '*' + terser: ^5.4.0 + peerDependenciesMeta: + '@types/node': + optional: true + less: + optional: true + lightningcss: + optional: true + sass: + optional: true + stylus: + optional: true + sugarss: + optional: true + terser: + optional: true + dependencies: + esbuild: 0.20.2 + postcss: 8.4.38 + rollup: 4.14.0 + optionalDependencies: + fsevents: 2.3.3 + dev: true + /vite@5.2.8(@types/node@20.10.3): resolution: {integrity: sha512-OyZR+c1CE8yeHw5V5t59aXsUPPVTHMDjEZz8MgguLL/Q7NblxhZUlTu9xSPqlsUO/y+X7dlU05jdhvyycD55DA==} engines: {node: ^18.0.0 || >=20.0.0} @@ -5678,34 +5817,34 @@ packages: optionalDependencies: fsevents: 2.3.3 - /vitepress@1.0.0-rc.34(typescript@5.3.3): - resolution: {integrity: sha512-TUbTiSdAZFni2XlHlpx61KikgkQ5uG4Wtmw2R0SXhIOG6qGqzDJczAFjkMc4i45I9c3KyatwOYe8oEfCnzVYwQ==} + /vitepress@1.2.2(typescript@5.3.3): + resolution: {integrity: sha512-uZ3nXR5NY4nYj3RJWCo5jev9qlNZAQo5SUXu1U0QSUx84cUm/o7hCTDVjZ4njVSVui+PsV1oAbdQOg8ygbaf4w==} hasBin: true peerDependencies: - markdown-it-mathjax3: ^4.3.2 - postcss: ^8.4.32 + markdown-it-mathjax3: ^4 + postcss: ^8 peerDependenciesMeta: markdown-it-mathjax3: optional: true postcss: optional: true dependencies: - '@docsearch/css': 3.5.2 - '@docsearch/js': 3.5.2 - '@types/markdown-it': 13.0.7 - '@vitejs/plugin-vue': 5.0.2(vite@5.2.8)(vue@3.4.21) - '@vue/devtools-api': 6.5.1 - '@vueuse/core': 10.7.1(vue@3.4.21) - '@vueuse/integrations': 10.7.1(focus-trap@7.5.4)(vue@3.4.21) + '@docsearch/css': 3.6.0 + '@docsearch/js': 3.6.0 + '@shikijs/core': 1.6.2 + '@shikijs/transformers': 1.6.2 + '@types/markdown-it': 14.1.1 + '@vitejs/plugin-vue': 5.0.5(vite@5.2.12)(vue@3.4.27) + '@vue/devtools-api': 7.2.1(vue@3.4.27) + '@vue/shared': 3.4.27 + '@vueuse/core': 10.10.0(vue@3.4.27) + '@vueuse/integrations': 10.10.0(focus-trap@7.5.4)(vue@3.4.27) focus-trap: 7.5.4 mark.js: 8.11.1 minisearch: 6.3.0 - mrmime: 2.0.0 - shikiji: 0.9.16 - shikiji-core: 0.9.16 - shikiji-transformers: 0.9.16 - vite: 5.2.8(@types/node@20.10.3) - vue: 3.4.21(typescript@5.3.3) + shiki: 1.6.2 + vite: 5.2.12 + vue: 3.4.27(typescript@5.3.3) transitivePeerDependencies: - '@algolia/client-search' - '@types/node' @@ -5795,7 +5934,7 @@ packages: strip-literal: 2.1.0 tinybench: 2.5.1 tinypool: 0.8.4 - vite: 5.2.8(@types/node@20.10.3) + vite: 5.2.12 vite-node: 1.5.3 why-is-node-running: 2.2.2 transitivePeerDependencies: @@ -5816,8 +5955,8 @@ packages: resolution: {integrity: sha512-AFbieoL7a5LMqcnOF04ji+rpXadgOXnZsxQr//r83kLPr7biP7am3g9zbaZIaBGwBRWeSvoMD4mgPdX3e4NWBg==} dev: true - /vue-demi@0.14.6(vue@3.4.21): - resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + /vue-demi@0.14.8(vue@3.4.27): + resolution: {integrity: sha512-Uuqnk9YE9SsWeReYqK2alDI5YzciATE0r2SkA6iMAtuXvNTMNACJLJEXNXaEy94ECuBe4Sk6RzRU80kjdbIo1Q==} engines: {node: '>=12'} hasBin: true requiresBuild: true @@ -5828,7 +5967,7 @@ packages: '@vue/composition-api': optional: true dependencies: - vue: 3.4.21(typescript@5.3.3) + vue: 3.4.27(typescript@5.3.3) dev: true /vue@3.4.21(typescript@5.3.3): @@ -5847,6 +5986,22 @@ packages: typescript: 5.3.3 dev: true + /vue@3.4.27(typescript@5.3.3): + resolution: {integrity: sha512-8s/56uK6r01r1icG/aEOHqyMVxd1bkYcSe9j8HcKtr/xTOFWvnzIVTehNW+5Yt89f+DLBe4A569pnZLS5HzAMA==} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@vue/compiler-dom': 3.4.27 + '@vue/compiler-sfc': 3.4.27 + '@vue/runtime-dom': 3.4.27 + '@vue/server-renderer': 3.4.27(vue@3.4.27) + '@vue/shared': 3.4.27 + typescript: 5.3.3 + dev: true + /watchpack@2.4.0: resolution: {integrity: sha512-Lcvm7MGST/4fup+ifyKi2hjyIAwcdI4HRgtvTpIUxBRhB+RFtUh8XtDOxUfctVCnhVi+QQj49i91OyvzkJl6cg==} engines: {node: '>=10.13.0'}