From e6cdc359006a39edbec9447bdeb2419a1805450d Mon Sep 17 00:00:00 2001 From: Ward Peeters Date: Fri, 23 Aug 2019 03:21:32 +0200 Subject: [PATCH 1/4] feat(lighthouse-viewer): minify report generator --- build/build-bundle.js | 2 +- build/build-lightrider-bundles.js | 2 +- build/build-viewer.js | 25 ++++++++++++++++++++++++- package.json | 2 +- yarn.lock | 20 ++++++++++---------- 5 files changed, 37 insertions(+), 14 deletions(-) diff --git a/build/build-bundle.js b/build/build-bundle.js index 0cbc96f348ae..a05679995992 100644 --- a/build/build-bundle.js +++ b/build/build-bundle.js @@ -54,7 +54,7 @@ async function browserifyFile(entryPath, distPath) { bundle // Transform the fs.readFile etc into inline strings. - .transform('brfs', {global: true, parserOpts: {ecmaVersion: 10}}) + .transform('@wardpeet/brfs', {global: true, parserOpts: {ecmaVersion: 10}}) // Strip everything out of package.json includes except for the version. .transform('package-json-versionify'); diff --git a/build/build-lightrider-bundles.js b/build/build-lightrider-bundles.js index 5a040d5338a5..08cee17d764e 100644 --- a/build/build-lightrider-bundles.js +++ b/build/build-lightrider-bundles.js @@ -37,7 +37,7 @@ function buildEntryPoint() { function buildReportGenerator() { browserify(generatorFilename, {standalone: 'ReportGenerator'}) // Transform the fs.readFile etc into inline strings. - .transform('brfs', {global: true, parserOpts: {ecmaVersion: 10}}) + .transform('@wardpeet/brfs', {global: true, parserOpts: {ecmaVersion: 10}}) .bundle((err, src) => { if (err) throw err; fs.writeFileSync(bundleOutFile, src.toString()); diff --git a/build/build-viewer.js b/build/build-viewer.js index 3065e9cf1a90..507dc2fad56a 100644 --- a/build/build-viewer.js +++ b/build/build-viewer.js @@ -10,6 +10,7 @@ const path = require('path'); const {promisify} = require('util'); const readFileAsync = promisify(fs.readFile); const writeFileAsync = promisify(fs.writeFile); +const stream = require('stream'); const browserify = require('browserify'); const cpy = require('cpy'); @@ -106,7 +107,29 @@ async function compileJs() { // JS bundle from browserified ReportGenerator. const generatorFilename = `${sourceDir}/../lighthouse-core/report/report-generator.js`; const generatorBrowserify = browserify(generatorFilename, {standalone: 'ReportGenerator'}) - .transform('brfs'); + .transform('@wardpeet/brfs', { + /** + * @param {string} file + */ + readFileSyncTransform: file => { + return new stream.Transform({ + transform(chunk, enc, next) { + if (file.endsWith('.js')) { + const result = terser.minify(chunk.toString()); + if (result.error) { + throw result.error; + } + + this.push(result.code); + } else { + this.push(chunk); + } + + next(); + } + }); + }, + }); /** @type {Promise} */ const generatorJsPromise = new Promise((resolve, reject) => { diff --git a/package.json b/package.json index c3ad8d1fabdb..3da52cd2d14a 100644 --- a/package.json +++ b/package.json @@ -93,12 +93,12 @@ "@types/update-notifier": "^1.0.2", "@types/ws": "^4.0.1", "@types/yargs": "^8.0.2", + "@wardpeet/brfs": "^2.1.0-0", "angular": "^1.7.4", "archiver": "^3.0.0", "babel-core": "^6.26.0", "babel-plugin-syntax-async-generators": "^6.13.0", "babel-plugin-syntax-object-rest-spread": "^6.13.0", - "brfs": "^2.0.2", "browserify": "^16.2.3", "bundlesize": "^0.17.2", "chalk": "^2.4.1", diff --git a/yarn.lock b/yarn.lock index 9363da50a327..28e86fa05d66 100644 --- a/yarn.lock +++ b/yarn.lock @@ -727,6 +727,16 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-8.0.2.tgz#0f9c7b236e2d78cd8f4b6502de15d0728aa29385" integrity sha512-Upj9YsBZRgjEVPvsaeGru48d2JiyzBNZkmkebHyoaQ+UM9wqj/rp5mkilRjSq/Ga45yfd/zwrNuML9f2gGfVpw== +"@wardpeet/brfs@^2.1.0-0": + version "2.1.0-0" + resolved "https://registry.yarnpkg.com/@wardpeet/brfs/-/brfs-2.1.0-0.tgz#04e77dc088ca5bbc5b07051860faa45569e799f3" + integrity sha512-ra9bDHPwsI+HBKQJk9CLMYaFDHLA7QGEH0teWlIcZ6/CHtFvjRb2YjwLBXc8jgtw+3LvCEuqme/BQaDfo74fUA== + dependencies: + quote-stream "^1.0.1" + resolve "^1.1.5" + static-module "^3.0.2" + through2 "^2.0.0" + JSONStream@^1.0.3, JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -1372,16 +1382,6 @@ braces@^2.3.1: split-string "^3.0.2" to-regex "^3.0.1" -brfs@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/brfs/-/brfs-2.0.2.tgz#44237878fa82aa479ce4f5fe2c1796ec69f07845" - integrity sha512-IrFjVtwu4eTJZyu8w/V2gxU7iLTtcHih67sgEdzrhjLBMHp2uYefUBfdM4k2UvcuWMgV7PQDZHSLeNWnLFKWVQ== - dependencies: - quote-stream "^1.0.1" - resolve "^1.1.5" - static-module "^3.0.2" - through2 "^2.0.0" - brorand@^1.0.1: version "1.1.0" resolved "https://registry.yarnpkg.com/brorand/-/brorand-1.1.0.tgz#12c25efe40a45e3c323eb8675a0a0ce57b22371f" From 7aefe885ab51f38b16947551f4e60ccb618d3277 Mon Sep 17 00:00:00 2001 From: Ward Peeters Date: Fri, 23 Aug 2019 14:37:06 +0200 Subject: [PATCH 2/4] fix lint --- build/build-viewer.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build/build-viewer.js b/build/build-viewer.js index 507dc2fad56a..e2ab54d0d876 100644 --- a/build/build-viewer.js +++ b/build/build-viewer.js @@ -126,7 +126,7 @@ async function compileJs() { } next(); - } + }, }); }, }); From e1765f51acc6c348aa255d0b2feaa18f980ca26d Mon Sep 17 00:00:00 2001 From: Ward Peeters Date: Tue, 3 Sep 2019 17:32:05 +0200 Subject: [PATCH 3/4] move inline function to root function --- build/build-viewer.js | 46 +++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 21 deletions(-) diff --git a/build/build-viewer.js b/build/build-viewer.js index e2ab54d0d876..b8b490095d30 100644 --- a/build/build-viewer.js +++ b/build/build-viewer.js @@ -99,6 +99,30 @@ async function html() { await safeWriteFileAsync(`${distDir}/index.html`, htmlSrc); } +/** + * Minifies file which are read by fs.readFileSync (brfs) + * + * @param {string} file + */ +function minifyReadFileContent(file) { + return new stream.Transform({ + transform(chunk, enc, next) { + if (file.endsWith('.js')) { + const result = terser.minify(chunk.toString()); + if (result.error) { + throw result.error; + } + + this.push(result.code); + } else { + this.push(chunk); + } + + next(); + }, + }); +} + /** * Combine multiple JS files into single viewer.js file. * @return {Promise} @@ -108,27 +132,7 @@ async function compileJs() { const generatorFilename = `${sourceDir}/../lighthouse-core/report/report-generator.js`; const generatorBrowserify = browserify(generatorFilename, {standalone: 'ReportGenerator'}) .transform('@wardpeet/brfs', { - /** - * @param {string} file - */ - readFileSyncTransform: file => { - return new stream.Transform({ - transform(chunk, enc, next) { - if (file.endsWith('.js')) { - const result = terser.minify(chunk.toString()); - if (result.error) { - throw result.error; - } - - this.push(result.code); - } else { - this.push(chunk); - } - - next(); - }, - }); - }, + readFileSyncTransform: minifyReadFileContent, }); /** @type {Promise} */ From 059c470eb468a1b26e2c9ce96de6f1e8e325f4ca Mon Sep 17 00:00:00 2001 From: Paul Irish Date: Fri, 11 Oct 2019 12:45:32 -0700 Subject: [PATCH 4/4] pin to exact version --- package.json | 2 +- yarn.lock | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/package.json b/package.json index 3da52cd2d14a..732b79b51b14 100644 --- a/package.json +++ b/package.json @@ -93,7 +93,7 @@ "@types/update-notifier": "^1.0.2", "@types/ws": "^4.0.1", "@types/yargs": "^8.0.2", - "@wardpeet/brfs": "^2.1.0-0", + "@wardpeet/brfs": "2.1.0-0", "angular": "^1.7.4", "archiver": "^3.0.0", "babel-core": "^6.26.0", diff --git a/yarn.lock b/yarn.lock index 28e86fa05d66..f7dab875362d 100644 --- a/yarn.lock +++ b/yarn.lock @@ -727,7 +727,7 @@ resolved "https://registry.yarnpkg.com/@types/yargs/-/yargs-8.0.2.tgz#0f9c7b236e2d78cd8f4b6502de15d0728aa29385" integrity sha512-Upj9YsBZRgjEVPvsaeGru48d2JiyzBNZkmkebHyoaQ+UM9wqj/rp5mkilRjSq/Ga45yfd/zwrNuML9f2gGfVpw== -"@wardpeet/brfs@^2.1.0-0": +"@wardpeet/brfs@2.1.0-0": version "2.1.0-0" resolved "https://registry.yarnpkg.com/@wardpeet/brfs/-/brfs-2.1.0-0.tgz#04e77dc088ca5bbc5b07051860faa45569e799f3" integrity sha512-ra9bDHPwsI+HBKQJk9CLMYaFDHLA7QGEH0teWlIcZ6/CHtFvjRb2YjwLBXc8jgtw+3LvCEuqme/BQaDfo74fUA==