diff --git a/docs/.vitepress/components.d.ts b/docs/.vitepress/components.d.ts deleted file mode 100644 index 9e728017..00000000 --- a/docs/.vitepress/components.d.ts +++ /dev/null @@ -1,27 +0,0 @@ -// generated by unplugin-vue-components -// We suggest you to commit this file into source control -// Read more: https://github.com/vuejs/core/pull/3399 -import '@vue/runtime-core' - -export {} - -declare module '@vue/runtime-core' { - export interface GlobalComponents { - CleanupOutdatedCaches: typeof import('./theme/components/CleanupOutdatedCaches.md')['default'] - ExamplesBehaviors: typeof import('./theme/components/ExamplesBehaviors.md')['default'] - ExamplesGenerateSW: typeof import('./theme/components/ExamplesGenerateSW.md')['default'] - ExamplesInjectManifest: typeof import('./theme/components/ExamplesInjectManifest.md')['default'] - GenerateSWCleanupOutdatedCaches: typeof import('./theme/components/GenerateSWCleanupOutdatedCaches.md')['default'] - GenerateSWSourceMap: typeof import('./theme/components/GenerateSWSourceMap.md')['default'] - HomePage: typeof import('./theme/components/HomePage.vue')['default'] - InjectManifestCleanupOutdatedCaches: typeof import('./theme/components/InjectManifestCleanupOutdatedCaches.md')['default'] - InjectManifestSourceMap: typeof import('./theme/components/InjectManifestSourceMap.md')['default'] - PromptForUpdateImg: typeof import('./theme/components/PromptForUpdateImg.vue')['default'] - ReloadPrompt: typeof import('./theme/components/ReloadPrompt.vue')['default'] - RouterLink: typeof import('vue-router')['RouterLink'] - RouterView: typeof import('vue-router')['RouterView'] - RunExamples: typeof import('./theme/components/RunExamples.md')['default'] - SsrSsg: typeof import('./theme/components/SsrSsg.md')['default'] - TypeScriptError2307: typeof import('./theme/components/TypeScriptError2307.md')['default'] - } -} diff --git a/docs/.vitepress/config.ts b/docs/.vitepress/config.ts deleted file mode 100644 index 11ac8752..00000000 --- a/docs/.vitepress/config.ts +++ /dev/null @@ -1,339 +0,0 @@ -import { defineConfig } from 'vitepress' -import { version } from '../../package.json' -import { pwa } from '../scripts/pwa' -import { buildEnd } from '../scripts/build' - -const Guide = [ - { - text: 'Getting Started', - link: '/guide/', - }, - { - text: 'Register Service Worker', - link: '/guide/register-service-worker', - }, - { - text: 'Service Worker Precache', - link: '/guide/service-worker-precache', - }, - { - text: 'PWA Minimal Requirements', - link: '/guide/pwa-minimal-requirements', - }, - { - text: 'Service Worker Strategies And Behaviors', - link: '/guide/service-worker-strategies-and-behaviors', - }, - { - text: 'Automatic reload', - link: '/guide/auto-update', - }, - { - text: 'Prompt for update', - link: '/guide/prompt-for-update', - }, - { - text: 'Advanced (injectManifest)', - link: '/guide/inject-manifest', - }, - { - text: 'Static assets handling', - link: '/guide/static-assets', - }, - { - text: 'Periodic SW updates', - link: '/guide/periodic-sw-updates', - }, - { - text: 'Development', - link: '/guide/development', - }, - { - text: 'Unregister Service Worker', - link: '/guide/unregister-service-worker', - }, - { - text: 'FAQ', - link: '/guide/faq', - }, -] - -const Deployment = [ - { - text: 'Getting Started', - link: '/deployment/', - }, - { - text: 'Netlify', - link: '/deployment/netlify', - }, - { - text: 'AWS Amplify', - link: '/deployment/aws', - }, - { - text: 'Vercel', - link: '/deployment/vercel', - }, - { - text: 'NGINX', - link: '/deployment/nginx', - }, - { - text: 'Apache Http Server 2.4+', - link: '/deployment/apache', - }, -] - -const Frameworks = [ - { - text: 'Getting Started', - link: '/frameworks/', - }, - { - text: 'Vue', - link: '/frameworks/vue', - }, - { - text: 'React', - link: '/frameworks/react', - }, - { - text: 'Svelte', - link: '/frameworks/svelte', - }, - { - text: 'SvelteKit', - link: '/frameworks/sveltekit', - }, - { - text: 'SolidJS', - link: '/frameworks/solidjs', - }, - { - text: 'Preact', - link: '/frameworks/preact', - }, - { - text: 'VitePress', - link: '/frameworks/vitepress', - }, - { - text: 'îles', - link: '/frameworks/iles', - }, - { - text: 'Astro (WIP)', - link: '/frameworks/astro', - }, -] - -const Examples = [ - { - text: 'Getting Started', - link: '/examples/', - }, - { - text: 'Vue', - link: '/examples/vue', - }, - { - text: 'React', - link: '/examples/react', - }, - { - text: 'Svelte', - link: '/examples/svelte', - }, - { - text: 'SvelteKit', - link: '/examples/sveltekit', - }, - { - text: 'SolidJS', - link: '/examples/solidjs', - }, - { - text: 'Preact', - link: '/examples/preact', - }, - { - text: 'VitePress', - link: '/examples/vitepress', - }, - { - text: 'îles', - link: '/examples/iles', - }, - { - text: 'Astro (WIP)', - link: '/examples/astro', - }, -] - -const Workbox = [ - { - text: 'Getting Started', - link: '/workbox/', - }, - { - text: 'generateSW', - link: '/workbox/generate-sw', - }, - { - text: 'injectManifest', - link: '/workbox/inject-manifest', - }, -] - -function prepareSidebar(idx: number) { - return [ - { - text: 'Guide', - collapsible: true, - collapsed: true, - items: Guide, - }, - { - text: 'Frameworks', - collapsible: true, - collapsed: true, - items: Frameworks, - }, - { - text: 'Examples', - collapsible: true, - collapsed: true, - items: Examples, - }, - { - text: 'Deploy', - collapsible: true, - collapsed: true, - items: Deployment, - }, - { - text: 'Workbox', - collapsible: true, - collapsed: true, - items: Workbox, - }, - ].map((entry, i) => { - if (idx === i) - entry.collapsed = false - - return entry - }) -} - -const ogUrl = 'https://vite-pwa-org.netlify.app/' -const ogImage = 'https://vite-pwa-org.netlify.app/og-image.png' - -export default defineConfig({ - lang: 'en-US', - title: 'Vite Plugin PWA', - description: 'Zero-config PWA Framework-agnostic Plugin for Vite', - head: [ - ['meta', { name: 'theme-color', content: '#ffffff' }], - ['link', { rel: 'icon', href: '/favicon.svg', type: 'image/svg+xml' }], - ['link', { rel: 'alternate icon', href: '/favicon.ico', type: 'image/png', sizes: '16x16' }], - ['link', { rel: 'mask-icon', href: '/safari-pinned-tab.svg', color: '#ffffff' }], - ['meta', { name: 'author', content: 'Anthony Fu' }], - ['meta', { - name: 'keywords', - content: 'PWA, React, Vue, VitePress, Preact, Svelte, SvelteKit, workbox, SolidJS, Vite, vite-plugin, îles, Astro', - }], - ['meta', { property: 'og:type', content: 'website' }], - ['meta', { property: 'og:title', content: 'Vite Plugin PWA' }], - ['meta', { property: 'og:image', content: ogImage }], - ['meta', { property: 'og:description', content: 'Zero-config PWA Framework-agnostic Plugin for Vite' }], - ['meta', { property: 'og:url', content: ogUrl }], - ['meta', { name: 'twitter:description', content: 'Zero-config PWA Framework-agnostic Plugin for Vite' }], - ['meta', { name: 'twitter:title', content: 'Vite Plugin PWA' }], - ['meta', { name: 'twitter:card', content: 'summary_large_image' }], - ['meta', { name: 'twitter:image', content: ogImage }], - ['meta', { name: 'twitter:site', content: '@antfu7' }], - ['meta', { name: 'twitter:url', content: ogUrl }], - ['link', { rel: 'apple-touch-icon', href: '/apple-touch-icon.png', sizes: '180x180' }], - ], - lastUpdated: true, - markdown: { - theme: { - light: 'vitesse-light', - dark: 'vitesse-dark', - }, - }, - themeConfig: { - // logo: '/favicon.svg', - editLink: { - pattern: 'https://github.com/antfu/vite-plugin-pwa/edit/main/docs/:path', - text: 'Suggest changes to this page', - }, - algolia: { - appId: 'TTO9T0AE3F', - apiKey: '71bd3d3c7274205843267bb1ccb6b1a8', - indexName: 'vite-plugin-pwa', - }, - socialLinks: [ - { icon: 'discord', link: 'https://chat.antfu.me' }, - { icon: 'github', link: 'https://github.com/antfu/vite-plugin-pwa' }, - ], - footer: { - message: 'Released under the MIT License.', - copyright: 'Copyright © 2021-PRESENT Anthony Fu', - }, - nav: [ - { - text: 'Guide', - items: [ - { - text: 'Getting Started', - link: '/guide/', - }, - { - text: 'Frameworks', - link: '/frameworks/', - }, - { - text: 'Examples', - link: '/examples/', - }, - ], - }, - { - text: 'Deploy', - link: '/deployment/', - }, - { - text: 'Workbox', - link: '/workbox/', - }, - { - text: `v${version}`, - items: [ - { - text: 'Release Notes', - link: 'https://github.com/antfu/vite-plugin-pwa/releases', - }, - { - text: 'Contributing', - link: 'https://github.com/antfu/vite-plugin-pwa/blob/main/CONTRIBUTING.md', - }, - ], - }, - ], - sidebar: { - '/guide/': prepareSidebar(0), - '/frameworks/': prepareSidebar(1), - '/examples/': prepareSidebar(2), - '/deployment/': prepareSidebar(3), - '/workbox/': prepareSidebar(4), - }, - }, - vite: { - plugins: [ - pwa(), - ], - }, - buildEnd, -}) diff --git a/docs/.vitepress/contributors.ts b/docs/.vitepress/contributors.ts deleted file mode 100644 index 68964ef3..00000000 --- a/docs/.vitepress/contributors.ts +++ /dev/null @@ -1,58 +0,0 @@ -export interface SocialEntry { - icon: string - link: string -} - -export interface CoreTeam { - avatar: string - name: string - // required to download avatars from GitHub - github: string - twitter: string - sponsor?: string - title?: string - org?: string - desc?: string - links?: SocialEntry[] -} - -function createLinks(tm: CoreTeam): CoreTeam { - tm.links = [ - { icon: 'github', link: `https://github.com/${tm.github}` }, - { icon: 'twitter', link: `https://twitter.com/${tm.twitter}` }, - ] - return tm -} - -const plainTeamMembers = [ - { - avatar: '/team-avatars/antfu.png', - name: 'Anthony Fu', - github: 'antfu', - twitter: 'antfu7', - sponsor: 'https://github.com/sponsors/antfu', - title: 'A fanatical open sourceror, working', - org: 'NuxtLabs', - desc: 'Core team member of Vite & Vue', - }, - { - avatar: '/team-avatars/userquin.png', - name: 'Joaquín Sánchez', - github: 'userquin', - twitter: 'userquin', - title: 'A fullstack and android developer', - desc: 'Vite\'s fanatical follower', - }, - { - avatar: '/team-avatars/hannoeru.png', - name: 'ハン / Han', - github: 'hannoeru', - twitter: 'hannoeru', - title: 'Student / Front-End Engineer', - desc: '@windi_css member', - }, -] - -const teamMembers = plainTeamMembers.map(tm => createLinks(tm)) - -export { teamMembers } diff --git a/docs/.vitepress/theme/components/CleanupOutdatedCaches.md b/docs/.vitepress/theme/components/CleanupOutdatedCaches.md deleted file mode 100644 index c66ff3bf..00000000 --- a/docs/.vitepress/theme/components/CleanupOutdatedCaches.md +++ /dev/null @@ -1,5 +0,0 @@ -The service worker will store all your application assets in a browser cache (or set of caches). Every time you make changes to your application and rebuild it, the `service worker` will be also rebuild, including in its precache manifest all new modified assets, which will have their revision changed (all assets that have been modified will have a new version). Assets that have not been modified will also be included in the service worker precache manifest, but their revision will not change from the previous one. - -::: tip Precache Manifest Entry Revision -The precache manifest entry revision is just a `MD5` hash of the asset content, if an asset is not modififed, the calculated hash will be always the same. -::: diff --git a/docs/.vitepress/theme/components/ExamplesBehaviors.md b/docs/.vitepress/theme/components/ExamplesBehaviors.md deleted file mode 100644 index ad847517..00000000 --- a/docs/.vitepress/theme/components/ExamplesBehaviors.md +++ /dev/null @@ -1,17 +0,0 @@ -- `Prompt for update`: - - Show `Ready to work offline` on first visit and once the `service worker` ready. - - Show `Prompt for update` when new `service worker` available. - -- `Auto update`: - - Show `Ready to work offline` on first visit and once the `service worker` ready. - - When new content available, the service worker will be updated automatically. - -- `Prompt for update` with `Periodic service worker updates`: - - Show `Ready to work offline` on first visit and once the `service worker` ready. - - Show `Prompt for update` when new `service worker` available. - - The example project will register a `Periodic service worker updates` - -- `Auto update` with `Periodic service worker updates`: - - Show `Ready to work offline` on first visit and once the `service worker` ready. - - The example project will register a `Periodic service worker updates` - - When new content available, the service worker will be updated automatically. diff --git a/docs/.vitepress/theme/components/ExamplesGenerateSW.md b/docs/.vitepress/theme/components/ExamplesGenerateSW.md deleted file mode 100644 index 1e5a3432..00000000 --- a/docs/.vitepress/theme/components/ExamplesGenerateSW.md +++ /dev/null @@ -1,3 +0,0 @@ -`generateSW` has the following behaviors: - - diff --git a/docs/.vitepress/theme/components/ExamplesInjectManifest.md b/docs/.vitepress/theme/components/ExamplesInjectManifest.md deleted file mode 100644 index 06becabc..00000000 --- a/docs/.vitepress/theme/components/ExamplesInjectManifest.md +++ /dev/null @@ -1,3 +0,0 @@ -`injectManifest` has the following behavior: - - diff --git a/docs/.vitepress/theme/components/GenerateSWCleanupOutdatedCaches.md b/docs/.vitepress/theme/components/GenerateSWCleanupOutdatedCaches.md deleted file mode 100644 index 19895fa4..00000000 --- a/docs/.vitepress/theme/components/GenerateSWCleanupOutdatedCaches.md +++ /dev/null @@ -1,19 +0,0 @@ -When the browser detects and installs the new version of your application, it will have in the cache storage all new assets and also the old ones. To delete old assets (from previous versions that are no longer necessary), you have to configure an option in the `workbox` entry of the plugin configuration. - -When using the `generateSW` strategy, it is not necessary to configure it, the plugin will activate it by default. - -We strongly recommend you to **NOT** deactivate the option. If you are curious, you can deactivate it using the following code in your plugin configuration: - -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - workbox: { - cleanupOutdatedCaches: false - } - }) - ] -}) -``` diff --git a/docs/.vitepress/theme/components/GenerateSWSourceMap.md b/docs/.vitepress/theme/components/GenerateSWSourceMap.md deleted file mode 100644 index 935a2497..00000000 --- a/docs/.vitepress/theme/components/GenerateSWSourceMap.md +++ /dev/null @@ -1,19 +0,0 @@ -Since plugin version `0.11.2`, your service worker's source map will not be generated as it uses the `build.sourcemap` option from the Vite config, which by default is `false`. - -Your service worker source map will be generated when Vite's `build.sourcemap` configuration option has the value `true`, `'online'` or `'hidden'`, and you have not configured the `workbox.sourcemap` option in the plugin configuration. If you configure the `workbox.sourcemap` option, the plugin will not change that value. - -If you want to generate the source map of your service worker, you can use this code: - -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - workbox: { - sourcemap: true - } - }) - ] -}) -``` diff --git a/docs/.vitepress/theme/components/HomePage.vue b/docs/.vitepress/theme/components/HomePage.vue deleted file mode 100644 index a9037d7b..00000000 --- a/docs/.vitepress/theme/components/HomePage.vue +++ /dev/null @@ -1,45 +0,0 @@ - - - diff --git a/docs/.vitepress/theme/components/InjectManifestCleanupOutdatedCaches.md b/docs/.vitepress/theme/components/InjectManifestCleanupOutdatedCaches.md deleted file mode 100644 index 0679bbf3..00000000 --- a/docs/.vitepress/theme/components/InjectManifestCleanupOutdatedCaches.md +++ /dev/null @@ -1,11 +0,0 @@ -When the user installs the new version of the application, we will have on the service worker cache all new assets and also the old ones. To delete old assets (from previous versions that are no longer necessary), and since you are building your own service worker, you will need to add the following code to your custom service worker: - -```js -import { cleanupOutdatedCaches, precacheAndRoute } from 'workbox-precaching' - -cleanupOutdatedCaches() - -precacheAndRoute(self.__WB_MANIFEST) -``` - -We strongly recommend you to include previous code on your custom service worker. diff --git a/docs/.vitepress/theme/components/InjectManifestSourceMap.md b/docs/.vitepress/theme/components/InjectManifestSourceMap.md deleted file mode 100644 index 7120ca00..00000000 --- a/docs/.vitepress/theme/components/InjectManifestSourceMap.md +++ /dev/null @@ -1,3 +0,0 @@ -Since you are building your own service worker, this plugin will use Vite's `build.sourcemap` configuration option, which default value is `false`, to generate the source map. - -If you want to generate the source map for your service worker, you will need to generate the source map for the entire application. diff --git a/docs/.vitepress/theme/components/PromptForUpdateImg.vue b/docs/.vitepress/theme/components/PromptForUpdateImg.vue deleted file mode 100644 index 0487dbf1..00000000 --- a/docs/.vitepress/theme/components/PromptForUpdateImg.vue +++ /dev/null @@ -1,14 +0,0 @@ - - - diff --git a/docs/.vitepress/theme/components/ReloadPrompt.vue b/docs/.vitepress/theme/components/ReloadPrompt.vue deleted file mode 100644 index 160ba21c..00000000 --- a/docs/.vitepress/theme/components/ReloadPrompt.vue +++ /dev/null @@ -1,51 +0,0 @@ - - - diff --git a/docs/.vitepress/theme/components/RunExamples.md b/docs/.vitepress/theme/components/RunExamples.md deleted file mode 100644 index ad846ace..00000000 --- a/docs/.vitepress/theme/components/RunExamples.md +++ /dev/null @@ -1,19 +0,0 @@ -::: warning -Before following the instructions below, read the [Contribution Guide](https://github.com/antfu/vite-plugin-pwa/blob/main/CONTRIBUTING.md). -::: - -Make sure you install project dependencies, and build the repo on your local clone/fork: - -```shell -cd vite-plugin-pwa -pnpm install -pnpm run build -``` - -To run the examples, execute the following script from your shell (from root folder), it will start a CLI where you will select the framework and the pwa options: - -```shell -pnpm run examples -``` - -If you don't run `pnpm build` first, you may see an error like, `failed to load config` or `Please verify that the package.json has a valid "main" entry`. diff --git a/docs/.vitepress/theme/components/SsrSsg.md b/docs/.vitepress/theme/components/SsrSsg.md deleted file mode 100644 index 3ab35d12..00000000 --- a/docs/.vitepress/theme/components/SsrSsg.md +++ /dev/null @@ -1,18 +0,0 @@ -If you are using `SSR/SSG`, you need to import `virtual:pwa-register` module using dynamic import and checking if `window` is not `undefined`. - -You can register the service worker on `src/pwa.ts` module: - -```ts -import { registerSW } from 'virtual:pwa-register' - -registerSW({ /* ... */ }) -``` - -and then import it from your `main.ts`: - -```ts -if (typeof window !== 'undefined') - import('./pwa') -``` - -You can see the [FAQ](/guide/faq#navigator-window-is-undefined) entry for more info. diff --git a/docs/.vitepress/theme/components/TypeScriptError2307.md b/docs/.vitepress/theme/components/TypeScriptError2307.md deleted file mode 100644 index e36d9fae..00000000 --- a/docs/.vitepress/theme/components/TypeScriptError2307.md +++ /dev/null @@ -1,16 +0,0 @@ -If your **TypeScript** build step or **IDE** complain about not being able to find modules or type definitions on imports, add the following to the `compilerOptions.types` array of your `tsconfig.json`: - -```json -{ - "compilerOptions": { - "types": [ - "vite-plugin-pwa/client" - ] - } -} -``` - -Or you can add the following reference in any of your `d.ts` files (for example, in `vite-env.d.ts` or `global.d.ts`): -```ts -/// -``` diff --git a/docs/.vitepress/theme/index.ts b/docs/.vitepress/theme/index.ts deleted file mode 100644 index 9a22702d..00000000 --- a/docs/.vitepress/theme/index.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { h } from 'vue' -import Theme from 'vitepress/theme' - -import './styles/main.css' -import './styles/vars.css' - -import 'uno.css' - -import HomePage from './components/HomePage.vue' -import ReloadPrompt from './components/ReloadPrompt.vue' - -export default { - ...Theme, - Layout() { - return h(Theme.Layout, null, { - 'home-features-after': () => h(HomePage), - 'layout-bottom': () => h(ReloadPrompt), - }) - }, -} diff --git a/docs/.vitepress/theme/styles/main.css b/docs/.vitepress/theme/styles/main.css deleted file mode 100644 index 914e413e..00000000 --- a/docs/.vitepress/theme/styles/main.css +++ /dev/null @@ -1,155 +0,0 @@ -.dark [img-light], -.dark .logo[light-logo] { - display: none; -} - -html:not(.dark) [img-dark], -html:not(.dark) .logo[dark-logo] { - display: none; -} - -/* Overrides */ - -.VPSocialLink { - transform: scale(0.9); -} - -.vp-doc th, -.vp-doc td { - padding: 6px 10px; - border: 1px solid #8882; -} - -html:not(.dark) .vp-doc [class*=language-]:before { - color: var(--vp-custom-block-details-text); -} - -html:not(.dark) .vp-doc [class*='language-']:not(:hover) > span.copy, -html:not(.dark) .vp-doc [class*='language-']:not(:hover) > span.copy.copied:before { - background-color: var(--vp-code-block-hover-bg); - opacity: 0; -} - -html:not(.dark) .vp-doc [class*='language-']:hover > span.copy:hover { - opacity: 1; - background-color: var(--vp-code-block-hover-bg); -} - -html:not(.dark) .vp-doc [class*='language-']:hover > span.copy.copied, -html:not(.dark) .vp-doc [class*='language-']:hover > span.copy.copied:hover { - opacity: 1; - background-color: var(--vp-code-block-hover-bg); -} - -html:not(.dark) .vp-doc [class*='language-']:hover > span.copy.copied:before, -html:not(.dark) .vp-doc [class*='language-']:hover > span.copy.copied:hover:before { - color: var(--vp-custom-block-details-text); - background-color: var(--vp-code-block-hover-bg); -} - -/* h3 breaks SEO => replaced with h2 with the same size */ -.home-content h2 { - margin-top: 2rem; - font-size: 1.35rem; - border-bottom: none; - margin-bottom: 0; -} - -img.resizable-img { - width: unset; - height: unset; -} - -.dark .prompt-img { - filter: invert(86%); -} - -.tagline { - white-space: pre-wrap; -} - -details > summary:hover { - cursor: pointer; -} -/* remove the gray color from code block inside details > summary */ -.vp-doc .custom-block div[class*=language-] code, -.vp-doc details > summary + div[class*='language-'] > pre > code { - --vp-code-block-bg: transparent; -} - -.pwa-toast { - --c-divider: var(--vp-c-divider-light); -} -.pwa-toast .pwa-refresh { - border-color: var(--vp-button-brand-border); - color: var(--vp-button-brand-text); - background-color: var(--vp-button-brand-bg); -} -.pwa-toast .pwa-refresh:hover { - border-color: var(--vp-button-brand-hover-border); - color: var(--vp-button-brand-hover-text); - background-color: var(--vp-button-brand-hover-bg); -} -.pwa-toast .pwa-refresh:active { - border-color: var(--vp-button-brand-active-border); - color: var(--vp-button-brand-active-text); - background-color: var(--vp-button-brand-active-bg); -} -.pwa-toast .pwa-cancel { - border-color: var(--vp-button-alt-border); - color: var(--vp-button-alt-text); - background-color: var(--vp-button-alt-bg); -} -.pwa-toast .pwa-cancel:hover { - border-color: var(--vp-button-alt-hover-border); - color: var(--vp-button-alt-hover-text); - background-color: var(--vp-button-alt-hover-bg); -} -.pwa-toast .pwa-cancel:active { - border-color: var(--vp-button-alt-active-border); - color: var(--vp-button-alt-active-text); - background-color: var(--vp-button-alt-active-bg); -} -.dark .pwa-toast { - --pwa-divider: var(--vp-c-divider-dark-1); -} - -.vp-doc :not(pre) > code { - padding: 1px 6px; -} - -/* fix height ~ 2 lines of text: 3 cards per row */ -.VPTeamMembersItem.medium .profile .data .affiliation { - min-height: 3rem; -} -.VPTeamMembersItem.medium .profile .data .desc { - min-height: 3rem; -} - -/* fix height ~ 2 lines of text: 3 cards per row */ -@media (min-width: 1009px) { - .VPTeamMembersItem.medium .profile .data .affiliation { - min-height: 4rem; - } - .VPTeamMembersItem.medium .profile .data .desc { - min-height: 4rem; - } -} -/* fix height ~ 2 lines of text: 2 cards per row */ -@media (min-width: 697px) and (max-width: 985px) { - .VPTeamMembersItem.medium .profile .data .affiliation { - min-height: 4rem; - } - .VPTeamMembersItem.medium .profile .data .desc { - min-height: 4rem; - } -} -/* fix height: one card per row */ -@media (max-width: 696px) { - .VPTeamMembersItem.medium .profile .data .affiliation { - min-height: unset; - } - .VPTeamMembersItem.medium .profile .data .desc { - min-height: unset; - } -} diff --git a/docs/.vitepress/theme/styles/vars.css b/docs/.vitepress/theme/styles/vars.css deleted file mode 100644 index 6f7ce335..00000000 --- a/docs/.vitepress/theme/styles/vars.css +++ /dev/null @@ -1,83 +0,0 @@ -/** - * Colors - * -------------------------------------------------------------------------- */ - -:root { - --vp-c-accent: #2c7f95; - --vp-c-brand: #2c7f95; - --vp-c-brand-light: #2e859c; - --vp-c-brand-lighter: #3392ac; - --vp-c-brand-dark: #00586e; - --vp-c-brand-darker: #00586e; - --vp-c-text-code: #2c3e50; - --vp-code-block-bg: rgba(125, 125, 125, 0.06); - --vp-code-block-hover-bg: rgba(125, 125, 125, 0.1); - --vp-c-bg-mute: #f5f5f5; - --vp-custom-block-tip-border: var(--vp-c-brand); - --vp-custom-block-tip-text: var(--vp-c-brand-dark); - --vp-custom-block-tip-bg: transparent; - --vp-custom-block-tip-code-bg: var(--vp-custom-block-tip-bg); - --vp-code-copy-code-bg: initial; - --vp-code-copy-code-hover-bg: var(--vp-custom-block-details-text); -} - -.dark { - --vp-c-accent: #4aa6c0; - --vp-c-brand: #4aa6c0; - --vp-c-brand-light: #52b1cc; - --vp-c-brand-lighter: #52b1cc; - --vp-c-brand-dark: #52b1cc; - --vp-c-brand-darker: #52b1cc; - --vp-code-block-bg: rgba(0, 0, 0, 0.2); - --vp-c-text-code: #f5f7fa; - --vp-c-bg-mute: #2d2d2d; - --vp-code-copy-code-bg: initial; - --vp-code-copy-code-hover-bg: rgba(255, 255, 255, 0.05); -} - -/** - * Component: Button - * -------------------------------------------------------------------------- */ - -:root { - --vp-button-brand-border: var(--vp-c-brand-light); - --vp-button-brand-text: var(--vp-c-text-dark-1); - --vp-button-brand-bg: var(--vp-c-brand); - --vp-button-brand-hover-border: var(--vp-c-brand-light); - --vp-button-brand-hover-text: var(--vp-c-text-dark-1); - --vp-button-brand-hover-bg: var(--vp-c-brand-light); - --vp-button-brand-active-border: var(--vp-c-brand-light); - --vp-button-brand-active-text: var(--vp-c-text-dark-1); - --vp-button-brand-active-bg: var(--vp-button-brand-bg); -} - -/** - * Component: Home - * -------------------------------------------------------------------------- */ - -:root { - --vp-home-hero-name-color: transparent; - --vp-home-hero-name-background: linear-gradient(347deg, #358399 30%, #3bb89c); - --vp-home-hero-image-background-image: linear-gradient(45deg, #00586e60 30%, #e5e05660); - --vp-home-hero-image-filter: blur(30px); -} - -@media (min-width: 640px) { - :root { - --vp-home-hero-image-filter: blur(56px); - } -} - -@media (min-width: 960px) { - :root { - --vp-home-hero-image-filter: blur(72px); - } -} - -/** - * Component: Algolia - * -------------------------------------------------------------------------- */ - -.DocSearch { - --docsearch-primary-color: var(--vp-c-brand) !important; -} diff --git a/docs/deployment/apache.md b/docs/deployment/apache.md deleted file mode 100644 index 4d001e67..00000000 --- a/docs/deployment/apache.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Apache Http Server 2.4+ | Deployment -next: Getting Started | Workbox ---- - -# Apache Http Server 2.4+ - -## Configure `manifest.webmanifest` mime type - -You need to configure the following mime type (see basic configuration below): - -```ini - - # Manifest file - AddType application/manifest+json webmanifest - -``` - -## Basic configuration with http to https redirection - -Update your `httpd.conf` configuration file with: - -```ini -# httpd.conf -ServerRoot "" - -Listen 80 -ServerName www.yourdomain.com - -DocumentRoot "" - -# modules -LoadModule mime_module modules/mod_mime.so -LoadModule rewrite_module modules/mod_rewrite.so - -# mime types - - # Manifest file - AddType application/manifest+json webmanifest - - -# your https configuration -Include conf/extra/https-www.yourdomain.com.conf - - - SSLRandomSeed startup builtin - SSLRandomSeed connect builtin - - - - ServerName www.yourdomain.com - - RewriteEngine On - - # disable TRACE and TRACK methods - RewriteCond %{REQUEST_METHOD} ^(TRACE|TRACK) - RewriteRule .* - [F] - - Options +FollowSymlinks - RewriteCond %{SERVER_PORT} !443 - - RewriteRule (.*) https://www.yourdomain.com/ [L,R] - - ErrorLog logs/www.yourdomain.com-error_log - CustomLog logs/www.yourdomain.com-access_log combined - -``` diff --git a/docs/deployment/aws.md b/docs/deployment/aws.md deleted file mode 100644 index 677bcafd..00000000 --- a/docs/deployment/aws.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: AWS Amplify | Deployment ---- - -# AWS Amplify - -::: info WIP -Will coming soon. -::: diff --git a/docs/deployment/index.md b/docs/deployment/index.md deleted file mode 100644 index 541d93f3..00000000 --- a/docs/deployment/index.md +++ /dev/null @@ -1,38 +0,0 @@ ---- -title: Getting Started | Deploy -prev: Astro | Examples ---- - -# Getting Started - -Since you need to install your application as a [Progressive Web App](https://web.dev/progressive-web-apps/), you must configure your server to meet [PWA Minimal Requirements](/guide/#pwa-minimal-requirements), that is, your server **must**: -- serve `manifest.webmanifest` with `application/manifest+json` mime type -- you must serve your application over `https` -- you must redirect from `http` to `https` - -## Servers - -- [Netlify](/deployment/netlify) -- [AWS Amplify](/deployment/aws) -- [Vercel](/deployment/aws) -- [NGINX](/deployment/nginx) -- [Apache Http Server 2.4+](/deployment/apache) - - -## Testing your application on production - -Once you deploy your application to your server, you can test it using [WebPageTest](https://www.webpagetest.org/). - -There are many test sites, but we suggest you use `WebPageTest` as this is the most comprehensive in terms of test: -- Security. -- First byte time. -- Keep alive enabled. -- Compress transfer. -- Cache static content. -- Effective use of CDN. -- Lighthouse: Core Web Vitals, Performance, Images size optimization... -- And more... - -Enter the url of your application, click `Start Test` button, wait for the test to finish, the `WebPageTest` result will hint you what things on your application must be fixed/changed. The `WebPageTest` result will also score your application, it will also test your site with `Lighthouse`. - -For example, go to [WebPageTest](https://www.webpagetest.org/), enter `https://vite-pwa-org.netlify.app/`, click `Start Test` button, wait a few seconds for the test to finish, and see the results for this site. diff --git a/docs/deployment/netlify.md b/docs/deployment/netlify.md deleted file mode 100644 index 27ffc7cb..00000000 --- a/docs/deployment/netlify.md +++ /dev/null @@ -1,67 +0,0 @@ ---- -title: Netlify | Deployment ---- - -# Netlify - -## Configure `manifest.webmanifest` mime type - -You need to register the correct MIME type for the web manifest by adding a headers table to your `netlify.toml` file (see basic deployment below): -```toml -[[headers]] - for = "/manifest.webmanifest" - [headers.values] - Content-Type = "application/manifest+json" -``` - -## Cache-Control - -As a general rule, files in `/assets/` can have a very long cache time, as everything in there should contain a hash in the filename. - -Add another headers table to your `netlify.toml` file (see basic deployment below): - -```toml -[[headers]] - for = "/assets/*" - [headers.values] - cache-control = ''' - max-age=31536000, - immutable - ''' -``` - -## Configure http to https redirection - -Netlify will redirect automatically, so you don't worry about it. - -## Basic deployment example - -Add `netlify.toml` file to the root directory with the content: - -```toml -[build.environment] - NPM_FLAGS = "--prefix=/dev/null" - NODE_VERSION = "14" - -[build] - publish = "dist" - command = "npx pnpm i --store=node_modules/.pnpm-store && npx pnpm run build" - -[[redirects]] - from = "/*" - to = "/index.html" - status = 200 - -[[headers]] - for = "/manifest.webmanifest" - [headers.values] - Content-Type = "application/manifest+json" - -[[headers]] - for = "/assets/*" - [headers.values] - cache-control = ''' - max-age=31536000, - immutable - ''' -``` diff --git a/docs/deployment/nginx.md b/docs/deployment/nginx.md deleted file mode 100644 index 5d2e2e56..00000000 --- a/docs/deployment/nginx.md +++ /dev/null @@ -1,95 +0,0 @@ ---- -title: NGINX | Deployment ---- - -# NGINX - -## Configure `manifest.webmanifest` mime type - -You need to register the correct MIME type for the web manifest by adding it either to the [default](https://www.nginx.com/resources/wiki/start/topics/examples/full/#mime-types) file at `/etc/nginx/mime.types` - -```nginx -# /etc/nginx/mime.types -types { - # Manifest files - application/manifest+json webmanifest; - ... -} -``` - -or any `http`, `server` or location `location` block with - - -```nginx -types { - application/manifest+json webmanifest; -} -``` - -You can validate the setting by checking the HTTP headers once the app is deployed - -```shell script -curl -s -I -X GET https://yourserver/manifest.webmanifest | grep content-type -i -``` - -and check that the result is `content-type: application/manifest+json`. - -## Basic configuration with http to https redirection - -Update your `server.conf` configuration file with: - -```nginx -server { - listen 80; - server_name yourdomain.com www.yourdomain.com; - return 301 https://yourdomain.com$request_uri; -} -``` - -## Cache-Control - -Ensure you have a very restrictive setup for your `Cache-Control` headers in place. - -Double check that **you do not** have caching features enabled, especially `immutable`, on locations like: - -- `/` -- `/sw.js` -- `/index.html` -- `/manifest.webmanifest` - -NGINX will add `E-Tag`-headers itself, so there is not much to in that regard. - -As a general rule, files in `/assets/` can have a very long cache time, as everything in there should contain a hash in the filename. - -An example configuration inside your `server` block could be: - -```nginx -# all assets contain hash in filename, cache forever -location ^~ /assets/ { - add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable"; - ... - try_files $uri =404; -} - -# all workbox scripts are compiled with hash in filename, cache forever3 -location ^~ /workbox- { - add_header Cache-Control "public, max-age=31536000, s-maxage=31536000, immutable"; - ... - try_files $uri =404; -} - -# assume that everything else is handled by the application router, by injecting the index.html. -location / { - autoindex off; - expires off; - add_header Cache-Control "public, max-age=0, s-maxage=0, must-revalidate" always; - ... - try_files $uri /index.html =404; -} -``` - -Be aware that this is a very simplistic approach and you must test every change, as the NGINX match precedences for locations are not very intuitive and error prone if you do not know the [exact rules](https://docs.nginx.com/nginx/admin-guide/web-server/web-server/#location_priority). - -::: danger -**Always re-test and re-assure** that the caching for mission critical files is **as low** as possible if not hashed files or you might invalidate clients for a long time. -::: diff --git a/docs/deployment/vercel.md b/docs/deployment/vercel.md deleted file mode 100644 index 8ba1a884..00000000 --- a/docs/deployment/vercel.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Vercel | Deployment ---- - -# Vercel - -::: info WIP -Will coming soon. -::: diff --git a/docs/examples/astro.md b/docs/examples/astro.md deleted file mode 100644 index c920e4fc..00000000 --- a/docs/examples/astro.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: Astro | Examples -next: Getting Started | Deploy ---- - -# Astro - -::: info WIP -Will coming soon. -::: diff --git a/docs/examples/iles.md b/docs/examples/iles.md deleted file mode 100644 index 1fd94975..00000000 --- a/docs/examples/iles.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: îles | Frameworks ---- - -# îles - -You can test `îles` using the source code from its documentation website, you can find it under [docs](https://github.com/ElMassimo/iles/tree/main/docs) package/directory. - -The behavior used in this website is [Prompt for update](/guide/prompt-for-update). diff --git a/docs/examples/index.md b/docs/examples/index.md deleted file mode 100644 index 7994aea4..00000000 --- a/docs/examples/index.md +++ /dev/null @@ -1,108 +0,0 @@ ---- -title: Getting Started | Examples -prev: Astro | Frameworks ---- - -# Getting Started - -You can find a set of examples projects on [Vite Plugin PWA GitHub repo](https://github.com/antfu/vite-plugin-pwa/tree/main/examples). - -All the examples projects are under `examples` package/directory of the repo root directory. - -::: info -The main purpose of these examples projects is to test the service worker and not to meet the [PWA Minimal Requirements](/guide/#pwa-minimal-requirements), that is, if you use any of these examples for your projects, you will need to modify the code supplied and then test that it meets the [PWA Minimal Requirements](/guide/#pwa-minimal-requirements). Almost all the examples projects should meet [PWA Minimal Requirements](/guide/#pwa-minimal-requirements), but you must check it on your target project. - -All the examples projects use `@rollup/plugin-replace` to configure a timestamp initialized to `now` on each build, and so, the service worker will be regenerated/versioned on each build: this timestamp will help us since the service worker won't be regenerated/versioned if none source code changed (on your project you shouldn't want this behavior, you should want to only regenerate/version the service worker when your source code change). -::: - -::: warning TRY TO AVOID INCLUDING AUTOMATIC TIMESTAMP ON YOU APPLICATION IF YOU DON'T CHANGE YOUR CODE -We use the timestamp in the examples projects to avoid having to touch a file each time we need to test: for example, to test `Prompt for update`, we need to install the service worker first time (first build), then rebuild and restart the example project and finally refresh the browser to check the `Prompt for update` is shown. -::: - -## How to run examples projects? - -If you want to run any of the examples projects you will need to download/clone to your local machine the `Vite Plugin PWA GitHub repo`. - -You will need `node 14` (or newer) to be able to build the `Vite Plugin PWA`. - -::: warning -Before following the instructions below, read the [Contribution Guide](https://github.com/antfu/vite-plugin-pwa/blob/main/CONTRIBUTING.md). -::: - -If you don't have installed `PNPM`, you must install it globally via `npm`: -```shell -npm install -g pnpm -``` - -Once the repo is on your local machine, you must install project dependencies and build the `vite-plugin-pwa` plugin, just run (from `vite-plugin-pwa` directory cloned locally): - -```shell -pnpm install -pnpm run build -``` - -We use `PNPM` but should work with any `package manager`, for example, with `YARN`: -```shell -yarn && yarn build -``` - -::: info -From here on, we will only show the commands to run the examples projects using `PNPM`, we leave it to you how to execute them with any other` package manager`. -::: - -Before we start running the examples projects, you should consider the following: -- Use `Chromium based` browser: `Chrome`, `Chromium` or `Edge` -- All the examples that are executed in this guide will be done over https, that is, all the projects will respond at address `https://localhost` -- When testing an example project, the `service worker` will be installed in `https://localhost`, and so, subsequent tests in another examples projects may interfere with the previous test, because the `service worker` of the previous project will keep installed on the browser -- Tests should be done on a private window, and so, browser addons/plugins will not interfere with the test - -To avoid `service worker` interference, you should do the following tasks when switching between examples projects: -- Open `dev tools` (`Option + ⌘ + J` on `macOS`, `Shift + CTRL + J` on `Windows/Linux`) -- Go to `Application > Storage`, you should check following checkboxes: - - Application: [x] Unregister service worker - - Storage: [x] Local and session storage - - Cache: [x] Cache storage and [x] Application cache -- Click on `Clear site data` button -- Go to `Application > Service Workers` and check the current `service worker` is missing or has the state `deleted` - -Once we remove the `service worker`, run the corresponding script and just press browser `Refresh` button (or enter `https://localhost` on browser address). - -## How to test the examples projects Offline? - -To test any of the examples projects (or your project) on `offline`, just open `dev tools` (`Option + ⌘ + J` on `macOS`, `Shift + CTRL + J` on `Windows/Linux`) and go to `Application > Network`, then locate `No throttling` selector: open it and select `Offline` option. - -A common pitfall is to select `Offline` option, then restart the example project (or your project), and refresh the page. In that case, you will have unexpected behavior, and you should remove the service worker. - -If you click the browser `Refresh` button, you can inspect `Application > Network` tab on `dev tools` to check that the `Service Worker` is serving all assets instead request them to the server. - -::: danger -Don't do a `hard refresh` since it will force the browser to go to the server, and then you will get `No internet connection` page. -::: - -## Available Examples Projects - - - -We provide the following examples projects: -- [Vue 3](/examples/vue) - - [Vue 3 generateSW Router Examples](/examples/vue#generatesw): set of examples with disparate behaviors. - - [Vue 3 injectManifest Router Examples](/examples/vue#generatesw): set of examples with disparate behaviors. -- [React](/examples/react) - - [React generateSW Router Examples](/examples/react#generatesw): set of examples with disparate behaviors. - - [React injectManifest Router Examples](/examples/react#generatesw): set of examples with disparate behaviors. -- [Svelte](/examples/svelte) - - [Svelte generateSW Router Examples](/examples/svelte#generatesw): set of examples with disparate behaviors. - - [Svelte injectManifest Router Examples](/examples/svelte#generatesw): set of examples with disparate behaviors. -- [SvelteKit](/examples/sveltekit) - - [SvelteKit generateSW Examples](/examples/sveltekit#generatesw): set of examples with disparate behaviors. - - [SvelteKit injectManifest Examples](/examples/sveltekit#generatesw): set of examples with disparate behaviors. -- [SolidJS](/examples/solidjs) - - [SolidJS generateSW Router Examples](/examples/solidjs#generatesw): set of examples with disparate behaviors. - - [SolidJS injectManifest Router Examples](/examples/solidjs#generatesw): set of examples with disparate behaviors. -- [Preact](/examples/preact) - - [Preact generateSW Router Examples](/examples/preact#generatesw): set of examples with disparate behaviors. - - [Preact injectManifest Router Examples](/examples/preact#generatesw): set of examples with disparate behaviors. -- [VitePress](/examples/vitepress): prompt for update. -- [îles](/examples/iles): prompt for update. -- [Astro](/examples/astro): coming soon (WIP). - diff --git a/docs/examples/preact.md b/docs/examples/preact.md deleted file mode 100644 index 93c75a3a..00000000 --- a/docs/examples/preact.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Preact | Examples ---- - -# Preact - -The `Preact` example project can be found on `examples/preact-router` package/directory. - -The router used on this example project is [preact-router](https://github.com/preactjs/preact-router). - -The `Preact` example has been created using `create-vite` template with `pnpx`: - -::: details pnpx create-vite - -```shell -pnpx create-vite -+ create-vite 2.6.6 -√ Project name: ... preact-router -√ Select a framework: » preact -√ Select a variant: » preact-ts - -Scaffolding project in examples\preact-router... - -Done. Now run: - - cd preact-router - npm install - npm run dev -``` -::: - -To test `new content available`, you should rerun the corresponding script, and then refresh the page. - -## Executing the examples - - - -## generateSW - - - -## injectManifest - - diff --git a/docs/examples/react.md b/docs/examples/react.md deleted file mode 100644 index 4c371191..00000000 --- a/docs/examples/react.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: React | Examples ---- - -# React - -The `React` example project can be found on `examples/react-router` package/directory. - -The router used on this example project is [react-router](https://reactrouter.com/). - -The `React` example has been created using `create-vite` template with `pnpx`: - -::: details pnpx create-vite - -```shell -pnpx create-vite -+ create-vite 2.5.4 -√ Project name: ... react-router -√ Select a framework: » react -√ Select a variant: » react-ts - -Scaffolding project in examples\react-router... - -Done. Now run: - - cd react-router - npm install - npm run dev -``` -::: - -To test `new content available`, you should rerun the corresponding script, and then refresh the page. - -## Executing the examples - - - -## generateSW - - - -## injectManifest - - diff --git a/docs/examples/solidjs.md b/docs/examples/solidjs.md deleted file mode 100644 index c4a88f6f..00000000 --- a/docs/examples/solidjs.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: SolidJS | Examples ---- - -# SolidJS - -The `SolidJS` example project can be found on `examples/solid-router` package/directory. - -The router used on this example project is [solid-app-router](https://github.com/solidjs/solid-app-router). - -The `SolidJS` example has been created using `https://github.com/solidjs/templates` template with `npx`: - -::: details npx degit solidjs/templates/ts-router solid-router - -```shell -npx degit solidjs/templates/ts-router solid-router -> cloned solidjs/templates#HEAD to solid-router -``` -::: - -To test `new content available`, you should rerun the corresponding script, and then refresh the page. - -## Executing the examples - - - -## generateSW - - - -## injectManifest - - - diff --git a/docs/examples/svelte.md b/docs/examples/svelte.md deleted file mode 100644 index c64f71c4..00000000 --- a/docs/examples/svelte.md +++ /dev/null @@ -1,44 +0,0 @@ ---- -title: Svelte | Examples ---- - -# Svelte - -The `Svelte` example project can be found on `examples/svelte-routify` package/directory. - -The router used on this example project is [@roxi/routify](https://routify.dev/). - -The `Svelte` example has been created using `create-vite` template with `pnpx`: - -::: details pnpx create-vite -```shell -pnpx create-vite -+ create-vite 2.5.4 -√ Project name: ... svelte-routify -√ Select a framework: » svelte -√ Select a variant: » svelte-ts - -Scaffolding project in examples\svelte-routify... - -Done. Now run: - - cd svelte-routify - npm install - npm run dev -``` -::: - -To test `new content available`, you should rerun the corresponding script, and then refresh the page. - -## Executing the examples - - - -## generateSW - - - -## injectManifest - - - diff --git a/docs/examples/sveltekit.md b/docs/examples/sveltekit.md deleted file mode 100644 index 8ee8584e..00000000 --- a/docs/examples/sveltekit.md +++ /dev/null @@ -1,61 +0,0 @@ ---- -title: SvelteKit | Examples ---- - -# SvelteKit - -The `SvelteKit` example project can be found on `examples/sveltekit-pwa` package/directory and it is configured with `@sveltejs/adapter-static` adapter. - -The `SvelteKit` example has been created using `svelte@next` template with `pnpm`: - -::: details pnpm create svelte@next sveltekit-pwa -```shell -pnpm create svelte@next sveltekit-pwa -+ create-svelte 2.0.0-next.89 - -Progress: resolved 5, reused 5, downloaded 0, added 5, done - -create-svelte version 2.0.0-next.89 - -Welcome to SvelteKit! - -This is beta software; expect bugs and missing features. - -Problems? Open an issue on https://github.com/sveltejs/kit/issues if none exists already. - -√ Which Svelte app template? » Skeleton project -√ Use TypeScript? ... No / Yes -√ Add ESLint for code linting? ... No / Yes -√ Add Prettier for code formatting? ... No / Yes - -Your project is ready! -✔ Typescript - Inside Svelte components, use - -{#if toast} - -{/if} - - -``` -::: - -## Periodic SW Updates - -As explained in [Periodic Service Worker Updates](/guide/periodic-sw-updates), you can use this code to configure this behavior on your application with the virtual module `virtual:pwa-register/svelte`: - -```ts -import { useRegisterSW } from 'virtual:pwa-register/svelte' - -const intervalMS = 60 * 60 * 1000 - -const updateServiceWorker = useRegisterSW({ - onRegistered(r) { - r && setInterval(() => { - r.update() - }, intervalMS) - } -}) -``` - -The interval must be in milliseconds, in the example above it is configured to check the service worker every hour. diff --git a/docs/frameworks/sveltekit.md b/docs/frameworks/sveltekit.md deleted file mode 100644 index 8a3468ca..00000000 --- a/docs/frameworks/sveltekit.md +++ /dev/null @@ -1,214 +0,0 @@ ---- -title: SvelteKit | Frameworks ---- - -# SvelteKit - -::: info -For `Type declarations`, `Prompt for update` and `Periodic SW Updates` go to [Svelte](/frameworks/svelte) entry. -::: - -You should remove all references to [SvelteKit service worker module](https://kit.svelte.dev/docs#modules-$service-worker) to disable it on your application. - -Since `SvelteKit` uses `SSR / SSG`, we need to add the `ReloadPrompt` component using `dynamic import`. `Vite Plugin PWA` will only register the service worker on build, it is aligned with the current behavior of [SvelteKit service worker module](https://kit.svelte.dev/docs#modules-$service-worker). - -The best place to include the `ReloadPrompt` is on the main layout of the application: - -::: details src/routes/__layout.svelte -```html - - - - {#if (!dev && browser)} - - {/if} - - -
- -
- -{#if ReloadPrompt} - -{/if} -``` -::: - -## SvelteKit Adapters - -The main problem with the current implementation of the service worker module of `SvelteKit` is that you don't have access to the result applied by any adapter you have configured on your application. The service worker module of `SvelteKit` will be called before the adapter logic is applied, and so, inside the service worker module, you don't have access to those resources. Your application will not work when the user is offline, since the pages will not be included on the service worker precache manifest. - -When using `Vite PWA Plugin` with any `SvelteKit Adapter` you need to provide an additional script to rebuild your `pwa` once `SvelteKit` finish building your application, that is, when the adapter configured finish its job. - -The biggest difference between this plugin and the SvelteKit service worker module is that this plugin does not require integration into the application logic - just configuration. You can take a look at [SvelteKit example](https://github.com/antfu/vite-plugin-pwa/tree/main/examples/sveltekit-pwa) to configure the additional scripts on your application, it is quite complex since we use it for multiple behaviors with the same codebase. - -### Workbox manifestTransforms - -We must provide a list of URLs for the service worker to load and precache. We provide these to workbox using the [the `manifestTransforms` option](https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-build#.ManifestTransform) under `workbox` or [`injectManifest`](https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-build#.injectManifest). The [manifest entries](https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-build#.ManifestEntry) provided via this option will contain all the assets specified in the `srcDir` option. - -Since `SvelteKit` outputs an `.html` page for each pre-rendered page, you can use `manifestTransforms` to generate the URL from the prerendered HTML file path. For an example, see the `pwa-configuration.js` module in the next example using `@sveltejs/adapter-static`. - -Pages which are not prerendered or are generated with a unique adapter will need to be handled separately and the `manifestTransforms` logic will need to be modified accordingly. - -### Static Adapter example - -As an example, when using [@sveltejs/adapter-static](https://github.com/sveltejs/kit/tree/master/packages/adapter-static) with `generateSW` strategy and `Prompt for update` behavior, you will need: - -::: details 1) add pwa.js script -```js -import { copyFileSync } from 'node:fs' -import { resolveConfig } from 'vite' -import { VitePWA } from 'vite-plugin-pwa' -import { pwaConfiguration } from './pwa-configuration.js' - -const webmanifestDestinations = [ - './.svelte-kit/output/client/', - './build/', -] - -const swDestinations = [ - './build/', -] - -async function buildPwa() { - const config = await resolveConfig({ plugins: [VitePWA({ ...pwaConfiguration })] }, 'build', 'production') - // when `vite-plugin-pwa` is present, use it to regenerate SW after rendering - const pwaPlugin = config.plugins.find(i => i.name === 'vite-plugin-pwa')?.api - if (pwaPlugin?.generateSW) { - console.log('Generating PWA...') - await pwaPlugin.generateSW() - webmanifestDestinations.forEach((d) => { - copyFileSync('./.svelte-kit/output/client/_app/manifest.webmanifest', `${d}/manifest.webmanifest`) - }) - // don't copy workbox, SvelteKit will copy it - swDestinations.forEach((d) => { - copyFileSync('./.svelte-kit/output/client/sw.js', `${d}/sw.js`) - }) - console.log('Generation of PWA complete') - } -} - -buildPwa() -``` -::: - -::: details 2) add pwa-configuration.js script - -```js -const pwaConfiguration = { - srcDir: './build', - outDir: './.svelte-kit/output/client', - includeManifestIcons: false, - base: '/', - scope: '/', - manifest: { - short_name: '', - name: '', - scope: '/', - start_url: '/', - display: 'standalone', - theme_color: '#ffffff', - background_color: '#ffffff', - icons: [ - { - src: '/pwa-192x192.png', - sizes: '192x192', - type: 'image/png' - }, - { - src: '/pwa-512x512.png', - sizes: '512x512', - type: 'image/png' - }, - { - src: '/pwa-512x512.png', - sizes: '512x512', - type: 'image/png', - purpose: 'any maskable' - } - ] - }, - workbox: { - // mode: 'development', - navigateFallback: '/', - // vite and SvelteKit are not aligned: pwa plugin will use /\.[a-f0-9]{8}\./ by default: #164 optimize workbox work - dontCacheBustURLsMatching: /-[a-f0-9]{8}\./, - globDirectory: './build/', - globPatterns: ['robots.txt', '**/*.{js,css,html,ico,png,svg,webmanifest}'], - globIgnores: ['**/sw*', '**/workbox-*'], - manifestTransforms: [async (entries) => { - // manifest.webmanifest is added always by pwa plugin, so we remove it. - // EXCLUDE from the sw precache sw and workbox-* - const manifest = entries.filter(({ url }) => - url !== 'manifest.webmanifest' && url !== 'sw.js' && !url.startsWith('workbox-') - ).map((e) => { - let url = e.url - if (url && url.endsWith('.html')) { - if (url.startsWith('/')) - url = url.slice(1) - - if (url === 'index.html') - e.url = '/' - else if (url.endsWith('index.html')) - e.url = `/${url.substring(0, url.lastIndexOf('/'))}` - else if (url.endsWith('.html')) - e.url = `/${url.substring(0, url.length - '.html'.length)}` - } - - return e - }) - - return { manifest } - }] - } -} - -export { pwaConfiguration } -``` -::: - -::: details 3) modify your build script -```json -{ - "scripts": { - "build": "svelte-kit build && node ./pwa.js" - } -} -``` -::: - -::: details 4) add Vite Plugin PWA to svelte.config.js -```js -import adapter from '@sveltejs/adapter-static' -import preprocess from 'svelte-preprocess' -import { VitePWA } from 'vite-plugin-pwa' -import { pwaConfiguration } from './pwa-configuration.js' - -/** @type {import('@sveltejs/kit').Config} */ -const config = { - // Consult https://github.com/sveltejs/svelte-preprocess - // for more information about preprocessors - preprocess: preprocess(), - - kit: { - adapter: adapter(), - - // hydrate the
element in src/app.html - target: '#svelte', - vite: { - plugins: [VitePWA(pwaConfiguration)] - } - } -} - -export default config -``` -::: diff --git a/docs/frameworks/vitepress.md b/docs/frameworks/vitepress.md deleted file mode 100644 index 8f2ea556..00000000 --- a/docs/frameworks/vitepress.md +++ /dev/null @@ -1,37 +0,0 @@ ---- -title: VitePress | Frameworks ---- - -# VitePress - -Since [VitePress](https://vitepress.vuejs.org/) is built using [Vuejs 3](https://v3.vuejs.org/) and -on top of [Vite](https://vitejs.dev/), the integration with this plugin is graceful. - -## Plugin Configuration - -Just follow the [Getting Started](/guide/) section and use one of the `registerType` option to configure -the behavior: - -- [Prompt for update](/guide/prompt-for-update): prompt for new content refreshing -- [Automatic reload](/guide/auto-update) when new content available - -## Import Virtual Modules - -You need to configure a `custom theme` and use the `Layout` component to register the `ReloadPrompt.vue` component -when using `prompt for new content available`, see [Vue 3](/frameworks/vue#vue-3). - -You should include the `ReloadPrompt.vue` on `.vitepress/theme/components/` directory. - -You can also integrate [Periodic SW updates](/guide/periodic-sw-updates). - -## Build - -Since `VitePress` will generate the pages at the end of the build process, you will need to regenerate the Service -Worker of your application when the build process finish (the Service Worker will not have the pages on its precache). - -Take a look at build `VitePress` site [docs:build script](https://github.com/antfu/vite-plugin-pwa/blob/main/docs/package.json#L7). - -## Vite Plugin PWA Docs Site - -You can go to [Vite Plugin PWA](https://github.com/antfu/vite-plugin-pwa/tree/main/docs) to see the -source code for this site and how it is configured using `VitePress`. diff --git a/docs/frameworks/vue.md b/docs/frameworks/vue.md deleted file mode 100644 index f61797f2..00000000 --- a/docs/frameworks/vue.md +++ /dev/null @@ -1,296 +0,0 @@ ---- -title: Vue | Frameworks ---- - -# Vue - -## Vue 3 - -You can use the built-in `Vite` virtual module `virtual:pwa-register/vue` for `Vue 3` which will return `composition api` references (`ref`) for `offlineReady` and `needRefresh`. - -### Type declarations - -::: tip - -::: - -```ts -declare module 'virtual:pwa-register/vue' { - // @ts-expect-error ignore when vue is not installed - import type { Ref } from 'vue' - - export interface RegisterSWOptions { - immediate?: boolean - onNeedRefresh?: () => void - onOfflineReady?: () => void - /** - * Called only if `onRegisteredSW` is not provided. - * - * @deprecated Use `onRegisteredSW` instead. - * @param registration The service worker registration if available. - */ - onRegistered?: (registration: ServiceWorkerRegistration | undefined) => void - /** - * Called once the service worker is registered (requires version `0.12.8+`). - * - * @param swScriptUrl The service worker script url. - * @param registration The service worker registration if available. - */ - onRegisteredSW?: (swScriptUrl: string, registration: ServiceWorkerRegistration | undefined) => void - onRegisterError?: (error: any) => void - } - - export function useRegisterSW(options?: RegisterSWOptions): { - needRefresh: Ref - offlineReady: Ref - updateServiceWorker: (reloadPage?: boolean) => Promise - } -} -``` - -### Prompt for update - -You can use this `ReloadPrompt.vue` component: - -::: details ReloadPrompt.vue -```vue - - - - - -``` -::: - -### Periodic SW Updates - -As explained in [Periodic Service Worker Updates](/guide/periodic-sw-updates), you can use this code to configure this behavior on your application with the virtual module `virtual:pwa-register/vue`: - -```ts -import { useRegisterSW } from 'virtual:pwa-register/vue' - -const intervalMS = 60 * 60 * 1000 - -const updateServiceWorker = useRegisterSW({ - onRegistered(r) { - r && setInterval(() => { - r.update() - }, intervalMS) - } -}) -``` - -The interval must be in milliseconds, in the example above it is configured to check the service worker every hour. - -## Vue 2 - -Since this plugin only supports `Vue 3`, you cannot use the virtual module `virtual:pwa-register/vue`. - -You can copy `useRegisterSW.js` `mixin` to your `@/mixins/` directory in your application to make it working: - -::: details useRegisterSW.js -```js -export default { - name: 'useRegisterSW', - data() { - return { - updateSW: undefined, - offlineReady: false, - needRefresh: false - } - }, - async mounted() { - try { - const { registerSW } = await import('virtual:pwa-register') - const vm = this - this.updateSW = registerSW({ - immediate: true, - onOfflineReady() { - vm.offlineReady = true - vm.onOfflineReadyFn() - }, - onNeedRefresh() { - vm.needRefresh = true - vm.onNeedRefreshFn() - }, - onRegistered(swRegistration) { - swRegistration && vm.handleSWManualUpdates(swRegistration) - }, - onRegisterError(e) { - vm.handleSWRegisterError(e) - } - }) - } - catch { - console.log('PWA disabled.') - } - }, - methods: { - async closePromptUpdateSW() { - this.offlineReady = false - this.needRefresh = false - }, - onOfflineReadyFn() { - console.log('onOfflineReady') - }, - onNeedRefreshFn() { - console.log('onNeedRefresh') - }, - updateServiceWorker() { - this.updateSW && this.updateSW(true) - }, - handleSWManualUpdates(swRegistration) {}, - handleSWRegisterError(error) {} - } -} -``` -::: - -### Prompt for update - -You can use this `ReloadPrompt.vue` component: - -::: details ReloadPrompt.vue -```vue - - - - - -``` -::: - -### Periodic SW Updates - -As explained in [Periodic Service Worker Updates](/guide/periodic-sw-updates), you can use this code to configure this behavior on your application with the `useRegisterSW.js` `mixin`: - -```vue - -``` - -The interval must be in milliseconds, in the example above it is configured to check the service worker every hour. diff --git a/docs/guide/auto-update.md b/docs/guide/auto-update.md deleted file mode 100644 index 06750434..00000000 --- a/docs/guide/auto-update.md +++ /dev/null @@ -1,64 +0,0 @@ ---- -title: Automatic reload | Guide ---- - -# Automatic reload - -With this behavior, once the browser detects a new version of your application, then, it will update the caches and will reload any browser windows/tabs with the application opened automatically to take the control. - -The disadvantage of using this behavior is that the user can lose data in any browser windows/tabs in which the application is open and is filling in a form. - -If your application has forms, we recommend you to change the behavior to use default `prompt` option to allow the user decide when to update the content of the application. - -::: danger -Before you put your application into production, you need to be sure of the behavior you want for the service worker. Changing the behavior of the service worker from `autoUpdate` to `prompt` can be a pain. -::: - -## Plugin Configuration - -With this option, the plugin will force `workbox.clientsClaim` and `workbox.skipWaiting` to `true` on the plugin options. - -You must add `registerType: 'autoUpdate'` to `vite-plugin-pwa` plugin options in your `vite.config.ts` file: - -```ts -VitePWA({ - registerType: 'autoUpdate' -}) -``` - -### Cleanup Outdated Caches - - - - - -### Generate SW Source Map - - - -## Importing Virtual Modules - -With this behavior, you **must** import one of the virtual modules exposed by `vite-plugin-pwa` plugin **only** if you need to prompt a dialog to the user when the application is ready to work offline, otherwise you can import or just omit it. - -If you don't import one of the virtual modules, the automatic reload will still work. - -### Ready To Work Offline - -You must include the following code on your `main.ts` or `main.js` file: - -```ts -import { registerSW } from 'virtual:pwa-register' - -const updateSW = registerSW({ - onOfflineReady() {}, -}) -``` - -You will need to show a ready to work offline dialog to the user with an `OK` button inside `onOfflineReady` callback. - -When the user clicks the `OK` button, just hide the prompt shown on `onOfflineReady` method. - -### SSR/SSG - - - diff --git a/docs/guide/development.md b/docs/guide/development.md deleted file mode 100644 index cae66b3e..00000000 --- a/docs/guide/development.md +++ /dev/null @@ -1,206 +0,0 @@ ---- -title: Development | Guide ---- - -# Development - -From version `v0.11.13` you can use the service worker on development. - -The PWA will not be registered, only the service worker logic, check the details for each strategy below. - -::: warning -There will be only one single registration on the service worker precache manifest (`self.__WB_MANIFEST`) when necessary: `navigateFallback`. -::: - -The service worker on development will be only available if `disabled` plugin option is not `true` and the `enable` development option is `true`. - -## Plugin configuration - -To enable the service worker on development, you only need to add the following options to the plugin configuration: - -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - /* other options */ - /* enable sw on development */ - devOptions: { - enabled: true - /* other options */ - } - }) - ] -}) -``` - -## Type declarations - -::: warning -Since version `0.12.4+`, the `webManifestUrl` has been deprecated, the plugin will use `navigateFallbackAllowlist` instead. -::: - -```ts -/** - * Development options. - */ -export interface DevOptions { - /** - * Should the service worker be available on development?. - * - * @default false - */ - enabled?: boolean - /** - * The service worker type. - * - * @default 'classic' - */ - type?: WorkerType - /** - * This option will enable you to not use the `runtimeConfig` configured on `workbox.runtimeConfig` plugin option. - * - * **WARNING**: this option will only be used when using `generateSW` strategy. - * - * @default false - */ - disableRuntimeConfig?: boolean - /** - * This option will allow you to configure the `navigateFallback` when using `registerRoute` for `offline` support: - * configure here the corresponding `url`, for example `navigateFallback: 'index.html'`. - * - * **WARNING**: this option will only be used when using `injectManifest` strategy. - */ - navigateFallback?: string - - /** - * This option will allow you to configure the `navigateFallbackAllowlist`: new option from version `v0.12.4`. - * - * Since we need at least the entry point in the service worker's precache manifest, we don't want the rest of the assets to be intercepted by the service worker. - * - * If you configure this option, the plugin will use it instead the default. - * - * **WARNING**: this option will only be used when using `generateSW` strategy. - * - * @default [/^\/$/] - */ - navigateFallbackAllowlist?: RegExp[] - - /** - * On dev mode the `manifest.webmanifest` file can be on other path. - * - * For example, **SvelteKit** will request `/_app/manifest.webmanifest`, when `webmanifest` added to the output bundle, **SvelteKit** will copy it to the `/_app/` folder. - * - * **WARNING**: this option will only be used when using `generateSW` strategy. - * - * @default `${vite.base}${pwaOptions.manifestFilename}` - * @deprecated This option has been deprecated from version `v0.12.4`, the plugin will use navigateFallbackAllowlist instead. - * @see navigateFallbackAllowlist - */ - webManifestUrl?: string -} -``` - -## manifest.webmanifest - -Since version `0.12.1` the `manifest.webmanifest` is also served on development mode: you can now check it on `dev tools`. - -## generateSW strategy - -When using this strategy, the `navigateFallback` on development options will be ignored. The PWA plugin will check if `workbox.navigateFallback` is configured and will only register it on `additionalManifestEntries`. - -The PWA plugin will force `type: 'classic'` on service worker registration to avoid errors on client side (not yet supported): - -```shell -Uncaught (in promise) TypeError: Failed to execute 'importScripts' on 'WorkerGlobalScope': Module scripts don't support importScripts(). -``` - -::: warning -If your pages/routes other than the entry point are being intercepted by the service worker, use `navigateFallbackAllowlist` to include only the entry point: by default, the plugin will use `[/^\/$/]`. - -You **ONLY** need to add the `navigateFallbackAllowlist` option to the `devOptions` entry in `vite-plugin-pwa` configuration if your pages/routes are being intercepting by the service worker and preventing to work as expected: -```ts -export default defineConfig({ - plugins: [ - VitePWA({ - /* other options */ - devOptions: { - navigateFallbackAllowlist: [/^index.html$/] - /* other options */ - } - }) - ] -}) -``` -::: - -## injectManifest strategy - -You can use `type: 'module'` when registering the service worker (right now only supported on latest versions of `Chromium` based browsers: `Chromium/Chrome/Edge`): - - -```ts -devOptions: { - enabled: true, - type: 'module', - /* other options */ -} -``` - -::: warning -When building the application, the `vite-plugin-pwa` plugin will always register your service worker with `type: 'classic'` for compatibility with all browsers. -::: - -::: tip -You should only intercept the entry point of your application, if you don't include the `allowlist` option in the `NavigationRoute`, all your pages/routes might not work as they are being intercepted by the service worker (which will return by default the content of the entry point by not including your pages/routes in its precache manifest): -```ts -let allowlist: undefined | RegExp[] -if (import.meta.env.DEV) - allowlist = [/^\/$/] - -// to allow work offline -registerRoute(new NavigationRoute( - createHandlerBoundToURL('index.html'), - { allowlist } -)) -``` -::: - -When using this strategy, the `vite-plugin-pwa` plugin will delegate the service worker compilation to `Vite`, so if you're using `import` statements instead `importScripts` in your custom service worker, you **must** configure `type: 'module'` on development options. - -If you are using `registerRoute` in your custom service worker you should add `navigateFallback` on development options, the `vite-plugin-pwa` plugin will include it in the injection point (`self.__WB_MANIFEST`). - -You **must** not use `HMR (Hot Module Replacement)` in your custom service worker, since we cannot use yet dynamic imports in service workers: `import.meta.hot`. - -If you register your custom service worker (not using `vite-plugin-pwa` virtual module and configuring `injectRegister: false` or `injectRegister: null`), use the following code (remember also to add `scope` option if necessary): -```js -if ('serviceWorker' in navigator) { - navigator.serviceWorker.register( - import.meta.env.MODE === 'production' ? '/sw.js' : '/dev-sw.js?dev-sw' - ) -} -``` - -If you are also using `import` statements instead `importScripts`, use the following code (remember also to add the `scope` option if necessary): -```ts -if ('serviceWorker' in navigator) { - navigator.serviceWorker.register( - import.meta.env.MODE === 'production' ? '/sw.js' : '/dev-sw.js?dev-sw', - { type: import.meta.env.MODE === 'production' ? 'classic' : 'module' } - ) -} -``` - -## Example - -You can find an example here: [vue-router](https://github.com/antfu/vite-plugin-pwa/tree/main/examples/vue-router). - -To run the example, you must build the PWA plugin (`pnpm run build` from root folder), change to `vue-router` directory -(`cd examples/vue-router`) and run it: -- `generateSW` strategy: `pnpm run dev` -- `injectManifest` strategy: `pnpm run dev-claims` - -Since version `0.12.1`, you also have the development scripts for all other frameworks as well. - -The instructions for running the `dev` or `dev-claims` scripts are the same as for `vue-router` but running them in the corresponding framework directory. diff --git a/docs/guide/faq.md b/docs/guide/faq.md deleted file mode 100644 index cb19d79c..00000000 --- a/docs/guide/faq.md +++ /dev/null @@ -1,180 +0,0 @@ ---- -title: FAQ | Guide -next: Getting Started | Frameworks ---- - -# FAQ - -## IDE errors 'Cannot find module' (ts2307) - - - -## Type declarations - -You can find the full list of the `vite-plugin-pwa` plugin configuration options in the following [types.ts module](https://github.com/antfu/vite-plugin-pwa/blob/main/src/types.ts). - -You can find all the `vite-plugin-pwa` virtual modules declarations in the following [client.d.ts](https://github.com/antfu/vite-plugin-pwa/blob/main/client.d.ts). - -## Web app manifest and 401 status code (Unauthorized) - -[Browsers send requests for the web manifest without credentials](https://web.dev/add-manifest/#link-manifest), so if your site sits behind auth, the request will fail with a 401 Unauthorized error – even if the user is logged in. - -To send the request with credentials, the `` needs a `crossorigin="use-credentials"` attribute, which you can enable via `useCredentials` in the [plugin options](https://github.com/antfu/vite-plugin-pwa/blob/main/src/types.ts#L79): - -```ts -useCredentials: true -``` - -## Service Worker Registration Errors - -You can handle Service Worker registration errors if you want to notify the user with following code on your `main.ts` -or `main.js`: - -```ts -import { registerSW } from 'virtual:pwa-register' - -const updateSW = registerSW({ - onRegisterError(error) {} -}) -``` - -and then inside `onRegisterError`, just notify the user that there was an error registering the service worker. - -## Missing assets from SW precache manifest - -If you find any assets are missing from the service worker's precache manifest, you should check if they exceed the `maximumFileSizeToCacheInBytes`, the default value is **2 MiB**. - -You can increase the value to your needs, for example to allow assets up to **3 MiB**: -- when using `generateSW` strategy: -```ts -workbox: { - maximumFileSizeToCacheInBytes: 3000000 -} -``` -- when using `injectManifest` strategy: -```ts -injectManifest: { - maximumFileSizeToCacheInBytes: 3000000 -} -``` - -## Exclude routes - -If you need to exclude some routes from service worker interception: -- [for `generateSW` strategy](/workbox/generate-sw#exclude-routes) -- [for `injectManifest` strategy](/workbox/inject-manifest#exclude-routes) - -## `navigator / window` is `undefined` - -If you are getting `navigator is undefined` or `window is undefined` errors when building your application, you have configured your application in an `SSR / SSG` environment. - -The error could be due to using this plugin or another library not aware of `SSR / SSG`: your code will be called on the client but also on the server side on build process, so when building the application your server logic will be invoked, and there is no `navigator / window` on the server, it is `undefined`. - -### Third party libraries - -If the cause of the error is a third party library that is not aware of the `SSR / SSG` environment, the way to work around the error is to import it with a dynamic import when `window` is defined: - -```ts -if (typeof window !== 'undefined') - import('./library-not-ssr-ssg-aware') -``` - -Alternatively, if your framework supports component `onMount / onMounted` lifecycle hook, you can import the third party library on the callback, since the frameworks should call this lifecycle hook only on client side, you should check your framework documentation. - -### Vite PWA Virtual Module - -If the cause of the error is the virtual module of this plugin, you can work around this problem following [SSR/SSG: Prompt for update](/guide/prompt-for-update#ssr-ssg) or [SSR/SSG: Automatic reload](/guide/auto-update#ssr-ssg) entries. - -If you are using `autoUpdate` strategy and a `router` with `isReady` support (that is, the router allow register a callback to be called when the current component route finish loading), you can delay the service worker registration to be on the router callback. - -For example, using `vue-router`, you can register the service worker for `autoUpdate` strategy using this code: - -```ts -import type { Router } from 'vue-router' - -export function registerPWA(router: Router) { - router.isReady().then(async () => { - const { registerSW } = await import('virtual:pwa-register') - registerSW({ immediate: true }) - }) -} -``` - -You can see an example for `autoUpdate` strategy on a `SSR / SSG` environment ([vite-ssg](https://github.com/antfu/vite-ssg)) on [Vitesse Template](https://github.com/antfu/vitesse/blob/main/src/modules/pwa.ts). - -If you are using `prompt` strategy, you will need to load the `ReloadPrompt` component using dynamic import with async fashion, for example, using `vue 3`: - -```vue -// src/App.vue - - - -``` - -or using `svelte`: - -```html - - -... -{#if ClientReloadPrompt} - -{/if} -``` - -You can check your `SSR / SSG` environment to see if it provides some way to register components only on client side. Following with `vite-ssg` on `Vitesse Template`, it provides `ClientOnly` functional component, that will prevent registering components on server side, and so you can use the original code but enclosing `ReloadPrompt` component with it: - -```vue -// src/App.vue - -``` - -### VitePress - -You can check the [ReloadPrompt](https://github.com/antfu/vite-plugin-pwa/blob/main/docs/.vitepress/theme/components/ReloadPrompt.vue) component of this site to call the PWA virtual module: -```vue - -``` diff --git a/docs/guide/index.md b/docs/guide/index.md deleted file mode 100644 index 6fec293d..00000000 --- a/docs/guide/index.md +++ /dev/null @@ -1,113 +0,0 @@ ---- -title: Getting Started | Guide ---- - -# Getting Started - -::: tip [Learn PWA](https://web.dev/learn/pwa/) -Progressive Web Apps (PWAs) are web application built and enhanced with modern APIs to deliver enhanced capabilities, reliability, and installability while reaching anyone, anywhere, on any device, all with a single codebase. - -If you want to build a Progressive Web App, you may be wondering where to start, if it's possible to upgrade a website to a PWA without starting from scratch, or how to move from a platform-specific app to a PWA. -::: - -A PWA mainly consists of a [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest), a service worker and a script/module to register the service worker in the browser. - -If you are new to **Progressive Web Apps (PWA)**, we suggest read this guide before starting writing code: [Learn PWA](https://web.dev/learn/pwa/). - -## Service Worker - -Service workers essentially act as proxy servers that sit between web applications, the browser, and the network (when available). They are intended, among other things, to enable the creation of effective offline experiences, intercept network requests and take appropriate action based on whether the network is available, and update assets residing on the server. They will also allow access to push notifications and background sync APIs. - -A service worker is an event-driven [worker](https://developer.mozilla.org/en-US/docs/Web/API/Worker) registered against an origin and a path. It takes the form of a JavaScript file that can control the web-page/site that it is associated with, intercepting and modifying navigation and resource requests, and caching resources in a very granular fashion to give you complete control over how your app behaves in certain situations (the most obvious one being when the network is not available). - -You can find more information about service workers in [Service Worker API](https://developer.mozilla.org/en-US/docs/Web/API/Service_Worker_API). - -## vite-plugin-pwa - -`vite-plugin-pwa` will help you to add PWA, with almost zero configuration, to your existing applications. The plugin will add sensible built-in default configuration for common use cases. - -The `vite-plugin-pwa` plugin will: -- generate the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest): using the `manifest` plugin option -- configure the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) on your application entry point: adding a link on the `head` on your entry point -- generate the service worker: using the `strategies` plugin option (for more information read [Service Worker Strategies](/guide/service-worker-strategies-and-behaviors#service-worker-strategies) section) -- generate the script to register the service worker in the browser: using `injectRegister` plugin option (for more information read [Register Service Worker](/guide/register-service-worker) section) - -## Installing vite-plugin-pwa - -To install the `vite-plugin-pwa` plugin, just add it to your project as a `dev dependency`: - -With **YARN**: -```shell -yarn add vite-plugin-pwa -D -``` - -With **NPM**: -```shell -npm i vite-plugin-pwa -D -``` - -With **PNPM**: -```shell -pnpm i vite-plugin-pwa -D -``` - -## Configuring vite-plugin-pwa - -Edit your `vite.config.js / vite.config.ts` file and add the `vite-plugin-pwa`: - -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ registerType: 'autoUpdate' }) - ] -}) -``` - -With this minimal configuration of the `vite-plugin-pwa` plugin, your application is now able to generate the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) and inject it at the entry point, generate the service worker and register it in the browser. - -You can find the full list of the `vite-plugin-pwa` plugin configuration options in the following [client.d.ts](https://github.com/antfu/vite-plugin-pwa/blob/main/src/types.ts). - -::: warning -If you are **NOT** using `vite-plugin-pwa` version `0.12.2+`, there is a bug handling `injectRegister` (the service worker generated will not include the code required to allow work with `autoUpdate` behavior). - -If you're using a `vite-plugin-pwa` plugin version prior to `0.12.2`, you can fix the bug using this plugin configuration: -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - registerType: 'autoUpdate', - workbox: { - clientsClaim: true, - skipWaiting: true - } - }) - ] -}) -``` -::: - -If you want to check it in `dev`, add the `devOptions` option to the plugin configuration (you will have the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) and the generated service worker): -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - registerType: 'autoUpdate', - devOptions: { - enabled: true - } - }) - ] -}) -``` - -If you build your application, the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) will be generated and configured on the application entry point, the service worker will be also generated and the script/module to register it in the browser added. - -::: info -`vite-plugin-pwa` plugin uses [workbox-build](https://developer.chrome.com/docs/workbox/reference/workbox-build/) node library to build the service worker, you can find more information in the [Service Worker Strategies And Behaviors](/guide/service-worker-strategies-and-behaviors) and [Workbox](/workbox/) sections. -::: diff --git a/docs/guide/inject-manifest.md b/docs/guide/inject-manifest.md deleted file mode 100644 index bf0e9b47..00000000 --- a/docs/guide/inject-manifest.md +++ /dev/null @@ -1,140 +0,0 @@ ---- -title: Advanced (injectManifest) | Guide ---- - -# Advanced (injectManifest) - -With this service worker `strategy` you can build your own service worker. - -The `vite-plugin-pwa` plugin will compile your custom service worker and inject its service worker's precache manifest. - -By default, the plugin will assume the `service worker` source code is located at the `Vite's public` folder with the name `sw.js`, that's, it will search in the following file: `/public/sw.js`. - -If you want to change the location and/or the service worker name, you will need to change the following plugin options: -- `srcDir`: **must** be relative to the project root folder -- `filename`: including the file extension and **must** be relative to the `srcDir` folder - -For example, if your service worker is located at `/src/my-sw.js` you must configure it using: -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - strategies: 'injectManifest', - srcDir: 'src', - filename: 'my-sw.js' - }) - ] -}) -``` - -## Custom Service worker - -We recommend you to use [Workbox](https://developers.google.com/web/tools/workbox) to build your service worker instead using `importScripts`, you will need to include `workbox-*` dependencies as `dev dependencies` to your project. - -### Plugin Configuration - -You **must** configure `strategies: 'injectManifest'` in `vite-plugin-pwa` plugin options in your `vite.config.ts` file: - -```ts -VitePWA({ - strategies: 'injectManifest', -}) -``` - -### Service Worker Code - -Your custom service worker (`public/sw.js`) should have at least this code (you also need to install `workbox-precaching` as `dev dependency` to your project): -```js -import { precacheAndRoute } from 'workbox-precaching' - -precacheAndRoute(self.__WB_MANIFEST) -``` - -### Cleanup Outdated Caches - - - - - -### Generate SW Source Map - - - -## Auto Update Behavior - -If you need your custom service worker works with `Auto Update` behavior, you need to change the plugin configuration options and add some custom code to your service worker code. - -### Plugin Configuration - -You must configure `registerType: 'autoUpdate'` to `vite-plugin-pwa` plugin options in your `vite.config.ts` file: - -```ts -VitePWA({ - registerType: 'autoUpdate' -}) -``` - -### Service Worker Code - -You **must** include in your service worker code at least this code (you also need to install `workbox-core` as `dev dependency` to your project): - -```js -import { clientsClaim } from 'workbox-core' - -self.skipWaiting() -clientsClaim() -``` - -## Prompt For Update Behavior - -If you need your custom service worker works with `Prompt For Update` behavior, you need to change your service worker code. - -### Service Worker Code - -You need to include on your service worker at least this code: - -```js -self.addEventListener('message', (event) => { - if (event.data && event.data.type === 'SKIP_WAITING') - self.skipWaiting() -}) -``` - -## TypeScript support - -You can use TypeScript to write your custom service worker. To resolve service worker types, just add `WebWorker` to `lib` entry on your `tsconfig.json` file: - -```json -{ - "compilerOptions": { - "lib": ["ESNext", "DOM", "WebWorker"] - } -} -``` - -### Plugin Configuration - -We recommend you to put your custom service worker inside `src` directory. - -You need to configure `srcDir: 'src'` and `filename: 'sw.ts'` plugin options in your `vite.config.ts` file, configure both options with the directory and the name of your custom service worker properly: - -```ts -VitePWA({ - srcDir: 'src', - filename: 'sw.ts' -}) -``` - -### Service Worker Code - -You need to define `self` scope with `ServiceWorkerGlobalScope`: - -```ts -import { precacheAndRoute } from 'workbox-precaching' - -declare let self: ServiceWorkerGlobalScope - -precacheAndRoute(self.__WB_MANIFEST) -``` diff --git a/docs/guide/periodic-sw-updates.md b/docs/guide/periodic-sw-updates.md deleted file mode 100644 index 0f94b997..00000000 --- a/docs/guide/periodic-sw-updates.md +++ /dev/null @@ -1,72 +0,0 @@ ---- -title: Periodic Service Worker Updates | Guide ---- - -# Periodic Service Worker Updates - -:::info -If you're not importing any of the virtual modules provided by `vite-plugin-pwa` you'll need to figure out how to configure it, it is out of the scope of this guide. -::: - -As explained in [Manual Updates](https://developers.google.com/web/fundamentals/primers/service-workers/lifecycle#manual-updates) entry in [The Service Worker Lifecycle](https://web.dev/service-worker-lifecycle/) article, you can use this code to configure periodic service worker updates on your application on your `main.ts` or `main.js`: - -::: details main.ts / main.js -```ts -import { registerSW } from 'virtual:pwa-register' - -const intervalMS = 60 * 60 * 1000 - -const updateSW = registerSW({ - onRegistered(r) { - r && setInterval(() => { - r.update() - }, intervalMS) - } -}) -``` -::: - -The interval must be in milliseconds, in the example above it is configured to check the service worker every hour. - -## Handling Edge Cases - -::: info -From version `0.12.8+` we have a new option, `onRegisteredSW`, and `onRegistered` has been deprecated. If `onRegisteredSW` is present, `onRegistered` will never be called. -::: - -Previous script will allow you to check if there is a new version of your application available, but you will need also to deal with some edge cases like: -- server is down when calling the update method -- the user can go offline at any time - -To mitigate previous problems, use this more complex snippet: - -::: details main.ts / main.js -```ts -import { registerSW } from 'virtual:pwa-register' - -const intervalMS = 60 * 60 * 1000 - -const updateSW = registerSW({ - onRegisteredSW(swUrl, r) { - r && setInterval(async () => { - if (!(!r.installing && navigator)) - return - - if (('connection' in navigator) && !navigator.onLine) - return - - const resp = await fetch(swUrl, { - cache: 'no-store', - headers: { - 'cache': 'no-store', - 'cache-control': 'no-cache', - }, - }) - - if (resp?.status === 200) - await r.update() - }, intervalMS) - } -}) -``` -::: diff --git a/docs/guide/prompt-for-update.md b/docs/guide/prompt-for-update.md deleted file mode 100644 index 60c19de6..00000000 --- a/docs/guide/prompt-for-update.md +++ /dev/null @@ -1,46 +0,0 @@ ---- -title: Prompt for new content refreshing | Guide ---- - -# Prompt for new content refreshing - - - -## Plugin Configuration - -Since this is the default behavior for the `registerType` plugin option, you don't need to configure it. - -### Cleanup Outdated Caches - - - - - -### Generate SW Source Map - - - -## Importing Virtual Modules - -You must include the following code on your `main.ts` or `main.js` file: -```ts -import { registerSW } from 'virtual:pwa-register' - -const updateSW = registerSW({ - onNeedRefresh() {}, - onOfflineReady() {}, -}) -``` - -You will need to: -- show a prompt to the user with refresh and cancel buttons inside `onNeedRefresh` method. -- show a ready to work offline message to the user with an OK button inside `onOfflineReady` method. - -When the user clicks the "refresh" button when `onNeedRefresh` called, then call `updateSW()` function; the page will reload and the up-to-date content will be served. - -In any case, when the user clicks the `Cancel` or `OK` buttons in case `onNeedRefresh` or `onOfflineReady` respectively, close the corresponding showed prompt. - -### SSR/SSG - - - diff --git a/docs/guide/pwa-minimal-requirements.md b/docs/guide/pwa-minimal-requirements.md deleted file mode 100644 index a4de6016..00000000 --- a/docs/guide/pwa-minimal-requirements.md +++ /dev/null @@ -1,136 +0,0 @@ ---- -title: PWA Minimal Requirements | Guide ---- - -# PWA Minimal Requirements - -Previous steps in this guide, are the minimal requirements and configuration to create the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) and the service worker when you build your application, but you'll need to include more options to meet PWA Minimal Requirements. - -Your application **must** meet the PWA Minimal Requirements before deploying it to production or when testing your build on local: for example, when testing your PWA application on local using `LightHouse`. - -To make your PWA application installable (one of the requirements), you will need to modify your application entry point, add some minimal entries to your `Web App Manifest`, allow search engines to crawl all your application pages and configure your server properly (only for production, on local you can use `https-localhost` dependency and `node`). - -## Entry Point - -Your application entry point (usually `index.html`) **must** have the following entries in the `` section: -- mobile viewport configuration -- a title -- a description -- a favicon -- a link for `apple-touch-icon` -- a link for `mask-icon` -- a meta entry for `theme-color` - -For example, here a minimal configuration (you must provide all the icons and images): -```html - - - My Awesome App - - - - - - -``` - -## Web App Manifest - -Your application [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest) **must** have the following entries: -- a scope: omitted here for simplicity, the `vite-plugin-pwa` plugin will use the `Vite` base option to configure it (default is `/`) -- a name -- a short description -- a description -- a `theme_color`: **must match** the configured one on `Entry Point theme-color` -- an icon with `192x192` size -- an icon with `512x512` size - -To configure the [Web App Manifest](https://developer.mozilla.org/en-US/docs/Web/Manifest), add the `manifest` entry to the `vite-plugin-pwa` plugin options. - -Following with the example, here a minimal configuration (you must provide all the icons and images): -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - includeAssets: ['favicon.ico', 'apple-touch-icon.png', 'masked-icon.svg'], - manifest: { - name: 'My Awesome App', - short_name: 'MyApp', - description: 'My Awesome App description', - theme_color: '#ffffff', - icons: [ - { - src: 'pwa-192x192.png', - sizes: '192x192', - type: 'image/png' - }, - { - src: 'pwa-512x512.png', - sizes: '512x512', - type: 'image/png' - } - ] - } - }) - ] -}) -``` - -## Icons / Images - -For `manifest` icons entry, you will need to create `pwa-192x192.png`, and `pwa-512x512.png` icons. The icons specified above are the minimum required to meet PWA, that is, icons with `192x192` and `512x512` resolutions (last one duplicated for `purpose: 'any maskable'` if you want to add it, it is not required). - -We suggest you to create a svg or png icon (if it is a png icon, with the maximum resolution possible) for your application and use it to generate a favicon package in [Favicon Generator](https://realfavicongenerator.net/). - -For `mask-icon` in the entry point, use the svg or the png used to generate the favicon package. - -Once generated, download the ZIP and use `android-*` icons for `pwa-*`: -- use `android-chrome-192x192.png` for `pwa-192x192.png` -- use `android-chrome-512x512.png` for `pwa-512x512.png` -- `apple-touch-icon.png` is `apple-touch-icon.png` -- `favicon.ico` is `favicon.ico` - -If you want to add the `purpose: 'any maskable'` icon to the Web App Manifest: -```ts -icons: [ - { - src: 'pwa-192x192.png', - sizes: '192x192', - type: 'image/png' - }, - { - src: 'pwa-512x512.png', - sizes: '512x512', - type: 'image/png' - }, - { - src: 'pwa-512x512.png', - sizes: '512x512', - type: 'image/png', - purpose: 'any maskable' - } -] -``` - -## Search Engines - -You **must** add a `robots.txt` file to allow search engines to crawl all your application pages, just add `robots.txt` to the `public` folder on your application: -```txt -User-agent: * -Allow: / -``` - -:::warning -`public` folder must be on the root folder of your application, not inside the `src` folder. -::: - -## Server Configuration - -You can use the server you want, but your server **must**: -- serve `manifest.webmanifest` with `application/manifest+json` mime type -- serve your application over `https` -- redirect from `http` to `https` - -You can find more information in the [Deploy](/deployment/) section. diff --git a/docs/guide/register-service-worker.md b/docs/guide/register-service-worker.md deleted file mode 100644 index 3ca01787..00000000 --- a/docs/guide/register-service-worker.md +++ /dev/null @@ -1,77 +0,0 @@ ---- -title: Register Service Worker | Guide ---- - -# Register Service Worker - -`vite-plugin-pwa` plugin will register the service worker automatically for you, using the `injectRegister` configuration option (**optional**). - -If you want to configure the `injectRegister` plugin option: -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - injectRegister: 'auto' - }) - ] -}) -``` - -The `injectRegister` plugin configuration option, will control how to register the service worker in your application: -- `inline`: injects a simple register script, inlined in the application entry point -- `script`: injects a `script` tag in the `head` with the `service worker` to a generated simple register -- `null` (manual): do nothing, you will need to register the service worker yourself, or import any of the virtual modules exposed by the plugin -- **`auto` (default value)**: depends on whether you use any of the virtual modules exposed by the plugin, it will do nothing or switch to `script` mode - - -You can find more information about the virtual modules exposed by the plugin in the [Frameworks](/frameworks/) section. - -## Inline Registration - -When configuring `injectRegister: 'inline'` in the plugin configuration, the plugin will inline a head script adding in to your application entry point: -::: details **inlined head script** -```html - - - -``` -::: - -## Script Registration - -When configuring `injectRegister: 'script'` in the plugin configuration, the plugin will generate a `registerSW.js` script adding it to your application entry point: -::: details **head script** -```html - - - -``` -::: - -::: details **/registerSW.js** -```js -if ('serviceWorker' in navigator) { - window.addEventListener('load', () => { - navigator.serviceWorker.register('/sw.js', { scope: '/' }) - }) -} -``` -::: - -## Manual Registration - -When configuring `injectRegister: null` in the plugin configuration, the plugin will do nothing, you must register the service workbox manually yourself. - -Or you can import any of the virtual modules exposed by the plugin. - -## Auto Registration - -If your application code base is not importing any of the virtual modules exposed by the plugin, the plugin will fallback to [Script Registration](/guide/register-service-worker#script-registration), otherwise, the imported virtual module will register the service worker for you. diff --git a/docs/guide/service-worker-precache.md b/docs/guide/service-worker-precache.md deleted file mode 100644 index e2981a15..00000000 --- a/docs/guide/service-worker-precache.md +++ /dev/null @@ -1,51 +0,0 @@ ---- -title: Service Worker Precache | Guide ---- - -# Service Worker Precache - -As we have mentioned in [Service Worker](/guide/#service-worker) section, service workers act as proxies intercepting requests between the browser and the server. - -Since we are going to add PWA to your application, we need to configure the service worker so that your application can work offline. To do this, we need to configure the service worker's precache manifest, which will include all the resources of your application (basically we need to instruct the service worker what resources to store in cache storage so that it can be used for `network requests interception` and when the application is offline). - -::: tip Network requests interception -You can also configure how to control the network requests interception for any of your application resources. - -You can find more information on [Workbox - Caching Strategies](https://developer.chrome.com/docs/workbox/caching-strategies-overview/#caching-strategies). -::: - -Once the application registers the service worker, the browser will try to install it downloading all the resources in the service worker's precache manifest. Once all the resources downloaded and stored in the cache storage by the browser, it will try to activate the service worker to take the control of the application. - -::: tip -The browser **will only download all the resources** in the service worker's precache manifest if the service worker is not installed (first time the user visit your application) or if there is a new version of your application (if you change some resource in your application, the service worker will also change once you build the application, since its precache manifest is modified to include your changes). - -In any case, the browser **will always download all the resources in a background thread** and not in the main browser thread, this way people can use the application while the browser is trying to install the service worker. - -You can check this website or the [VueUse docs site](https://vueuse.org/) in a private window, just open `Network Tab` on dev tools before visiting the sites: the browser will start download all the resources while you navigate the site. -::: - -## Precache Manifest - -Since `vite-plugin-pwa` plugin uses [workbox-build](https://developer.chrome.com/docs/workbox/modules/workbox-build/) node library to build the service worker, it will only include `css`, `js` and `html` resources in the manifest precache (check the `globPatterns` entry in [GlobPartial](https://developer.chrome.com/docs/workbox/reference/workbox-build/#type-GlobPartial)). - -`workbox-build` node library is file based, that is, it will traverse the build output folder of your application. `Vite` will generate your build in the `dist` folder, and so, `workbox-build` will traverse the `dist` folder adding all resources found in it to the service worker's precache manifest. - -If you need to include another resource types, you will need to add them to the `globPatterns` entry. Depending on the `strategy` configured in the `vite-plugin-pwa` plugin configuration, you will need to add it under the `workbox` or `injectManifest` configuration option. - -You can find more information in the [Static assets handling](/guide/static-assets) section. - -For example, if you need to add `ico`, `png` and `svg` resources in the example from the [Configuring vite-plugin-pwa - Guide](/guide/#configuring-vite-plugin-pwa) section, you will need to add `globPatterns` under `workbox` entry, since we're using the default `vite-plugin-pwa` strategy (`generateSW`): -```ts -import { VitePWA } from 'vite-plugin-pwa' - -export default defineConfig({ - plugins: [ - VitePWA({ - registerType: 'autoUpdate', - workbox: { - globPatterns: ['**/*.{js,css,html,ico,png,svg}'] - } - }) - ] -}) -``` diff --git a/docs/guide/service-worker-strategies-and-behaviors.md b/docs/guide/service-worker-strategies-and-behaviors.md deleted file mode 100644 index eac2e96b..00000000 --- a/docs/guide/service-worker-strategies-and-behaviors.md +++ /dev/null @@ -1,29 +0,0 @@ ---- -title: Service Worker Strategies And Behaviors | Guide ---- - -# Service Worker Strategies And Behaviors - -A service worker strategy is related to how the `vite-plugin-pwa` plugin will generate your service worker, while the behavior of a service worker is related to how the service worker will work in the browser once the browser detects a new version of your application. - -## Service Worker Strategies - -As we mention in [Configuring vite-plugin-pwa](/guide/#configuring-vite-plugin-pwa) section, `vite-plugin-pwa` plugin will use `workbox-build` node library to generate your service worker. There are 2 available strategies, `generateSW` and `injectManifest`: -- `generateSW`: the `vite-plugin-pwa` will generate the service worker for you, you don't need to write the code for the service worker -- `injectManifest`: the `vite-plugin-pwa` plugin will compile your custom service worker and inject its precache manifest - -To configure the service worker strategy, use the `strategies`' plugin option with `generateSW` (**default strategy**) or `injectManifest` value. - -You can find more information about the strategies in the [generateSW](/workbox/generate-sw) or [injectManifest](/workbox/inject-manifest) `Workbox` sections. - -## Service Worker Behaviors - -The behavior of the service worker will help you to update the application in the browser, that is, when the browser detects a new version of your application, you can control how the browser updates it. - -You may want to not bother users and just have the browser update the application when there is a new version: the user will only see a reload of the page they are on. - -Or you may want to inform the user that there is a new version of the application, and let the user decide when to update it: simply because you want it to behave that way or because your application requires it (for example, to prevent data loss if the user is filling out a form). - -To configure the service worker behavior, use the `registerType` plugin option with `autoUpdate` or `prompt` (**default strategy**) value. - -You can find more information about the behaviors in the [auto-update](/guide/auto-update) or [prompt-for-update](/guide/prompt-for-update) sections for `generateSW` strategy or in [inject-manifest](/guide/inject-manifest) section for `injectManifest` strategy. diff --git a/docs/guide/static-assets.md b/docs/guide/static-assets.md deleted file mode 100644 index 97dd3774..00000000 --- a/docs/guide/static-assets.md +++ /dev/null @@ -1,43 +0,0 @@ ---- -title: Static assets handling | Guide ---- - -# Static assets handling - -By default, all icons on `PWA Web App Manifest` option found under `Vite's publicDir` option directory, will be included in the service worker *precache*. You can disable this option using `includeManifestIcons: false`. - -You can also add another static assets such as `favicon`, `svg` and `font` files using `includeAssets` option. The `includeAssets` option will be resolved using `fast-glob` found under Vite's `publicDir` option directory, and so you can use regular expressions to include those assets, for example: `includeAssets: ['fonts/*.ttf', 'images/*.png']`. You don't need to configure `PWA Manifest icons` on `includeAssets` option. - -## globPatterns - -If you need to include other assets that are not under Vite's `publicDir` option directory, you can use the `globPatterns` parameter of [workbox](https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-build#.generateSW) or [injectManifest](https://developers.google.com/web/tools/workbox/reference-docs/latest/module-workbox-build#.injectManifest) plugin options. - -::: warning -If you configure `globPatterns` on `workbox` or `injectManifest` plugin option, you **MUST** include all your assets patterns: `globPatterns` will be used by `workbox-build` to match files on `dist` folder. - -By default, `globPatterns` will be `**/*.{js,css,html}`: `workbox` will use [glob primer](https://github.com/isaacs/node-glob#glob-primer) to match files using `globPatterns` as filter. - -A common pitfall is to only include some assets and forget to add `css`, `js` and `html` assets pattern, and then your service worker will complain about missing resources. - -For example, if you don't include `html` assets pattern, you will get this error from your service worker: **WorkboxError non-precached-url index.html**. -::: - -If you use `generateSW` strategy, then you need to configure `globPatterns` inside `workbox` plugin option: - -```ts -VitePWA({ - workbox: { - globPatterns: [], - } -}) -``` - -If you use `injectManifest` strategy, then you need to configure`globPatterns` inside `injectManifest` plugin option: - -```ts -VitePWA({ - injectManifest: { - globPatterns: [], - } -}) -``` diff --git a/docs/guide/unregister-service-worker.md b/docs/guide/unregister-service-worker.md deleted file mode 100644 index d4cdda01..00000000 --- a/docs/guide/unregister-service-worker.md +++ /dev/null @@ -1,28 +0,0 @@ ---- -title: Unregister Service Worker | Guide ---- - -# Unregister Service Worker - -If you want to unregister the service worker from your PWA application, you only need to add `selfDestroying: true` to the plugin configuration. - -`vite-plugin-pwa` plugin will create a new special service worker and replace the existing one in your application once deployed in production: it has to be put in the place of the previous broken/unwanted service worker, with the same name. - -::: danger -It is **IMPORTANT TO NOT CHANGE ANYTHING** in the plugin configuration, especially **DO NOT CHANGE THE SERVICE WORKER NAME**, just keep the options and the PWA UI components (if included), the plugin will take care of changing the service worker and avoid interacting with the UI if configured. -::: - -In a future, if you want to add the PWA again to your application, you only need to remove the `selfDestroying` option or just disable it: `selfDestroying: false`. - -## Development - -You can also check the `selfDestroying` plugin option in the dev server with development options enabled: check [Development section](/guide/development) for more info. - -## Examples - -You have in the examples folder the `**-destroy` scripts in their corresponding `package.json`, you can try it on the development server or from the production build. - - -## Credits - -The implementation is based on this GitHub repo [Self-destroying ServiceWorker](https://github.com/NekR/self-destroying-sw), for more info read [Medium: Self-destroying ServiceWorker](https://medium.com/@nekrtemplar/self-destroying-serviceworker-73d62921d717). diff --git a/docs/index.md b/docs/index.md deleted file mode 100644 index 7f99feb7..00000000 --- a/docs/index.md +++ /dev/null @@ -1,54 +0,0 @@ ---- -layout: home -sidebar: false - -title: Vite Plugin PWA - -hero: - name: PWA - text: Vite Plugin - tagline: | - Zero-config and framework-agnostic - PWA Plugin for Vite - image: - light: - src: /icon_light.svg - alt: Vite Plugin PWA - dark: - src: /icon_dark.svg - alt: Vite Plugin PWA - actions: - - theme: brand - text: Get Started - link: /guide/ - - theme: alt - text: View on GitHub - link: https://github.com/antfu/vite-plugin-pwa - -features: - - icon: 👌 - title: Zero-Config - details: Sensible built-in default configs for common use cases - - icon: 🔩 - title: Extensible - details: Expose the full ability to customize the behavior of the plugin - - icon: 🔌 - title: Offline Support - details: Generate Service Worker with Offline support (via Workbox) - - icon: ⚡ - title: Fully tree shakable - details: Auto inject Web App Manifest - - icon: 💬 - title: Prompt for new content - details: Built-in support for Vanilla JavaScript, Vue 3, React, Svelte, SolidJS and Preact - - icon: ⚙️ - title: Stale-while-revalidate - details: Automatic reload when new content is available - - icon: ✨ - title: Static assets handling - details: Configure static assets for offline support - - icon: 🐞 - title: Development Support - details: Debug your custom service worker logic as you develop your application - ---- diff --git a/docs/netlify.toml b/docs/netlify.toml deleted file mode 100644 index 09ba9959..00000000 --- a/docs/netlify.toml +++ /dev/null @@ -1,42 +0,0 @@ -[build.environment] - NPM_FLAGS = "--prefix=/dev/null" - NODE_VERSION = "14" - -[build] - publish = "dist" - command = "npx pnpm i --store=node_modules/.pnpm-store && npx pnpm run build" - -[[redirects]] - from = "/deployment/" - to = "/deployment/index.html" - status = 200 - -[[redirects]] - from = "/examples/" - to = "/examples/index.html" - status = 200 - -[[redirects]] - from = "/frameworks/" - to = "/frameworks/index.html" - status = 200 - -[[redirects]] - from = "/guide/" - to = "/guide/index.html" - status = 200 - -[[redirects]] - from = "/workbox/" - to = "/workbox/index.html" - status = 200 - -[[redirects]] - from = "/*" - to = "/index.html" - status = 200 - -[[headers]] - for = "/manifest.webmanifest" - [headers.values] - Content-Type = "application/manifest+json" diff --git a/docs/package.json b/docs/package.json deleted file mode 100644 index c9639fe6..00000000 --- a/docs/package.json +++ /dev/null @@ -1,32 +0,0 @@ -{ - "name": "vite-plugin-pwa-docs", - "version": "0.0.0", - "private": "true", - "type": "module", - "scripts": { - "dev": "vitepress dev", - "build": "vitepress build && esno scripts/build.ts", - "preview": "npm run build && vitepress serve", - "serve": "npm run build && serve .vitepress/dist" - }, - "dependencies": { - "@vueuse/core": "^9.2.0", - "@vueuse/shared": "^9.2.0" - }, - "devDependencies": { - "@types/fs-extra": "^9.0.13", - "@vitejs/plugin-vue": "^3.1.0", - "@vueuse/core": "^9.2.0", - "esbuild-register": "^3.3.3", - "eslint": "^8.54.0", - "fast-glob": "^3.2.11", - "fs-extra": "^10.1.0", - "https-localhost": "^4.7.1", - "typescript": "^4.8.2", - "unocss": "^0.45.18", - "unplugin-vue-components": "^0.22.4", - "vite-plugin-pwa": "workspace:*", - "vitepress": "1.0.1", - "workbox-window": "^7.3.0" - } -} diff --git a/docs/plugins/navbar.ts b/docs/plugins/navbar.ts deleted file mode 100644 index 7629b451..00000000 --- a/docs/plugins/navbar.ts +++ /dev/null @@ -1,70 +0,0 @@ -import type { Plugin } from 'vite' - -export default function NavbarFix(): Plugin { - return { - name: 'vitepress-sidebar-logo-fix', - enforce: 'pre', - transform(code, id) { - if (id.includes('VPNavBarTitle.vue') && !id.endsWith('.css') && !id.includes('&setup=')) { - return ` - - - - - -` - } - }, - } -} diff --git a/docs/public/_headers b/docs/public/_headers deleted file mode 100644 index 5ec61e4a..00000000 --- a/docs/public/_headers +++ /dev/null @@ -1,36 +0,0 @@ -/ - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/guide/ - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/frameworks/ - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/examples/ - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/deployment/ - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/workbox/ - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/*.html - X-Frame-Options: DENY - X-XSS-Protection: 1; mode=block - -/* - X-Content-Type-Options: nosniff - Referrer-Policy: no-referrer - Strict-Transport-Security: max-age=31536000; includeSubDomains - -/assets/* - cache-control: max-age=31536000 - cache-control: immutable diff --git a/docs/public/apple-touch-icon.png b/docs/public/apple-touch-icon.png deleted file mode 100644 index 55c47e5e..00000000 Binary files a/docs/public/apple-touch-icon.png and /dev/null differ diff --git a/docs/public/banner_dark.svg b/docs/public/banner_dark.svg deleted file mode 100644 index e44174a9..00000000 --- a/docs/public/banner_dark.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/public/banner_light.svg b/docs/public/banner_light.svg deleted file mode 100644 index e62ab3d4..00000000 --- a/docs/public/banner_light.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/docs/public/favicon.ico b/docs/public/favicon.ico deleted file mode 100644 index cb3f9801..00000000 Binary files a/docs/public/favicon.ico and /dev/null differ diff --git a/docs/public/favicon.svg b/docs/public/favicon.svg deleted file mode 100644 index 75a03fd8..00000000 --- a/docs/public/favicon.svg +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - diff --git a/docs/public/icon_dark.svg b/docs/public/icon_dark.svg deleted file mode 100644 index df53cac5..00000000 --- a/docs/public/icon_dark.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/public/icon_gray.svg b/docs/public/icon_gray.svg deleted file mode 100644 index c683dd29..00000000 --- a/docs/public/icon_gray.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/public/icon_light.svg b/docs/public/icon_light.svg deleted file mode 100644 index d4936c5e..00000000 --- a/docs/public/icon_light.svg +++ /dev/null @@ -1,5 +0,0 @@ - - - - - diff --git a/docs/public/netlify.svg b/docs/public/netlify.svg deleted file mode 100644 index ce92f0aa..00000000 --- a/docs/public/netlify.svg +++ /dev/null @@ -1,29 +0,0 @@ - - - - netlify-callout-vertical-light - Created with Sketch. - - - - - - - - - - - - - - - - diff --git a/docs/public/og-image.png b/docs/public/og-image.png deleted file mode 100644 index ccf9bba8..00000000 Binary files a/docs/public/og-image.png and /dev/null differ diff --git a/docs/public/prompt-update.png b/docs/public/prompt-update.png deleted file mode 100644 index 40c78579..00000000 Binary files a/docs/public/prompt-update.png and /dev/null differ diff --git a/docs/public/pwa-192x192.png b/docs/public/pwa-192x192.png deleted file mode 100644 index fb522fbf..00000000 Binary files a/docs/public/pwa-192x192.png and /dev/null differ diff --git a/docs/public/pwa-512x512.png b/docs/public/pwa-512x512.png deleted file mode 100644 index d72c051f..00000000 Binary files a/docs/public/pwa-512x512.png and /dev/null differ diff --git a/docs/public/robots.txt b/docs/public/robots.txt deleted file mode 100644 index c2a49f4f..00000000 --- a/docs/public/robots.txt +++ /dev/null @@ -1,2 +0,0 @@ -User-agent: * -Allow: / diff --git a/docs/public/safari-pinned-tab.svg b/docs/public/safari-pinned-tab.svg deleted file mode 100644 index 3f83ec0b..00000000 --- a/docs/public/safari-pinned-tab.svg +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - image/svg+xml - - - - - - - - - - - diff --git a/docs/public/team-avatars/antfu.png b/docs/public/team-avatars/antfu.png deleted file mode 100644 index 90762d84..00000000 Binary files a/docs/public/team-avatars/antfu.png and /dev/null differ diff --git a/docs/public/team-avatars/hannoeru.png b/docs/public/team-avatars/hannoeru.png deleted file mode 100644 index 31a88f29..00000000 Binary files a/docs/public/team-avatars/hannoeru.png and /dev/null differ diff --git a/docs/public/team-avatars/userquin.png b/docs/public/team-avatars/userquin.png deleted file mode 100644 index 8eb448c6..00000000 Binary files a/docs/public/team-avatars/userquin.png and /dev/null differ diff --git a/docs/scripts/assets.ts b/docs/scripts/assets.ts deleted file mode 100644 index 2f885f6c..00000000 --- a/docs/scripts/assets.ts +++ /dev/null @@ -1,73 +0,0 @@ -import fg from 'fast-glob' -import fs from 'fs-extra' - -const firaFont = 'https://fonts.googleapis.com/css2?family=Fira+Code&display=swap' - -const googleapis = 'https://fonts.googleapis.com' -const gstatic = 'https://fonts.gstatic.com' - -const preconnect = ` - - - - -` - -export async function optimizePages() { - const names = await fg('./.vitepress/dist/**/*.html', { onlyFiles: true }) - - await Promise.all(names.map(async (i) => { - let html = await fs.readFile(i, 'utf-8') - - let preloadImg = '\n\t\n\t' - - if (i.endsWith('/dist/index.html')) - preloadImg = `${preloadImg}\n\t\n\t` - - else if (i.endsWith('/prompt-for-update.html')) - preloadImg = `${preloadImg}\n\t` - - html = html.replace( - //g, - ` - ${preconnect} - - - - - ${preloadImg} - \n`, - ).trim() - - // html = html.replace( - // '', - // '\t\n', - // ) - // - html = html.replace(/aria-hidden="true"/gi, 'tabindex="-1" aria-hidden="true"') - - await fs.writeFile(i, html, 'utf-8') - - // todo@userquin: we need to add critical again - // await critical.generate({ - // inline: true, - // base: './.vitepress/dist/', - // css: ['*.css'], - // html: i.substring(i.lastIndexOf('/') + 1), - // }) - })) -} diff --git a/docs/scripts/build.ts b/docs/scripts/build.ts deleted file mode 100644 index b13a928d..00000000 --- a/docs/scripts/build.ts +++ /dev/null @@ -1,13 +0,0 @@ -import { resolveConfig } from 'vite' -import type { VitePluginPWAAPI } from 'vite-plugin-pwa' -import { optimizePages } from './assets' -import { pwa } from './pwa' - -export async function buildEnd() { - await optimizePages() - const config = await resolveConfig({ plugins: [pwa()] }, 'build', 'production') - // when `vite-plugin-pwa` is presented, use it to regenerate SW after rendering - const pwaPlugin: VitePluginPWAAPI = config.plugins.find(i => i.name === 'vite-plugin-pwa')?.api - if (pwaPlugin && pwaPlugin.generateSW && !pwaPlugin.disabled) - await pwaPlugin.generateSW() -} diff --git a/docs/scripts/pwa.ts b/docs/scripts/pwa.ts deleted file mode 100644 index c6782138..00000000 --- a/docs/scripts/pwa.ts +++ /dev/null @@ -1,82 +0,0 @@ -import { VitePWA } from 'vite-plugin-pwa' - -export function pwa() { - return VitePWA({ - outDir: '.vitepress/dist', - registerType: 'prompt', - includeManifestIcons: false, - selfDestroying: true, - manifest: { - id: '/', - name: 'Vite Plugin PWA', - short_name: 'PWA for Vite', - description: 'Zero-config PWA for Vite', - theme_color: '#ffffff', - icons: [ - { - src: 'pwa-192x192.png', - sizes: '192x192', - type: 'image/png', - }, - { - src: 'pwa-512x512.png', - sizes: '512x512', - type: 'image/png', - }, - { - src: 'icon_light.svg', - sizes: '155x155', - type: 'image/svg', - purpose: 'any maskable', - }, - ], - }, - workbox: { - globPatterns: ['**/*.{css,js,html,svg,png,ico,txt,woff2}'], - runtimeCaching: [ - { - urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i, - handler: 'CacheFirst', - options: { - cacheName: 'google-fonts-cache', - expiration: { - maxEntries: 10, - maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days - }, - cacheableResponse: { - statuses: [0, 200], - }, - }, - }, - { - urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i, - handler: 'CacheFirst', - options: { - cacheName: 'gstatic-fonts-cache', - expiration: { - maxEntries: 10, - maxAgeSeconds: 60 * 60 * 24 * 365, // <== 365 days - }, - cacheableResponse: { - statuses: [0, 200], - }, - }, - }, - { - urlPattern: /^https:\/\/cdn\.jsdelivr\.net\/.*/i, - handler: 'NetworkFirst', - options: { - cacheName: 'jsdelivr-images-cache', - expiration: { - maxEntries: 10, - maxAgeSeconds: 60 * 60 * 24 * 7, // <== 7 days - }, - cacheableResponse: { - statuses: [0, 200], - }, - }, - }, - ], - }, - }) -} diff --git a/docs/tsconfig.json b/docs/tsconfig.json deleted file mode 100644 index 58a4199b..00000000 --- a/docs/tsconfig.json +++ /dev/null @@ -1,34 +0,0 @@ -{ - "extends": "../tsconfig.json", - "compilerOptions": { - "incremental": false, - "target": "es2016", - "lib": ["DOM", "ESNext"], - "baseUrl": ".", - "module": "ESNext", - "moduleResolution": "bundler", - "paths": { - "~/*": ["src/*"] - }, - "resolveJsonModule": true, - "types": [ - "@types/fs-extra", - "node", - "vite/client", - "vite-plugin-pwa/client", - "vitepress" - ], - "strict": true, - "strictNullChecks": true, - "noUnusedLocals": true, - "esModuleInterop": true, - "forceConsistentCasingInFileNames": true, - "skipLibCheck": true - }, - "include": [ - "./*.ts", - "./.vitepress/**/*.ts", - "./.vitepress/**/*.vue" - ], - "exclude": ["dist", "node_modules"] -} diff --git a/docs/vite.config.ts b/docs/vite.config.ts deleted file mode 100644 index be183274..00000000 --- a/docs/vite.config.ts +++ /dev/null @@ -1,54 +0,0 @@ -import { defineConfig } from 'vite' -import Components from 'unplugin-vue-components/vite' -import { presetAttributify, presetUno } from 'unocss' -import Unocss from 'unocss/vite' -import NavbarFix from './plugins/navbar' - -export default defineConfig({ - ssr: { - format: 'cjs', - }, - legacy: { - buildSsrCjsExternalHeuristics: true, - }, - build: { - // sourcemap: true, - // minify: false, - ssrManifest: false, - manifest: false, - }, - optimizeDeps: { - exclude: [ - '@vueuse/core', - 'vitepress', - ], - }, - server: { - hmr: { - overlay: false, - }, - }, - plugins: [ - // https://github.com/antfu/vite-plugin-components - Components({ - dirs: [ - '.vitepress/theme/components', - ], - // allow auto load markdown components under `./src/components/` - extensions: ['vue', 'md'], - - // allow auto import and register components used in markdown - include: [/\.vue$/, /\.vue\?vue/, /\.md$/], - - // generate `components.d.ts` for ts support with Volar - dts: '.vitepress/components.d.ts', - }), - - NavbarFix(), - - // https://github.com/unocss/unocss - Unocss({ - presets: [presetUno(), presetAttributify()], - }), - ], -}) diff --git a/docs/workbox/generate-sw.md b/docs/workbox/generate-sw.md deleted file mode 100644 index 5dc9c337..00000000 --- a/docs/workbox/generate-sw.md +++ /dev/null @@ -1,114 +0,0 @@ ---- -title: generateSW | Workbox ---- - -# generateSW - -You must read [Which Mode to Use](https://developer.chrome.com/docs/workbox/modules/workbox-build/#which-mode-to-use) before decide using this strategy on `vite-plugin-pwa` plugin. - -You can find the documentation for this method on `workbox` site: [generateSW](https://developer.chrome.com/docs/workbox/reference/workbox-build/#method-generateSW). - -You can find a guide for plugins on `workbox` site: [Using Plugins](https://developers.google.com/web/tools/workbox/guides/using-plugins). - -## Cache External Resources - -If you use some `CDN` to download some resources like `fonts` and `css`, you must include them into the service worker precache, and so your application will work when offline. - -The following example will use `css` from `https://fonts.googleapis.com` and `fonts` from `https://fonts.gstatic.com`. - -On `index.html` file you must configure the `css` `link`, you **MUST** also include `crossorigin="anonymous"` attribute for the external resources (see [Handle Third Party Requests](https://developers.google.com/web/tools/workbox/guides/handle-third-party-requests)): - -::: details index.html -```html - - - - - - - -``` -::: - -Then on your `vite.config.ts` file add the following code: - -::: details VitePWA options -```ts -VitePWA({ - workbox: { - runtimeCaching: [ - { - urlPattern: /^https:\/\/fonts\.googleapis\.com\/.*/i, - handler: 'CacheFirst', - options: { - cacheName: 'google-fonts-cache', - expiration: { - maxEntries: 10, - maxAgeSeconds: 60 * 60 * 24 * 365 // <== 365 days - }, - cacheableResponse: { - statuses: [0, 200] - } - } - }, - { - urlPattern: /^https:\/\/fonts\.gstatic\.com\/.*/i, - handler: 'CacheFirst', - options: { - cacheName: 'gstatic-fonts-cache', - expiration: { - maxEntries: 10, - maxAgeSeconds: 60 * 60 * 24 * 365 // <== 365 days - }, - cacheableResponse: { - statuses: [0, 200] - }, - } - } - ] - } -}) -``` -::: - -## Exclude routes - -To exclude some routes from being intercepted by the service worker, you just need to add those routes using a `regex` list to the `navigateFallbackDenylist` option of `workbox`: - -```ts -VitePWA({ - workbox: { - navigateFallbackDenylist: [/^\/backoffice/] - } -}) -``` - -::: warning -You must deal with offline support for excluded routes: if requesting a page excluded on `navigateFallbackDenylist` you will get `No internet connection`. -::: - -## Background Sync - -You can add this code to the plugin on your `vite.config.ts` file to add a `Background Sync` manager to your service worker: - -::: details VitePWA options -```ts -VitePWA({ - workbox: { - runtimeCaching: [{ - handler: 'NetworkOnly', - urlPattern: /\/api\/.*\/*.json/, - method: 'POST', - options: { - backgroundSync: { - name: 'myQueueName', - options: { - maxRetentionTime: 24 * 60 - } - } - } - }] - } -}) -``` -::: diff --git a/docs/workbox/index.md b/docs/workbox/index.md deleted file mode 100644 index 6dcb9b04..00000000 --- a/docs/workbox/index.md +++ /dev/null @@ -1,34 +0,0 @@ ---- -title: Getting Started | Workbox -prev: - text: Apache Http Server 2.4+ | Deployment - link: /deployment/apache ---- - -# Getting Started - -[**Workbox**](https://developers.google.com/web/tools/workbox/) is a massive package with many modules to make service worker development more enjoyable and remove the need to deal with the low-level service worker API. - -In this document, we focus only on the [workbox-build](https://developer.chrome.com/docs/workbox/reference/workbox-build/) module from **Workbox**. - -## workbox-build module - -This module is for build process purposes (a `node` module); that is, `Vite Plugin PWA` will use it to build your service-worker. - -We focus on 2 methods of this module: -- [generateSW](/workbox/generate-sw): for generating the service worker. -- [injectManifest](/workbox/inject-manifest): for when you need more control over your service worker. - -You should read [Which Mode to Use](https://developer.chrome.com/docs/workbox/modules/workbox-build/#which-mode-to-use) before deciding which strategy to use. - -In short, the `generateSW` function abstracts away the need to work directly with the service worker API when building the service worker. This method can be configured using plugins instead of writing your own service worker code (`generateSW` will generate the code for you). - -While the `injectManifest` method will use your existing service worker and build/compile it. - -## How is `workbox-build` related to `vite-plugin-pwa`? - -`vite-plugin-pwa` uses `generateSW` and `injectManifest` `workbox` methods internally when the `strategies` option is set to `generateSW` and `injectManifest` respectively. - -When you configure `strategies: 'generateSW'` option (the default value) in your `vite.config.*` file, the plugin invokes workbox' `generateSW` method. The options passed to the `workbox-build` method will be those provided via the `workbox` option of the plugin configuration. - -When you configure `strategies: with the 'injectManifest'` option, the plugin will first build your custom service worker via `rollup`. With the build result, vite-plugin-pwa will call Workbox' `injectManifest` method passing those options provided via the `workbox` option of the plugin configuration. diff --git a/docs/workbox/inject-manifest.md b/docs/workbox/inject-manifest.md deleted file mode 100644 index 920dd1f0..00000000 --- a/docs/workbox/inject-manifest.md +++ /dev/null @@ -1,197 +0,0 @@ ---- -title: injectManifest | Workbox ---- - -# injectManifest - -You must read [Which Mode to Use](https://developer.chrome.com/docs/workbox/modules/workbox-build/#which-mode-to-use) before decide using this strategy on `vite-plugin-pwa` plugin. - -Before writing your custom service worker, check if `workbox` can generate the code for you using `generateSW` strategy, looking for some plugin on `workbox` site on [Runtime Caching Entry](https://developer.chrome.com/docs/workbox/reference/workbox-build/#type-RuntimeCaching). - -You can find the documentation for this method on `workbox` site: [injectManifest](https://developer.chrome.com/docs/workbox/reference/workbox-build/#method-injectManifest) - - -## Exclude routes - -To exclude some routes from being intercepted by the service worker, you just need to add those routes using a `regex` array to the `denylist` option of `NavigationRoute`: - -```ts -import { createHandlerBoundToURL, precacheAndRoute } from 'workbox-precaching' -import { NavigationRoute, registerRoute } from 'workbox-routing' - -declare let self: ServiceWorkerGlobalScope - -// self.__WB_MANIFEST is default injection point -precacheAndRoute(self.__WB_MANIFEST) - -// to allow work offline -registerRoute(new NavigationRoute( - createHandlerBoundToURL('index.html'), - { denylist: [/^\/backoffice/] }, -)) -``` - -::: warning -You must deal with offline support for excluded routes: if requesting a page included on `denylist` you will get `No internet connection`. -::: - -## Network First Strategy - -You can use the following code to create your custom service worker to be used with network first strategy. We also include how to configure [Custom Cache Network Race Strategy](https://jakearchibald.com/2014/offline-cookbook/#cache--network-race). - -::: details VitePWA options -```ts -VitePWA({ - strategies: 'injectManifest', - srcDir: 'src', - filename: 'sw.ts' -}) -``` -::: - -::: warning -You also need to add the logic to interact from the client logic: [Advanced (injectManifest)](/guide/inject-manifest). -::: - -Then in your `src/sw.ts` file, remember you will also need to add following `workbox` dependencies as `dev` dependencies: -- `workbox-core` -- `workbox-routing` -- `workbox-strategies` -- `workbox-build` - -::: details src/sw.ts -```ts -import { cacheNames, clientsClaim } from 'workbox-core' -import { registerRoute, setCatchHandler, setDefaultHandler } from 'workbox-routing' -import type { StrategyHandler } from 'workbox-strategies' -import { - NetworkFirst, - NetworkOnly, - Strategy -} from 'workbox-strategies' -import type { ManifestEntry } from 'workbox-build' - -// Give TypeScript the correct global. -declare let self: ServiceWorkerGlobalScope -declare type ExtendableEvent = any - -const data = { - race: false, - debug: false, - credentials: 'same-origin', - networkTimeoutSeconds: 0, - fallback: 'index.html' -} - -const cacheName = cacheNames.runtime - -function buildStrategy(): Strategy { - if (race) { - class CacheNetworkRace extends Strategy { - _handle(request: Request, handler: StrategyHandler): Promise { - const fetchAndCachePutDone: Promise = handler.fetchAndCachePut(request) - const cacheMatchDone: Promise = handler.cacheMatch(request) - - return new Promise((resolve, reject) => { - fetchAndCachePutDone.then(resolve).catch((e) => { - if (debug) - console.log(`Cannot fetch resource: ${request.url}`, e) - }) - cacheMatchDone.then(response => response && resolve(response)) - - // Reject if both network and cache error or find no response. - Promise.allSettled([fetchAndCachePutDone, cacheMatchDone]).then((results) => { - const [fetchAndCachePutResult, cacheMatchResult] = results - if (fetchAndCachePutResult.status === 'rejected' && !cacheMatchResult.value) - reject(fetchAndCachePutResult.reason) - }) - }) - } - } - return new CacheNetworkRace() - } - else { - if (networkTimeoutSeconds > 0) - return new NetworkFirst({ cacheName, networkTimeoutSeconds }) - else - return new NetworkFirst({ cacheName }) - } -} - -const manifest = self.__WB_MANIFEST as Array - -const cacheEntries: RequestInfo[] = [] - -const manifestURLs = manifest.map( - (entry) => { - const url = new URL(entry.url, self.location) - cacheEntries.push(new Request(url.href, { - credentials: credentials as any - })) - return url.href - } -) - -self.addEventListener('install', (event: ExtendableEvent) => { - event.waitUntil( - caches.open(cacheName).then((cache) => { - return cache.addAll(cacheEntries) - }) - ) -}) - -self.addEventListener('activate', (event: ExtendableEvent) => { - // - clean up outdated runtime cache - event.waitUntil( - caches.open(cacheName).then((cache) => { - // clean up those who are not listed in manifestURLs - cache.keys().then((keys) => { - keys.forEach((request) => { - debug && console.log(`Checking cache entry to be removed: ${request.url}`) - if (!manifestURLs.includes(request.url)) { - cache.delete(request).then((deleted) => { - if (debug) { - if (deleted) - console.log(`Precached data removed: ${request.url || request}`) - else - console.log(`No precache found: ${request.url || request}`) - } - }) - } - }) - }) - }) - ) -}) - -registerRoute( - ({ url }) => manifestURLs.includes(url.href), - buildStrategy() -) - -setDefaultHandler(new NetworkOnly()) - -// fallback to app-shell for document request -setCatchHandler(({ event }): Promise => { - switch (event.request.destination) { - case 'document': - return caches.match(fallback).then((r) => { - return r ? Promise.resolve(r) : Promise.resolve(Response.error()) - }) - default: - return Promise.resolve(Response.error()) - } -}) - -// this is necessary, since the new service worker will keep on skipWaiting state -// and then, caches will not be cleared since it is not activated -self.skipWaiting() -clientsClaim() -``` -::: - -## Server Push Notifications - -You should check the `workbox` documentation: [Introduction to push notifications](https://developers.google.com/web/ilt/pwa/introduction-to-push-notifications). - -You can check this awesome repo [YT Playlist Notifier](https://github.com/jeffposnick/yt-playlist-notifier) using `Server Push Notifications` and some other cool service worker capabilities from the major collaborator of [Workbox](https://developers.google.com/web/tools/workbox). diff --git a/netlify.toml b/netlify.toml deleted file mode 100755 index 43dac6c2..00000000 --- a/netlify.toml +++ /dev/null @@ -1,16 +0,0 @@ -[build.environment] - NODE_VERSION = "18" - -[build] - publish = "docs/.vitepress/dist" - command = "pnpm run deploy" - -[[redirects]] - from = "/*" - to = "/index.html" - status = 200 - -[[headers]] - for = "/manifest.webmanifest" - [headers.values] - Content-Type = "application/manifest+json" diff --git a/package.json b/package.json index f7d937d2..545604e6 100644 --- a/package.json +++ b/package.json @@ -83,10 +83,6 @@ "node": ">=16.0.0" }, "scripts": { - "docs": "pnpm -C docs run dev", - "docs:build": "pnpm -C docs run build", - "docs:serve": "pnpm -C docs run serve", - "docs:preview": "pnpm -C docs run preview", "lint": "eslint .", "lint-fix": "nr lint --fix", "dev": "esno scripts/dev.ts", @@ -99,7 +95,7 @@ "example:vue:dev:cdn": "pnpm -C examples/vue-basic-cdn run dev", "example:vue:build:cdn": "pnpm -C examples/vue-basic-cdn run build", "example:vue:start:cdn": "pnpm -C examples/vue-basic-cdn run start", - "deploy": "nr build && nr docs:build", + "deploy": "nr build", "test-vue": "pnpm -C examples/vue-router run test", "test-react": "pnpm -C examples/react-router run test", "test-preact": "pnpm -C examples/preact-router run test", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 6e7b4d6b..c6aacf30 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -100,55 +100,6 @@ importers: specifier: ^3.3.8 version: 3.3.8(typescript@5.3.3) - docs: - dependencies: - '@vueuse/core': - specifier: ^9.2.0 - version: 9.2.0(vue@3.5.12(typescript@4.8.2)) - '@vueuse/shared': - specifier: ^9.2.0 - version: 9.2.0(vue@3.5.12(typescript@4.8.2)) - devDependencies: - '@types/fs-extra': - specifier: ^9.0.13 - version: 9.0.13 - '@vitejs/plugin-vue': - specifier: ^3.1.0 - version: 3.1.0(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))(vue@3.5.12(typescript@4.8.2)) - esbuild-register: - specifier: ^3.3.3 - version: 3.3.3(esbuild@0.21.5) - eslint: - specifier: ^8.54.0 - version: 8.54.0 - fast-glob: - specifier: ^3.2.11 - version: 3.2.11 - fs-extra: - specifier: ^10.1.0 - version: 10.1.0 - https-localhost: - specifier: ^4.7.1 - version: 4.7.1 - typescript: - specifier: ^4.8.2 - version: 4.8.2 - unocss: - specifier: ^0.45.18 - version: 0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)) - unplugin-vue-components: - specifier: ^0.22.4 - version: 0.22.4(@babel/parser@7.26.2)(esbuild@0.21.5)(rollup@4.26.0)(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))(vue@3.5.12(typescript@4.8.2)) - vite-plugin-pwa: - specifier: workspace:* - version: link:.. - vitepress: - specifier: 1.0.1 - version: 1.0.1(@algolia/client-search@5.13.0)(@types/node@18.17.14)(@types/react@18.2.37)(postcss@8.4.49)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(terser@5.31.0)(typescript@4.8.2) - workbox-window: - specifier: ^7.3.0 - version: 7.3.0 - examples/assets-generator: devDependencies: '@vite-pwa/assets-generator': @@ -601,82 +552,6 @@ packages: resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} engines: {node: '>=0.10.0'} - '@algolia/autocomplete-core@1.17.6': - resolution: {integrity: sha512-lkDoW4I7h2kKlIgf3pUt1LqvxyYKkVyiypoGLlUnhPSnCpmeOwudM6rNq6YYsCmdQtnDQoW5lUNNuj6ASg3qeg==} - - '@algolia/autocomplete-plugin-algolia-insights@1.17.6': - resolution: {integrity: sha512-17NnaacuFzSWVuZu4NKzVeaFIe9Abpw8w+/gjc7xhZFtqj+GadufzodIdchwiB2eM2cDdiR3icW7gbNTB3K2YA==} - peerDependencies: - search-insights: '>= 1 < 3' - - '@algolia/autocomplete-preset-algolia@1.17.6': - resolution: {integrity: sha512-Cvg5JENdSCMuClwhJ1ON1/jSuojaYMiUW2KePm18IkdCzPJj/NXojaOxw58RFtQFpJgfVW8h2E8mEoDtLlMdeA==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/autocomplete-shared@1.17.6': - resolution: {integrity: sha512-aq/3V9E00Tw2GC/PqgyPGXtqJUlVc17v4cn1EUhSc+O/4zd04Uwb3UmPm8KDaYQQOrkt1lwvCj2vG2wRE5IKhw==} - peerDependencies: - '@algolia/client-search': '>= 4.9.1 < 6' - algoliasearch: '>= 4.9.1 < 6' - - '@algolia/client-abtesting@5.13.0': - resolution: {integrity: sha512-6CoQjlMi1pmQYMQO8tXfuGxSPf6iKX5FP9MuMe6IWmvC81wwTvOehnwchyBl2wuPVhcw2Ar53K53mQ60DAC64g==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-analytics@5.13.0': - resolution: {integrity: sha512-pS3qyXiWTwKnrt/jE79fqkNqZp7kjsFNlJDcBGkSWid74DNc6DmArlkvPqyLxnoaYGjUGACT6g56n7E3mVV2TA==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-common@5.13.0': - resolution: {integrity: sha512-2SP6bGGWOTN920MLZv8s7yIR3OqY03vEe4U+vb2MGdL8a/8EQznF3L/nTC/rGf/hvEfZlX2tGFxPJaF2waravg==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-insights@5.13.0': - resolution: {integrity: sha512-ldHTe+LVgC6L4Wr6doAQQ7Ku0jAdhaaPg1T+IHzmmiRZb2Uq5OsjW2yC65JifOmzPCiMkIZE2mGRpWgkn5ktlw==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-personalization@5.13.0': - resolution: {integrity: sha512-RnCfOSN4OUJDuMNHFca2M8lY64Tmw0kQOZikge4TknTqHmlbKJb8IbJE7Rol79Z80W2Y+B1ydcjV7DPje4GMRA==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-query-suggestions@5.13.0': - resolution: {integrity: sha512-pYo0jbLUtPDN1r341UHTaF2fgN5rbaZfDZqjPRKPM+FRlRmxFxqFQm1UUfpkSUWYGn7lECwDpbKYiKUf81MTwA==} - engines: {node: '>= 14.0.0'} - - '@algolia/client-search@5.13.0': - resolution: {integrity: sha512-s2ge3uZ6Zg2sPSFibqijgEYsuorxcc8KVHg3I95nOPHvFHdnBtSHymhZvq4sp/fu8ijt/Y8jLwkuqm5myn+2Sg==} - engines: {node: '>= 14.0.0'} - - '@algolia/ingestion@1.13.0': - resolution: {integrity: sha512-fm5LEOe4FPDOc1D+M9stEs8hfcdmbdD+pt9og5shql6ueTZJANDbFoQhDOpiPJizR/ps1GwmjkWfUEywx3sV+Q==} - engines: {node: '>= 14.0.0'} - - '@algolia/monitoring@1.13.0': - resolution: {integrity: sha512-e8Hshlnm2G5fapyUgWTBwhJ22yXcnLtPC4LWZKx7KOvv35GcdoHtlUBX94I/sWCJLraUr65JvR8qOo3LXC43dg==} - engines: {node: '>= 14.0.0'} - - '@algolia/recommend@5.13.0': - resolution: {integrity: sha512-53/wW96oaj1FKMzGdFcZ/epygfTppLDUvgI1thLkd475EtVZCH3ZZVUNCEvf1AtnNyH1RnItkFzX8ayWCpx2PQ==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-browser-xhr@5.13.0': - resolution: {integrity: sha512-NV6oSCt5lFuzfsVQoSBpewEWf/h4ySr7pv2bfwu9yF/jc/g39pig8+YpuqsxlRWBm/lTGVA2V0Ai9ySwrNumIA==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-fetch@5.13.0': - resolution: {integrity: sha512-094bK4rumf+rXJazxv3mq6eKRM0ep5AxIo8T0YmOdldswQt79apeufFiPLN19nHEWH22xR2FelimD+T/wRSP+Q==} - engines: {node: '>= 14.0.0'} - - '@algolia/requester-node-http@5.13.0': - resolution: {integrity: sha512-JY5xhEYMgki53Wm+A6R2jUpOUdD0zZnBq+PC5R1TGMNOYL1s6JjDrJeMsvaI2YWxYMUSoCnRoltN/yf9RI8n3A==} - engines: {node: '>= 14.0.0'} - - '@ampproject/remapping@2.2.0': - resolution: {integrity: sha512-qRmjj8nj9qmLTQXXmaR1cck3UXSRMPrbsLJAasZpF+t3riI71BXed5ebIOYwQntykeZuhjsdweEc9BxH5Jc26w==} - engines: {node: '>=6.0.0'} - '@ampproject/remapping@2.2.1': resolution: {integrity: sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==} engines: {node: '>=6.0.0'} @@ -691,16 +566,10 @@ packages: resolution: {integrity: sha512-LvxY21+ZhpuBf/aHeBUtGQhSEfad4PkNKXKvDOSvukaM3XVTfBhwmHX2EKwAsdq5DlfjbT3qqYyMiueBIO5iDQ==} engines: {node: '>=18.0.0', npm: '>=9.0.0', pnpm: '>= 8.6.0'} - '@antfu/install-pkg@0.1.0': - resolution: {integrity: sha512-VaIJd3d1o7irZfK1U0nvBsHMyjkuyMP3HKYVV53z8DKyulkHKmjhhtccXO51WSPeeSHIeoJEoNOKavYpS7jkZw==} - '@antfu/ni@0.21.9': resolution: {integrity: sha512-zlwQy574YEYl9ssWMV98ADxobU5wePdtyaOeQ5jgzdV8WldPcK+Osqd1SeQwEWjN0Io0GKiqpQzKZXVgxU1jPg==} hasBin: true - '@antfu/utils@0.5.2': - resolution: {integrity: sha512-CQkeV+oJxUazwjlHD0/3ZD08QWKuGQkhnrKo3e6ly5pd48VUpXbb77q0xMU4+vc2CkJnDS02Eq/M9ugyX20XZA==} - '@antfu/utils@0.7.6': resolution: {integrity: sha512-pvFiLP2BeOKA/ZOS6jxx4XhKzdVLHDhGlFEaZ2flWWYf2xOqVniqpk38I04DFRyz+L0ASggl7SkItTc+ZLju4w==} @@ -885,10 +754,6 @@ packages: resolution: {integrity: sha512-2ofRCjnnA9y+wk8b9IAREroeUP02KHp431N2mhKniy2yKIDKpbrHv9eXwm8cBeWQYcJmzv5qKCu65P47eCF7CQ==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.22.20': resolution: {integrity: sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==} engines: {node: '>=6.9.0'} @@ -897,10 +762,6 @@ packages: resolution: {integrity: sha512-3q93SSKX2TWCG30M2G2kwaKeTYgEUp5Snjuj8qm729SObL6nbtUldAi37qbxkD5gg3xnBio+f9nqpSepGZMvxA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} - engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.22.15': resolution: {integrity: sha512-bMn7RmyFjY/mdECUbgn9eoSY4vqvacUnS9i9vGAGttgFWesO6B4CYWA7XlpbWgBt71iv/hfbPlynohStqnu5hA==} engines: {node: '>=6.9.0'} @@ -949,11 +810,6 @@ packages: engines: {node: '>=6.0.0'} hasBin: true - '@babel/parser@7.26.2': - resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} - engines: {node: '>=6.0.0'} - hasBin: true - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6': resolution: {integrity: sha512-Dgxsyg54Fx1d4Nge8UnvTrED63vrwOdPmyvPzlNN/boaliRP54pm3pGzZD1SJUwrBA+Cs/xdG8kXX6Mn/RfISQ==} engines: {node: '>=6.9.0'} @@ -1447,36 +1303,9 @@ packages: resolution: {integrity: sha512-6mQNsaLeXTw0nxYUYu+NSa4Hx4BlF1x1x8/PMFbiR+GBSr+2DkECc69b8hgy2frEodNcvPffeH8YfWd3LI6jhQ==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.0': - resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} - engines: {node: '>=6.9.0'} - '@canvas/image-data@1.0.0': resolution: {integrity: sha512-BxOqI5LgsIQP1odU5KMwV9yoijleOPzHL18/YvNqF9KFSGF2K/DLlYAbDQsWqd/1nbaFuSkYD/191dpMtNh4vw==} - '@docsearch/css@3.7.0': - resolution: {integrity: sha512-1OorbTwi1eeDmr0v5t+ckSRlt1zM5GHjm92iIl3kUu7im3GHuP+csf6E0WBg8pdXQczTWP9J9+o9n+Vg6DH5cQ==} - - '@docsearch/js@3.7.0': - resolution: {integrity: sha512-ScfqOIKrSr8SImbpxVaD59xc/bytbL8QEM2GUpe3aICmoICflWp5DyTRzAdFky16HY+yEOAVZXt3COXQ1NOCWw==} - - '@docsearch/react@3.7.0': - resolution: {integrity: sha512-8e6tdDfkYoxafEEPuX5eE1h9cTkLvhe4KgoFkO5JCddXSQONnN1FHcDZRI4r8894eMpbYq6rdJF0dVYh8ikwNQ==} - peerDependencies: - '@types/react': '>= 16.8.0 < 19.0.0' - react: '>= 16.8.0 < 19.0.0' - react-dom: '>= 16.8.0 < 19.0.0' - search-insights: '>= 1 < 3' - peerDependenciesMeta: - '@types/react': - optional: true - react: - optional: true - react-dom: - optional: true - search-insights: - optional: true - '@es-joy/jsdoccomment@0.41.0': resolution: {integrity: sha512-aKUhyn1QI5Ksbqcr3fFJj16p99QdjUxXAEuFst1Z47DRyoiMwivIH9MV/ARcJOCXVjPfjITciej8ZD2O/6qUmw==} engines: {node: '>=16'} @@ -1930,12 +1759,6 @@ packages: '@humanwhocodes/object-schema@2.0.1': resolution: {integrity: sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==} - '@iconify/types@1.1.0': - resolution: {integrity: sha512-Jh0llaK2LRXQoYsorIH8maClebsnzTcve+7U3rQUSnC11X4jtPnFuyatqFLvMxZ8MLG8dB4zfHsbPfuvxluONw==} - - '@iconify/utils@1.0.33': - resolution: {integrity: sha512-vGeAqo7aGPxOQmGdVoXFUOuyN+0V7Lcrx2EvaiRjxUD1x6Om0Tvq2bdm7E24l2Pz++4S0mWMCVFXe/17EtKImQ==} - '@isaacs/cliui@8.0.2': resolution: {integrity: sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==} engines: {node: '>=12'} @@ -1944,10 +1767,6 @@ packages: resolution: {integrity: sha512-mo5j5X+jIZmJQveBKeS/clAueipV7KgiX1vMgCxam1RNYiqE1w62n0/tJJnHtjW8ZHcQco5gY85jA3mi0L+nSA==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - '@jridgewell/gen-mapping@0.1.1': - resolution: {integrity: sha512-sQXCasFk+U8lWYEe66WxRDOE9PjVz4vSM51fTu3Hw+ClTpUSQb718772vH3pyS5pShp6lvQM7SxgIDXXXmOX7w==} - engines: {node: '>=6.0.0'} - '@jridgewell/gen-mapping@0.3.2': resolution: {integrity: sha512-mh65xKQAzI6iBcFzwv28KVWSmCkdRBWoOh+bYQGW3+6OZvbbN3TqMGo5hqYxQniRcH9F2VZIoJCm4pa3BPDK/A==} engines: {node: '>=6.0.0'} @@ -1977,9 +1796,6 @@ packages: '@jridgewell/sourcemap-codec@1.4.15': resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} - '@jridgewell/sourcemap-codec@1.5.0': - resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} - '@jridgewell/trace-mapping@0.3.15': resolution: {integrity: sha512-oWZNOULl+UbhsgB51uuZzglikfIKSUBO/M9W2OfEjn7cmqoAiCgmv9lyACTUacZwBz0ITnJ2NqjU8Tx0DHL88g==} @@ -2208,24 +2024,6 @@ packages: '@roxi/ssr@0.2.1': resolution: {integrity: sha512-C86xWJOmtCGZr/U4MURqePM0oDKFkTlLeEyT07R+7jSKvREKZ2manJAeAebYudJLYEGITEPGqObhRan32bUUbg==} - '@shikijs/core@1.22.2': - resolution: {integrity: sha512-bvIQcd8BEeR1yFvOYv6HDiyta2FFVePbzeowf5pPS1avczrPK+cjmaxxh0nx5QzbON7+Sv0sQfQVciO7bN72sg==} - - '@shikijs/engine-javascript@1.22.2': - resolution: {integrity: sha512-iOvql09ql6m+3d1vtvP8fLCVCK7BQD1pJFmHIECsujB0V32BJ0Ab6hxk1ewVSMFA58FI0pR2Had9BKZdyQrxTw==} - - '@shikijs/engine-oniguruma@1.22.2': - resolution: {integrity: sha512-GIZPAGzQOy56mGvWMoZRPggn0dTlBf1gutV5TdceLCZlFNqWmuc7u+CzD0Gd9vQUTgLbrt0KLzz6FNprqYAxlA==} - - '@shikijs/transformers@1.22.2': - resolution: {integrity: sha512-8f78OiBa6pZDoZ53lYTmuvpFPlWtevn23bzG+azpPVvZg7ITax57o/K3TC91eYL3OMJOO0onPbgnQyZjRos8XQ==} - - '@shikijs/types@1.22.2': - resolution: {integrity: sha512-NCWDa6LGZqTuzjsGfXOBWfjS/fDIbDdmVDug+7ykVe1IKT4c1gakrvlfFYp5NhAXH/lyqLM8wsAPo5wNy73Feg==} - - '@shikijs/vscode-textmate@9.3.0': - resolution: {integrity: sha512-jn7/7ky30idSkd/O5yDBfAnVt+JJpepofP/POZ1iMOxK59cOfqIgg/Dj0eFsjOTMw+4ycJN0uhZH/Eb0bs/EUA==} - '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -2333,12 +2131,6 @@ packages: '@types/estree@1.0.6': resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} - '@types/fs-extra@9.0.13': - resolution: {integrity: sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA==} - - '@types/hast@3.0.4': - resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} - '@types/history@4.7.11': resolution: {integrity: sha512-qjDJRrmvBMiTx+jyLxvLfJU7UznFuokDv4f3WRuriHKERccVpFU+8XMQUAbDzoiJCsmexxRExQeMwwCdamSKDA==} @@ -2348,21 +2140,9 @@ packages: '@types/json-schema@7.0.12': resolution: {integrity: sha512-Hr5Jfhc9eYOQNPYO5WLDq/n4jqijdHNlDXjuAQkkt+mWdQR+XJToOHrsD4cPaMXpn6KO7y2+wM8AZEs8VpBLVA==} - '@types/linkify-it@3.0.5': - resolution: {integrity: sha512-yg6E+u0/+Zjva+buc3EIb+29XEg4wltq7cSmd4Uc2EE/1nUVmxyzpX6gUXD0V8jIrG0r7YeOGVIbYRkxeooCtw==} - - '@types/markdown-it@13.0.9': - resolution: {integrity: sha512-1XPwR0+MgXLWfTn9gCsZ55AHOKW1WN+P9vr0PaQh5aerR9LLQXUbjfEAFhjmEmyoYFWAyuN2Mqkn40MZ4ukjBw==} - '@types/mdast@3.0.10': resolution: {integrity: sha512-W864tg/Osz1+9f4lrGTZpCSO5/z4608eUp19tbozkq2HJK6i3z1kT0H9tlADXuYIb1YYOBByU4Jsqkk75q48qA==} - '@types/mdast@4.0.4': - resolution: {integrity: sha512-kGaNbPh1k7AFzgpud/gMdvIm5xuECykRR+JnWKQno9TAXVa6WIVCGTPvYGekIDL4uwCZQSYbUxNBSb1aUo79oA==} - - '@types/mdurl@1.0.5': - resolution: {integrity: sha512-6L6VymKTzYSrEf4Nev4Xa1LCHKrlTlYCBMTlQKFuddo1CvQcE52I0mwfOJayueUC7MJuXOeHTcIU683lzd0cUA==} - '@types/ms@0.7.31': resolution: {integrity: sha512-iiUgKzV9AuaEkZqkOLDIvlQiL6ltuZd9tGcW3gwpnX8JbuiuhFlEGmmFXEXkN50Cvq7Os88IY2v0dkDqXYWVgA==} @@ -2372,9 +2152,6 @@ packages: '@types/node@18.17.14': resolution: {integrity: sha512-ZE/5aB73CyGqgQULkLG87N9GnyGe5TcQjv34pwS8tfBs1IkCh0ASM69mydb2znqd6v0eX+9Ytvk6oQRqu8T1Vw==} - '@types/node@18.7.15': - resolution: {integrity: sha512-XnjpaI8Bgc3eBag2Aw4t2Uj/49lLBSStHWfqKvIuXD7FIrZyMLWp8KuAFHAqxMZYTF9l08N1ctUn9YNybZJVmQ==} - '@types/normalize-package-data@2.4.1': resolution: {integrity: sha512-Gj7cI7z+98M282Tqmp2K5EIsoouUEzbBJhQQzDE3jSIRk6r9gsz0oUokqIUR4u1R3dMHo0pDHM7sNOHyhulypw==} @@ -2423,12 +2200,6 @@ packages: '@types/unist@2.0.6': resolution: {integrity: sha512-PBjIUxZHOuj0R15/xuwJYjFi+KZdNFrehocChv4g5hu6aFroHue8m0lBP0POdK2nKzbw0cgV1mws8+V/JAcEkQ==} - '@types/unist@3.0.3': - resolution: {integrity: sha512-ko/gIFJRv177XgZsZcBwnqJN5x/Gien8qNOn0D5bQU/zAzVf9Zt3BlcUiLqhV9y4ARk0GbT3tnUiPNgnTXzc/Q==} - - '@types/web-bluetooth@0.0.15': - resolution: {integrity: sha512-w7hEHXnPMEZ+4nGKl/KDRVpxkwYxYExuHOYXyzIzCDzEZ9ZCGMAewulr9IqJu2LR4N37fcnb1XVeuZ09qgOxhA==} - '@types/web-bluetooth@0.0.20': resolution: {integrity: sha512-g9gZnnXVq7gM7v3tJCWV/qw7w+KeOlSHAhgF9RytFyifW6AF61hdT2ucrYhPq9hLs5JIryeupHV3qGk95dH9ow==} @@ -2551,71 +2322,6 @@ packages: '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} - '@unocss/astro@0.45.18': - resolution: {integrity: sha512-dikg3GswRCiFvGWNssk+X4dZVqYQvoqH3b9jwSGRjOsVQUfxm0hUBcAFj9idAstkR1zbjnPDMKMSYx4woVRZUg==} - - '@unocss/cli@0.45.18': - resolution: {integrity: sha512-hz8m2XP/XJLgmAsBLELOEK50N7Y3JRf6DgCO+76EicG4OFH786DVUcyE9ElRbhW6nfVzo7Utd8fc+PEIUKcTOw==} - engines: {node: '>=14'} - hasBin: true - - '@unocss/config@0.45.18': - resolution: {integrity: sha512-A7VUvUOnm+2tsipMferCf0VhllcmXjDsX3QGg34Vlkl5jkYbwGTETyvhJ09uY4GAWrNMSAjvu+YI+E8fr3xmTg==} - engines: {node: '>=14'} - - '@unocss/core@0.45.18': - resolution: {integrity: sha512-506GHQX8/TpKNZ96k4ujSWp5SpcsZZnwwTg9NcLf7M3y5BXEwv0dE7Jfz7eJiFm2G+RYEgrXwYk7y7dFF8evxA==} - - '@unocss/inspector@0.45.18': - resolution: {integrity: sha512-5J++2Y2gp1qs7TeICkZ6VSOMS84ksRlCq3efw4YF5NjFhqvx+rOuWrHidHLHLycxczeBWgkz3ROHeOtAMrVDAg==} - - '@unocss/preset-attributify@0.45.18': - resolution: {integrity: sha512-r/lNn3k5/YlscTlN87BnO5SuuDpYi+ZPdtVEmjckj9aBkAJ+BIzisEj5XVBv1l6/pRl+N+8wR4mh0JPVkAADgA==} - - '@unocss/preset-icons@0.45.18': - resolution: {integrity: sha512-yIakBbRfVeytfKNXrmQn0pAlTxYY7aBgIoyAYDFzr308f0XuSTBVpdN9lSx7n/Rfv6xuxn+tulwKNiIATY0rbw==} - - '@unocss/preset-mini@0.45.18': - resolution: {integrity: sha512-wmWn2E811nEEOhA2AZ2Tjz8IcL8gw77cmxnsDRRx30RD9PZkC7zJ+yahrK9/hjhaIFGCPVvcv0doJPkw4nkdEA==} - - '@unocss/preset-tagify@0.45.18': - resolution: {integrity: sha512-Ns0AjZPKTulVEaj/H1jZRjolPQvZ41XmrUa/V5UF2qB3mO+XSiq/g0vgYCYpIdk1jueYN6j1+8t1quL6e1zEIw==} - - '@unocss/preset-typography@0.45.18': - resolution: {integrity: sha512-9QjXIGzuNPWipxsOJWdJKjzI7UBhrseGqR79Py3QG2mT/31+J99ut817FgfNenNskBY7niFGb9ENkKCHcNujfQ==} - - '@unocss/preset-uno@0.45.18': - resolution: {integrity: sha512-pTlH2GasH3uE+JthitX0JcTzj6Z/ZRpfT60X40g81VsxU7qkXawK+6a/JzA6dZwvIk8L5In/1IP9wJQMD32XjQ==} - - '@unocss/preset-web-fonts@0.45.18': - resolution: {integrity: sha512-4at40i82yTYp89RghDryaH1bNgwh5l/QSbmnnn827W1vxSbG6WTtHwqkecXckI3HmrQ6kKw4b1M7rNB9g6WJiw==} - - '@unocss/preset-wind@0.45.18': - resolution: {integrity: sha512-eZikLyVv5q1Xr/nuWMa3cmp4Sfb1t/uiuMZ73mcs6R0epJ66ZnHeYPfPc/x2qmJQMg9FPOR8/+log73BgZ+OHA==} - - '@unocss/reset@0.45.18': - resolution: {integrity: sha512-85T9tdRo86Legeus3HHCMvwUDJRWoUz2hcHrwVeI5J1mCgC0uw/0+BybOyzHBEW4uvFLp9n3tI6Z8x0k+7ZFMQ==} - - '@unocss/scope@0.45.18': - resolution: {integrity: sha512-HOYQx60GBW9J6ypRMUqTNRhVZpQfY96bPB4ZtmSaYNrkcT/VLjbkYKZW5z53rPiKWMitZAX9AQb0oEMGpvvraw==} - - '@unocss/transformer-attributify-jsx@0.45.18': - resolution: {integrity: sha512-rs8hZLCr9GeToxqogngFWP30Ksd7odVopl1G/Uk8CuoDksOpmkPNmJG8gNa3m0uP153iHjC4VFaoqFaPiumcCA==} - - '@unocss/transformer-compile-class@0.45.18': - resolution: {integrity: sha512-bcjM4rUsCi14GB4Myp4Yby8Dife5tOU70yxruR8orugzKvPk9ghMdPkgAM6kqaS/mEtCSCFofzvl6pOLy4QU9Q==} - - '@unocss/transformer-directives@0.45.18': - resolution: {integrity: sha512-KLNWNCgBpY3ahl9+FYTX4eiPqgrIEaPzIWT4bwbuSQHg4GbiXxy0Xx66XKtgib9ezAF+PXxyB0ygWspiLup8SA==} - - '@unocss/transformer-variant-group@0.45.18': - resolution: {integrity: sha512-x0cA/7/MKJ9YuBSE8ocf9hTPLtjeURD7xFNpiowesbsXkn7J6by/fRWTYSaL4D51yEmxRhE8L2tskTDKzNiM6w==} - - '@unocss/vite@0.45.18': - resolution: {integrity: sha512-6ouAqz+zBsOQ5Zcj1kwQfh5TugxvSWVye9s0UlXOyAj9wrluHZ7NV13QFGDJdPJkYl+dOq0wIlIdwsDEeWrENw==} - peerDependencies: - vite: ^2.9.0 || ^3.0.0-0 - '@vite-pwa/assets-generator@0.2.4': resolution: {integrity: sha512-DXyPLPR/IpbZPSpo1amZEPghY/ziIwpTUKNaz0v1xG+ELzCXmrVQhVzEMqr2JLSqRxjc+UzKfGJA/YdUuaao3w==} engines: {node: '>=16.14.0'} @@ -2632,13 +2338,6 @@ packages: peerDependencies: vite: ^4.2.0 || ^5.0.0 - '@vitejs/plugin-vue@3.1.0': - resolution: {integrity: sha512-fmxtHPjSOEIRg6vHYDaem+97iwCUg/uSIaTzp98lhELt2ISOQuDo2hbkBdXod0g15IhfPMQmAxh4heUks2zvDA==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - vite: ^3.0.0 - vue: ^3.2.25 - '@vitejs/plugin-vue@4.3.4': resolution: {integrity: sha512-ciXNIHKPriERBisHFBvnTbfKa6r9SAesOYXeGDzgegcvy9Q4xdScSHAmKbNT0M3O0S9LKhIf5/G+UYG4NnnzYw==} engines: {node: ^14.18.0 || >=16.0.0} @@ -2653,13 +2352,6 @@ packages: vite: ^4.0.0 || ^5.0.0 vue: ^3.2.25 - '@vitejs/plugin-vue@5.1.5': - resolution: {integrity: sha512-dlnib73G05CDBAUR/YpuZcQQ47fpjihnnNouAAqN62z+oqSsWJ+kh52GRzIxpkgFG3q11eXK7Di7RMmoCwISZA==} - engines: {node: ^18.0.0 || >=20.0.0} - peerDependencies: - vite: ^5.0.0 - vue: ^3.2.25 - '@vitest/expect@1.0.0-beta.4': resolution: {integrity: sha512-JOpNEva2AFxfySH3F+X+hT52Kq/ZdIrGtzWYbj6yRuBuxFqM55n/7/jV4XtQG+XkmehP3OUZGx5zISOU8KHPQw==} @@ -2678,144 +2370,47 @@ packages: '@vue/compiler-core@3.3.8': resolution: {integrity: sha512-hN/NNBUECw8SusQvDSqqcVv6gWq8L6iAktUR0UF3vGu2OhzRqcOiAno0FmBJWwxhYEXRlQJT5XnoKsVq1WZx4g==} - '@vue/compiler-core@3.5.12': - resolution: {integrity: sha512-ISyBTRMmMYagUxhcpyEH0hpXRd/KqDU4ymofPgl2XAkY9ZhQ+h0ovEZJIiPop13UmR/54oA2cgMDjgroRelaEw==} - '@vue/compiler-dom@3.3.8': resolution: {integrity: sha512-+PPtv+p/nWDd0AvJu3w8HS0RIm/C6VGBIRe24b9hSyNWOAPEUosFZ5diwawwP8ip5sJ8n0Pe87TNNNHnvjs0FQ==} - '@vue/compiler-dom@3.5.12': - resolution: {integrity: sha512-9G6PbJ03uwxLHKQ3P42cMTi85lDRvGLB2rSGOiQqtXELat6uI4n8cNz9yjfVHRPIu+MsK6TE418Giruvgptckg==} - '@vue/compiler-sfc@3.3.8': resolution: {integrity: sha512-WMzbUrlTjfYF8joyT84HfwwXo+8WPALuPxhy+BZ6R4Aafls+jDBnSz8PDz60uFhuqFbl3HxRfxvDzrUf3THwpA==} - '@vue/compiler-sfc@3.5.12': - resolution: {integrity: sha512-2k973OGo2JuAa5+ZlekuQJtitI5CgLMOwgl94BzMCsKZCX/xiqzJYzapl4opFogKHqwJk34vfsaKpfEhd1k5nw==} - '@vue/compiler-ssr@3.3.8': resolution: {integrity: sha512-hXCqQL/15kMVDBuoBYpUnSYT8doDNwsjvm3jTefnXr+ytn294ySnT8NlsFHmTgKNjwpuFy7XVV8yTeLtNl/P6w==} - '@vue/compiler-ssr@3.5.12': - resolution: {integrity: sha512-eLwc7v6bfGBSM7wZOGPmRavSWzNFF6+PdRhE+VFJhNCgHiF8AM7ccoqcv5kBXA2eWUfigD7byekvf/JsOfKvPA==} - '@vue/devtools-api@6.5.0': resolution: {integrity: sha512-o9KfBeaBmCKl10usN4crU53fYtC1r7jJwdGKjPT24t348rHxgfpZ0xL3Xm/gLUYnc0oTp8LAmrxOeLyu6tbk2Q==} - '@vue/devtools-api@7.6.4': - resolution: {integrity: sha512-5AaJ5ELBIuevmFMZYYLuOO9HUuY/6OlkOELHE7oeDhy4XD/hSODIzktlsvBOsn+bto3aD0psj36LGzwVu5Ip8w==} - - '@vue/devtools-kit@7.6.4': - resolution: {integrity: sha512-Zs86qIXXM9icU0PiGY09PQCle4TI750IPLmAJzW5Kf9n9t5HzSYf6Rz6fyzSwmfMPiR51SUKJh9sXVZu78h2QA==} - - '@vue/devtools-shared@7.6.4': - resolution: {integrity: sha512-nD6CUvBEel+y7zpyorjiUocy0nh77DThZJ0k1GRnJeOmY3ATq2fWijEp7wk37gb023Cb0R396uYh5qMSBQ5WFg==} - '@vue/reactivity-transform@3.3.8': resolution: {integrity: sha512-49CvBzmZNtcHua0XJ7GdGifM8GOXoUMOX4dD40Y5DxI3R8OUhMlvf2nvgUAcPxaXiV5MQQ1Nwy09ADpnLQUqRw==} '@vue/reactivity@3.3.8': resolution: {integrity: sha512-ctLWitmFBu6mtddPyOKpHg8+5ahouoTCRtmAHZAXmolDtuZXfjL2T3OJ6DL6ezBPQB1SmMnpzjiWjCiMYmpIuw==} - '@vue/reactivity@3.5.12': - resolution: {integrity: sha512-UzaN3Da7xnJXdz4Okb/BGbAaomRHc3RdoWqTzlvd9+WBR5m3J39J1fGcHes7U3za0ruYn/iYy/a1euhMEHvTAg==} - '@vue/runtime-core@3.3.8': resolution: {integrity: sha512-qurzOlb6q26KWQ/8IShHkMDOuJkQnQcTIp1sdP4I9MbCf9FJeGVRXJFr2mF+6bXh/3Zjr9TDgURXrsCr9bfjUw==} - '@vue/runtime-core@3.5.12': - resolution: {integrity: sha512-hrMUYV6tpocr3TL3Ad8DqxOdpDe4zuQY4HPY3X/VRh+L2myQO8MFXPAMarIOSGNu0bFAjh1yBkMPXZBqCk62Uw==} - '@vue/runtime-dom@3.3.8': resolution: {integrity: sha512-Noy5yM5UIf9UeFoowBVgghyGGPIDPy1Qlqt0yVsUdAVbqI8eeMSsTqBtauaEoT2UFXUk5S64aWVNJN4MJ2vRdA==} - '@vue/runtime-dom@3.5.12': - resolution: {integrity: sha512-q8VFxR9A2MRfBr6/55Q3umyoN7ya836FzRXajPB6/Vvuv0zOPL+qltd9rIMzG/DbRLAIlREmnLsplEF/kotXKA==} - '@vue/server-renderer@3.3.8': resolution: {integrity: sha512-zVCUw7RFskvPuNlPn/8xISbrf0zTWsTSdYTsUTN1ERGGZGVnRxM2QZ3x1OR32+vwkkCm0IW6HmJ49IsPm7ilLg==} peerDependencies: vue: 3.3.8 - '@vue/server-renderer@3.5.12': - resolution: {integrity: sha512-I3QoeDDeEPZm8yR28JtY+rk880Oqmj43hreIBVTicisFTx/Dl7JpG72g/X7YF8hnQD3IFhkky5i2bPonwrTVPg==} - peerDependencies: - vue: 3.5.12 - '@vue/shared@3.3.8': resolution: {integrity: sha512-8PGwybFwM4x8pcfgqEQFy70NaQxASvOC5DJwLQfpArw1UDfUXrJkdxD3BhVTMS+0Lef/TU7YO0Jvr0jJY8T+mw==} - '@vue/shared@3.5.12': - resolution: {integrity: sha512-L2RPSAwUFbgZH20etwrXyVyCBu9OxRSi8T/38QsvnkJyvq2LufW2lDCOzm7t/U9C1mkhJGWYfCuFBCmIuNivrg==} - - '@vueuse/core@10.11.1': - resolution: {integrity: sha512-guoy26JQktXPcz+0n3GukWIy/JDNKti9v6VEMu6kV2sYBsWuGiTU8OWdg+ADfUbHg3/3DlqySDe7JmdHrktiww==} - '@vueuse/core@10.6.1': resolution: {integrity: sha512-Pc26IJbqgC9VG1u6VY/xrXXfxD33hnvxBnKrLlA2LJlyHII+BSrRoTPJgGYq7qZOu61itITFUnm6QbacwZ4H8Q==} - '@vueuse/core@9.2.0': - resolution: {integrity: sha512-/MZ6qpz6uSyaXrtoeBWQzAKRG3N7CvfVWvQxiM3ei3Xe5ydOjjtVbo7lGl9p8dECV93j7W8s63A8H0kFLpLyxg==} - - '@vueuse/integrations@10.11.1': - resolution: {integrity: sha512-Y5hCGBguN+vuVYTZmdd/IMXLOdfS60zAmDmFYc4BKBcMUPZH1n4tdyDECCPjXm0bNT3ZRUy1xzTLGaUje8Xyaw==} - peerDependencies: - async-validator: ^4 - axios: ^1 - change-case: ^4 - drauu: ^0.3 - focus-trap: ^7 - fuse.js: ^6 - idb-keyval: ^6 - jwt-decode: ^3 - nprogress: ^0.2 - qrcode: ^1.5 - sortablejs: ^1 - universal-cookie: ^6 - peerDependenciesMeta: - async-validator: - optional: true - axios: - optional: true - change-case: - optional: true - drauu: - optional: true - focus-trap: - optional: true - fuse.js: - optional: true - idb-keyval: - optional: true - jwt-decode: - optional: true - nprogress: - optional: true - qrcode: - optional: true - sortablejs: - optional: true - universal-cookie: - optional: true - - '@vueuse/metadata@10.11.1': - resolution: {integrity: sha512-IGa5FXd003Ug1qAZmyE8wF3sJ81xGLSqTqtQ6jaVfkeZ4i5kS2mwQF61yhVqojRnenVew5PldLyRgvdl4YYuSw==} - '@vueuse/metadata@10.6.1': resolution: {integrity: sha512-qhdwPI65Bgcj23e5lpGfQsxcy0bMjCAsUGoXkJ7DsoeDUdasbZ2DBa4dinFCOER3lF4gwUv+UD2AlA11zdzMFw==} - '@vueuse/metadata@9.2.0': - resolution: {integrity: sha512-exN4KE6iquxDCdt72BgEhb3tlOpECtD61AUdXnUqBTIUCl70x1Ar/QXo3bYcvxmdMS2/peQyfeTzBjRTpvL5xw==} - - '@vueuse/shared@10.11.1': - resolution: {integrity: sha512-LHpC8711VFZlDaYUXEBbFBCQ7GS3dVU9mjOhhMhXP6txTV4EhYQg/KGnQuvt/sPAtoUKq7VVUnL6mVtFoL42sA==} - '@vueuse/shared@10.6.1': resolution: {integrity: sha512-TECVDTIedFlL0NUfHWncf3zF9Gc4VfdxfQc8JFwoVZQmxpONhLxFrlm0eHQeidHj4rdTPL3KXJa0TZCk1wnc5Q==} - '@vueuse/shared@9.2.0': - resolution: {integrity: sha512-NnRp/noSWuXW0dKhZK5D0YLrDi0nmZ18UeEgwXQq7Ul5TTP93lcNnKjrHtd68j2xFB/l59yPGFlCryL692bnrA==} - abab@2.0.6: resolution: {integrity: sha512-j2afSsaIENvHZN2B8GOpF566vZ5WVk5opAiMTvWgaQT8DkbOqsTfvNAvHoRGU2zzP8cPoqys+xHTRDWW8L+/BA==} @@ -2854,11 +2449,6 @@ packages: engines: {node: '>=0.4.0'} hasBin: true - acorn@8.8.0: - resolution: {integrity: sha512-QOxyigPVrpZ2GXT+PFyZTl6TtOFc5egxHIP9IlQ+RbupQuX4RkT/Bee4/kQuC02Xkzg84JcT7oLYtDIQxp+v7w==} - engines: {node: '>=0.4.0'} - hasBin: true - agent-base@6.0.2: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} @@ -2869,10 +2459,6 @@ packages: ajv@8.11.0: resolution: {integrity: sha512-wGgprdCvMalC0BztXvitD2hC04YffAvtsUn93JbGXYLAtCUO4xd17mCCZQxUOItiBwZvJScWo8NIvQMQ71rdpg==} - algoliasearch@5.13.0: - resolution: {integrity: sha512-04lyQX3Ev/oLYQx+aagamQDXvkUUfX1mwrLrus15+9fNaYj28GDxxEzbwaRfvmHFcZyoxvup7mMtDTTw8SrTEQ==} - engines: {node: '>= 14.0.0'} - ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} @@ -2993,9 +2579,6 @@ packages: resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==} engines: {node: '>=8'} - birpc@0.2.19: - resolution: {integrity: sha512-5WeXXAvTmitV1RqJFppT5QtUiz2p1mRSYU000Jkft5ZUCLJIk4uQriYNO50HknxKwM6jd8utNc66K1qGIwwWBQ==} - bl@4.1.0: resolution: {integrity: sha512-1W07cM9gS6DcLperZfFSj+bWLtaPGSOHWhPiGzXmvVJbRLdG82sH/Kn8EtW1VqWVA54AKf2h5k5BbnIbwF3h6w==} @@ -3095,9 +2678,6 @@ packages: caniuse-lite@1.0.30001614: resolution: {integrity: sha512-jmZQ1VpmlRwHgdP1/uiKzgiAuGOfLEJsYFP4+GBou/QQ4U6IOJCB4NP1c+1p9RGLpwObcT94jA5/uO+F1vBbog==} - ccount@2.0.1: - resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} - chai@4.3.10: resolution: {integrity: sha512-0UXG04VuVbruMUYbJ6JctvH0YnC/4q3/AkT18q4NaITo91CUm0liMS9VqzT9vZhVQ/1eqPanMWjBM+Juhfb/9g==} engines: {node: '>=4'} @@ -3110,15 +2690,9 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} - character-entities-html4@2.1.0: - resolution: {integrity: sha512-1v7fgQRj6hnSwFpq1Eu0ynr/CDEw0rXo2B61qXrLNdHZmPKgb7fqS1a2JwF0rISo9q77jDI8VMEHoApn8qDoZA==} - character-entities-legacy@1.1.4: resolution: {integrity: sha512-3Xnr+7ZFS1uxeiUDvV02wQ+QDbc55o97tIV5zHScSPJpcLm/r0DFPcoY3tYRp+VZukxuMeKgXYmsXQHO05zQeA==} - character-entities-legacy@3.0.0: - resolution: {integrity: sha512-RpPp0asT/6ufRm//AJVwpViZbGM/MkjQFxJccQRHmISF/22NBtsHqAWmL+/pmkPWoIUJdWyeVleTl1wydHATVQ==} - character-entities@1.2.4: resolution: {integrity: sha512-iBMyeEHxfVnIakwOuDXpVkc54HijNgCyQB2w0VfGQThle6NXn50zU6V/u+LDhxHcDUPojn6Kpga3PTAD8W1bQw==} @@ -3178,9 +2752,6 @@ packages: resolution: {integrity: sha512-1rXeuUUiGGrykh+CeBdu5Ie7OJwinCgQY0bc7GCRxy5xVHy+moaqkpL/jqQq0MtQOeYcrqEz4abc5f0KtU7W4A==} engines: {node: '>=12.5.0'} - colorette@2.0.19: - resolution: {integrity: sha512-3tlv/dIP7FWvj3BsbHrGLJ6l/oKh1O3TcgBqMn+yyCagOxc23fyzDS6HypQbgxWbkpDnf52p1LuR4eWDQ/K9WQ==} - colorette@2.0.20: resolution: {integrity: sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w==} @@ -3188,9 +2759,6 @@ packages: resolution: {integrity: sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg==} engines: {node: '>= 0.8'} - comma-separated-tokens@2.0.3: - resolution: {integrity: sha512-Fu4hJdvzeylCfQPp9SGWidpzrMs7tTrlu6Vb8XGaRGck8QSNZJJp538Wrb60Lax4fPwR64ViY468OIUTbRlGZg==} - commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -3224,9 +2792,6 @@ packages: configent@2.2.0: resolution: {integrity: sha512-yIN6zfOWk2nycNJ2JFNiWEai0oiqAhISIht8+pbEBP8bdcpwoQ74AhCZPbUv9aRVJwo7wh1MbCBDUV44UJa7Kw==} - consola@2.15.3: - resolution: {integrity: sha512-9vAdYbHj6x2fLKC4+oPH0kFzY/orMZyG2Aj+kNylHxKGJ/Ed4dpNyAQYwJOdqO4zdM7XpVHmyejQDcQHrnuXbw==} - consola@3.2.3: resolution: {integrity: sha512-I5qxpzLv+sJhTVEoLYNcTW+bThDCPsit0vLNKShZx6rLtpilNpmmeTPaeqJb9ZE9dV3DGaeby6Vuhrw38WjeyQ==} engines: {node: ^14.18.0 || >=16.10.0} @@ -3249,10 +2814,6 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - copy-anything@3.0.5: - resolution: {integrity: sha512-yCEafptTtb4bk7GLEQoM8KVJpxAfdBJYaXyzQEgQQQgYrZiDp8SJmGKlYza6CYjEDNstAdNdKA3UuoULlEbS6w==} - engines: {node: '>=12.13'} - core-js-compat@3.25.0: resolution: {integrity: sha512-extKQM0g8/3GjFx9US12FAgx8KJawB7RCQ5y8ipYLbmfzEzmFRWdDjIlxDx82g7ygcNG85qMVUSRyABouELdow==} @@ -3276,10 +2837,6 @@ packages: resolution: {integrity: sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA==} engines: {node: '>=8'} - css-tree@2.2.1: - resolution: {integrity: sha512-OA0mILzGc1kCOCSJerOeqDxDQ4HOh+G8NbOJFOTgOCzpw7fCBubk0fEyxp8AgOL/jvLgYA/uV0cMbe43ElF1JA==} - engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0, npm: '>=7.0.0'} - css-tree@2.3.1: resolution: {integrity: sha512-6Fv1DV/TYw//QF5IzQdqsNDjx/wc8TrMBZsqjL9eW01tWb7R7k/mq+/VXfJCl7SoD5emsJop9cOByJZfs8hYIw==} engines: {node: ^10 || ^12.20.0 || ^14.13.0 || >=15.0.0} @@ -3305,9 +2862,6 @@ packages: csstype@3.1.2: resolution: {integrity: sha512-I7K1Uu0MBPzaFKg4nI5Q7Vs2t+3gWWW648spaF+Rg7pI9ds18Ugn+lvg4SHczUdKlHI5LWBXyqfS8+DufyBsgQ==} - csstype@3.1.3: - resolution: {integrity: sha512-M1uQkMl8rQK/szD0LNhtqxIPLpimGm8sOBwU7lLnCpSbTyY3yeU1Vc7l4KT5zT4s/yOxHH5O7tIuuLOCnLADRw==} - data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -3395,9 +2949,6 @@ packages: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} engines: {node: '>=6'} - destr@1.1.1: - resolution: {integrity: sha512-QqkneF8LrYmwATMdnuD2MLI3GHQIcBnG6qFC2q9bSH430VTCDAVjcspPmUaKhPGtAtPAftIUFqY1obQYQuwmbg==} - destr@2.0.1: resolution: {integrity: sha512-M1Ob1zPSIvlARiJUkKqvAZ3VAqQY6Jcuth/pBKQ2b1dX/Qx0OnJ8Vux6J2H5PTMQeRzWrrbTu70VxBfv/OPDJA==} @@ -3419,9 +2970,6 @@ packages: devalue@4.2.0: resolution: {integrity: sha512-mbjoAaCL2qogBKgeFxFPOXAUsZchircF+B/79LD4sHH0+NHfYm8gZpQrskKDn5gENGt35+5OI1GUF7hLVnkPDw==} - devlop@1.1.0: - resolution: {integrity: sha512-RWmIqhcFf1lRYBvNmr7qTNuyCt/7/ns2jbpp1+PalgE/rDQcBT0fioSMUpJ93irlUhC5hrg4cYqe6U+0ImW0rA==} - diff-sequences@29.6.3: resolution: {integrity: sha512-EjePK1srD3P08o2j4f0ExnylqRs5B9tJjcp9t1krH2qRi8CCdsYfwe9JgSLurFBWwq4uOlipzfk5fHNvwFKr8Q==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} @@ -3450,9 +2998,6 @@ packages: resolution: {integrity: sha512-IrPdXQsk2BbzvCBGBOTmmSH5SodmqZNt4ERAZDmW4CT+tL8VtvinqywuANaFu4bOMWki16nqf0e4oC0QIaDr/g==} engines: {node: '>=10'} - duplexer@0.1.2: - resolution: {integrity: sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg==} - eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} @@ -3483,10 +3028,6 @@ packages: end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} - engines: {node: '>=0.12'} - error-ex@1.3.2: resolution: {integrity: sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g==} @@ -3505,11 +3046,6 @@ packages: es6-promise@3.3.1: resolution: {integrity: sha512-SOp9Phqvqn7jtEUxPWdWfWoLmyt2VaJ6MpvP9Comy1MceMXqE6bxvaTu4iaxpYYPzhny28Lc+M87/c2cPK6lDg==} - esbuild-register@3.3.3: - resolution: {integrity: sha512-eFHOkutgIMJY5gc8LUp/7c+LLlDqzNi9T6AwCZ2WKKl3HmT+5ef3ZRyPPxDOynInML0fgaC50yszPKfPnjC0NQ==} - peerDependencies: - esbuild: '>=0.12 <1' - esbuild@0.18.20: resolution: {integrity: sha512-ceqxoedUrcayh7Y7ZX6NdbbDzGROiyVBgC4PriJThBKSVPWnnFHZAkfI1lJT8QFkOwH4qOS2SJkS4wvpGl8BpA==} engines: {node: '>=12'} @@ -3866,9 +3402,6 @@ packages: flatted@3.2.7: resolution: {integrity: sha512-5nqDSxl8nn5BSNxyR3n4I6eDmbolI6WT+QqR547RwxQapgjQBmtktdP+HTBb/a/zLsbzERTONyUB5pefh5TtjQ==} - focus-trap@7.6.1: - resolution: {integrity: sha512-nB8y4nQl8PshahLpGKZOq1sb0xrMVFSn6at7u/qOsBZTlZRzaapISGENcB6mOkoezbClZyiMwEF/dGY8AZ00rA==} - for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} @@ -3891,10 +3424,6 @@ packages: fs-constants@1.0.0: resolution: {integrity: sha512-y6OAwoSIf7FyjMIv94u+b5rdheZEjzR63GTyZJm5qh4Bi+2YgwLCcI/fPFZkL5PSixOt6ZNKm+w+Hfp/Bciwow==} - fs-extra@10.1.0: - resolution: {integrity: sha512-oRXApq54ETRj4eMiFzGnHWGy+zo5raudjuxN0b8H7s/RU2oW0Wvsx9O0ACRN/kRq9E8Vu/ReskGB5o3ji+FzHQ==} - engines: {node: '>=12'} - fs-extra@9.1.0: resolution: {integrity: sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ==} engines: {node: '>=10'} @@ -4025,10 +3554,6 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - gzip-size@6.0.0: - resolution: {integrity: sha512-ax7ZYomf6jqPTQ4+XCpUGyXKHk5WweS+e05MBO4/y3WJ5RkmPXNKvX+bx1behVILVwr6JSQvZAku021CHPXG3Q==} - engines: {node: '>=10'} - handle-thing@2.0.1: resolution: {integrity: sha512-9Qn4yBxelxoh2Ow62nP+Ka/kMnOXRi8BXnRaUwezLNhqelnN49xKz4F/dPP8OYLxLxq6JDtZb2i9XznUQbNPTg==} @@ -4062,15 +3587,6 @@ packages: resolution: {integrity: sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==} engines: {node: '>= 0.4.0'} - hast-util-to-html@9.0.3: - resolution: {integrity: sha512-M17uBDzMJ9RPCqLMO92gNNUDuBSq10a25SDBI08iCCxmorf4Yy6sYHK57n9WAbRAAaU+DuR4W6GN9K4DFZesYg==} - - hast-util-whitespace@3.0.0: - resolution: {integrity: sha512-88JUN06ipLwsnv+dVn+OIYOvAuvBMy/Qoi6O7mQHxdPXpjy+Cd6xRkWwux7DKO+4sYILtLBRIKgsdpS2gQc7qw==} - - hookable@5.5.3: - resolution: {integrity: sha512-Yc+BQe8SvoXH1643Qez1zqLRmbA5rCL+sSmk6TVos0LWVfNIB7PGncdlId77WzLGSIB5KaWgTaNTs2lNVEI6VQ==} - hosted-git-info@2.8.9: resolution: {integrity: sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==} @@ -4084,9 +3600,6 @@ packages: html-entities@2.3.3: resolution: {integrity: sha512-DV5Ln36z34NNTDgnz0EWGBLZENelNAtkiFA4kyNOG2tDI6Mz1uSWiq1wAKdyjnJwyDiDO7Fa2SO1CTxPXL8VxA==} - html-void-elements@3.0.0: - resolution: {integrity: sha512-bEqo66MRXsUGxWHV5IP0PUiAWwoEjba4VCzg0LjFJBpchPaTfyfCKTG6bc5F8ucKec3q5y6qOdGyYTSBEvhCrg==} - http-deceiver@1.2.7: resolution: {integrity: sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==} @@ -4203,9 +3716,6 @@ packages: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.11.0: - resolution: {integrity: sha512-RRjxlvLDkD1YJwDbroBHMb+cukurkDWNyHx7D3oNB5x9rb5ogcksMC5wHCadcXoo67gVr/+3GFySh3134zi6rw==} - is-core-module@2.13.0: resolution: {integrity: sha512-Z7dk6Qo8pOCp3l4tsX2C5ZVas4V+UxwQodwZhLopL91TX8UyyHEXafPcyoeeWuLrwzHcr3igO78wNLwHJHsMCQ==} @@ -4427,10 +3937,6 @@ packages: resolution: {integrity: sha512-iyT2MXws+dc2Wi6o3grCFtGXpeMvHmJqS27sMPGtV2eUu4PeFnG+33I8BlFK1t1NWMjOpcx9bridn5yxLDX2gQ==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - local-pkg@0.4.2: - resolution: {integrity: sha512-mlERgSPrbxU3BP4qBqAvvwlgW4MTg78iwJdGGnv7kibKjWcJksrG3t6LB5lXI93wXRDvG4NpUgJFmTG4T6rdrg==} - engines: {node: '>=14'} - local-pkg@0.4.3: resolution: {integrity: sha512-SFppqq5p42fe2qcZQqqEOiVRXl+WCP1MdT6k7BDEW1j++sp5fIY+/fdRQitvKgB5BrBcmrs5m/L0v2FrU5MY1g==} engines: {node: '>=14'} @@ -4493,21 +3999,10 @@ packages: magic-string@0.25.9: resolution: {integrity: sha512-RmF0AsMzgt25qzqqLc1+MbHmhdx0ojF2Fvs4XnOqz2ZOBXzzkEwc/dJQZCYHAn7v1jbVOjAZfK8msRn4BxO4VQ==} - magic-string@0.26.3: - resolution: {integrity: sha512-u1Po0NDyFcwdg2nzHT88wSK0+Rih0N1M+Ph1Sp08k8yvFFU3KR72wryS7e1qMPJypt99WB7fIFVCA92mQrMjrg==} - engines: {node: '>=12'} - - magic-string@0.26.7: - resolution: {integrity: sha512-hX9XH3ziStPoPhJxLq1syWuZMxbDvGNbVchfrdCtanC7D13888bMFow61x8axrx+GfHLtVeAx2kxL7tTGRl+Ow==} - engines: {node: '>=12'} - magic-string@0.27.0: resolution: {integrity: sha512-8UnnX2PeRAPZuN12svgR9j7M1uWMovg/CEnIwIG0LFkXSJJe4PdfUGiTGl8V9bsBHFUtfVINcSyYxd7q+kx9fA==} engines: {node: '>=12'} - magic-string@0.30.12: - resolution: {integrity: sha512-Ea8I3sQMVXr8JhN4z+H/d8zwo+tYDgHE9+5G4Wnrwhs0gaK9fXTKx0Tw5Xwsd/bCPTTZNRAdpyzvoeORe9LYpw==} - magic-string@0.30.3: resolution: {integrity: sha512-B7xGbll2fG/VjP+SWg4sX3JynwIU0mjoTc6MPpKNuIvftk6u6vqhDnk1R80b8C2GBR6ywqy+1DcKBrevBg+bmw==} engines: {node: '>=12'} @@ -4516,21 +4011,12 @@ packages: resolution: {integrity: sha512-7xlpfBaQaP/T6Vh8MO/EqXSW5En6INHEvEXQiuff7Gku0PWjU3uf6w/j9o7O+SpB5fOAkrI5HeoNgwjEO0pFsA==} engines: {node: '>=12'} - mark.js@8.11.1: - resolution: {integrity: sha512-1I+1qpDt4idfgLQG+BNWmrqku+7/2bi5nLf4YwF8y8zXvmfiTBY3PV3ZibfrjBueCByROpuBjLLFCajqkgYoLQ==} - mdast-util-from-markdown@0.8.5: resolution: {integrity: sha512-2hkTXtYYnr+NubD/g6KGBS/0mFmBcifAsI0yIWRiRo0PjVs6SSOSOdtzbp6kSGnShDN6G5aWZpKQ2lWRy27mWQ==} - mdast-util-to-hast@13.2.0: - resolution: {integrity: sha512-QGYKEuUsYT9ykKBCMOEDLsU5JRObWQusAolFMeko/tYPufNkRffBAQjIE+99jbA87xv6FgmjLtwjh9wBWajwAA==} - mdast-util-to-string@2.0.0: resolution: {integrity: sha512-AW4DRS3QbBayY/jJmD8437V1Gombjf8RSOUCMFBuo5iHi58AGEgVCKQ+ezHkZZDpAQS75hcBMpLqjpJTjtUL7w==} - mdn-data@2.0.28: - resolution: {integrity: sha512-aylIc7Z9y4yzHYAJNuESG3hfhC+0Ibp/MAMiaOZgNv4pmEdFyfZhhhny4MNiAfWdBQ1RQ2mfDWmM1x8SvGyp8g==} - mdn-data@2.0.30: resolution: {integrity: sha512-GaqWWShW4kv/G9IEucWScBx9G1/vsFZZJUO+tD26M8J8z3Kw5RDQjaoZe03YAClgeS/SWPOcb4nkFBTEi5DUEA==} @@ -4556,21 +4042,6 @@ packages: resolution: {integrity: sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==} engines: {node: '>= 0.6'} - micromark-util-character@2.1.0: - resolution: {integrity: sha512-KvOVV+X1yLBfs9dCBSopq/+G1PcgT3lAK07mC4BzXi5E7ahzMAF8oIupDDJ6mievI6F+lAATkbQQlQixJfT3aQ==} - - micromark-util-encode@2.0.0: - resolution: {integrity: sha512-pS+ROfCXAGLWCOc8egcBvT0kf27GoWMqtdarNfDcjb6YLuV5cM3ioG45Ys2qOVqeqSbjaKg72vU+Wby3eddPsA==} - - micromark-util-sanitize-uri@2.0.0: - resolution: {integrity: sha512-WhYv5UEcZrbAtlsnPuChHUAsu/iBPOVaEVsntLBIdpibO0ddy8OzavZz3iL2xVvBZOpolujSliP65Kq0/7KIYw==} - - micromark-util-symbol@2.0.0: - resolution: {integrity: sha512-8JZt9ElZ5kyTnO94muPxIGS8oyElRJaiJO8EzV6ZSyGQ1Is8xwl4Q45qU5UOg+bGH4AikWziz0iN4sFLWs8PGw==} - - micromark-util-types@2.0.0: - resolution: {integrity: sha512-oNh6S2WMHWRZrmutsRmDDfkzKtxF+bc2VxLC9dvtrDIRFln627VsFP6fLMgTryGDljgLPjkrzQSDcPrjPyDJ5w==} - micromark@2.11.4: resolution: {integrity: sha512-+WoovN/ppKolQOFIAajxi7Lu9kInbPxFuTBVEavFcL8eAfVstoc5MocPmqBeAdBOJV00uaVjegzH4+MA0DN/uA==} @@ -4637,16 +4108,10 @@ packages: resolution: {integrity: sha512-3FnjYuehv9k6ovOEbyOswadCDPX1piCfhV8ncmYtHOjuPwylVWsghTLo7rabjC3Rx5xD4HDx8Wm1xnMF7S5qFQ==} engines: {node: '>=8'} - minisearch@6.3.0: - resolution: {integrity: sha512-ihFnidEeU8iXzcVHy74dhkxh/dn8Dc08ERl0xwoMMGqp4+LvRSCgicb+zGqWthVokQKvCSxITlh3P08OzdTYCQ==} - minizlib@2.1.2: resolution: {integrity: sha512-bAxsR8BVfj60DWXHE3u30oHzfl4G7khkSuPW+qvpd7jFRHm7dLxOjUk1EHACJ/hxLY8phGJ0YhYHZo7jil7Qdg==} engines: {node: '>= 8'} - mitt@3.0.1: - resolution: {integrity: sha512-vKivATfr97l2/QBCYAkXYDbrIWPM2IIKEl7YPhjCvKlG3kE2gm+uBo6nEXK3M5/Ffh/FLpKExzOQ3JJoJGFKBw==} - mkdirp-classic@0.5.3: resolution: {integrity: sha512-gKLcREMhtuZRwRAfqP3RFW+TK4JqApVBtOIftVgjuABpAtpxhPGaDcfvbhNvD0B8iD1oUr/txX35NjcaY6Ns/A==} @@ -4712,9 +4177,6 @@ packages: node-addon-api@6.1.0: resolution: {integrity: sha512-+eawOlIgy680F0kBzPUNFhMZGtJ1YmqM6l4+Crf4IkImjYrO/mqPwRMh352g23uIaQKFItcQ64I7KMaJxHgAVA==} - node-fetch-native@0.1.4: - resolution: {integrity: sha512-10EKpOCQPXwZVFh3U1ptOMWBgKTbsN7Vvo6WVKt5pw4hp8zbv6ZVBZPlXw+5M6Tyi1oc1iD4/sNPd71KYA16tQ==} - node-fetch-native@1.2.0: resolution: {integrity: sha512-5IAMBTl9p6PaAjYCnMv5FmqIF6GcZnawAVnzaCG0rX2aYZJ4CxEkZNtVPuTRug7fL7wyM5BQYTlAzcyMPi6oTQ==} @@ -4792,9 +4254,6 @@ packages: ohash@1.1.2: resolution: {integrity: sha512-9CIOSq5945rI045GFtcO3uudyOkYVY1nyfFxVQp+9BRgslr8jPNiSSrsFGg/BNTUFOLqx0P5tng6G32brIPw0w==} - ohmyfetch@0.4.18: - resolution: {integrity: sha512-MslzNrQzBLtZHmiZBI8QMOcMpdNFlK61OJ34nFNFynZ4v+4BonfCQ7VIN4EGXvGGq5zhDzgdJoY3o9S1l2T7KQ==} - on-finished@2.4.1: resolution: {integrity: sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==} engines: {node: '>= 0.8'} @@ -4814,9 +4273,6 @@ packages: resolution: {integrity: sha512-1FlR+gjXK7X+AsAHso35MnyN5KqGwJRi/31ft6x0M194ht7S+rWAvd7PHss9xSKMzE0asv1pyIHaJYq+BbacAQ==} engines: {node: '>=12'} - oniguruma-to-js@0.4.3: - resolution: {integrity: sha512-X0jWUcAlxORhOqqBREgPMgnshB7ZGYszBNspP+tS9hPD3l13CdaXcHbgImoHUHlrvGx/7AvFEkTRhAGYh+jzjQ==} - optionator@0.8.3: resolution: {integrity: sha512-+IW9pACdk3XWmmTXG8m3upGUJst5XRGzxMRjXzAuJ1XnIFNvfhjjIuYkDvysnPQ7qzqVzLt78BCruntqRhWQbA==} engines: {node: '>= 0.8.0'} @@ -4901,18 +4357,12 @@ packages: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} engines: {node: '>=8'} - pathe@0.3.7: - resolution: {integrity: sha512-yz7GK+kSsS27x727jtXpd5VT4dDfP/JDIQmaowfxyWCnFjOWtE1VIh7i6TzcSfzW0n4+bRQztj1VdKnITNq/MA==} - pathe@1.1.1: resolution: {integrity: sha512-d+RQGp0MAYTIaDBIMmOfMwz3E+LOZnxx1HZd5R18mmCZY0QBlK0LDZfPc8FW8Ed2DlvsuE6PRjroDY+wg4+j/Q==} pathval@1.1.1: resolution: {integrity: sha512-Dp6zGqpTdETdR63lehJYPeIOqpiNBNtc7BpWSLrOje7UaIsE5aY92r/AunQA7rsXvet3lrJ3JnZX29UPTKXyKQ==} - perfect-debounce@0.1.3: - resolution: {integrity: sha512-NOT9AcKiDGpnV/HBhI22Str++XWcErO/bALvHCuhv33owZW/CjH8KAFLZDCmu3727sihe0wTxpDhyGc6M8qacQ==} - perfect-debounce@1.0.0: resolution: {integrity: sha512-xCy9V055GLEqoFaHoC1SoLIaLmWctgCUaBaWxDZ7/Zx4CTyX7cJQLJOok/orfjZAh9kEYpjJa4d0KcJmCbctZA==} @@ -5025,9 +4475,6 @@ packages: resolution: {integrity: sha512-NxNv/kLguCA7p3jE8oL2aEBsrJWgAakBpgmgK6lpPWV+WuOmY6r2/zbAVnP+T8bQlA0nzHXSJSJW0Hq7ylaD2Q==} engines: {node: '>= 6'} - property-information@6.5.0: - resolution: {integrity: sha512-PgTgs/BlvHxOu8QuEN7wi5A0OmXaBcHpmCSTehcs6Uuu9IkDIEo13Hy7n898RHfrQ49vKCoGeWZSaAK01nwVig==} - proxy-addr@2.0.7: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} @@ -5145,9 +4592,6 @@ packages: regenerator-transform@0.15.0: resolution: {integrity: sha512-LsrGtPmbYg19bcPHwdtmXwbW+TqNvtY4riE3P83foeHRroMbH6/2ddFBfab3t7kbzc7v7p4wbkIecHImqt0QNg==} - regex@4.4.0: - resolution: {integrity: sha512-uCUSuobNVeqUupowbdZub6ggI5/JZkYyJdDogddJr60L764oxC2pMZov1fQ3wM9bdyzUILDG+Sqx6NAKAz9rKQ==} - regexp-tree@0.1.27: resolution: {integrity: sha512-iETxpjK6YoRWJG5o6hXLwvjYAoW+FEZn9os0PD/b6AP6xQwsa/Y7lCVgIixBbUPMfhu+i2LtdeAqVTgGlQarfA==} hasBin: true @@ -5197,10 +4641,6 @@ packages: resolve-pkg-maps@1.0.0: resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve@1.22.1: - resolution: {integrity: sha512-nBpuuYuY5jFsli/JIs1oldw6fOQCBioohqWZg/2hiaOybXOft4lonv85uDOKXdf8rhyK159cxU5cDcK/NKk8zw==} - hasBin: true - resolve@1.22.8: resolution: {integrity: sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==} hasBin: true @@ -5209,9 +4649,6 @@ packages: resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - rfdc@1.4.1: - resolution: {integrity: sha512-q1b3N5QkRUWUl7iyylaaj3kOpIT0N2i9MqIEQXP73GVsN9cw3fdx8X63cEmWhJGi2PPCF23Ijp7ktmd39rawIA==} - rimraf@2.7.1: resolution: {integrity: sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w==} hasBin: true @@ -5262,9 +4699,6 @@ packages: scheduler@0.23.0: resolution: {integrity: sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw==} - search-insights@2.17.2: - resolution: {integrity: sha512-zFNpOpUO+tY2D85KrxJ+aqwnIfdEGi06UH2+xEb+Bp9Mwznmauqc9djbnBibJO5mpfUPPa8st6Sx65+vbeO45g==} - select-hose@2.0.0: resolution: {integrity: sha512-mEugaLK+YfkijB4fx0e6kImuJdCIt2LxCRcbEYPqRGCs4F2ogyfZU5IAZRdjCP8JPq2AtdNoC/Dux63d9Kiryg==} @@ -5326,9 +4760,6 @@ packages: resolution: {integrity: sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==} engines: {node: '>=8'} - shiki@1.22.2: - resolution: {integrity: sha512-3IZau0NdGKXhH2bBlUk4w1IHNxPh6A5B2sUpyY+8utLu2j/h1QpFkAaUA1bAMxOWWGtTWcAh531vnS4NJKS/lA==} - side-channel@1.0.4: resolution: {integrity: sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw==} @@ -5404,9 +4835,6 @@ packages: resolution: {integrity: sha512-9NykojV5Uih4lgo5So5dtw+f0JgJX30KCNI8gwhz2J9A15wD0Ml6tjHKwf6fTSa6fAdVBdZeNOs9eJ71qCk8vA==} deprecated: Please use @jridgewell/sourcemap-codec instead - space-separated-tokens@2.0.2: - resolution: {integrity: sha512-PEGlAwrG8yXGXRjW32fGbg66JAlOAwbObuqVoJpv/mRgoWDQfgH1wDPvtzWyUSNAXBGSk8h755YDbbcEy3SH2Q==} - spdx-correct@3.1.1: resolution: {integrity: sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==} @@ -5426,10 +4854,6 @@ packages: resolution: {integrity: sha512-r46gZQZQV+Kl9oItvl1JZZqJKGr+oEkB08A6BzkiR7593/7IbtuncXHd2YoYeTsG4157ZssMu9KYvUHLcjcDoA==} engines: {node: '>=6.0.0'} - speakingurl@14.0.1: - resolution: {integrity: sha512-1POYv7uv2gXoyGFpBCmpDVSNV74IfsWlDW216UPjbWufNf+bSU6GdbDsxdcxtfwb4xlI3yxzOTKClUosxARYrQ==} - engines: {node: '>=0.10.0'} - stackback@0.0.2: resolution: {integrity: sha512-1XMJE5fQo1jGH6Y/7ebnwPOBEkIEnT4QF32d5R1+VXdXveM0IBMJt8zfaxX1P3QhVwrYe+576+jkANtSS2mBbw==} @@ -5478,9 +4902,6 @@ packages: string_decoder@1.3.0: resolution: {integrity: sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==} - stringify-entities@4.0.4: - resolution: {integrity: sha512-IwfBptatlO+QCJUo19AqvrPNqlVMpW9YEL2LIVY+Rpv2qsjCGxaDLNRgeGsQWJhfItebuJhsGSLjaBbNSQ+ieg==} - stringify-object@3.3.0: resolution: {integrity: sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw==} engines: {node: '>=4'} @@ -5525,10 +4946,6 @@ packages: engines: {node: '>=8'} hasBin: true - superjson@2.2.1: - resolution: {integrity: sha512-8iGv75BYOa0xRJHK5vRLEjE2H/i4lulTjzpUXic3Eg8akftYjkmQDa8JARQ42rlczXyFR3IeRoeFCc7RxHsYZA==} - engines: {node: '>=16'} - supports-color@5.5.0: resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} engines: {node: '>=4'} @@ -5647,9 +5064,6 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tabbable@6.2.0: - resolution: {integrity: sha512-Cat63mxsVJlzYvN51JmVXIgNoUokrIaT2zLclCXjRd8boZ0004U4KCs/sToJ75C6sdlByWxpYnb5Boif1VSFew==} - tar-fs@2.1.1: resolution: {integrity: sha512-V0r2Y9scmbDRLCNex/+hYzvp/zyYjvFbHPNgVTKfQvVrb6guiE/fxP+XblDNR011utopbkex2nM4dHNV6GDsng==} @@ -5745,9 +5159,6 @@ packages: resolution: {integrity: sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==} hasBin: true - trim-lines@3.0.1: - resolution: {integrity: sha512-kRj8B+YHZCc9kQYdWfJB2/oUl9rA99qbowYYBtr4ui4mZyAQ2JpvVBd/6U2YloATfqBhBTSMhTpgBHtU0Mf3Rg==} - ts-api-utils@1.0.3: resolution: {integrity: sha512-wNMeqtMz5NtwpT/UZGY5alT+VoKdSsOOP/kqHFcUW1P/VRhH2wJ48+DN2WwUliNbQ976ETwDL0Ifd2VVvgonvg==} engines: {node: '>=16.13.0'} @@ -5842,9 +5253,6 @@ packages: engines: {node: '>=14.17'} hasBin: true - ufo@0.8.5: - resolution: {integrity: sha512-e4+UtA5IRO+ha6hYklwj6r7BjiGMxS0O+UaSg9HbaTefg4kMkzj4tXzEBajRR+wkxf+golgAWKzLbytCUDMJAA==} - ufo@1.3.0: resolution: {integrity: sha512-bRn3CsoojyNStCZe0BG0Mt4Nr/4KF+rhFlnNXybgqt5pXHNFRlqinSoQaTrGyzE4X8aHplSb+TorH+COin9Yxw==} @@ -5883,24 +5291,9 @@ packages: resolution: {integrity: sha512-uNaeirEPvpZWSgzwsPGtU2zVSTrn/8L5q/IexZmH0eH6SA73CmAA5U4GwORTxQAZs95TAXLNqeLoPPNO5gZfWg==} engines: {node: '>=8'} - unist-util-is@6.0.0: - resolution: {integrity: sha512-2qCTHimwdxLfz+YzdGfkqNlH0tLi9xjTnHddPmJwtIG9MGsdbutfTc4P+haPD7l7Cjxf/WZj+we5qfVPvvxfYw==} - - unist-util-position@5.0.0: - resolution: {integrity: sha512-fucsC7HjXvkB5R3kTCO7kUjRdrS0BJt3M/FPxmHMBOm8JQi2BsHAHFsy27E0EolP8rp0NzXsJ+jNPyDWvOJZPA==} - unist-util-stringify-position@2.0.3: resolution: {integrity: sha512-3faScn5I+hy9VleOq/qNbAd6pAx7iH5jYBMS9I1HgQVijz/4mv5Bvw5iw1sC/90CODiKo81G/ps8AJrISn687g==} - unist-util-stringify-position@4.0.0: - resolution: {integrity: sha512-0ASV06AAoKCDkS2+xw5RXJywruurpbC4JZSm7nr7MOt1ojAzvyyaO+UxZf18j8FCF6kmzCZKcAgN/yu2gm2XgQ==} - - unist-util-visit-parents@6.0.1: - resolution: {integrity: sha512-L/PqWzfTP9lzzEa6CKs0k2nARxTdZduw3zyh8d2NVBnsyvHjSX4TWse388YrrQKbvI8w20fGjGlhgT96WwKykw==} - - unist-util-visit@5.0.0: - resolution: {integrity: sha512-MR04uvD+07cwl/yhVuVWAtw+3GOR/knlL55Nd/wAdblk27GCVt3lqpTivy/tkJcZoNPzTwS1Y+KMojlLDhoTzg==} - universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -5909,46 +5302,10 @@ packages: resolution: {integrity: sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ==} engines: {node: '>= 10.0.0'} - unocss@0.45.18: - resolution: {integrity: sha512-VDUrLzKwCIAipTCIqS9gpuEPJu7RkzGMJV0+u9zSrg1+9Cjmag4ABkmQdiWK+j/qUgeQ1YEs7OkGSeD0lMEUzA==} - engines: {node: '>=14'} - peerDependencies: - '@unocss/webpack': 0.45.18 - peerDependenciesMeta: - '@unocss/webpack': - optional: true - unpipe@1.0.0: resolution: {integrity: sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==} engines: {node: '>= 0.8'} - unplugin-vue-components@0.22.4: - resolution: {integrity: sha512-2rRZcM9OnJGXnYxQNfaceEYuPeVACcWySIjy8WBwIiN3onr980TmA3XE5pRJFt8zoQrUA+c46oyIq96noLqrEQ==} - engines: {node: '>=14'} - peerDependencies: - '@babel/parser': ^7.15.8 - vue: 2 || 3 - peerDependenciesMeta: - '@babel/parser': - optional: true - - unplugin@0.9.5: - resolution: {integrity: sha512-luraheyfxwtvkvHpsOvMNv7IjLdORTWKZp0gWYNHGLi2ImON3iIZOj464qEyyEwLA/EMt12fC415HW9zRpOfTg==} - peerDependencies: - esbuild: '>=0.13' - rollup: ^4.22.4 - vite: ^2.3.0 || ^3.0.0-0 - webpack: 4 || 5 - peerDependenciesMeta: - esbuild: - optional: true - rollup: - optional: true - vite: - optional: true - webpack: - optional: true - upath@1.2.0: resolution: {integrity: sha512-aZwGpamFO61g3OlfT7OQCHqhGnW43ieH9WZeP7QxN/G/jS4jfqUkZxoryvJgVPEcrl5NL/ggHsSmLMHuH64Lhg==} engines: {node: '>=4'} @@ -5992,12 +5349,6 @@ packages: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} - vfile-message@4.0.2: - resolution: {integrity: sha512-jRDZ1IMLttGj41KcZvlrYAaI3CfqpLpfpf+Mfig13viT6NKvRzWZ+lXz0Y5D60w6uJIBAOGq9mSHf0gktF0duw==} - - vfile@6.0.3: - resolution: {integrity: sha512-KzIbH/9tXat2u30jf+smMwFCsno4wHVdNmzFyL+T/L3UGqqk6JKfVqOFOZEpZSHADH1k40ab6NUIXZq422ov3Q==} - vite-node@1.0.0-beta.4: resolution: {integrity: sha512-YODjVvHd2Jih+TGMG3B99ktSyvET9w2cMevorAjcuQ3KKiPhDxEf2bRia2KsDHfnUGIfSpwoUdbcDdJ5xR7epg==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6112,18 +5463,6 @@ packages: vite: optional: true - vitepress@1.0.1: - resolution: {integrity: sha512-eNr5pOBppYUUjEhv8S0S2t9Tv95LQ6mMeHj6ivaGwfHxpov70Vduuwl/QQMDRznKDSaP0WKV7a82Pb4JVOaqEw==} - hasBin: true - peerDependencies: - markdown-it-mathjax3: ^4 - postcss: ^8 - peerDependenciesMeta: - markdown-it-mathjax3: - optional: true - postcss: - optional: true - vitest@1.0.0-beta.4: resolution: {integrity: sha512-WOJTqxY3hWqn4yy26SK+cx+BlPBeK/KtY9ALWkD6FLWLhSGY0QFEmarc8sdb/UGZQ8xs5pOvcQQS9JJSV8HH8g==} engines: {node: ^18.0.0 || >=20.0.0} @@ -6149,30 +5488,8 @@ packages: jsdom: optional: true - vue-demi@0.13.11: - resolution: {integrity: sha512-IR8HoEEGM65YY3ZJYAjMlKygDQn25D5ajNFNoKh9RSDMQtlzCxtfQjdQgv9jjK+m3377SsJXY8ysq8kLCZL25A==} - engines: {node: '>=12'} - hasBin: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - - vue-demi@0.14.10: - resolution: {integrity: sha512-nMZBOwuzabUO0nLgIcc6rycZEebF6eeUfaiQx9+WSk8e29IbLvPU9feI6tqW4kTo3hvoYAJkMh8n8D0fuISphg==} - engines: {node: '>=12'} - hasBin: true - peerDependencies: - '@vue/composition-api': ^1.0.0-rc.1 - vue: ^3.0.0-0 || ^2.6.0 - peerDependenciesMeta: - '@vue/composition-api': - optional: true - - vue-demi@0.14.6: - resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} + vue-demi@0.14.6: + resolution: {integrity: sha512-8QA7wrYSHKaYgUxDA5ZC24w+eHm3sYCbp0EzcDwKqN3p6HqtTCGR/GVsPyZW92unff4UlcSh++lmqDWN3ZIq4w==} engines: {node: '>=12'} hasBin: true peerDependencies: @@ -6201,14 +5518,6 @@ packages: typescript: optional: true - vue@3.5.12: - resolution: {integrity: sha512-CLVZtXtn2ItBIi/zHZ0Sg1Xkb7+PU32bJJ8Bmy7ts3jxXTcbfsEfBivFYYWz1Hur+lalqGAh65Coin0r+HRUfg==} - peerDependencies: - typescript: '*' - peerDependenciesMeta: - typescript: - optional: true - w3c-hr-time@1.0.2: resolution: {integrity: sha512-z8P5DvDNjKDoFIHK7q8r8lackT6l+jo/Ye3HOle7l9nICP9lf1Ci25fy9vHd0JOWewkIFzXIEig3TdKT7JQ5fQ==} deprecated: Use your platform's native performance.now() and performance.timeOrigin. @@ -6234,13 +5543,6 @@ packages: resolution: {integrity: sha512-qBIvFLGiBpLjfwmYAaHPXsn+ho5xZnGvyGvsarywGNc8VyQJUMHJ8OBKGGrPER0okBeMDaan4mNBlgBROxuI8w==} engines: {node: '>=10.4'} - webpack-sources@3.2.3: - resolution: {integrity: sha512-/DyMEOrDgLKKIG0fmvtz+4dUX/3Ghozwgm6iPp8KRhvn+eQf9+Q7GWxVNMk3+uCPWfdXYC4ExGBckIXdFEfH1w==} - engines: {node: '>=10.13.0'} - - webpack-virtual-modules@0.4.4: - resolution: {integrity: sha512-h9atBP/bsZohWpHnr+2sic8Iecb60GxftXsWNLLLSqewgIsGzByd2gcIID4nXcG+3tNe4GQG3dLcff3kXupdRA==} - whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} @@ -6427,123 +5729,10 @@ packages: resolution: {integrity: sha512-9bnSc/HEW2uRy67wc+T8UwauLuPJVn28jb+GtJY16iiKWyvmYJRXVT4UamsAEGQfPohgr2q4Tq0sQbQlxTfi1g==} engines: {node: '>=12.20'} - zwitch@2.0.4: - resolution: {integrity: sha512-bXE4cR/kVZhKZX/RjPEflHaKVhUVl85noU3v6b8apfQEc1x4A+zBxjZ4lN8LqGd6WZ3dl98pY4o717VFmoPp+A==} - snapshots: '@aashutoshrathi/word-wrap@1.2.6': {} - '@algolia/autocomplete-core@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': - dependencies: - '@algolia/autocomplete-plugin-algolia-insights': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) - '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - search-insights - - '@algolia/autocomplete-plugin-algolia-insights@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2)': - dependencies: - '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - search-insights: 2.17.2 - transitivePeerDependencies: - - '@algolia/client-search' - - algoliasearch - - '@algolia/autocomplete-preset-algolia@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': - dependencies: - '@algolia/autocomplete-shared': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - '@algolia/client-search': 5.13.0 - algoliasearch: 5.13.0 - - '@algolia/autocomplete-shared@1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)': - dependencies: - '@algolia/client-search': 5.13.0 - algoliasearch: 5.13.0 - - '@algolia/client-abtesting@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-analytics@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-common@5.13.0': {} - - '@algolia/client-insights@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-personalization@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-query-suggestions@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/client-search@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/ingestion@1.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/monitoring@1.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/recommend@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - - '@algolia/requester-browser-xhr@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - - '@algolia/requester-fetch@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - - '@algolia/requester-node-http@5.13.0': - dependencies: - '@algolia/client-common': 5.13.0 - - '@ampproject/remapping@2.2.0': - dependencies: - '@jridgewell/gen-mapping': 0.1.1 - '@jridgewell/trace-mapping': 0.3.18 - '@ampproject/remapping@2.2.1': dependencies: '@jridgewell/gen-mapping': 0.3.2 @@ -6596,15 +5785,8 @@ snapshots: '@antfu/eslint-define-config@1.23.0-2': {} - '@antfu/install-pkg@0.1.0': - dependencies: - execa: 5.1.1 - find-up: 5.0.0 - '@antfu/ni@0.21.9': {} - '@antfu/utils@0.5.2': {} - '@antfu/utils@0.7.6': {} '@apideck/better-ajv-errors@0.3.6(ajv@8.11.0)': @@ -6906,14 +6088,10 @@ snapshots: '@babel/helper-string-parser@7.24.1': {} - '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.22.20': {} '@babel/helper-validator-identifier@7.24.5': {} - '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.22.15': {} '@babel/helper-validator-option@7.23.5': {} @@ -6972,10 +6150,6 @@ snapshots: dependencies: '@babel/types': 7.24.5 - '@babel/parser@7.26.2': - dependencies: - '@babel/types': 7.26.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.18.6(@babel/core@7.24.5)': dependencies: '@babel/core': 7.24.5 @@ -7597,40 +6771,8 @@ snapshots: '@babel/helper-validator-identifier': 7.24.5 to-fast-properties: 2.0.0 - '@babel/types@7.26.0': - dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@canvas/image-data@1.0.0': {} - '@docsearch/css@3.7.0': {} - - '@docsearch/js@3.7.0(@algolia/client-search@5.13.0)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)': - dependencies: - '@docsearch/react': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2) - preact: 10.19.2 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/react' - - react - - react-dom - - search-insights - - '@docsearch/react@3.7.0(@algolia/client-search@5.13.0)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)': - dependencies: - '@algolia/autocomplete-core': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0)(search-insights@2.17.2) - '@algolia/autocomplete-preset-algolia': 1.17.6(@algolia/client-search@5.13.0)(algoliasearch@5.13.0) - '@docsearch/css': 3.7.0 - algoliasearch: 5.13.0 - optionalDependencies: - '@types/react': 18.2.37 - react: 18.2.0 - react-dom: 18.2.0(react@18.2.0) - search-insights: 2.17.2 - transitivePeerDependencies: - - '@algolia/client-search' - '@es-joy/jsdoccomment@0.41.0': dependencies: comment-parser: 1.4.1 @@ -7894,19 +7036,6 @@ snapshots: '@humanwhocodes/object-schema@2.0.1': {} - '@iconify/types@1.1.0': {} - - '@iconify/utils@1.0.33': - dependencies: - '@antfu/install-pkg': 0.1.0 - '@antfu/utils': 0.5.2 - '@iconify/types': 1.1.0 - debug: 4.3.6 - kolorist: 1.8.0 - local-pkg: 0.4.3 - transitivePeerDependencies: - - supports-color - '@isaacs/cliui@8.0.2': dependencies: string-width: 5.1.2 @@ -7920,11 +7049,6 @@ snapshots: dependencies: '@sinclair/typebox': 0.27.8 - '@jridgewell/gen-mapping@0.1.1': - dependencies: - '@jridgewell/set-array': 1.1.2 - '@jridgewell/sourcemap-codec': 1.4.14 - '@jridgewell/gen-mapping@0.3.2': dependencies: '@jridgewell/set-array': 1.1.2 @@ -7952,8 +7076,6 @@ snapshots: '@jridgewell/sourcemap-codec@1.4.15': {} - '@jridgewell/sourcemap-codec@1.5.0': {} - '@jridgewell/trace-mapping@0.3.15': dependencies: '@jridgewell/resolve-uri': 3.1.0 @@ -8185,37 +7307,6 @@ snapshots: - encoding - supports-color - '@shikijs/core@1.22.2': - dependencies: - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - hast-util-to-html: 9.0.3 - - '@shikijs/engine-javascript@1.22.2': - dependencies: - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 - oniguruma-to-js: 0.4.3 - - '@shikijs/engine-oniguruma@1.22.2': - dependencies: - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 - - '@shikijs/transformers@1.22.2': - dependencies: - shiki: 1.22.2 - - '@shikijs/types@1.22.2': - dependencies: - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - - '@shikijs/vscode-textmate@9.3.0': {} - '@sinclair/typebox@0.27.8': {} '@solidjs/router@0.9.1(solid-js@1.8.5)': @@ -8377,45 +7468,22 @@ snapshots: '@types/estree@1.0.6': {} - '@types/fs-extra@9.0.13': - dependencies: - '@types/node': 18.7.15 - - '@types/hast@3.0.4': - dependencies: - '@types/unist': 2.0.6 - '@types/history@4.7.11': {} '@types/json-schema@7.0.11': {} '@types/json-schema@7.0.12': {} - '@types/linkify-it@3.0.5': {} - - '@types/markdown-it@13.0.9': - dependencies: - '@types/linkify-it': 3.0.5 - '@types/mdurl': 1.0.5 - '@types/mdast@3.0.10': dependencies: '@types/unist': 2.0.6 - '@types/mdast@4.0.4': - dependencies: - '@types/unist': 3.0.3 - - '@types/mdurl@1.0.5': {} - '@types/ms@0.7.31': {} '@types/node@12.20.55': {} '@types/node@18.17.14': {} - '@types/node@18.7.15': {} - '@types/normalize-package-data@2.4.1': {} '@types/prompts@2.4.8': @@ -8474,10 +7542,6 @@ snapshots: '@types/unist@2.0.6': {} - '@types/unist@3.0.3': {} - - '@types/web-bluetooth@0.0.15': {} - '@types/web-bluetooth@0.0.20': {} '@typescript-eslint/eslint-plugin@5.36.2(@typescript-eslint/parser@5.36.2(eslint@8.54.0)(typescript@4.8.2))(eslint@8.54.0)(typescript@4.8.2)': @@ -8648,112 +7712,6 @@ snapshots: '@ungap/structured-clone@1.2.0': {} - '@unocss/astro@0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))': - dependencies: - '@unocss/core': 0.45.18 - '@unocss/reset': 0.45.18 - '@unocss/vite': 0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)) - transitivePeerDependencies: - - vite - - '@unocss/cli@0.45.18': - dependencies: - '@unocss/config': 0.45.18 - '@unocss/core': 0.45.18 - '@unocss/preset-uno': 0.45.18 - cac: 6.7.14 - chokidar: 3.5.3 - colorette: 2.0.19 - consola: 2.15.3 - fast-glob: 3.3.2 - pathe: 0.3.7 - perfect-debounce: 0.1.3 - - '@unocss/config@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - unconfig: 0.3.11 - - '@unocss/core@0.45.18': {} - - '@unocss/inspector@0.45.18': - dependencies: - gzip-size: 6.0.0 - sirv: 2.0.2 - - '@unocss/preset-attributify@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/preset-icons@0.45.18': - dependencies: - '@iconify/utils': 1.0.33 - '@unocss/core': 0.45.18 - ohmyfetch: 0.4.18 - transitivePeerDependencies: - - supports-color - - '@unocss/preset-mini@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/preset-tagify@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/preset-typography@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/preset-uno@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - '@unocss/preset-mini': 0.45.18 - '@unocss/preset-wind': 0.45.18 - - '@unocss/preset-web-fonts@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - ohmyfetch: 0.4.18 - - '@unocss/preset-wind@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - '@unocss/preset-mini': 0.45.18 - - '@unocss/reset@0.45.18': {} - - '@unocss/scope@0.45.18': {} - - '@unocss/transformer-attributify-jsx@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/transformer-compile-class@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/transformer-directives@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - css-tree: 2.2.1 - - '@unocss/transformer-variant-group@0.45.18': - dependencies: - '@unocss/core': 0.45.18 - - '@unocss/vite@0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))': - dependencies: - '@ampproject/remapping': 2.2.0 - '@rollup/pluginutils': 4.2.1 - '@unocss/config': 0.45.18 - '@unocss/core': 0.45.18 - '@unocss/inspector': 0.45.18 - '@unocss/scope': 0.45.18 - '@unocss/transformer-directives': 0.45.18 - magic-string: 0.26.7 - vite: 5.4.11(@types/node@18.17.14)(terser@5.31.0) - '@vite-pwa/assets-generator@0.2.4': dependencies: cac: 6.7.14 @@ -8783,11 +7741,6 @@ snapshots: transitivePeerDependencies: - supports-color - '@vitejs/plugin-vue@3.1.0(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))(vue@3.5.12(typescript@4.8.2))': - dependencies: - vite: 5.4.11(@types/node@18.17.14)(terser@5.31.0) - vue: 3.5.12(typescript@4.8.2) - '@vitejs/plugin-vue@4.3.4(vite@5.0.10(@types/node@18.17.14)(terser@5.31.0))(vue@3.3.8(typescript@5.3.3))': dependencies: vite: 5.0.10(@types/node@18.17.14)(terser@5.31.0) @@ -8798,11 +7751,6 @@ snapshots: vite: 5.0.10(@types/node@18.17.14)(terser@5.31.0) vue: 3.3.8(typescript@5.3.3) - '@vitejs/plugin-vue@5.1.5(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))(vue@3.5.12(typescript@4.8.2))': - dependencies: - vite: 5.4.11(@types/node@18.17.14)(terser@5.31.0) - vue: 3.5.12(typescript@4.8.2) - '@vitest/expect@1.0.0-beta.4': dependencies: '@vitest/spy': 1.0.0-beta.4 @@ -8838,24 +7786,11 @@ snapshots: estree-walker: 2.0.2 source-map-js: 1.0.2 - '@vue/compiler-core@3.5.12': - dependencies: - '@babel/parser': 7.26.2 - '@vue/shared': 3.5.12 - entities: 4.5.0 - estree-walker: 2.0.2 - source-map-js: 1.2.1 - '@vue/compiler-dom@3.3.8': dependencies: '@vue/compiler-core': 3.3.8 '@vue/shared': 3.3.8 - '@vue/compiler-dom@3.5.12': - dependencies: - '@vue/compiler-core': 3.5.12 - '@vue/shared': 3.5.12 - '@vue/compiler-sfc@3.3.8': dependencies: '@babel/parser': 7.23.0 @@ -8869,48 +7804,13 @@ snapshots: postcss: 8.4.31 source-map-js: 1.0.2 - '@vue/compiler-sfc@3.5.12': - dependencies: - '@babel/parser': 7.26.2 - '@vue/compiler-core': 3.5.12 - '@vue/compiler-dom': 3.5.12 - '@vue/compiler-ssr': 3.5.12 - '@vue/shared': 3.5.12 - estree-walker: 2.0.2 - magic-string: 0.30.12 - postcss: 8.4.49 - source-map-js: 1.2.1 - '@vue/compiler-ssr@3.3.8': dependencies: '@vue/compiler-dom': 3.3.8 '@vue/shared': 3.3.8 - '@vue/compiler-ssr@3.5.12': - dependencies: - '@vue/compiler-dom': 3.5.12 - '@vue/shared': 3.5.12 - '@vue/devtools-api@6.5.0': {} - '@vue/devtools-api@7.6.4': - dependencies: - '@vue/devtools-kit': 7.6.4 - - '@vue/devtools-kit@7.6.4': - dependencies: - '@vue/devtools-shared': 7.6.4 - birpc: 0.2.19 - hookable: 5.5.3 - mitt: 3.0.1 - perfect-debounce: 1.0.0 - speakingurl: 14.0.1 - superjson: 2.2.1 - - '@vue/devtools-shared@7.6.4': - dependencies: - rfdc: 1.4.1 - '@vue/reactivity-transform@3.3.8': dependencies: '@babel/parser': 7.24.5 @@ -8923,59 +7823,25 @@ snapshots: dependencies: '@vue/shared': 3.3.8 - '@vue/reactivity@3.5.12': - dependencies: - '@vue/shared': 3.5.12 - '@vue/runtime-core@3.3.8': dependencies: '@vue/reactivity': 3.3.8 '@vue/shared': 3.3.8 - '@vue/runtime-core@3.5.12': - dependencies: - '@vue/reactivity': 3.5.12 - '@vue/shared': 3.5.12 - '@vue/runtime-dom@3.3.8': dependencies: '@vue/runtime-core': 3.3.8 '@vue/shared': 3.3.8 csstype: 3.1.2 - '@vue/runtime-dom@3.5.12': - dependencies: - '@vue/reactivity': 3.5.12 - '@vue/runtime-core': 3.5.12 - '@vue/shared': 3.5.12 - csstype: 3.1.3 - '@vue/server-renderer@3.3.8(vue@3.3.8(typescript@5.3.3))': dependencies: '@vue/compiler-ssr': 3.3.8 '@vue/shared': 3.3.8 vue: 3.3.8(typescript@5.3.3) - '@vue/server-renderer@3.5.12(vue@3.5.12(typescript@4.8.2))': - dependencies: - '@vue/compiler-ssr': 3.5.12 - '@vue/shared': 3.5.12 - vue: 3.5.12(typescript@4.8.2) - '@vue/shared@3.3.8': {} - '@vue/shared@3.5.12': {} - - '@vueuse/core@10.11.1(vue@3.5.12(typescript@4.8.2))': - dependencies: - '@types/web-bluetooth': 0.0.20 - '@vueuse/metadata': 10.11.1 - '@vueuse/shared': 10.11.1(vue@3.5.12(typescript@4.8.2)) - vue-demi: 0.14.10(vue@3.5.12(typescript@4.8.2)) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - '@vueuse/core@10.6.1(vue@3.3.8(typescript@5.3.3))': dependencies: '@types/web-bluetooth': 0.0.20 @@ -8986,40 +7852,8 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/core@9.2.0(vue@3.5.12(typescript@4.8.2))': - dependencies: - '@types/web-bluetooth': 0.0.15 - '@vueuse/metadata': 9.2.0 - '@vueuse/shared': 9.2.0(vue@3.5.12(typescript@4.8.2)) - vue-demi: 0.13.11(vue@3.5.12(typescript@4.8.2)) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - - '@vueuse/integrations@10.11.1(focus-trap@7.6.1)(vue@3.5.12(typescript@4.8.2))': - dependencies: - '@vueuse/core': 10.11.1(vue@3.5.12(typescript@4.8.2)) - '@vueuse/shared': 10.11.1(vue@3.5.12(typescript@4.8.2)) - vue-demi: 0.14.10(vue@3.5.12(typescript@4.8.2)) - optionalDependencies: - focus-trap: 7.6.1 - transitivePeerDependencies: - - '@vue/composition-api' - - vue - - '@vueuse/metadata@10.11.1': {} - '@vueuse/metadata@10.6.1': {} - '@vueuse/metadata@9.2.0': {} - - '@vueuse/shared@10.11.1(vue@3.5.12(typescript@4.8.2))': - dependencies: - vue-demi: 0.14.10(vue@3.5.12(typescript@4.8.2)) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - '@vueuse/shared@10.6.1(vue@3.3.8(typescript@5.3.3))': dependencies: vue-demi: 0.14.6(vue@3.3.8(typescript@5.3.3)) @@ -9027,13 +7861,6 @@ snapshots: - '@vue/composition-api' - vue - '@vueuse/shared@9.2.0(vue@3.5.12(typescript@4.8.2))': - dependencies: - vue-demi: 0.13.11(vue@3.5.12(typescript@4.8.2)) - transitivePeerDependencies: - - '@vue/composition-api' - - vue - abab@2.0.6: {} accepts@1.3.8: @@ -9060,8 +7887,6 @@ snapshots: acorn@8.11.2: {} - acorn@8.8.0: {} - agent-base@6.0.2: dependencies: debug: 4.3.6 @@ -9082,22 +7907,6 @@ snapshots: require-from-string: 2.0.2 uri-js: 4.4.1 - algoliasearch@5.13.0: - dependencies: - '@algolia/client-abtesting': 5.13.0 - '@algolia/client-analytics': 5.13.0 - '@algolia/client-common': 5.13.0 - '@algolia/client-insights': 5.13.0 - '@algolia/client-personalization': 5.13.0 - '@algolia/client-query-suggestions': 5.13.0 - '@algolia/client-search': 5.13.0 - '@algolia/ingestion': 1.13.0 - '@algolia/monitoring': 1.13.0 - '@algolia/recommend': 5.13.0 - '@algolia/requester-browser-xhr': 5.13.0 - '@algolia/requester-fetch': 5.13.0 - '@algolia/requester-node-http': 5.13.0 - ansi-regex@5.0.1: {} ansi-regex@6.0.1: {} @@ -9208,8 +8017,6 @@ snapshots: binary-extensions@2.2.0: {} - birpc@0.2.19: {} - bl@4.1.0: dependencies: buffer: 5.7.1 @@ -9338,8 +8145,6 @@ snapshots: caniuse-lite@1.0.30001614: {} - ccount@2.0.1: {} - chai@4.3.10: dependencies: assertion-error: 1.1.0 @@ -9361,12 +8166,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 - character-entities-html4@2.1.0: {} - character-entities-legacy@1.1.4: {} - character-entities-legacy@3.0.0: {} - character-entities@1.2.4: {} character-reference-invalid@1.1.4: {} @@ -9435,16 +8236,12 @@ snapshots: color-convert: 2.0.1 color-string: 1.9.1 - colorette@2.0.19: {} - colorette@2.0.20: {} combined-stream@1.0.8: dependencies: delayed-stream: 1.0.0 - comma-separated-tokens@2.0.3: {} - commander@2.20.3: {} commander@4.1.1: {} @@ -9477,8 +8274,6 @@ snapshots: dependencies: dotenv: 8.6.0 - consola@2.15.3: {} - consola@3.2.3: {} content-disposition@0.5.4: @@ -9493,10 +8288,6 @@ snapshots: cookie@0.5.0: {} - copy-anything@3.0.5: - dependencies: - is-what: 4.1.8 - core-js-compat@3.25.0: dependencies: browserslist: 4.23.0 @@ -9521,11 +8312,6 @@ snapshots: crypto-random-string@2.0.0: {} - css-tree@2.2.1: - dependencies: - mdn-data: 2.0.28 - source-map-js: 1.0.2 - css-tree@2.3.1: dependencies: mdn-data: 2.0.30 @@ -9545,8 +8331,6 @@ snapshots: csstype@3.1.2: {} - csstype@3.1.3: {} - data-urls@2.0.0: dependencies: abab: 2.0.6 @@ -9609,8 +8393,6 @@ snapshots: dequal@2.0.3: {} - destr@1.1.1: {} - destr@2.0.1: {} destroy@1.2.0: {} @@ -9623,10 +8405,6 @@ snapshots: devalue@4.2.0: {} - devlop@1.1.0: - dependencies: - dequal: 2.0.3 - diff-sequences@29.6.3: {} dir-glob@3.0.1: @@ -9649,8 +8427,6 @@ snapshots: dotenv@8.6.0: {} - duplexer@0.1.2: {} - eastasianwidth@0.2.0: {} ee-first@1.1.1: {} @@ -9673,8 +8449,6 @@ snapshots: dependencies: once: 1.4.0 - entities@4.5.0: {} - error-ex@1.3.2: dependencies: is-arrayish: 0.2.1 @@ -9730,10 +8504,6 @@ snapshots: es6-promise@3.3.1: {} - esbuild-register@3.3.3(esbuild@0.21.5): - dependencies: - esbuild: 0.21.5 - esbuild@0.18.20: optionalDependencies: '@esbuild/android-arm': 0.18.20 @@ -10261,10 +9031,6 @@ snapshots: flatted@3.2.7: {} - focus-trap@7.6.1: - dependencies: - tabbable: 6.2.0 - for-each@0.3.3: dependencies: is-callable: 1.2.7 @@ -10286,12 +9052,6 @@ snapshots: fs-constants@1.0.0: {} - fs-extra@10.1.0: - dependencies: - graceful-fs: 4.2.10 - jsonfile: 6.1.0 - universalify: 2.0.0 - fs-extra@9.1.0: dependencies: at-least-node: 1.0.0 @@ -10439,10 +9199,6 @@ snapshots: graphemer@1.4.0: {} - gzip-size@6.0.0: - dependencies: - duplexer: 0.1.2 - handle-thing@2.0.1: {} has-bigints@1.0.2: {} @@ -10467,26 +9223,6 @@ snapshots: dependencies: function-bind: 1.1.1 - hast-util-to-html@9.0.3: - dependencies: - '@types/hast': 3.0.4 - '@types/unist': 3.0.3 - ccount: 2.0.1 - comma-separated-tokens: 2.0.3 - hast-util-whitespace: 3.0.0 - html-void-elements: 3.0.0 - mdast-util-to-hast: 13.2.0 - property-information: 6.5.0 - space-separated-tokens: 2.0.2 - stringify-entities: 4.0.4 - zwitch: 2.0.4 - - hast-util-whitespace@3.0.0: - dependencies: - '@types/hast': 3.0.4 - - hookable@5.5.3: {} - hosted-git-info@2.8.9: {} hpack.js@2.1.6: @@ -10502,8 +9238,6 @@ snapshots: html-entities@2.3.3: {} - html-void-elements@3.0.0: {} - http-deceiver@1.2.7: {} http-errors@2.0.0: @@ -10624,10 +9358,6 @@ snapshots: is-callable@1.2.7: {} - is-core-module@2.11.0: - dependencies: - has: 1.0.3 - is-core-module@2.13.0: dependencies: has: 1.0.3 @@ -10829,8 +9559,6 @@ snapshots: load-tsconfig@0.2.3: {} - local-pkg@0.4.2: {} - local-pkg@0.4.3: {} local-pkg@0.5.0: @@ -10888,22 +9616,10 @@ snapshots: dependencies: sourcemap-codec: 1.4.8 - magic-string@0.26.3: - dependencies: - sourcemap-codec: 1.4.8 - - magic-string@0.26.7: - dependencies: - sourcemap-codec: 1.4.8 - magic-string@0.27.0: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - magic-string@0.30.12: - dependencies: - '@jridgewell/sourcemap-codec': 1.5.0 - magic-string@0.30.3: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 @@ -10912,8 +9628,6 @@ snapshots: dependencies: '@jridgewell/sourcemap-codec': 1.4.15 - mark.js@8.11.1: {} - mdast-util-from-markdown@0.8.5: dependencies: '@types/mdast': 3.0.10 @@ -10924,22 +9638,8 @@ snapshots: transitivePeerDependencies: - supports-color - mdast-util-to-hast@13.2.0: - dependencies: - '@types/hast': 3.0.4 - '@types/mdast': 4.0.4 - '@ungap/structured-clone': 1.2.0 - devlop: 1.1.0 - micromark-util-sanitize-uri: 2.0.0 - trim-lines: 3.0.1 - unist-util-position: 5.0.0 - unist-util-visit: 5.0.0 - vfile: 6.0.3 - mdast-util-to-string@2.0.0: {} - mdn-data@2.0.28: {} - mdn-data@2.0.30: {} media-typer@0.3.0: {} @@ -10956,23 +9656,6 @@ snapshots: methods@1.1.2: {} - micromark-util-character@2.1.0: - dependencies: - micromark-util-symbol: 2.0.0 - micromark-util-types: 2.0.0 - - micromark-util-encode@2.0.0: {} - - micromark-util-sanitize-uri@2.0.0: - dependencies: - micromark-util-character: 2.1.0 - micromark-util-encode: 2.0.0 - micromark-util-symbol: 2.0.0 - - micromark-util-symbol@2.0.0: {} - - micromark-util-types@2.0.0: {} - micromark@2.11.4: dependencies: debug: 4.3.6 @@ -11025,15 +9708,11 @@ snapshots: minipass@5.0.0: {} - minisearch@6.3.0: {} - minizlib@2.1.2: dependencies: minipass: 3.3.6 yallist: 4.0.0 - mitt@3.0.1: {} - mkdirp-classic@0.5.3: {} mkdirp@0.5.6: @@ -11083,8 +9762,6 @@ snapshots: node-addon-api@6.1.0: {} - node-fetch-native@0.1.4: {} - node-fetch-native@1.2.0: {} node-fetch@2.6.7: @@ -11150,13 +9827,6 @@ snapshots: ohash@1.1.2: {} - ohmyfetch@0.4.18: - dependencies: - destr: 1.1.1 - node-fetch-native: 0.1.4 - ufo: 0.8.5 - undici: 5.14.0 - on-finished@2.4.1: dependencies: ee-first: 1.1.1 @@ -11175,10 +9845,6 @@ snapshots: dependencies: mimic-fn: 4.0.0 - oniguruma-to-js@0.4.3: - dependencies: - regex: 4.4.0 - optionator@0.8.3: dependencies: deep-is: 0.1.4 @@ -11264,14 +9930,10 @@ snapshots: path-type@4.0.0: {} - pathe@0.3.7: {} - pathe@1.1.1: {} pathval@1.1.1: {} - perfect-debounce@0.1.3: {} - perfect-debounce@1.0.0: {} periscopic@3.1.0: @@ -11380,8 +10042,6 @@ snapshots: kleur: 3.0.3 sisteransi: 1.0.5 - property-information@6.5.0: {} - proxy-addr@2.0.7: dependencies: forwarded: 0.2.0 @@ -11515,8 +10175,6 @@ snapshots: dependencies: '@babel/runtime': 7.19.0 - regex@4.4.0: {} - regexp-tree@0.1.27: {} regexp.prototype.flags@1.4.3: @@ -11558,12 +10216,6 @@ snapshots: resolve-pkg-maps@1.0.0: {} - resolve@1.22.1: - dependencies: - is-core-module: 2.11.0 - path-parse: 1.0.7 - supports-preserve-symlinks-flag: 1.0.0 - resolve@1.22.8: dependencies: is-core-module: 2.13.0 @@ -11572,8 +10224,6 @@ snapshots: reusify@1.0.4: {} - rfdc@1.4.1: {} - rimraf@2.7.1: dependencies: glob: 7.2.3 @@ -11649,8 +10299,6 @@ snapshots: dependencies: loose-envify: 1.4.0 - search-insights@2.17.2: {} - select-hose@2.0.0: {} semver@5.7.1: {} @@ -11727,15 +10375,6 @@ snapshots: shebang-regex@3.0.0: {} - shiki@1.22.2: - dependencies: - '@shikijs/core': 1.22.2 - '@shikijs/engine-javascript': 1.22.2 - '@shikijs/engine-oniguruma': 1.22.2 - '@shikijs/types': 1.22.2 - '@shikijs/vscode-textmate': 9.3.0 - '@types/hast': 3.0.4 - side-channel@1.0.4: dependencies: call-bind: 1.0.2 @@ -11815,8 +10454,6 @@ snapshots: sourcemap-codec@1.4.8: {} - space-separated-tokens@2.0.2: {} - spdx-correct@3.1.1: dependencies: spdx-expression-parse: 3.0.1 @@ -11852,8 +10489,6 @@ snapshots: transitivePeerDependencies: - supports-color - speakingurl@14.0.1: {} - stackback@0.0.2: {} statuses@2.0.1: {} @@ -11918,11 +10553,6 @@ snapshots: dependencies: safe-buffer: 5.2.1 - stringify-entities@4.0.4: - dependencies: - character-entities-html4: 2.1.0 - character-entities-legacy: 3.0.0 - stringify-object@3.3.0: dependencies: get-own-enumerable-property-symbols: 3.0.2 @@ -11964,10 +10594,6 @@ snapshots: pirates: 4.0.5 ts-interface-checker: 0.1.13 - superjson@2.2.1: - dependencies: - copy-anything: 3.0.5 - supports-color@5.5.0: dependencies: has-flag: 3.0.0 @@ -12095,8 +10721,6 @@ snapshots: symbol-tree@3.2.4: {} - tabbable@6.2.0: {} - tar-fs@2.1.1: dependencies: chownr: 1.1.4 @@ -12206,8 +10830,6 @@ snapshots: tree-kill@1.2.2: {} - trim-lines@3.0.1: {} - ts-api-utils@1.0.3(typescript@5.3.3): dependencies: typescript: 5.3.3 @@ -12293,8 +10915,6 @@ snapshots: typescript@5.3.3: {} - ufo@0.8.5: {} - ufo@1.3.0: {} uglify-js@3.17.0: {} @@ -12332,95 +10952,16 @@ snapshots: dependencies: crypto-random-string: 2.0.0 - unist-util-is@6.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-position@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position@2.0.3: dependencies: '@types/unist': 2.0.6 - unist-util-stringify-position@4.0.0: - dependencies: - '@types/unist': 3.0.3 - - unist-util-visit-parents@6.0.1: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - - unist-util-visit@5.0.0: - dependencies: - '@types/unist': 3.0.3 - unist-util-is: 6.0.0 - unist-util-visit-parents: 6.0.1 - universalify@0.2.0: {} universalify@2.0.0: {} - unocss@0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)): - dependencies: - '@unocss/astro': 0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)) - '@unocss/cli': 0.45.18 - '@unocss/core': 0.45.18 - '@unocss/preset-attributify': 0.45.18 - '@unocss/preset-icons': 0.45.18 - '@unocss/preset-mini': 0.45.18 - '@unocss/preset-tagify': 0.45.18 - '@unocss/preset-typography': 0.45.18 - '@unocss/preset-uno': 0.45.18 - '@unocss/preset-web-fonts': 0.45.18 - '@unocss/preset-wind': 0.45.18 - '@unocss/reset': 0.45.18 - '@unocss/transformer-attributify-jsx': 0.45.18 - '@unocss/transformer-compile-class': 0.45.18 - '@unocss/transformer-directives': 0.45.18 - '@unocss/transformer-variant-group': 0.45.18 - '@unocss/vite': 0.45.18(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)) - transitivePeerDependencies: - - supports-color - - vite - unpipe@1.0.0: {} - unplugin-vue-components@0.22.4(@babel/parser@7.26.2)(esbuild@0.21.5)(rollup@4.26.0)(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))(vue@3.5.12(typescript@4.8.2)): - dependencies: - '@antfu/utils': 0.5.2 - '@rollup/pluginutils': 4.2.1 - chokidar: 3.5.3 - debug: 4.3.4 - fast-glob: 3.2.11 - local-pkg: 0.4.2 - magic-string: 0.26.3 - minimatch: 5.1.0 - resolve: 1.22.1 - unplugin: 0.9.5(esbuild@0.21.5)(rollup@4.26.0)(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)) - vue: 3.5.12(typescript@4.8.2) - optionalDependencies: - '@babel/parser': 7.26.2 - transitivePeerDependencies: - - esbuild - - rollup - - supports-color - - vite - - webpack - - unplugin@0.9.5(esbuild@0.21.5)(rollup@4.26.0)(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0)): - dependencies: - acorn: 8.8.0 - chokidar: 3.5.3 - webpack-sources: 3.2.3 - webpack-virtual-modules: 0.4.4 - optionalDependencies: - esbuild: 0.21.5 - rollup: 4.26.0 - vite: 5.4.11(@types/node@18.17.14)(terser@5.31.0) - upath@1.2.0: {} update-browserslist-db@1.0.11(browserslist@4.21.10): @@ -12461,16 +11002,6 @@ snapshots: vary@1.1.2: {} - vfile-message@4.0.2: - dependencies: - '@types/unist': 3.0.3 - unist-util-stringify-position: 4.0.0 - - vfile@6.0.3: - dependencies: - '@types/unist': 3.0.3 - vfile-message: 4.0.2 - vite-node@1.0.0-beta.4(@types/node@18.17.14)(terser@5.31.0): dependencies: cac: 6.7.14 @@ -12545,53 +11076,6 @@ snapshots: optionalDependencies: vite: 5.0.10(@types/node@18.17.14)(terser@5.31.0) - vitepress@1.0.1(@algolia/client-search@5.13.0)(@types/node@18.17.14)(@types/react@18.2.37)(postcss@8.4.49)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2)(terser@5.31.0)(typescript@4.8.2): - dependencies: - '@docsearch/css': 3.7.0 - '@docsearch/js': 3.7.0(@algolia/client-search@5.13.0)(@types/react@18.2.37)(react-dom@18.2.0(react@18.2.0))(react@18.2.0)(search-insights@2.17.2) - '@shikijs/core': 1.22.2 - '@shikijs/transformers': 1.22.2 - '@types/markdown-it': 13.0.9 - '@vitejs/plugin-vue': 5.1.5(vite@5.4.11(@types/node@18.17.14)(terser@5.31.0))(vue@3.5.12(typescript@4.8.2)) - '@vue/devtools-api': 7.6.4 - '@vueuse/core': 10.11.1(vue@3.5.12(typescript@4.8.2)) - '@vueuse/integrations': 10.11.1(focus-trap@7.6.1)(vue@3.5.12(typescript@4.8.2)) - focus-trap: 7.6.1 - mark.js: 8.11.1 - minisearch: 6.3.0 - shiki: 1.22.2 - vite: 5.4.11(@types/node@18.17.14)(terser@5.31.0) - vue: 3.5.12(typescript@4.8.2) - optionalDependencies: - postcss: 8.4.49 - transitivePeerDependencies: - - '@algolia/client-search' - - '@types/node' - - '@types/react' - - '@vue/composition-api' - - async-validator - - axios - - change-case - - drauu - - fuse.js - - idb-keyval - - jwt-decode - - less - - lightningcss - - nprogress - - qrcode - - react - - react-dom - - sass - - sass-embedded - - search-insights - - sortablejs - - stylus - - sugarss - - terser - - typescript - - universal-cookie - vitest@1.0.0-beta.4(@types/node@18.17.14)(jsdom@16.7.0(bufferutil@4.0.6)(utf-8-validate@5.0.9))(terser@5.31.0): dependencies: '@vitest/expect': 1.0.0-beta.4 @@ -12627,14 +11111,6 @@ snapshots: - supports-color - terser - vue-demi@0.13.11(vue@3.5.12(typescript@4.8.2)): - dependencies: - vue: 3.5.12(typescript@4.8.2) - - vue-demi@0.14.10(vue@3.5.12(typescript@4.8.2)): - dependencies: - vue: 3.5.12(typescript@4.8.2) - vue-demi@0.14.6(vue@3.3.8(typescript@5.3.3)): dependencies: vue: 3.3.8(typescript@5.3.3) @@ -12667,16 +11143,6 @@ snapshots: optionalDependencies: typescript: 5.3.3 - vue@3.5.12(typescript@4.8.2): - dependencies: - '@vue/compiler-dom': 3.5.12 - '@vue/compiler-sfc': 3.5.12 - '@vue/runtime-dom': 3.5.12 - '@vue/server-renderer': 3.5.12(vue@3.5.12(typescript@4.8.2)) - '@vue/shared': 3.5.12 - optionalDependencies: - typescript: 4.8.2 - w3c-hr-time@1.0.2: dependencies: browser-process-hrtime: 1.0.0 @@ -12697,10 +11163,6 @@ snapshots: webidl-conversions@6.1.0: {} - webpack-sources@3.2.3: {} - - webpack-virtual-modules@0.4.4: {} - whatwg-encoding@1.0.5: dependencies: iconv-lite: 0.4.24 @@ -12965,5 +11427,3 @@ snapshots: yocto-queue@0.1.0: {} yocto-queue@1.0.0: {} - - zwitch@2.0.4: {} diff --git a/pnpm-workspace.yaml b/pnpm-workspace.yaml index 618a46c0..fe455acd 100644 --- a/pnpm-workspace.yaml +++ b/pnpm-workspace.yaml @@ -1,3 +1,2 @@ packages: - - docs/ - examples/*