diff --git a/packages/astro-sw/astro-sw.js b/packages/astro-sw/astro-sw.js index 9e985bb..8cb4aba 100644 --- a/packages/astro-sw/astro-sw.js +++ b/packages/astro-sw/astro-sw.js @@ -68,7 +68,7 @@ export default function serviceWorker(options) { /** * @type {Array} */ - let assets = [] + let manifestAssets = [] const registrationScript = `const registerSW = async () => { if ("serviceWorker" in navigator) { @@ -121,9 +121,14 @@ declare const __prefix: string;` injectTypes({ filename: 'caching.d.ts', content: injectedTypes }) }, 'astro:build:ssr': ({ manifest }) => { - assets = manifest.assets + manifestAssets = manifest.assets }, - 'astro:build:done': async ({ dir, routes, pages, logger }) => { + 'astro:build:done': async ({ + dir, + assets: astroAssets, + pages, + logger, + }) => { const outfile = fileURLToPath(new URL('./sw.js', dir)) const swPath = serviceWorkerPath && serviceWorkerPath !== '' @@ -137,13 +142,9 @@ declare const __prefix: string;` .filter((dirent) => dirent.isFile()) .map((dirent) => `/${dirent.name}`) - const _routes = - routes - .filter(({ isIndex }) => isIndex) - .flatMap(({ pathname }) => - pathname === '/' ? pathname : [pathname, `${pathname}/`] - ) - .filter((pathname) => pathname !== '') ?? [] + const _assets = Array.from(astroAssets.keys()) + .filter((key) => !key.includes('[...slug]')) + .flatMap((key) => (key === '/' ? key : [key, `${key}/`])) const _pages = pages @@ -167,10 +168,10 @@ declare const __prefix: string;` ...excludeRoutes.map((route) => `${route}/`), ] - assets = [ + const __assets = [ ...new Set([ - ...assets, - ..._routes, + ...manifestAssets, + ..._assets, ..._pages, ..._pagesWithoutEndSlash, ...customRoutes, @@ -187,17 +188,17 @@ declare const __prefix: string;` if (logAssets) { logger.info( - `${assets.length} assets for caching: \n ▶ ${assets.toString().replaceAll(',', '\n ▶ ')}\n` + `${__assets.length} assets for caching: \n ▶ ${__assets.toString().replaceAll(',', '\n ▶ ')}\n` ) } else { - logger.info(`${assets.length} assets for caching.`) + logger.info(`${__assets.length} assets for caching.`) } try { logger.info(`Using service worker in path: ${swPath}`) originalScript = await readFile(swPath) - } catch { - logger.error(`Service worker script not found! ${swPath}`) + } catch (err) { + logger.error(err) if (!swPath) { logger.error(` @@ -207,7 +208,7 @@ declare const __prefix: string;` } } - const assetsDeclaration = `const __assets = ${JSON.stringify(assets)};\n` + const assetsDeclaration = `const __assets = ${JSON.stringify(__assets)};\n` const versionDeclaration = `const __version = ${JSON.stringify(assetCacheVersionID)};\n` const prefixDeclaration = `const __prefix = ${JSON.stringify(assetCachePrefix)};\n` diff --git a/packages/astro-sw/package.json b/packages/astro-sw/package.json index 7121505..f1b28a0 100644 --- a/packages/astro-sw/package.json +++ b/packages/astro-sw/package.json @@ -1,6 +1,6 @@ { "name": "@ayco/astro-sw", - "version": "0.8.14", + "version": "0.9.0", "description": "Use your own authored service worker with Astro", "homepage": "https://ayco.io/n/@ayco/astro-sw", "repository": { @@ -13,8 +13,7 @@ }, "files": [ "astro-sw.js", - "globals.js", - "strategies/*" + "globals.js" ], "main": "./astro-sw.js", "type": "module", @@ -22,7 +21,10 @@ "node": ">=18.0.0" }, "scripts": { - "test": "vitest run" + "test": "vitest run", + "version:patch": "npm version patch", + "version:minor": "npm version minor", + "version:major": "npm version major" }, "keywords": [ "withastro", @@ -33,7 +35,7 @@ "dependencies": { "esbuild": "^0.25.2" }, - "devDependencies": { - "astro": "^5.6.1" + "peerDependencies": { + "astro": "^5.6" } }