// 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 compressModern = (rootDir, modernDir, compress) => gulp .src([`${modernDir}/**/${filesGlob}`, `${rootDir}/sw-modern.js`], { base: rootDir, allowEmpty: true, }) .pipe(compress === "zopfli" ? zopfli(zopfliOptions) : brotli(brotliOptions)) .pipe(gulp.dest(rootDir)); const compressOther = (rootDir, modernDir, compress) => gulp .src( [ `${rootDir}/**/${filesGlob}`, `!${modernDir}/**/${filesGlob}`, `!${rootDir}/{sw-modern,service_worker}.js`, `${rootDir}/{authorize,onboarding}.html`, ], { base: rootDir, allowEmpty: true } ) .pipe(compress === "zopfli" ? zopfli(zopfliOptions) : brotli(brotliOptions)) .pipe(gulp.dest(rootDir)); const compressAppModernBrotli = () => compressModern(paths.app_output_root, paths.app_output_latest, "brotli"); const compressAppModernZopfli = () => compressModern(paths.app_output_root, paths.app_output_latest, "zopfli"); const compressHassioModernBrotli = () => compressModern( paths.hassio_output_root, paths.hassio_output_latest, "brotli" ); const compressHassioModernZopfli = () => compressModern( paths.hassio_output_root, paths.hassio_output_latest, "zopfli" ); const compressAppOtherBrotli = () => compressOther(paths.app_output_root, paths.app_output_latest, "brotli"); const compressAppOtherZopfli = () => compressOther(paths.app_output_root, paths.app_output_latest, "zopfli"); const compressHassioOtherBrotli = () => compressOther(paths.hassio_output_root, paths.hassio_output_latest, "brotli"); const compressHassioOtherZopfli = () => compressOther(paths.hassio_output_root, paths.hassio_output_latest, "zopfli"); gulp.task( "compress-app", gulp.parallel( compressAppModernBrotli, compressAppOtherBrotli, compressAppModernZopfli, compressAppOtherZopfli ) ); gulp.task( "compress-hassio", gulp.parallel( compressHassioModernBrotli, compressHassioOtherBrotli, compressHassioModernZopfli, compressHassioOtherZopfli ) );