diff --git a/.changeset/brown-impalas-travel.md b/.changeset/brown-impalas-travel.md new file mode 100644 index 000000000000..3947a3fa2635 --- /dev/null +++ b/.changeset/brown-impalas-travel.md @@ -0,0 +1,5 @@ +--- +'@sveltejs/kit': patch +--- + +Include service worker in manifest diff --git a/packages/kit/src/core/build/index.js b/packages/kit/src/core/build/index.js index 0c6751ae0712..df8f43ca14fb 100644 --- a/packages/kit/src/core/build/index.js +++ b/packages/kit/src/core/build/index.js @@ -57,6 +57,7 @@ export async function build(config) { const build_data = { app_dir: config.kit.appDir, manifest_data: options.manifest_data, + service_worker: options.service_worker_entry_file ? 'service_worker.js' : null, // TODO make file configurable? client, server, static: options.manifest_data.assets.map((asset) => posixify(asset.file)), diff --git a/packages/kit/src/core/generate_manifest/index.js b/packages/kit/src/core/generate_manifest/index.js index a2cb05d6e9d6..c98b8f8065a3 100644 --- a/packages/kit/src/core/generate_manifest/index.js +++ b/packages/kit/src/core/generate_manifest/index.js @@ -47,10 +47,15 @@ export function generate_manifest( ? (path) => `() => import('${path}')` : (path) => `() => Promise.resolve().then(() => require('${path}'))`; + const assets = build_data.manifest_data.assets.map((asset) => asset.file); + if (build_data.service_worker) { + assets.push(build_data.service_worker); + } + // prettier-ignore return `{ appDir: ${s(build_data.app_dir)}, - assets: new Set(${s(build_data.manifest_data.assets.map(asset => asset.file))}), + assets: new Set(${s(assets)}), _: { mime: ${s(get_mime_lookup(build_data.manifest_data))}, entry: ${s(build_data.client.entry)}, diff --git a/packages/kit/types/internal.d.ts b/packages/kit/types/internal.d.ts index 8fa01b89a964..294ed943db1d 100644 --- a/packages/kit/types/internal.d.ts +++ b/packages/kit/types/internal.d.ts @@ -209,6 +209,7 @@ export interface ManifestData { export interface BuildData { app_dir: string; manifest_data: ManifestData; + service_worker: string | null; client: { assets: OutputAsset[]; chunks: OutputChunk[];