From 0172d819f7882db3dd4f1350c01e5d728924bc86 Mon Sep 17 00:00:00 2001 From: Echo Date: Wed, 3 Jun 2026 15:17:21 +0200 Subject: [PATCH] Remove PWA plugin (#39250) --- app/javascript/mastodon/main.tsx | 43 +- .../mastodon/service_worker/caching.test.ts | 390 +++++++ .../mastodon/service_worker/caching.ts | 143 +++ app/javascript/mastodon/service_worker/sw.js | 88 -- app/javascript/mastodon/service_worker/sw.ts | 22 + package.json | 8 +- vite.config.mts | 36 +- yarn.lock | 979 +----------------- 8 files changed, 618 insertions(+), 1091 deletions(-) create mode 100644 app/javascript/mastodon/service_worker/caching.test.ts create mode 100644 app/javascript/mastodon/service_worker/caching.ts delete mode 100644 app/javascript/mastodon/service_worker/sw.js create mode 100644 app/javascript/mastodon/service_worker/sw.ts diff --git a/app/javascript/mastodon/main.tsx b/app/javascript/mastodon/main.tsx index ccefd7f366..c87eeb40ce 100644 --- a/app/javascript/mastodon/main.tsx +++ b/app/javascript/mastodon/main.tsx @@ -10,7 +10,7 @@ import { me, reduceMotion } from 'mastodon/initial_state'; import ready from 'mastodon/ready'; import { store } from 'mastodon/store'; -import { isProduction, isDevelopment } from './utils/environment'; +import { isDevelopment, isProduction } from './utils/environment'; function main() { perf.start('main()'); @@ -41,29 +41,30 @@ function main() { ); store.dispatch(setupBrowserNotifications()); - if (isProduction() && me && 'serviceWorker' in navigator) { - const { Workbox } = await import('workbox-window'); - const wb = new Workbox( - isDevelopment() ? '/packs-dev/dev-sw.js?dev-sw' : '/sw.js', - { type: 'module', scope: '/' }, - ); - let registration; - - try { - registration = await wb.register(); - } catch (err) { - console.error(err); + if ( + me && + 'serviceWorker' in navigator && + (isDevelopment() || isProduction()) // Disallow testing environment + ) { + let swPath = '/sw.js'; + if (isDevelopment()) { + const { default: swDevUrl } = + await import('@/mastodon/service_worker/sw?url'); + swPath = swDevUrl; } - if ( - registration && - 'Notification' in window && - Notification.permission === 'granted' - ) { - const registerPushNotifications = - await import('mastodon/actions/push_notifications'); + await navigator.serviceWorker.register(swPath, { + scope: '/', + type: 'module', + }); - store.dispatch(registerPushNotifications.register()); + if (isProduction()) { + if ('Notification' in window && Notification.permission === 'granted') { + const registerPushNotifications = + await import('mastodon/actions/push_notifications'); + + store.dispatch(registerPushNotifications.register()); + } } } diff --git a/app/javascript/mastodon/service_worker/caching.test.ts b/app/javascript/mastodon/service_worker/caching.test.ts new file mode 100644 index 0000000000..3d67604c35 --- /dev/null +++ b/app/javascript/mastodon/service_worker/caching.test.ts @@ -0,0 +1,390 @@ +import { DAY } from '../utils/time'; + +import { expireCachedItems, handleFetch } from './caching'; + +const now = 1_700_000_000_000; + +describe('expireCachedItems', () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(now); + }); + + afterEach(() => { + vi.useRealTimers(); + vi.unstubAllGlobals(); + }); + + test('deletes expired entries and requests without a cached response', async () => { + const cache = new MockCache(); + const missingRequest = new Request('https://example.com/missing'); + + cache.set('/fresh', now - DAY); + cache.set('/expired', now - DAY * 31); + cache.store.set(missingRequest.url, { request: missingRequest }); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(cache), + }); + + await expireCachedItems({ name: 'images', ttl: DAY * 30, max: 5 }); + + expect(Array.from(cache.store.keys())).toEqual([ + 'https://example.com/fresh', + ]); + }); + + test('trims the oldest valid entries when the cache exceeds max size', async () => { + const cache = new MockCache(); + + cache.set('/oldest', now - DAY * 3); + cache.set('/older', now - DAY * 2); + cache.set('/newest', now - DAY); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(cache), + }); + + await expireCachedItems({ name: 'images', ttl: DAY * 30, max: 2 }); + + expect(Array.from(cache.store.keys())).toEqual([ + 'https://example.com/older', + 'https://example.com/newest', + ]); + }); + + test('keeps entries without a timestamp header over timestamped entries', async () => { + const cache = new MockCache(); + const untimestampedRequest = new Request('https://example.com/no-header'); + + cache.store.set(untimestampedRequest.url, { + request: untimestampedRequest, + response: createResponse(), + }); + cache.set('/older', now - DAY * 2); + cache.set('/newer', now - DAY); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(cache), + }); + + await expireCachedItems({ name: 'images', ttl: DAY * 30, max: 2 }); + + expect(Array.from(cache.store.keys())).toEqual([ + 'https://example.com/no-header', + 'https://example.com/newer', + ]); + }); +}); + +describe('handleFetch', () => { + beforeEach(() => { + vi.useFakeTimers(); + vi.setSystemTime(now); + }); + + afterEach(() => { + vi.useRealTimers(); + vi.unstubAllGlobals(); + }); + + test('serves cached images without hitting the network while the TTL is valid', async () => { + const imageCache = new MockCache(); + const request = createRequest('/test.png', 'image'); + const cachedResponse = createResponse(now - DAY); + + imageCache.store.set(request.url, { request, response: cachedResponse }); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(imageCache), + }); + + const fetch = vi.fn(); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent(request); + + handleFetch(event); + + await expect(respondWith()).resolves.toBe(cachedResponse); + expect(fetch).not.toHaveBeenCalled(); + }); + + test('fetches stale cached images from the network and stores a refreshed response', async () => { + const imageCache = new MockCache(); + const request = createRequest('/stale.png', 'image'); + const networkResponse = new Response('fresh', { + headers: { 'content-type': 'image/png' }, + status: 200, + statusText: 'OK', + }); + const putSpy = vi.spyOn(imageCache, 'put'); + + imageCache.store.set(request.url, { + request, + response: createResponse(now - DAY * 8), + }); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(imageCache), + }); + + const fetch = vi.fn().mockResolvedValue(networkResponse); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent(request); + + handleFetch(event); + + await expect(respondWith()).resolves.toBe(networkResponse); + expect(fetch).toHaveBeenCalledWith(request); + expect(putSpy).toHaveBeenCalledWith(request, expect.any(Response)); + expect( + imageCache.store.get(request.url)?.response?.headers.get('x-timestamp'), + ).toBe(now.toString()); + }); + + test('does not cache opaque image responses with status zero', async () => { + const imageCache = new MockCache(); + const request = createRequest('/opaque.png', 'image'); + const opaqueResponse = Response.error(); + const putSpy = vi.spyOn(imageCache, 'put'); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(imageCache), + }); + + const fetch = vi.fn().mockResolvedValue(opaqueResponse); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent(request); + + handleFetch(event); + + await expect(respondWith()).resolves.toBe(opaqueResponse); + expect(fetch).toHaveBeenCalledWith(request); + expect(putSpy).not.toHaveBeenCalled(); + expect(imageCache.store.size).toBe(0); + }); + + test.each([ + ['/intl/en.js', '', 'mastodon-locales'], + ['/fonts/mastodon.woff2', 'font', 'mastodon-fonts'], + ])( + 'routes %s requests through %s', + async (pathname, destination, cacheName) => { + const cache = new MockCache(); + const request = createRequest(pathname, destination); + const networkResponse = new Response('asset', { status: 200 }); + const open = vi.fn().mockImplementation((name: string) => { + expect(name).toBe(cacheName); + return Promise.resolve(cache); + }); + + vi.stubGlobal('caches', { open }); + + const fetch = vi.fn().mockResolvedValue(networkResponse); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent(request); + + handleFetch(event); + + await expect(respondWith()).resolves.toBe(networkResponse); + expect(fetch).toHaveBeenCalledWith(request); + expect(open).toHaveBeenCalledWith(cacheName); + }, + ); + + test('clears the root cache after a successful logout request', async () => { + const webCache = new MockCache(); + const deleteSpy = vi.spyOn(webCache, 'delete'); + + vi.stubGlobal('caches', { + open: vi.fn().mockImplementation((name: string) => { + expect(name).toBe('mastodon-web'); + return Promise.resolve(webCache); + }), + }); + + const fetch = vi + .fn() + .mockResolvedValue(new Response(null, { status: 200 })); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent( + createRequest('/auth/sign_out'), + ); + + handleFetch(event); + + await expect(respondWith()).resolves.toBeInstanceOf(Response); + expect(deleteSpy).toHaveBeenCalledWith('/'); + }); + + test('does not clear the root cache after a failed logout request', async () => { + const webCache = new MockCache(); + const deleteSpy = vi.spyOn(webCache, 'delete'); + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(webCache), + }); + + const fetch = vi + .fn() + .mockResolvedValue( + new Response(null, { status: 500, statusText: 'Error' }), + ); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent( + createRequest('/auth/sign_out'), + ); + + handleFetch(event); + + await expect(respondWith()).resolves.toBeInstanceOf(Response); + expect(deleteSpy).not.toHaveBeenCalled(); + }); + + test('clears the root cache for opaqueredirect logout responses', async () => { + const webCache = new MockCache(); + const deleteSpy = vi.spyOn(webCache, 'delete'); + const opaqueRedirectResponse = { + ok: false, + type: 'opaqueredirect', + } as Response; + + vi.stubGlobal('caches', { + open: vi.fn().mockResolvedValue(webCache), + }); + + const fetch = vi.fn().mockResolvedValue(opaqueRedirectResponse); + vi.stubGlobal('fetch', fetch); + + const { event, respondWith } = createFetchEvent( + createRequest('/auth/sign_out'), + ); + + handleFetch(event); + + await expect(respondWith()).resolves.toBe(opaqueRedirectResponse); + expect(deleteSpy).toHaveBeenCalledWith('/'); + }); + + test('ignores requests that are not handled by the service worker cache', () => { + const { event, respondWith, respondWithMock } = createFetchEvent( + createRequest('/api/v1/timelines/home'), + ); + + handleFetch(event); + + expect(respondWithMock).not.toHaveBeenCalled(); + expect(respondWith()).toBeUndefined(); + }); +}); + +interface CacheEntry { + request: Request; + response?: Response; +} + +class MockCache implements Cache { + public readonly store = new Map(); + + private normalizeRequest(request: RequestInfo | URL) { + if (request instanceof Request) { + return request.url; + } + + return request.toString(); + } + + add(): Promise { + return Promise.reject(new Error('Not implemented')); + } + + addAll(): Promise { + return Promise.reject(new Error('Not implemented')); + } + + delete(request: RequestInfo | URL): Promise { + return Promise.resolve(this.store.delete(this.normalizeRequest(request))); + } + + keys(): Promise { + return Promise.resolve( + Array.from(this.store.values(), ({ request }) => request), + ); + } + + match(request: RequestInfo | URL): Promise { + return Promise.resolve( + this.store.get(this.normalizeRequest(request))?.response, + ); + } + + matchAll(): Promise { + return Promise.reject(new Error('Not implemented')); + } + + put(request: RequestInfo | URL, response: Response): Promise { + const normalizedRequest = + request instanceof Request ? request : new Request(request); + + this.store.set(this.normalizeRequest(normalizedRequest), { + request: normalizedRequest, + response, + }); + + return Promise.resolve(); + } + + set(pathname: string, timestamp?: number) { + const request = new Request(`https://example.com${pathname}`); + + this.store.set(request.url, { + request, + response: createResponse(timestamp), + }); + + return request; + } +} + +function createResponse(timestamp?: number) { + const headers = new Headers(); + + if (timestamp !== undefined) { + headers.set('x-timestamp', timestamp.toString()); + } + + return new Response('body', { headers }); +} + +function createRequest(pathname: string, destination = '') { + const request = new Request(`https://example.com${pathname}`); + + Object.defineProperty(request, 'destination', { + value: destination, + configurable: true, + }); + + return request; +} + +function createFetchEvent(request: Request) { + let responsePromise: Promise | undefined; + const respondWith = vi.fn((response: Response | Promise) => { + responsePromise = Promise.resolve(response); + }); + + return { + event: { + request, + respondWith, + } as unknown as FetchEvent, + respondWith: () => responsePromise, + respondWithMock: respondWith, + }; +} diff --git a/app/javascript/mastodon/service_worker/caching.ts b/app/javascript/mastodon/service_worker/caching.ts new file mode 100644 index 0000000000..96c2898dd7 --- /dev/null +++ b/app/javascript/mastodon/service_worker/caching.ts @@ -0,0 +1,143 @@ +/// +/// + +import { DAY } from '../utils/time'; + +const CACHE_NAME_PREFIX = 'mastodon-'; +const CACHE_HEADER_TTL = 'x-timestamp'; + +export async function cacheRoot() { + const cache = await openWebCache(); + const response = await fetch('/', { + credentials: 'include', + redirect: 'manual', + }); + await cache.put('/', response); +} + +export function handleFetch(event: FetchEvent) { + const url = new URL(event.request.url); + + if (url.pathname === '/auth/sign_out') { + event.respondWith(handleLogout(event)); + } else if (/intl\/.*\.js$/.test(url.pathname)) { + event.respondWith(cacheFirst({ event, name: 'locales' })); + } else if (event.request.destination === 'font') { + event.respondWith(cacheFirst({ event, name: 'fonts' })); + } else if (event.request.destination === 'image') { + event.respondWith(cacheFirst({ event, name: 'images', ttl: DAY * 7 })); + } +} + +async function cacheFirst({ + event, + name, + ttl = DAY * 30, + max = 5, +}: { + event: FetchEvent; + name: string; + ttl?: number; + max?: number; +}) { + const cache = await caches.open(`${CACHE_NAME_PREFIX}${name}`); + const request = event.request; + const cachedResponse = await cache.match(request); + + // Start expiring cache items while the process continues. + void expireCachedItems({ name, ttl, max }); + + if (cachedResponse) { + // If we have a cached response, check the TTL header. + const ttlHeader = Number.parseInt( + cachedResponse.headers.get(CACHE_HEADER_TTL) ?? '0', + ); + + if (!ttlHeader || ttlHeader + ttl > Date.now()) { + return cachedResponse; + } + } + + const networkResponse = await fetch(request); + + // For opaque responses, the status will be zero so we can't clone them. + if (networkResponse.status !== 0) { + // Clone request with a custom header to store timestamp. + const cloneHeaders = new Headers(networkResponse.headers); + cloneHeaders.set(CACHE_HEADER_TTL, Date.now().toString()); + + const cloneResponse = new Response(networkResponse.clone().body, { + headers: cloneHeaders, + status: networkResponse.status, + statusText: networkResponse.statusText, + }); + + await cache.put(request, cloneResponse); + } + + return networkResponse; +} + +export async function expireCachedItems({ + name, + ttl = DAY * 30, + max = 5, +}: { + name: string; + ttl?: number; + max?: number; +}) { + const cache = await caches.open(`${CACHE_NAME_PREFIX}${name}`); + + const keys = await cache.keys(); + const now = Date.now(); + const validKeys: { key: Request; timestamp: number }[] = []; + + for (const key of keys) { + const cachedResponse = await cache.match(key); + + if (!cachedResponse) { + await cache.delete(key); + continue; + } + + const timestamp = Number.parseInt( + cachedResponse.headers.get(CACHE_HEADER_TTL) ?? '0', + ); + + if (!timestamp || timestamp + ttl > now) { + validKeys.push({ key, timestamp: timestamp || Number.POSITIVE_INFINITY }); + continue; + } + + await cache.delete(key); + } + + if (validKeys.length <= max) { + return; + } + + const sortedValidKeys = validKeys.toSorted( + ({ timestamp: a }, { timestamp: b }) => a - b, + ); + await Promise.all( + sortedValidKeys + .slice(0, sortedValidKeys.length - max) + .map(({ key }) => cache.delete(key)), + ); +} + +function openWebCache() { + return caches.open(`${CACHE_NAME_PREFIX}web`); +} + +async function handleLogout(event: FetchEvent) { + const response = await fetch(event.request); + + if (response.ok || response.type === 'opaqueredirect') { + const cache = await openWebCache(); + await cache.delete('/'); + } + + return response; +} diff --git a/app/javascript/mastodon/service_worker/sw.js b/app/javascript/mastodon/service_worker/sw.js deleted file mode 100644 index 9c153b123f..0000000000 --- a/app/javascript/mastodon/service_worker/sw.js +++ /dev/null @@ -1,88 +0,0 @@ -import { ExpirationPlugin } from 'workbox-expiration'; -import { registerRoute } from 'workbox-routing'; -import { CacheFirst } from 'workbox-strategies'; - -import { handleNotificationClick, handlePush } from './web_push_notifications'; - -const CACHE_NAME_PREFIX = 'mastodon-'; - -function openWebCache() { - return caches.open(`${CACHE_NAME_PREFIX}web`); -} - -function fetchRoot() { - return fetch('/', { credentials: 'include', redirect: 'manual' }); -} - - -registerRoute( - /intl\/.*\.js$/, - new CacheFirst({ - cacheName: `${CACHE_NAME_PREFIX}locales`, - plugins: [ - new ExpirationPlugin({ - maxAgeSeconds: 30 * 24 * 60 * 60, // 1 month - maxEntries: 5, - }), - ], - }), -); - -registerRoute( - ({ request }) => request.destination === 'font', - new CacheFirst({ - cacheName: `${CACHE_NAME_PREFIX}fonts`, - plugins: [ - new ExpirationPlugin({ - maxAgeSeconds: 30 * 24 * 60 * 60, // 1 month - maxEntries: 5, - }), - ], - }), -); - -registerRoute( - ({ request }) => request.destination === 'image', - new CacheFirst({ - cacheName: `m${CACHE_NAME_PREFIX}media`, - plugins: [ - new ExpirationPlugin({ - maxAgeSeconds: 7 * 24 * 60 * 60, // 1 week - maxEntries: 256, - }), - ], - }), -); - -// Cause a new version of a registered Service Worker to replace an existing one -// that is already installed, and replace the currently active worker on open pages. -self.addEventListener('install', function(event) { - event.waitUntil(Promise.all([openWebCache(), fetchRoot()]).then(([cache, root]) => cache.put('/', root))); -}); - -self.addEventListener('activate', function(event) { - event.waitUntil(self.clients.claim()); -}); - -self.addEventListener('fetch', function(event) { - const url = new URL(event.request.url); - - if (url.pathname === '/auth/sign_out') { - const asyncResponse = fetch(event.request); - const asyncCache = openWebCache(); - - event.respondWith(asyncResponse.then(response => { - if (response.ok || response.type === 'opaqueredirect') { - return Promise.all([ - asyncCache.then(cache => cache.delete('/')), - indexedDB.deleteDatabase('mastodon'), - ]).then(() => response); - } - - return response; - })); - } -}); - -self.addEventListener('push', handlePush); -self.addEventListener('notificationclick', handleNotificationClick); diff --git a/app/javascript/mastodon/service_worker/sw.ts b/app/javascript/mastodon/service_worker/sw.ts new file mode 100644 index 0000000000..d86bb6d585 --- /dev/null +++ b/app/javascript/mastodon/service_worker/sw.ts @@ -0,0 +1,22 @@ +/// +/// + +import { cacheRoot, handleFetch } from './caching'; +import { handleNotificationClick, handlePush } from './web_push_notifications'; + +declare const self: ServiceWorkerGlobalScope; + +// Cause a new version of a registered Service Worker to replace an existing one +// that is already installed, and replace the currently active worker on open pages. +self.addEventListener('install', (event) => { + event.waitUntil(cacheRoot()); +}); + +self.addEventListener('activate', (event) => { + event.waitUntil(self.clients.claim()); +}); + +self.addEventListener('fetch', handleFetch); + +self.addEventListener('push', handlePush); +self.addEventListener('notificationclick', handleNotificationClick); diff --git a/package.json b/package.json index 54229c4aa0..af9928e6c4 100644 --- a/package.json +++ b/package.json @@ -115,19 +115,15 @@ "stacktrace-js": "^2.0.2", "stringz": "^2.1.0", "substring-trie": "^1.0.2", + "terser": "^5.48.0", "tesseract.js": "^7.0.0", "tiny-queue": "^0.2.1", "twitter-text": "3.1.0", "use-debounce": "^10.0.0", "vite": "^8.0.0", "vite-plugin-manifest-sri": "^0.2.0", - "vite-plugin-pwa": "^1.2.0", "vite-plugin-svgr": "^5.0.0", - "wicg-inert": "^3.1.2", - "workbox-expiration": "^7.3.0", - "workbox-routing": "^7.3.0", - "workbox-strategies": "^7.3.0", - "workbox-window": "^7.3.0" + "wicg-inert": "^3.1.2" }, "devDependencies": { "@eslint/js": "^9.39.2", diff --git a/vite.config.mts b/vite.config.mts index 8424471867..06d6ab1990 100644 --- a/vite.config.mts +++ b/vite.config.mts @@ -17,7 +17,6 @@ import { UserConfig, } from 'vite'; import manifestSRI from 'vite-plugin-manifest-sri'; -import { VitePWA } from 'vite-plugin-pwa'; import svgr from 'vite-plugin-svgr'; import { MastodonAssetsManifest } from './config/vite/plugin-assets-manifest'; @@ -155,6 +154,14 @@ export const config: UserConfigFnPromise = async ({ mode, command }) => { } return '[name]-[hash].js'; }, + entryFileNames({ name }) { + // If this is the service worker, don't add the hash to the name. + if (name === 'sw') { + return '[name].js'; + } + // Otherwise, use the same value as chunkFileNames. + return '[name]-[hash].js'; + }, }, }, }, @@ -188,29 +195,6 @@ export const config: UserConfigFnPromise = async ({ mode, command }) => { manifestSRI({ manifestPaths: ['.vite/manifest.json'], }), - VitePWA({ - srcDir: path.resolve(jsRoot, 'mastodon/service_worker'), - // We need to use injectManifest because we use our own service worker - strategies: 'injectManifest', - manifest: false, - injectRegister: false, - injectManifest: { - // Do not inject a manifest, we don't use precache - injectionPoint: undefined, - buildPlugins: { - vite: [ - // Provide a virtual import with only the locales used in the ServiceWorker - MastodonServiceWorkerLocales(), - ], - }, - }, - // Force the output location, because we have a symlink in `public/sw.js` - outDir: path.resolve(__dirname, 'public/packs'), - devOptions: { - enabled: true, - type: 'module', - }, - }), svgr(), // Old library types need to be converted optimizeLodashImports() as PluginOption, @@ -224,7 +208,9 @@ export const config: UserConfigFnPromise = async ({ mode, command }) => { }; async function findEntrypoints() { - const entrypoints: Record = {}; + const entrypoints: Record = { + sw: path.resolve(jsRoot, 'mastodon/service_worker/sw.ts'), + }; // First, JS entrypoints const jsEntrypointsDir = path.resolve(jsRoot, 'entrypoints'); diff --git a/yarn.lock b/yarn.lock index 6d194fc5b8..c27f3c70bd 100644 --- a/yarn.lock +++ b/yarn.lock @@ -26,19 +26,6 @@ __metadata: languageName: node linkType: hard -"@apideck/better-ajv-errors@npm:^0.3.1": - version: 0.3.6 - resolution: "@apideck/better-ajv-errors@npm:0.3.6" - dependencies: - json-schema: "npm:^0.4.0" - jsonpointer: "npm:^5.0.0" - leven: "npm:^3.1.0" - peerDependencies: - ajv: ">=8" - checksum: 10c0/f89a1e16ecbc2ada91c56d4391c8345471e385f0b9c38d62c3bccac40ec94482cdfa496d4c2fe0af411e9851a9931c0d5042a8040f52213f603ba6b6fd7f949b - languageName: node - linkType: hard - "@asamuzakjp/css-color@npm:^5.1.11": version: 5.1.11 resolution: "@asamuzakjp/css-color@npm:5.1.11" @@ -217,7 +204,7 @@ __metadata: languageName: node linkType: hard -"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.18.6, @babel/helper-module-imports@npm:^7.28.6": +"@babel/helper-module-imports@npm:^7.16.7, @babel/helper-module-imports@npm:^7.28.6": version: 7.28.6 resolution: "@babel/helper-module-imports@npm:7.28.6" dependencies: @@ -1060,7 +1047,7 @@ __metadata: languageName: node linkType: hard -"@babel/preset-env@npm:^7.11.0, @babel/preset-env@npm:^7.29.5": +"@babel/preset-env@npm:^7.29.5": version: 7.29.5 resolution: "@babel/preset-env@npm:7.29.5" dependencies: @@ -1154,7 +1141,7 @@ __metadata: languageName: node linkType: hard -"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.11.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": +"@babel/runtime@npm:^7.0.0, @babel/runtime@npm:^7.1.2, @babel/runtime@npm:^7.12.0, @babel/runtime@npm:^7.12.13, @babel/runtime@npm:^7.12.5, @babel/runtime@npm:^7.13.8, @babel/runtime@npm:^7.18.3, @babel/runtime@npm:^7.20.13, @babel/runtime@npm:^7.3.1, @babel/runtime@npm:^7.5.5, @babel/runtime@npm:^7.6.3, @babel/runtime@npm:^7.8.7, @babel/runtime@npm:^7.9.2": version: 7.27.0 resolution: "@babel/runtime@npm:7.27.0" dependencies: @@ -2842,12 +2829,12 @@ __metadata: linkType: hard "@jridgewell/source-map@npm:^0.3.3": - version: 0.3.6 - resolution: "@jridgewell/source-map@npm:0.3.6" + version: 0.3.11 + resolution: "@jridgewell/source-map@npm:0.3.11" dependencies: "@jridgewell/gen-mapping": "npm:^0.3.5" "@jridgewell/trace-mapping": "npm:^0.3.25" - checksum: 10c0/6a4ecc713ed246ff8e5bdcc1ef7c49aaa93f7463d948ba5054dda18b02dcc6a055e2828c577bcceee058f302ce1fc95595713d44f5c45e43d459f88d267f2f04 + checksum: 10c0/50a4fdafe0b8f655cb2877e59fe81320272eaa4ccdbe6b9b87f10614b2220399ae3e05c16137a59db1f189523b42c7f88bd097ee991dbd7bc0e01113c583e844 languageName: node linkType: hard @@ -3021,6 +3008,7 @@ __metadata: stylelint: "npm:^17.0.0" stylelint-config-standard-scss: "npm:^17.0.0" substring-trie: "npm:^1.0.2" + terser: "npm:^5.48.0" tesseract.js: "npm:^7.0.0" tiny-queue: "npm:^0.2.1" twitter-text: "npm:3.1.0" @@ -3030,14 +3018,9 @@ __metadata: use-debounce: "npm:^10.0.0" vite: "npm:^8.0.0" vite-plugin-manifest-sri: "npm:^0.2.0" - vite-plugin-pwa: "npm:^1.2.0" vite-plugin-svgr: "npm:^5.0.0" vitest: "npm:^4.1.7" wicg-inert: "npm:^3.1.2" - workbox-expiration: "npm:^7.3.0" - workbox-routing: "npm:^7.3.0" - workbox-strategies: "npm:^7.3.0" - workbox-window: "npm:^7.3.0" peerDependenciesMeta: react: optional: true @@ -3927,75 +3910,7 @@ __metadata: languageName: node linkType: hard -"@rollup/plugin-babel@npm:^6.1.0": - version: 6.1.0 - resolution: "@rollup/plugin-babel@npm:6.1.0" - dependencies: - "@babel/helper-module-imports": "npm:^7.18.6" - "@rollup/pluginutils": "npm:^5.0.1" - peerDependencies: - "@babel/core": ^7.0.0 - "@types/babel__core": ^7.1.9 - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - "@types/babel__core": - optional: true - rollup: - optional: true - checksum: 10c0/68bc1a3689552992c3443e43a95ac14ac4e271079a5a18e252d8113358236e9c91fe514dad7a42b84581214f8714ec1f46fd99a5d9cc5a6a1e7456367ee4d6d4 - languageName: node - linkType: hard - -"@rollup/plugin-node-resolve@npm:^16.0.3": - version: 16.0.3 - resolution: "@rollup/plugin-node-resolve@npm:16.0.3" - dependencies: - "@rollup/pluginutils": "npm:^5.0.1" - "@types/resolve": "npm:1.20.2" - deepmerge: "npm:^4.2.2" - is-module: "npm:^1.0.0" - resolve: "npm:^1.22.1" - peerDependencies: - rollup: ^2.78.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10c0/5bafff8e51cd28b5b3b8f415c30a893f5bfdb1a54469e00b3dc6530f26051620f3dfa172f40544361948b46cc3070cb34fd44ade66d38c0677d74c846fbc58dc - languageName: node - linkType: hard - -"@rollup/plugin-replace@npm:^6.0.3": - version: 6.0.3 - resolution: "@rollup/plugin-replace@npm:6.0.3" - dependencies: - "@rollup/pluginutils": "npm:^5.0.1" - magic-string: "npm:^0.30.3" - peerDependencies: - rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10c0/93217c52fe86b03363bc534b5f07963ac4fd6b91f19f6070a66809b0c65a036b3b234624a65a8bfcc01a8dc0e42838feae03c021b0d1e5e91753c503c4d70cd6 - languageName: node - linkType: hard - -"@rollup/plugin-terser@npm:^1.0.0": - version: 1.0.0 - resolution: "@rollup/plugin-terser@npm:1.0.0" - dependencies: - serialize-javascript: "npm:^7.0.3" - smob: "npm:^1.0.0" - terser: "npm:^5.17.4" - peerDependencies: - rollup: ^2.0.0||^3.0.0||^4.0.0 - peerDependenciesMeta: - rollup: - optional: true - checksum: 10c0/08be445cc2e0677132ee06cdebbcd1b6cd3ab22e220fcd89d8a22eaf9ee501a940f425931ac65c65ab113803ad31a895f2575716248609c882c8e562fd6cc2d4 - languageName: node - linkType: hard - -"@rollup/pluginutils@npm:^5.0.1, @rollup/pluginutils@npm:^5.0.2, @rollup/pluginutils@npm:^5.1.0, @rollup/pluginutils@npm:^5.3.0": +"@rollup/pluginutils@npm:^5.0.2, @rollup/pluginutils@npm:^5.1.0, @rollup/pluginutils@npm:^5.3.0": version: 5.3.0 resolution: "@rollup/pluginutils@npm:5.3.0" dependencies: @@ -4011,181 +3926,6 @@ __metadata: languageName: node linkType: hard -"@rollup/rollup-android-arm-eabi@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-android-arm-eabi@npm:4.60.3" - conditions: os=android & cpu=arm - languageName: node - linkType: hard - -"@rollup/rollup-android-arm64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-android-arm64@npm:4.60.3" - conditions: os=android & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-arm64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-darwin-arm64@npm:4.60.3" - conditions: os=darwin & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-darwin-x64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-darwin-x64@npm:4.60.3" - conditions: os=darwin & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-arm64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-freebsd-arm64@npm:4.60.3" - conditions: os=freebsd & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-freebsd-x64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-freebsd-x64@npm:4.60.3" - conditions: os=freebsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-arm-gnueabihf@npm:4.60.3" - conditions: os=linux & cpu=arm & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm-musleabihf@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-arm-musleabihf@npm:4.60.3" - conditions: os=linux & cpu=arm & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-arm64-gnu@npm:4.60.3" - conditions: os=linux & cpu=arm64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-arm64-musl@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-arm64-musl@npm:4.60.3" - conditions: os=linux & cpu=arm64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-loong64-gnu@npm:4.60.3" - conditions: os=linux & cpu=loong64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-loong64-musl@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-loong64-musl@npm:4.60.3" - conditions: os=linux & cpu=loong64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-ppc64-gnu@npm:4.60.3" - conditions: os=linux & cpu=ppc64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-ppc64-musl@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-ppc64-musl@npm:4.60.3" - conditions: os=linux & cpu=ppc64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-riscv64-gnu@npm:4.60.3" - conditions: os=linux & cpu=riscv64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-riscv64-musl@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-riscv64-musl@npm:4.60.3" - conditions: os=linux & cpu=riscv64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-linux-s390x-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-s390x-gnu@npm:4.60.3" - conditions: os=linux & cpu=s390x & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-x64-gnu@npm:4.60.3" - conditions: os=linux & cpu=x64 & libc=glibc - languageName: node - linkType: hard - -"@rollup/rollup-linux-x64-musl@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-linux-x64-musl@npm:4.60.3" - conditions: os=linux & cpu=x64 & libc=musl - languageName: node - linkType: hard - -"@rollup/rollup-openbsd-x64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-openbsd-x64@npm:4.60.3" - conditions: os=openbsd & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-openharmony-arm64@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-openharmony-arm64@npm:4.60.3" - conditions: os=openharmony & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-arm64-msvc@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-win32-arm64-msvc@npm:4.60.3" - conditions: os=win32 & cpu=arm64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-ia32-msvc@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-win32-ia32-msvc@npm:4.60.3" - conditions: os=win32 & cpu=ia32 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-gnu@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-win32-x64-gnu@npm:4.60.3" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - -"@rollup/rollup-win32-x64-msvc@npm:4.60.3": - version: 4.60.3 - resolution: "@rollup/rollup-win32-x64-msvc@npm:4.60.3" - conditions: os=win32 & cpu=x64 - languageName: node - linkType: hard - "@rtsao/scc@npm:^1.1.0": version: 1.1.0 resolution: "@rtsao/scc@npm:1.1.0" @@ -4568,18 +4308,6 @@ __metadata: languageName: node linkType: hard -"@trickfilm400/rollup-plugin-off-main-thread@npm:^3.0.0-pre1": - version: 3.0.0-pre1 - resolution: "@trickfilm400/rollup-plugin-off-main-thread@npm:3.0.0-pre1" - dependencies: - ejs: "npm:^3.1.10" - json5: "npm:^2.2.3" - magic-string: "npm:^0.30.21" - string.prototype.matchall: "npm:^4.0.12" - checksum: 10c0/60d4ff15295413e8b4092221f2683681d13168fb136d94b0c1ca472810e4b28c51b1f88be5fa1aa44327e18b620fd6ca9a3201cb2679034b29adf7bdbde014e0 - languageName: node - linkType: hard - "@tybys/wasm-util@npm:^0.10.0, @tybys/wasm-util@npm:^0.10.1": version: 0.10.1 resolution: "@tybys/wasm-util@npm:0.10.1" @@ -4713,7 +4441,7 @@ __metadata: languageName: node linkType: hard -"@types/estree@npm:1.0.8, @types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": +"@types/estree@npm:^1.0.0, @types/estree@npm:^1.0.6, @types/estree@npm:^1.0.8": version: 1.0.8 resolution: "@types/estree@npm:1.0.8" checksum: 10c0/39d34d1afaa338ab9763f37ad6066e3f349444f9052b9676a7cc0252ef9485a41c6d81c9c4e0d26e9077993354edf25efc853f3224dd4b447175ef62bdcc86a5 @@ -5014,13 +4742,6 @@ __metadata: languageName: node linkType: hard -"@types/resolve@npm:1.20.2": - version: 1.20.2 - resolution: "@types/resolve@npm:1.20.2" - checksum: 10c0/c5b7e1770feb5ccfb6802f6ad82a7b0d50874c99331e0c9b259e415e55a38d7a86ad0901c57665d93f75938be2a6a0bc9aa06c9749192cadb2e4512800bbc6e6 - languageName: node - linkType: hard - "@types/resolve@npm:^1.20.2": version: 1.20.6 resolution: "@types/resolve@npm:1.20.6" @@ -5055,13 +4776,6 @@ __metadata: languageName: node linkType: hard -"@types/trusted-types@npm:^2.0.2": - version: 2.0.3 - resolution: "@types/trusted-types@npm:2.0.3" - checksum: 10c0/25eae736a8a6d24353c3e0108138935250f79d1d239f6fd6f3eb52d88476456ba946f8cb8f3130c6841d40534cafc2dd2326358d86966327c3c4a3d3eecaf585 - languageName: node - linkType: hard - "@types/use-sync-external-store@npm:^0.0.6": version: 0.0.6 resolution: "@types/use-sync-external-store@npm:0.0.6" @@ -5757,7 +5471,7 @@ __metadata: languageName: node linkType: hard -"acorn@npm:^8.15.0, acorn@npm:^8.16.0, acorn@npm:^8.8.2": +"acorn@npm:^8.15.0, acorn@npm:^8.16.0": version: 8.16.0 resolution: "acorn@npm:8.16.0" bin: @@ -5794,7 +5508,7 @@ __metadata: languageName: node linkType: hard -"ajv@npm:^8.0.1, ajv@npm:^8.6.0": +"ajv@npm:^8.0.1": version: 8.17.1 resolution: "ajv@npm:8.17.1" dependencies: @@ -6055,13 +5769,6 @@ __metadata: languageName: node linkType: hard -"async@npm:^3.2.3": - version: 3.2.4 - resolution: "async@npm:3.2.4" - checksum: 10c0/b5d02fed64717edf49e35b2b156debd9cf524934ea670108fa5528e7615ed66a5e0bf6c65f832c9483b63aa7f0bffe3e588ebe8d58a539b833798d324516e1c9 - languageName: node - linkType: hard - "asynckit@npm:^0.4.0": version: 0.4.0 resolution: "asynckit@npm:0.4.0" @@ -6069,13 +5776,6 @@ __metadata: languageName: node linkType: hard -"at-least-node@npm:^1.0.0": - version: 1.0.0 - resolution: "at-least-node@npm:1.0.0" - checksum: 10c0/4c058baf6df1bc5a1697cf182e2029c58cd99975288a13f9e70068ef5d6f4e1f1fd7c4d2c3c4912eae44797d1725be9700995736deca441b39f3e66d8dee97ef - languageName: node - linkType: hard - "atomic-sleep@npm:^1.0.0": version: 1.0.0 resolution: "atomic-sleep@npm:1.0.0" @@ -6276,7 +5976,7 @@ __metadata: languageName: node linkType: hard -"brace-expansion@npm:^2.0.1, brace-expansion@npm:^2.0.2": +"brace-expansion@npm:^2.0.2": version: 2.1.0 resolution: "brace-expansion@npm:2.1.0" dependencies: @@ -6477,7 +6177,7 @@ __metadata: languageName: node linkType: hard -"chalk@npm:^4.0.0, chalk@npm:^4.0.2": +"chalk@npm:^4.0.0": version: 4.1.2 resolution: "chalk@npm:4.1.2" dependencies: @@ -6677,13 +6377,6 @@ __metadata: languageName: node linkType: hard -"common-tags@npm:^1.8.0": - version: 1.8.2 - resolution: "common-tags@npm:1.8.2" - checksum: 10c0/23efe47ff0a1a7c91489271b3a1e1d2a171c12ec7f9b35b29b2fce51270124aff0ec890087e2bc2182c1cb746e232ab7561aaafe05f1e7452aea733d2bfe3f63 - languageName: node - linkType: hard - "concat-map@npm:0.0.1": version: 0.0.1 resolution: "concat-map@npm:0.0.1" @@ -6862,13 +6555,6 @@ __metadata: languageName: node linkType: hard -"crypto-random-string@npm:^2.0.0": - version: 2.0.0 - resolution: "crypto-random-string@npm:2.0.0" - checksum: 10c0/288589b2484fe787f9e146f56c4be90b940018f17af1b152e4dde12309042ff5a2bf69e949aab8b8ac253948381529cc6f3e5a2427b73643a71ff177fa122b37 - languageName: node - linkType: hard - "css-blank-pseudo@npm:^8.0.1": version: 8.0.1 resolution: "css-blank-pseudo@npm:8.0.1" @@ -7006,7 +6692,7 @@ __metadata: languageName: node linkType: hard -"debug@npm:4, debug@npm:4.4.3, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.3.6, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": +"debug@npm:4, debug@npm:4.4.3, debug@npm:^4.1.0, debug@npm:^4.3.1, debug@npm:^4.3.2, debug@npm:^4.3.4, debug@npm:^4.3.5, debug@npm:^4.4.0, debug@npm:^4.4.1, debug@npm:^4.4.3": version: 4.4.3 resolution: "debug@npm:4.4.3" dependencies: @@ -7057,13 +6743,6 @@ __metadata: languageName: node linkType: hard -"deepmerge@npm:^4.2.2": - version: 4.3.1 - resolution: "deepmerge@npm:4.3.1" - checksum: 10c0/e53481aaf1aa2c4082b5342be6b6d8ad9dfe387bc92ce197a66dea08bd4265904a087e75e464f14d1347cf2ac8afe1e4c16b266e0561cc5df29382d3c5f80044 - languageName: node - linkType: hard - "default-browser-id@npm:^5.0.0": version: 5.0.1 resolution: "default-browser-id@npm:5.0.1" @@ -7292,17 +6971,6 @@ __metadata: languageName: node linkType: hard -"ejs@npm:^3.1.10": - version: 3.1.10 - resolution: "ejs@npm:3.1.10" - dependencies: - jake: "npm:^10.8.5" - bin: - ejs: bin/cli.js - checksum: 10c0/52eade9e68416ed04f7f92c492183340582a36482836b11eab97b159fcdcfdedc62233a1bf0bf5e5e1851c501f2dca0e2e9afd111db2599e4e7f53ee29429ae1 - languageName: node - linkType: hard - "electron-to-chromium@npm:^1.5.328": version: 1.5.358 resolution: "electron-to-chromium@npm:1.5.358" @@ -8103,13 +7771,6 @@ __metadata: languageName: node linkType: hard -"eta@npm:^4.5.1": - version: 4.6.0 - resolution: "eta@npm:4.6.0" - checksum: 10c0/98c8081f756884bbc22f2bf4a6a38c2322ee97575fb6f0c02dcb1c3040353971c91a96bfba2d6f7cba39bb0ebece5708803a765447d9a81ca1172ccd5e31becf - languageName: node - linkType: hard - "etag@npm:^1.8.1": version: 1.8.1 resolution: "etag@npm:1.8.1" @@ -8208,7 +7869,7 @@ __metadata: languageName: node linkType: hard -"fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": +"fast-json-stable-stringify@npm:^2.0.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0" checksum: 10c0/7f081eb0b8a64e0057b3bb03f974b3ef00135fbf36c1c710895cd9300f13c94ba809bb3a81cf4e1b03f6e5285610a61abbd7602d0652de423144dfee5a389c9b @@ -8289,15 +7950,6 @@ __metadata: languageName: node linkType: hard -"filelist@npm:^1.0.4": - version: 1.0.4 - resolution: "filelist@npm:1.0.4" - dependencies: - minimatch: "npm:^5.0.1" - checksum: 10c0/426b1de3944a3d153b053f1c0ebfd02dccd0308a4f9e832ad220707a6d1f1b3c9784d6cadf6b2f68f09a57565f63ebc7bcdc913ccf8012d834f472c46e596f41 - languageName: node - linkType: hard - "fill-range@npm:^7.1.1": version: 7.1.1 resolution: "fill-range@npm:7.1.1" @@ -8385,7 +8037,7 @@ __metadata: languageName: node linkType: hard -"foreground-child@npm:^3.1.0, foreground-child@npm:^3.3.1": +"foreground-child@npm:^3.1.0": version: 3.3.1 resolution: "foreground-child@npm:3.3.1" dependencies: @@ -8429,18 +8081,6 @@ __metadata: languageName: node linkType: hard -"fs-extra@npm:^9.0.1": - version: 9.1.0 - resolution: "fs-extra@npm:9.1.0" - dependencies: - at-least-node: "npm:^1.0.0" - graceful-fs: "npm:^4.2.0" - jsonfile: "npm:^6.0.1" - universalify: "npm:^2.0.0" - checksum: 10c0/9b808bd884beff5cb940773018179a6b94a966381d005479f00adda6b44e5e3d4abf765135773d849cc27efe68c349e4a7b86acd7d3306d5932c14f3a4b17a92 - languageName: node - linkType: hard - "fs-minipass@npm:^3.0.0": version: 3.0.3 resolution: "fs-minipass@npm:3.0.3" @@ -8467,7 +8107,7 @@ __metadata: languageName: node linkType: hard -"fsevents@npm:~2.3.2, fsevents@npm:~2.3.3": +"fsevents@npm:~2.3.3": version: 2.3.3 resolution: "fsevents@npm:2.3.3" dependencies: @@ -8486,7 +8126,7 @@ __metadata: languageName: node linkType: hard -"fsevents@patch:fsevents@npm%3A~2.3.2#optional!builtin, fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": +"fsevents@patch:fsevents@npm%3A~2.3.3#optional!builtin": version: 2.3.3 resolution: "fsevents@patch:fsevents@npm%3A2.3.3#optional!builtin::version=2.3.3&hash=df0bf1" dependencies: @@ -8569,13 +8209,6 @@ __metadata: languageName: node linkType: hard -"get-own-enumerable-property-symbols@npm:^3.0.0": - version: 3.0.2 - resolution: "get-own-enumerable-property-symbols@npm:3.0.2" - checksum: 10c0/103999855f3d1718c631472437161d76962cbddcd95cc642a34c07bfb661ed41b6c09a9c669ccdff89ee965beb7126b80eec7b2101e20e31e9cc6c4725305e10 - languageName: node - linkType: hard - "get-proto@npm:^1.0.0, get-proto@npm:^1.0.1": version: 1.0.1 resolution: "get-proto@npm:1.0.1" @@ -8640,22 +8273,6 @@ __metadata: languageName: node linkType: hard -"glob@npm:^11.0.1": - version: 11.1.0 - resolution: "glob@npm:11.1.0" - dependencies: - foreground-child: "npm:^3.3.1" - jackspeak: "npm:^4.1.1" - minimatch: "npm:^10.1.1" - minipass: "npm:^7.1.2" - package-json-from-dist: "npm:^1.0.0" - path-scurry: "npm:^2.0.0" - bin: - glob: dist/esm/bin.mjs - checksum: 10c0/1ceae07f23e316a6fa74581d9a74be6e8c2e590d2f7205034dd5c0435c53f5f7b712c2be00c3b65bf0a49294a1c6f4b98cd84c7637e29453b5aa13b79f1763a2 - languageName: node - linkType: hard - "glob@npm:^13.0.1": version: 13.0.6 resolution: "glob@npm:13.0.6" @@ -8753,7 +8370,7 @@ __metadata: languageName: node linkType: hard -"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.1.6, graceful-fs@npm:^4.2.0, graceful-fs@npm:^4.2.6": +"graceful-fs@npm:^4.1.2, graceful-fs@npm:^4.2.6": version: 4.2.11 resolution: "graceful-fs@npm:4.2.11" checksum: 10c0/386d011a553e02bc594ac2ca0bd6d9e4c22d7fa8cfbfc448a6d148c59ea881b092db9dbe3547ae4b88e55f1b01f7c4a2ecc53b310c042793e63aa44cf6c257f2 @@ -9061,13 +8678,6 @@ __metadata: languageName: node linkType: hard -"idb@npm:^7.0.1": - version: 7.1.1 - resolution: "idb@npm:7.1.1" - checksum: 10c0/72418e4397638797ee2089f97b45fc29f937b830bc0eb4126f4a9889ecf10320ceacf3a177fe5d7ffaf6b4fe38b20bbd210151549bfdc881db8081eed41c870d - languageName: node - linkType: hard - "idb@npm:^8.0.3": version: 8.0.3 resolution: "idb@npm:8.0.3" @@ -9423,13 +9033,6 @@ __metadata: languageName: node linkType: hard -"is-module@npm:^1.0.0": - version: 1.0.0 - resolution: "is-module@npm:1.0.0" - checksum: 10c0/795a3914bcae7c26a1c23a1e5574c42eac13429625045737bf3e324ce865c0601d61aee7a5afbca1bee8cb300c7d9647e7dc98860c9bdbc3b7fdc51d8ac0bffc - languageName: node - linkType: hard - "is-negative-zero@npm:^2.0.3": version: 2.0.3 resolution: "is-negative-zero@npm:2.0.3" @@ -9461,13 +9064,6 @@ __metadata: languageName: node linkType: hard -"is-obj@npm:^1.0.1": - version: 1.0.1 - resolution: "is-obj@npm:1.0.1" - checksum: 10c0/5003acba0af7aa47dfe0760e545a89bbac89af37c12092c3efadc755372cdaec034f130e7a3653a59eb3c1843cfc72ca71eaf1a6c3bafe5a0bab3611a47f9945 - languageName: node - linkType: hard - "is-path-inside@npm:^4.0.0": version: 4.0.0 resolution: "is-path-inside@npm:4.0.0" @@ -9508,13 +9104,6 @@ __metadata: languageName: node linkType: hard -"is-regexp@npm:^1.0.0": - version: 1.0.0 - resolution: "is-regexp@npm:1.0.0" - checksum: 10c0/34cacda1901e00f6e44879378f1d2fa96320ea956c1bec27713130aaf1d44f6e7bd963eed28945bfe37e600cb27df1cf5207302680dad8bdd27b9baff8ecf611 - languageName: node - linkType: hard - "is-set@npm:^2.0.3": version: 2.0.3 resolution: "is-set@npm:2.0.3" @@ -9531,13 +9120,6 @@ __metadata: languageName: node linkType: hard -"is-stream@npm:^2.0.0": - version: 2.0.1 - resolution: "is-stream@npm:2.0.1" - checksum: 10c0/7c284241313fc6efc329b8d7f08e16c0efeb6baab1b4cd0ba579eb78e5af1aa5da11e68559896a2067cd6c526bd29241dda4eb1225e627d5aa1a89a76d4635a5 - languageName: node - linkType: hard - "is-string@npm:^1.1.1": version: 1.1.1 resolution: "is-string@npm:1.1.1" @@ -9700,29 +9282,6 @@ __metadata: languageName: node linkType: hard -"jackspeak@npm:^4.1.1": - version: 4.1.1 - resolution: "jackspeak@npm:4.1.1" - dependencies: - "@isaacs/cliui": "npm:^8.0.2" - checksum: 10c0/84ec4f8e21d6514db24737d9caf65361511f75e5e424980eebca4199f400874f45e562ac20fa8aeb1dd20ca2f3f81f0788b6e9c3e64d216a5794fd6f30e0e042 - languageName: node - linkType: hard - -"jake@npm:^10.8.5": - version: 10.8.7 - resolution: "jake@npm:10.8.7" - dependencies: - async: "npm:^3.2.3" - chalk: "npm:^4.0.2" - filelist: "npm:^1.0.4" - minimatch: "npm:^3.1.2" - bin: - jake: bin/cli.js - checksum: 10c0/89326d01a8bc110d02d973729a66394c79a34b34461116f5c530a2a2dbc30265683fe6737928f75df9178e9d369ff1442f5753fb983d525e740eefdadc56a103 - languageName: node - linkType: hard - "joycon@npm:^3.1.1": version: 3.1.1 resolution: "joycon@npm:3.1.1" @@ -9833,13 +9392,6 @@ __metadata: languageName: node linkType: hard -"json-schema@npm:^0.4.0": - version: 0.4.0 - resolution: "json-schema@npm:0.4.0" - checksum: 10c0/d4a637ec1d83544857c1c163232f3da46912e971d5bf054ba44fdb88f07d8d359a462b4aec46f2745efbc57053365608d88bc1d7b1729f7b4fc3369765639ed3 - languageName: node - linkType: hard - "json-stable-stringify-without-jsonify@npm:^1.0.1": version: 1.0.1 resolution: "json-stable-stringify-without-jsonify@npm:1.0.1" @@ -9880,19 +9432,6 @@ __metadata: languageName: node linkType: hard -"jsonfile@npm:^6.0.1": - version: 6.1.0 - resolution: "jsonfile@npm:6.1.0" - dependencies: - graceful-fs: "npm:^4.1.6" - universalify: "npm:^2.0.0" - dependenciesMeta: - graceful-fs: - optional: true - checksum: 10c0/4f95b5e8a5622b1e9e8f33c96b7ef3158122f595998114d1e7f03985649ea99cb3cd99ce1ed1831ae94c8c8543ab45ebd044207612f31a56fd08462140e46865 - languageName: node - linkType: hard - "jsonify@npm:^0.0.1": version: 0.0.1 resolution: "jsonify@npm:0.0.1" @@ -9900,13 +9439,6 @@ __metadata: languageName: node linkType: hard -"jsonpointer@npm:^5.0.0": - version: 5.0.1 - resolution: "jsonpointer@npm:5.0.1" - checksum: 10c0/89929e58b400fcb96928c0504fcf4fc3f919d81e9543ceb055df125538470ee25290bb4984251e172e6ef8fcc55761eb998c118da763a82051ad89d4cb073fe7 - languageName: node - linkType: hard - "jsx-ast-utils@npm:^2.4.1 || ^3.0.0, jsx-ast-utils@npm:^3.3.5": version: 3.3.5 resolution: "jsx-ast-utils@npm:3.3.5" @@ -10011,13 +9543,6 @@ __metadata: languageName: node linkType: hard -"leven@npm:^3.1.0": - version: 3.1.0 - resolution: "leven@npm:3.1.0" - checksum: 10c0/cd778ba3fbab0f4d0500b7e87d1f6e1f041507c56fdcd47e8256a3012c98aaee371d4c15e0a76e0386107af2d42e2b7466160a2d80688aaa03e66e49949f42df - languageName: node - linkType: hard - "levn@npm:^0.4.1": version: 0.4.1 resolution: "levn@npm:0.4.1" @@ -10223,13 +9748,6 @@ __metadata: languageName: node linkType: hard -"lodash.sortby@npm:^4.7.0": - version: 4.7.0 - resolution: "lodash.sortby@npm:4.7.0" - checksum: 10c0/fc48fb54ff7669f33bb32997cab9460757ee99fafaf72400b261c3e10fde21538e47d8cfcbe6a25a31bcb5b7b727c27d52626386fc2de24eb059a6d64a89cdf5 - languageName: node - linkType: hard - "lodash.truncate@npm:^4.4.2": version: 4.4.2 resolution: "lodash.truncate@npm:4.4.2" @@ -10328,7 +9846,7 @@ __metadata: languageName: node linkType: hard -"magic-string@npm:^0.30.0, magic-string@npm:^0.30.21, magic-string@npm:^0.30.3, magic-string@npm:~0.30.11": +"magic-string@npm:^0.30.0, magic-string@npm:^0.30.21, magic-string@npm:~0.30.11": version: 0.30.21 resolution: "magic-string@npm:0.30.21" dependencies: @@ -10521,7 +10039,7 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^10.1.1, minimatch@npm:^10.2.2": +"minimatch@npm:^10.2.2": version: 10.2.5 resolution: "minimatch@npm:10.2.5" dependencies: @@ -10539,15 +10057,6 @@ __metadata: languageName: node linkType: hard -"minimatch@npm:^5.0.1": - version: 5.1.9 - resolution: "minimatch@npm:5.1.9" - dependencies: - brace-expansion: "npm:^2.0.1" - checksum: 10c0/4202718683815a7288b13e470160a4f9560cf392adef4f453927505817e01ef6b3476ecde13cfcaed17e7326dd3b69ad44eb2daeb19a217c5500f9277893f1d6 - languageName: node - linkType: hard - "minimatch@npm:^9.0.4, minimatch@npm:^9.0.5": version: 9.0.9 resolution: "minimatch@npm:9.0.9" @@ -11374,7 +10883,7 @@ __metadata: languageName: node linkType: hard -"path-scurry@npm:^2.0.0, path-scurry@npm:^2.0.2": +"path-scurry@npm:^2.0.2": version: 2.0.2 resolution: "path-scurry@npm:2.0.2" dependencies: @@ -12195,20 +11704,6 @@ __metadata: languageName: node linkType: hard -"pretty-bytes@npm:^5.3.0": - version: 5.6.0 - resolution: "pretty-bytes@npm:5.6.0" - checksum: 10c0/f69f494dcc1adda98dbe0e4a36d301e8be8ff99bfde7a637b2ee2820e7cb583b0fc0f3a63b0e3752c01501185a5cf38602c7be60da41bdf84ef5b70e89c370f3 - languageName: node - linkType: hard - -"pretty-bytes@npm:^6.1.1": - version: 6.1.1 - resolution: "pretty-bytes@npm:6.1.1" - checksum: 10c0/c7a660b933355f3b4587ad3f001c266a8dd6afd17db9f89ebc50812354bb142df4b9600396ba5999bdb1f9717300387dc311df91895c5f0f2a1780e22495b5f8 - languageName: node - linkType: hard - "pretty-format@npm:^27.0.2": version: 27.5.1 resolution: "pretty-format@npm:27.5.1" @@ -13114,96 +12609,6 @@ __metadata: languageName: node linkType: hard -"rollup@npm:^4.53.3": - version: 4.60.3 - resolution: "rollup@npm:4.60.3" - dependencies: - "@rollup/rollup-android-arm-eabi": "npm:4.60.3" - "@rollup/rollup-android-arm64": "npm:4.60.3" - "@rollup/rollup-darwin-arm64": "npm:4.60.3" - "@rollup/rollup-darwin-x64": "npm:4.60.3" - "@rollup/rollup-freebsd-arm64": "npm:4.60.3" - "@rollup/rollup-freebsd-x64": "npm:4.60.3" - "@rollup/rollup-linux-arm-gnueabihf": "npm:4.60.3" - "@rollup/rollup-linux-arm-musleabihf": "npm:4.60.3" - "@rollup/rollup-linux-arm64-gnu": "npm:4.60.3" - "@rollup/rollup-linux-arm64-musl": "npm:4.60.3" - "@rollup/rollup-linux-loong64-gnu": "npm:4.60.3" - "@rollup/rollup-linux-loong64-musl": "npm:4.60.3" - "@rollup/rollup-linux-ppc64-gnu": "npm:4.60.3" - "@rollup/rollup-linux-ppc64-musl": "npm:4.60.3" - "@rollup/rollup-linux-riscv64-gnu": "npm:4.60.3" - "@rollup/rollup-linux-riscv64-musl": "npm:4.60.3" - "@rollup/rollup-linux-s390x-gnu": "npm:4.60.3" - "@rollup/rollup-linux-x64-gnu": "npm:4.60.3" - "@rollup/rollup-linux-x64-musl": "npm:4.60.3" - "@rollup/rollup-openbsd-x64": "npm:4.60.3" - "@rollup/rollup-openharmony-arm64": "npm:4.60.3" - "@rollup/rollup-win32-arm64-msvc": "npm:4.60.3" - "@rollup/rollup-win32-ia32-msvc": "npm:4.60.3" - "@rollup/rollup-win32-x64-gnu": "npm:4.60.3" - "@rollup/rollup-win32-x64-msvc": "npm:4.60.3" - "@types/estree": "npm:1.0.8" - fsevents: "npm:~2.3.2" - dependenciesMeta: - "@rollup/rollup-android-arm-eabi": - optional: true - "@rollup/rollup-android-arm64": - optional: true - "@rollup/rollup-darwin-arm64": - optional: true - "@rollup/rollup-darwin-x64": - optional: true - "@rollup/rollup-freebsd-arm64": - optional: true - "@rollup/rollup-freebsd-x64": - optional: true - "@rollup/rollup-linux-arm-gnueabihf": - optional: true - "@rollup/rollup-linux-arm-musleabihf": - optional: true - "@rollup/rollup-linux-arm64-gnu": - optional: true - "@rollup/rollup-linux-arm64-musl": - optional: true - "@rollup/rollup-linux-loong64-gnu": - optional: true - "@rollup/rollup-linux-loong64-musl": - optional: true - "@rollup/rollup-linux-ppc64-gnu": - optional: true - "@rollup/rollup-linux-ppc64-musl": - optional: true - "@rollup/rollup-linux-riscv64-gnu": - optional: true - "@rollup/rollup-linux-riscv64-musl": - optional: true - "@rollup/rollup-linux-s390x-gnu": - optional: true - "@rollup/rollup-linux-x64-gnu": - optional: true - "@rollup/rollup-linux-x64-musl": - optional: true - "@rollup/rollup-openbsd-x64": - optional: true - "@rollup/rollup-openharmony-arm64": - optional: true - "@rollup/rollup-win32-arm64-msvc": - optional: true - "@rollup/rollup-win32-ia32-msvc": - optional: true - "@rollup/rollup-win32-x64-gnu": - optional: true - "@rollup/rollup-win32-x64-msvc": - optional: true - fsevents: - optional: true - bin: - rollup: dist/bin/rollup - checksum: 10c0/72c9c768f3fabeaeff228b6364e6600c169d6c231a4324c47c34880fd8961aebacd974cf905ecc2db75e56c6491bdd676409a06aecf589791bf419cd41d06e76 - languageName: node - linkType: hard - "rou3@npm:^0.8.1": version: 0.8.1 resolution: "rou3@npm:0.8.1" @@ -13422,13 +12827,6 @@ __metadata: languageName: node linkType: hard -"serialize-javascript@npm:^7.0.3": - version: 7.0.5 - resolution: "serialize-javascript@npm:7.0.5" - checksum: 10c0/7b7818e5267f6d474ec7a56d36ba69dd712726a13eab37706ec94615fb7ca8945471f2b7fb0dc9dbe8c79c1930c1079d97f66f91315c8c8c2ca6c38898cec96f - languageName: node - linkType: hard - "serve-static@npm:^2.2.0": version: 2.2.0 resolution: "serve-static@npm:2.2.0" @@ -13619,13 +13017,6 @@ __metadata: languageName: node linkType: hard -"smob@npm:^1.0.0": - version: 1.5.0 - resolution: "smob@npm:1.5.0" - checksum: 10c0/a1067f23265812de8357ed27312101af49b89129eb973e3f26ab5856ea774f88cace13342e66e32470f933ccfa916e0e9d0f7ca8bbd4f92dfab2af45c15956c2 - languageName: node - linkType: hard - "snake-case@npm:^3.0.4": version: 3.0.4 resolution: "snake-case@npm:3.0.4" @@ -13711,15 +13102,6 @@ __metadata: languageName: node linkType: hard -"source-map@npm:^0.8.0-beta.0": - version: 0.8.0-beta.0 - resolution: "source-map@npm:0.8.0-beta.0" - dependencies: - whatwg-url: "npm:^7.0.0" - checksum: 10c0/fb4d9bde9a9fdb2c29b10e5eae6c71d10e09ef467e1afb75fdec2eb7e11fa5b343a2af553f74f18b695dbc0b81f9da2e9fa3d7a317d5985e9939499ec6087835 - languageName: node - linkType: hard - "spdx-exceptions@npm:^2.1.0": version: 2.3.0 resolution: "spdx-exceptions@npm:2.3.0" @@ -14015,17 +13397,6 @@ __metadata: languageName: node linkType: hard -"stringify-object@npm:^3.3.0": - version: 3.3.0 - resolution: "stringify-object@npm:3.3.0" - dependencies: - get-own-enumerable-property-symbols: "npm:^3.0.0" - is-obj: "npm:^1.0.1" - is-regexp: "npm:^1.0.0" - checksum: 10c0/ba8078f84128979ee24b3de9a083489cbd3c62cb8572a061b47d4d82601a8ae4b4d86fa8c54dd955593da56bb7c16a6de51c27221fdc6b7139bb4f29d815f35b - languageName: node - linkType: hard - "stringz@npm:^2.1.0": version: 2.1.0 resolution: "stringz@npm:2.1.0" @@ -14060,13 +13431,6 @@ __metadata: languageName: node linkType: hard -"strip-comments@npm:^2.0.1": - version: 2.0.1 - resolution: "strip-comments@npm:2.0.1" - checksum: 10c0/984321b1ec47a531bdcfddd87f217590934e2d2f142198a080ec88588280239a5b58a81ca780730679b6195e52afef83673c6d6466c07c2277f71f44d7d9553d - languageName: node - linkType: hard - "strip-indent@npm:^3.0.0": version: 3.0.0 resolution: "strip-indent@npm:3.0.0" @@ -14349,36 +13713,17 @@ __metadata: languageName: node linkType: hard -"temp-dir@npm:^2.0.0": - version: 2.0.0 - resolution: "temp-dir@npm:2.0.0" - checksum: 10c0/b1df969e3f3f7903f3426861887ed76ba3b495f63f6d0c8e1ce22588679d9384d336df6064210fda14e640ed422e2a17d5c40d901f60e161c99482d723f4d309 - languageName: node - linkType: hard - -"tempy@npm:^0.6.0": - version: 0.6.0 - resolution: "tempy@npm:0.6.0" - dependencies: - is-stream: "npm:^2.0.0" - temp-dir: "npm:^2.0.0" - type-fest: "npm:^0.16.0" - unique-string: "npm:^2.0.0" - checksum: 10c0/ca0882276732d1313b85006b0427620cb4a8d7a57738a2311a72befae60ed152be7d5b41b951dcb447a01a35404bed76f33eb4e37c55263cd7f807eee1187f8f - languageName: node - linkType: hard - -"terser@npm:^5.17.4": - version: 5.31.0 - resolution: "terser@npm:5.31.0" +"terser@npm:^5.48.0": + version: 5.48.0 + resolution: "terser@npm:5.48.0" dependencies: "@jridgewell/source-map": "npm:^0.3.3" - acorn: "npm:^8.8.2" + acorn: "npm:^8.15.0" commander: "npm:^2.20.0" source-map-support: "npm:~0.5.20" bin: terser: bin/terser - checksum: 10c0/cb127a579b03fb9dcee0d293ff24814deedcd430f447933b618e8593b7454f615b5c8493c68e86a4b0188769d5ea2af5251b5d507edb208114f7e8aebdc7c850 + checksum: 10c0/d6ee713ea09a2b83b461ccbf1b76bd673a5090b3076ec13db7edc6d6470ab940d21c87b8d1ad82523b7cf02d9be07393fcdd334bde8f589e9bc3804da6fc32d2 languageName: node linkType: hard @@ -14450,7 +13795,7 @@ __metadata: languageName: node linkType: hard -"tinyglobby@npm:^0.2.10, tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15, tinyglobby@npm:^0.2.16": +"tinyglobby@npm:^0.2.12, tinyglobby@npm:^0.2.14, tinyglobby@npm:^0.2.15, tinyglobby@npm:^0.2.16": version: 0.2.16 resolution: "tinyglobby@npm:0.2.16" dependencies: @@ -14555,15 +13900,6 @@ __metadata: languageName: node linkType: hard -"tr46@npm:^1.0.1": - version: 1.0.1 - resolution: "tr46@npm:1.0.1" - dependencies: - punycode: "npm:^2.1.0" - checksum: 10c0/41525c2ccce86e3ef30af6fa5e1464e6d8bb4286a58ea8db09228f598889581ef62347153f6636cd41553dc41685bdfad0a9d032ef58df9fbb0792b3447d0f04 - languageName: node - linkType: hard - "tr46@npm:^6.0.0": version: 6.0.0 resolution: "tr46@npm:6.0.0" @@ -14654,13 +13990,6 @@ __metadata: languageName: node linkType: hard -"type-fest@npm:^0.16.0": - version: 0.16.0 - resolution: "type-fest@npm:0.16.0" - checksum: 10c0/6b4d846534e7bcb49a6160b068ffaed2b62570d989d909ac3f29df5ef1e993859f890a4242eebe023c9e923f96adbcb3b3e88a198c35a1ee9a731e147a6839c3 - languageName: node - linkType: hard - "type-fest@npm:^0.21.3": version: 0.21.3 resolution: "type-fest@npm:0.21.3" @@ -14950,22 +14279,6 @@ __metadata: languageName: node linkType: hard -"unique-string@npm:^2.0.0": - version: 2.0.0 - resolution: "unique-string@npm:2.0.0" - dependencies: - crypto-random-string: "npm:^2.0.0" - checksum: 10c0/11820db0a4ba069d174bedfa96c588fc2c96b083066fafa186851e563951d0de78181ac79c744c1ed28b51f9d82ac5b8196ff3e4560d0178046ef455d8c2244b - languageName: node - linkType: hard - -"universalify@npm:^2.0.0": - version: 2.0.1 - resolution: "universalify@npm:2.0.1" - checksum: 10c0/73e8ee3809041ca8b818efb141801a1004e3fc0002727f1531f4de613ea281b494a40909596dae4a042a4fb6cd385af5d4db2e137b1362e0e91384b828effd3a - languageName: node - linkType: hard - "unpipe@npm:~1.0.0": version: 1.0.0 resolution: "unpipe@npm:1.0.0" @@ -15070,13 +14383,6 @@ __metadata: languageName: node linkType: hard -"upath@npm:^1.2.0": - version: 1.2.0 - resolution: "upath@npm:1.2.0" - checksum: 10c0/3746f24099bf69dbf8234cecb671e1016e1f6b26bd306de4ff8966fb0bc463fa1014ffc48646b375de1ab573660e3a0256f6f2a87218b2dfa1779a84ef6992fa - languageName: node - linkType: hard - "update-browserslist-db@npm:^1.2.3": version: 1.2.3 resolution: "update-browserslist-db@npm:1.2.3" @@ -15212,27 +14518,6 @@ __metadata: languageName: node linkType: hard -"vite-plugin-pwa@npm:^1.2.0": - version: 1.3.0 - resolution: "vite-plugin-pwa@npm:1.3.0" - dependencies: - debug: "npm:^4.3.6" - pretty-bytes: "npm:^6.1.1" - tinyglobby: "npm:^0.2.10" - workbox-build: "npm:^7.4.1" - workbox-window: "npm:^7.4.1" - peerDependencies: - "@vite-pwa/assets-generator": ^1.0.0 - vite: ^3.1.0 || ^4.0.0 || ^5.0.0 || ^6.0.0 || ^7.0.0 || ^8.0.0 - workbox-build: ^7.4.1 - workbox-window: ^7.4.1 - peerDependenciesMeta: - "@vite-pwa/assets-generator": - optional: true - checksum: 10c0/1cf7a43bf25d3f1276fe61e63cf7134b735b4426ddd2cf05775160e5bcd0a84eb705c15496abe78f6fb051f7a9481fcf854ed2b5b86922e07865ab37d5cb7a0b - languageName: node - linkType: hard - "vite-plugin-svgr@npm:^5.0.0": version: 5.2.0 resolution: "vite-plugin-svgr@npm:5.2.0" @@ -15403,13 +14688,6 @@ __metadata: languageName: node linkType: hard -"webidl-conversions@npm:^4.0.2": - version: 4.0.2 - resolution: "webidl-conversions@npm:4.0.2" - checksum: 10c0/def5c5ac3479286dffcb604547628b2e6b46c5c5b8a8cfaa8c71dc3bafc85859bde5fbe89467ff861f571ab38987cf6ab3d6e7c80b39b999e50e803c12f3164f - languageName: node - linkType: hard - "webidl-conversions@npm:^8.0.1": version: 8.0.1 resolution: "webidl-conversions@npm:8.0.1" @@ -15452,17 +14730,6 @@ __metadata: languageName: node linkType: hard -"whatwg-url@npm:^7.0.0": - version: 7.1.0 - resolution: "whatwg-url@npm:7.1.0" - dependencies: - lodash.sortby: "npm:^4.7.0" - tr46: "npm:^1.0.1" - webidl-conversions: "npm:^4.0.2" - checksum: 10c0/2785fe4647690e5a0225a79509ba5e21fdf4a71f9de3eabdba1192483fe006fc79961198e0b99f82751557309f17fc5a07d4d83c251aa5b2f85ba71e674cbee9 - languageName: node - linkType: hard - "which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" @@ -15576,196 +14843,6 @@ __metadata: languageName: node linkType: hard -"workbox-background-sync@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-background-sync@npm:7.4.1" - dependencies: - idb: "npm:^7.0.1" - workbox-core: "npm:7.4.1" - checksum: 10c0/804729b83eb194a7694cb174d79090de85765f835bcc94d4c7eb739cb839385c6755baaf8dc82a43468b27488355cfaabb08cff751d5dfc70e07bf4c07e1c45d - languageName: node - linkType: hard - -"workbox-broadcast-update@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-broadcast-update@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - checksum: 10c0/fb640c12dc9034f4f0fe9636f532a41c8eccba360676b4cd28d479b59684eab727435310d0e115b935d92e7abfe5ee91a77d567f9cb824fe33064e18880d7c4f - languageName: node - linkType: hard - -"workbox-build@npm:^7.4.1": - version: 7.4.1 - resolution: "workbox-build@npm:7.4.1" - dependencies: - "@apideck/better-ajv-errors": "npm:^0.3.1" - "@babel/core": "npm:^7.24.4" - "@babel/preset-env": "npm:^7.11.0" - "@babel/runtime": "npm:^7.11.2" - "@rollup/plugin-babel": "npm:^6.1.0" - "@rollup/plugin-node-resolve": "npm:^16.0.3" - "@rollup/plugin-replace": "npm:^6.0.3" - "@rollup/plugin-terser": "npm:^1.0.0" - "@trickfilm400/rollup-plugin-off-main-thread": "npm:^3.0.0-pre1" - ajv: "npm:^8.6.0" - common-tags: "npm:^1.8.0" - eta: "npm:^4.5.1" - fast-json-stable-stringify: "npm:^2.1.0" - fs-extra: "npm:^9.0.1" - glob: "npm:^11.0.1" - pretty-bytes: "npm:^5.3.0" - rollup: "npm:^4.53.3" - source-map: "npm:^0.8.0-beta.0" - stringify-object: "npm:^3.3.0" - strip-comments: "npm:^2.0.1" - tempy: "npm:^0.6.0" - upath: "npm:^1.2.0" - workbox-background-sync: "npm:7.4.1" - workbox-broadcast-update: "npm:7.4.1" - workbox-cacheable-response: "npm:7.4.1" - workbox-core: "npm:7.4.1" - workbox-expiration: "npm:7.4.1" - workbox-google-analytics: "npm:7.4.1" - workbox-navigation-preload: "npm:7.4.1" - workbox-precaching: "npm:7.4.1" - workbox-range-requests: "npm:7.4.1" - workbox-recipes: "npm:7.4.1" - workbox-routing: "npm:7.4.1" - workbox-strategies: "npm:7.4.1" - workbox-streams: "npm:7.4.1" - workbox-sw: "npm:7.4.1" - workbox-window: "npm:7.4.1" - checksum: 10c0/18ed36ef28d31ffc26efbc0796d858b68b5dd9b61c86a9d5eef1c2a863ea05cc5a777a6e842af9a28a8efdbf84e6273b3ab82f8c60f495d95bdb5a7acf491da0 - languageName: node - linkType: hard - -"workbox-cacheable-response@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-cacheable-response@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - checksum: 10c0/fc7bb1e435262c6390c6cdab02f27c7304bdd5de663514278718620c15df894e1d57a1cf38b10ec5dbe673ce3d650010c650dcd3d6587eb4dfad170caeaa53d4 - languageName: node - linkType: hard - -"workbox-core@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-core@npm:7.4.1" - checksum: 10c0/953c3bcec2c04cef44ac779ac6b525f639fade17c594cfa601d7892090da6e18abd3eda22d2d592d8b4df6aa6856c947770f8b960f70c1ac1c989f722d0e7f67 - languageName: node - linkType: hard - -"workbox-expiration@npm:7.4.1, workbox-expiration@npm:^7.3.0": - version: 7.4.1 - resolution: "workbox-expiration@npm:7.4.1" - dependencies: - idb: "npm:^7.0.1" - workbox-core: "npm:7.4.1" - checksum: 10c0/d940f2f263b5c1b5a27c4e0b7df9c44c9a8d9aa4ac4c8217610cee6e235aa4d97608d8713bb95a0da3228f145209e8cbc3d4ebc51455bd72a60d33f706640e15 - languageName: node - linkType: hard - -"workbox-google-analytics@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-google-analytics@npm:7.4.1" - dependencies: - workbox-background-sync: "npm:7.4.1" - workbox-core: "npm:7.4.1" - workbox-routing: "npm:7.4.1" - workbox-strategies: "npm:7.4.1" - checksum: 10c0/107beef09bc14f7b83a257964dc4ac2f19d14fce20f5498e31172e8ef387fd46ee9e0dd63f01825c8baf49fc0fea0451e06fb1879df958b4df634f85564be8a1 - languageName: node - linkType: hard - -"workbox-navigation-preload@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-navigation-preload@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - checksum: 10c0/efe8fda736cc6afa1bf90eec65fccf206c179bda194264c5fa14063cd7d3b9bf399b960c22400212f83e48e3509cb6f586d1360710319049542cbe93254af5b9 - languageName: node - linkType: hard - -"workbox-precaching@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-precaching@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - workbox-routing: "npm:7.4.1" - workbox-strategies: "npm:7.4.1" - checksum: 10c0/e1f22df8945fe8cf3b77d8c8c9fb460d8e6469dbf0dba3d372a59e9649a6272024d6e63783ceb95bfed30f634ced524f1d0d3f21979fb6e48cdaa009e9be12c5 - languageName: node - linkType: hard - -"workbox-range-requests@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-range-requests@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - checksum: 10c0/fca4ca13a82056bac7b1599b103287b74819e8532500c5f229c27466681e243628df8cb9ed3660eff9dcb07b81b0b8bb5428271351a3502317423214fb5b5dc0 - languageName: node - linkType: hard - -"workbox-recipes@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-recipes@npm:7.4.1" - dependencies: - workbox-cacheable-response: "npm:7.4.1" - workbox-core: "npm:7.4.1" - workbox-expiration: "npm:7.4.1" - workbox-precaching: "npm:7.4.1" - workbox-routing: "npm:7.4.1" - workbox-strategies: "npm:7.4.1" - checksum: 10c0/5d238895f7a3c0791ee315bd7ad6dcb268acdd2328abb3e78e655cff591ceb89d466ecf63bea92007b88d5bb52074a6a7a16b813f718b1cce89fe0153bae6ad7 - languageName: node - linkType: hard - -"workbox-routing@npm:7.4.1, workbox-routing@npm:^7.3.0": - version: 7.4.1 - resolution: "workbox-routing@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - checksum: 10c0/11447d16c652de1667aa2be89634e426b615ff00f96d08d395a096afef07813a131d64c1f840344dd4210746800937437682a6bde7ef8a5233f371203c99d36a - languageName: node - linkType: hard - -"workbox-strategies@npm:7.4.1, workbox-strategies@npm:^7.3.0": - version: 7.4.1 - resolution: "workbox-strategies@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - checksum: 10c0/db96df6ef1260e281c580a963e68390e64df198b0684f37a693449af928edb3679ac97390dabe2ec11dc617a632cf4410a65854dd399bfdeaafbb74aea6532d8 - languageName: node - linkType: hard - -"workbox-streams@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-streams@npm:7.4.1" - dependencies: - workbox-core: "npm:7.4.1" - workbox-routing: "npm:7.4.1" - checksum: 10c0/f487b6e2f17119057b3f4265a0454de2304e5378ddfc95b1f7e4f660aab6f93f4b0ede86fd0c33fbcae3a077162020ea07846cb5fc69d7c71c6ddf5ad6f3b1da - languageName: node - linkType: hard - -"workbox-sw@npm:7.4.1": - version: 7.4.1 - resolution: "workbox-sw@npm:7.4.1" - checksum: 10c0/cef8ebffcef9e8f055d7f51273c8fcb9981b6c9de272c4d37b17a11cef5df55d05f814bda3d8daab6b7e207a484865cb08a579e0ba7341ed66ecce34acb3cfc3 - languageName: node - linkType: hard - -"workbox-window@npm:7.4.1, workbox-window@npm:^7.3.0, workbox-window@npm:^7.4.1": - version: 7.4.1 - resolution: "workbox-window@npm:7.4.1" - dependencies: - "@types/trusted-types": "npm:^2.0.2" - workbox-core: "npm:7.4.1" - checksum: 10c0/1c4db303d2f71cccd16e12ced9c85e2a2d16a00e3992bade92e990bcd1e6c8a49bc2021261e62145ba098065a691972a763f958d35f07232ee61e8d26555699b - languageName: node - linkType: hard - "wrap-ansi-cjs@npm:wrap-ansi@^7.0.0, wrap-ansi@npm:^7.0.0": version: 7.0.0 resolution: "wrap-ansi@npm:7.0.0"