From 3d54e18a5747b8b04031f8f32a98d91914ddf787 Mon Sep 17 00:00:00 2001 From: Steve Repsher Date: Tue, 12 Sep 2023 03:51:59 +0000 Subject: [PATCH] Use Brotli compression for modern build --- build-scripts/gulp/compress.js | 36 ++++++++++++++++++++++++++++++---- package.json | 1 + yarn.lock | 25 +++++++++++++++++++++-- 3 files changed, 56 insertions(+), 6 deletions(-) diff --git a/build-scripts/gulp/compress.js b/build-scripts/gulp/compress.js index aa1567b721..461c17309d 100644 --- a/build-scripts/gulp/compress.js +++ b/build-scripts/gulp/compress.js @@ -1,19 +1,47 @@ // Tasks to compress +import { constants } from "node:zlib"; import gulp from "gulp"; +import brotli from "gulp-brotli"; import zopfli from "gulp-zopfli-green"; import paths from "../paths.cjs"; +const filesGlob = "*.{js,json,css,svg,xml}"; +const brotliOptions = { + skipLarger: true, + params: { + [constants.BROTLI_PARAM_QUALITY]: constants.BROTLI_MAX_QUALITY, + }, +}; const zopfliOptions = { threshold: 150 }; -const compressDist = (rootDir) => +const compressDistBrotli = (modernDir) => + gulp + .src([`${modernDir}/**/${filesGlob}`]) + .pipe(brotli(brotliOptions)) + .pipe(gulp.dest(modernDir)); + +const compressDistZopfli = (rootDir, modernDir) => gulp .src([ - `${rootDir}/**/*.{js,json,css,svg,xml}`, + `${rootDir}/**/${filesGlob}`, + `!${modernDir}/**/${filesGlob}`, `${rootDir}/{authorize,onboarding}.html`, ]) .pipe(zopfli(zopfliOptions)) .pipe(gulp.dest(rootDir)); -gulp.task("compress-app", () => compressDist(paths.app_output_root)); -gulp.task("compress-hassio", () => compressDist(paths.hassio_output_root)); +const compressAppBrotli = () => compressDistBrotli(paths.app_output_latest); +const compressHassioBrotli = () => + compressDistBrotli(paths.hassio_output_latest); + +const compressAppZopfli = () => + compressDistZopfli(paths.app_output_root, paths.app_output_latest); +const compressHassioZopfli = () => + compressDistZopfli(paths.hassio_output_root, paths.hassio_output_latest); + +gulp.task("compress-app", gulp.parallel(compressAppBrotli, compressAppZopfli)); +gulp.task( + "compress-hassio", + gulp.parallel(compressHassioBrotli, compressHassioZopfli) +); diff --git a/package.json b/package.json index 1b7775ceb0..d6d4c1d614 100644 --- a/package.json +++ b/package.json @@ -206,6 +206,7 @@ "fs-extra": "11.2.0", "glob": "10.3.10", "gulp": "4.0.2", + "gulp-brotli": "3.0.0", "gulp-flatmap": "1.0.2", "gulp-json-transform": "0.4.8", "gulp-merge-json": "2.1.2", diff --git a/yarn.lock b/yarn.lock index da1c028eab..b5f8aae747 100644 --- a/yarn.lock +++ b/yarn.lock @@ -9205,6 +9205,16 @@ __metadata: languageName: node linkType: hard +"gulp-brotli@npm:3.0.0": + version: 3.0.0 + resolution: "gulp-brotli@npm:3.0.0" + dependencies: + plugin-error: "npm:^1.0.1" + through2: "npm:^3.0.1" + checksum: 10/0eea1fc60ae7f256184155b61a30a916007d21d37234698d8cdb299f64f71b4d68ca3182528e7da5d71290079c32c0228573578b76f5af7af7230c31537ef9d2 + languageName: node + linkType: hard + "gulp-cli@npm:^2.2.0": version: 2.3.0 resolution: "gulp-cli@npm:2.3.0" @@ -9584,6 +9594,7 @@ __metadata: glob: "npm:10.3.10" google-timezones-json: "npm:1.2.0" gulp: "npm:4.0.2" + gulp-brotli: "npm:3.0.0" gulp-flatmap: "npm:1.0.2" gulp-json-transform: "npm:0.4.8" gulp-merge-json: "npm:2.1.2" @@ -9998,7 +10009,7 @@ __metadata: languageName: node linkType: hard -"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:~2.0.3": +"inherits@npm:2, inherits@npm:2.0.4, inherits@npm:^2.0.1, inherits@npm:^2.0.3, inherits@npm:^2.0.4, inherits@npm:~2.0.3": version: 2.0.4 resolution: "inherits@npm:2.0.4" checksum: 10/cd45e923bee15186c07fa4c89db0aace24824c482fb887b528304694b2aa6ff8a898da8657046a5dcf3e46cd6db6c61629551f9215f208d7c3f157cf9b290521 @@ -13286,7 +13297,7 @@ __metadata: languageName: node linkType: hard -"readable-stream@npm:3, readable-stream@npm:^3.0.6, readable-stream@npm:^3.6.0": +"readable-stream@npm:2 || 3, readable-stream@npm:3, readable-stream@npm:^3.0.6, readable-stream@npm:^3.6.0": version: 3.6.2 resolution: "readable-stream@npm:3.6.2" dependencies: @@ -15009,6 +15020,16 @@ __metadata: languageName: node linkType: hard +"through2@npm:^3.0.1": + version: 3.0.2 + resolution: "through2@npm:3.0.2" + dependencies: + inherits: "npm:^2.0.4" + readable-stream: "npm:2 || 3" + checksum: 10/98bdffba8e877fd8beb2154adc4eb0d52fad281130f56f6e5d18f85d1e1aa528a7b27317b302eb5443f6636ab045d3c272e6dffc61d984775db284823b90532d + languageName: node + linkType: hard + "through2@npm:^4.0.2": version: 4.0.2 resolution: "through2@npm:4.0.2"