From 3119c04e10844c0fcc0fc1f39ccc92cfcc3e1d89 Mon Sep 17 00:00:00 2001 From: Bas van Zanten Date: Fri, 12 Apr 2024 15:59:54 +0200 Subject: [PATCH] feat: Add zip compression settings (#605) --- src/core/utils/building/resolve-config.ts | 1 + src/core/utils/testing/fake-objects.ts | 1 + src/core/zip.ts | 10 +++++++++- src/types/index.ts | 9 +++++++++ 4 files changed, 20 insertions(+), 1 deletion(-) diff --git a/src/core/utils/building/resolve-config.ts b/src/core/utils/building/resolve-config.ts index e692ef68..4200f6c7 100644 --- a/src/core/utils/building/resolve-config.ts +++ b/src/core/utils/building/resolve-config.ts @@ -223,6 +223,7 @@ function resolveZipConfig( artifactTemplate: '{{name}}-{{version}}-{{browser}}.zip', sourcesRoot: root, includeSources: [], + compressionLevel: 9, ...mergedConfig.zip, excludeSources: [ '**/node_modules', diff --git a/src/core/utils/testing/fake-objects.ts b/src/core/utils/testing/fake-objects.ts index 77f1502d..374726b0 100644 --- a/src/core/utils/testing/fake-objects.ts +++ b/src/core/utils/testing/fake-objects.ts @@ -288,6 +288,7 @@ export const fakeResolvedConfig = fakeObjectCreator(() => { name: faker.person.firstName().toLowerCase(), downloadedPackagesDir: fakeDir(), downloadPackages: [], + compressionLevel: 9, }, transformManifest: () => {}, userConfigMetadata: {}, diff --git a/src/core/zip.ts b/src/core/zip.ts index 8058a2e3..d647226c 100644 --- a/src/core/zip.ts +++ b/src/core/zip.ts @@ -135,7 +135,15 @@ async function zipDir( } } await options?.additionalWork?.(archive); - const buffer = await archive.generateAsync({ type: 'base64' }); + const buffer = await archive.generateAsync({ + type: 'base64', + ...(wxt.config.zip.compressionLevel === 0 + ? { compression: 'STORE' } + : { + compression: 'DEFLATE', + compressionOptions: { level: wxt.config.zip.compressionLevel }, + }), + }); await fs.writeFile(outputPath, buffer, 'base64'); } diff --git a/src/types/index.ts b/src/types/index.ts index 1cea25b6..068ee3eb 100644 --- a/src/types/index.ts +++ b/src/types/index.ts @@ -202,6 +202,14 @@ export interface InlineConfig { * ["@scope/package-name@1.1.3", "package-name@^2"] */ downloadPackages?: string[]; + /** + * Compression level to use when zipping files. + * + * Levels: 0 (no compression) to 9 (maximum compression). + * + * @default 9 + */ + compressionLevel?: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; }; /** @@ -1079,6 +1087,7 @@ export interface ResolvedConfig { sourcesRoot: string; downloadedPackagesDir: string; downloadPackages: string[]; + compressionLevel: 0 | 1 | 2 | 3 | 4 | 5 | 6 | 7 | 8 | 9; }; /** * @deprecated Use `build:manifestGenerated` hook instead.