From 3475cfec360f8c871e44547707c80032b5f712aa Mon Sep 17 00:00:00 2001 From: ChaosExAnima Date: Tue, 1 Apr 2025 12:51:45 +0200 Subject: [PATCH] add asset integrity key to file --- config/vite/plugin-manifest-sri.ts | 34 +++++++++++++++++++++--------- 1 file changed, 24 insertions(+), 10 deletions(-) diff --git a/config/vite/plugin-manifest-sri.ts b/config/vite/plugin-manifest-sri.ts index e940e35a63..97cf367b03 100644 --- a/config/vite/plugin-manifest-sri.ts +++ b/config/vite/plugin-manifest-sri.ts @@ -18,6 +18,7 @@ export interface Options { declare module 'vite' { interface ManifestChunk { integrity: string; + assetIntegrity: Record; } } @@ -46,17 +47,30 @@ async function augmentManifest( .readFile(manifestPath, 'utf-8') .then((file) => JSON.parse(file) as Manifest); - if (manifest) { - await Promise.all( - Object.values(manifest).map(async (chunk) => { - chunk.integrity = integrityForAsset( - await fs.readFile(resolveInOutDir(chunk.file)), - algorithms, - ); - }), - ); - await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2)); + if (!manifest) { + throw new Error(`Manifest file not found at ${manifestPath}`); } + await Promise.all( + Object.values(manifest).map(async (chunk) => { + chunk.integrity = integrityForAsset( + await fs.readFile(resolveInOutDir(chunk.file)), + algorithms, + ); + if (!chunk.assets && !chunk.css) { + return; + } + chunk.assetIntegrity = {}; + await Promise.all( + (chunk.assets ?? []).concat(chunk.css ?? []).map(async (asset) => { + chunk.assetIntegrity[asset] = integrityForAsset( + await fs.readFile(resolveInOutDir(asset)), + algorithms, + ); + }), + ); + }), + ); + await fs.writeFile(manifestPath, JSON.stringify(manifest, null, 2)); } function integrityForAsset(source: Buffer, algorithms: string[]) {