From 22b9a2b1e8b4d1cb22834109927b82639469ef9b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jo=C3=A3o=20Moreno?= Date: Wed, 6 Jan 2021 14:19:19 +0100 Subject: [PATCH] update esbuild --- build/lib/optimize.js | 64 ++++++++++-------------------------- build/lib/optimize.ts | 76 ++++++++++++------------------------------- build/package.json | 6 ++-- build/yarn.lock | 5 +++ package.json | 1 - yarn.lock | 26 --------------- 6 files changed, 46 insertions(+), 132 deletions(-) diff --git a/build/lib/optimize.js b/build/lib/optimize.js index 1f3cc8f1be0..25f3362e2e3 100644 --- a/build/lib/optimize.js +++ b/build/lib/optimize.js @@ -9,7 +9,6 @@ const es = require("event-stream"); const gulp = require("gulp"); const concat = require("gulp-concat"); const filter = require("gulp-filter"); -const flatmap = require("gulp-flatmap"); const fancyLog = require("fancy-log"); const ansiColors = require("ansi-colors"); const path = require("path"); @@ -162,58 +161,31 @@ function optimizeTask(opts) { }; } exports.optimizeTask = optimizeTask; -// declare class FileWithCopyright extends VinylFile { -// public __hasOurCopyright: boolean; -// } -/** - * Wrap around uglify and allow the preserveComments function - * to have a file "context" to include our copyright only once per file. - */ -function uglifyWithCopyrights() { - const esbuild = require('gulp-esbuild'); - // const preserveComments = (f: FileWithCopyright) => { - // return (_node: any, comment: { value: string; type: string; }) => { - // const text = comment.value; - // const type = comment.type; - // if (/@minifier_do_not_preserve/.test(text)) { - // return false; - // } - // const isOurCopyright = IS_OUR_COPYRIGHT_REGEXP.test(text); - // if (isOurCopyright) { - // if (f.__hasOurCopyright) { - // return false; - // } - // f.__hasOurCopyright = true; - // return true; - // } - // if ('comment2' === type) { - // // check for /*!. Note that text doesn't contain leading /* - // return (text.length > 0 && text[0] === '!') || /@preserve|license|@cc_on|copyright/i.test(text); - // } else if ('comment1' === type) { - // return /license|copyright/i.test(text); - // } - // return false; - // }; - // }; - const input = es.through(); - const output = input - .pipe(flatmap((stream, f) => { - return stream.pipe(esbuild({ - outfile: f.relative, - sourcemap: true, - minify: true, - })); - })); - return es.duplex(input, output); -} function minifyTask(src, sourceMapBaseUrl) { + const esbuild = require('esbuild'); const sourceMappingURL = sourceMapBaseUrl ? ((f) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined; return cb => { const minifyCSS = require('gulp-cssnano'); const sourcemaps = require('gulp-sourcemaps'); const jsFilter = filter('**/*.js', { restore: true }); const cssFilter = filter('**/*.css', { restore: true }); - pump(gulp.src([src + '/**', '!' + src + '/**/*.map']), jsFilter, sourcemaps.init({ loadMaps: true }), uglifyWithCopyrights(), jsFilter.restore, cssFilter, minifyCSS({ reduceIdents: false }), cssFilter.restore, sourcemaps.mapSources((sourcePath) => { + pump(gulp.src([src + '/**', '!' + src + '/**/*.map']), jsFilter, sourcemaps.init({ loadMaps: true }), es.map((f, cb) => { + esbuild.build({ + entryPoints: [f.path], + minify: true, + sourcemap: 'external', + outdir: '.', + platform: 'node', + target: ['node12.18'], + write: false + }).then(res => { + const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path)); + const sourceMapFile = res.outputFiles.find(f => /\.js\.map$/.test(f.path)); + f.contents = Buffer.from(jsFile.contents); + f.sourceMap = JSON.parse(sourceMapFile.text); + cb(undefined, f); + }, cb); + }), jsFilter.restore, cssFilter, minifyCSS({ reduceIdents: false }), cssFilter.restore, sourcemaps.mapSources((sourcePath) => { if (sourcePath === 'bootstrap-fork.js') { return 'bootstrap-fork.orig.js'; } diff --git a/build/lib/optimize.ts b/build/lib/optimize.ts index 81d57745a9f..d611ef2dafa 100644 --- a/build/lib/optimize.ts +++ b/build/lib/optimize.ts @@ -9,7 +9,6 @@ import * as es from 'event-stream'; import * as gulp from 'gulp'; import * as concat from 'gulp-concat'; import * as filter from 'gulp-filter'; -import * as flatmap from 'gulp-flatmap'; import * as fancyLog from 'fancy-log'; import * as ansiColors from 'ansi-colors'; import * as path from 'path'; @@ -232,61 +231,8 @@ export function optimizeTask(opts: IOptimizeTaskOpts): () => NodeJS.ReadWriteStr }; } -// declare class FileWithCopyright extends VinylFile { -// public __hasOurCopyright: boolean; -// } -/** - * Wrap around uglify and allow the preserveComments function - * to have a file "context" to include our copyright only once per file. - */ -function uglifyWithCopyrights(): NodeJS.ReadWriteStream { - const esbuild = require('gulp-esbuild') as typeof import('gulp-esbuild'); - - // const preserveComments = (f: FileWithCopyright) => { - // return (_node: any, comment: { value: string; type: string; }) => { - // const text = comment.value; - // const type = comment.type; - - // if (/@minifier_do_not_preserve/.test(text)) { - // return false; - // } - - // const isOurCopyright = IS_OUR_COPYRIGHT_REGEXP.test(text); - - // if (isOurCopyright) { - // if (f.__hasOurCopyright) { - // return false; - // } - // f.__hasOurCopyright = true; - // return true; - // } - - // if ('comment2' === type) { - // // check for /*!. Note that text doesn't contain leading /* - // return (text.length > 0 && text[0] === '!') || /@preserve|license|@cc_on|copyright/i.test(text); - // } else if ('comment1' === type) { - // return /license|copyright/i.test(text); - // } - // return false; - // }; - // }; - - const input = es.through(); - const output = input - .pipe(flatmap((stream, f) => { - return stream.pipe(esbuild({ - outfile: f.relative, - sourcemap: true, - minify: true, - platform: 'node', - target: ['node12.18'] - })); - })); - - return es.duplex(input, output); -} - export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => void { + const esbuild = require('esbuild') as typeof import('esbuild'); const sourceMappingURL = sourceMapBaseUrl ? ((f: any) => `${sourceMapBaseUrl}/${f.relative}.map`) : undefined; return cb => { @@ -300,7 +246,25 @@ export function minifyTask(src: string, sourceMapBaseUrl?: string): (cb: any) => gulp.src([src + '/**', '!' + src + '/**/*.map']), jsFilter, sourcemaps.init({ loadMaps: true }), - uglifyWithCopyrights(), + es.map((f: any, cb) => { + esbuild.build({ + entryPoints: [f.path], + minify: true, + sourcemap: 'external', + outdir: '.', + platform: 'node', + target: ['node12.18'], + write: false + }).then(res => { + const jsFile = res.outputFiles.find(f => /\.js$/.test(f.path))!; + const sourceMapFile = res.outputFiles.find(f => /\.js\.map$/.test(f.path))!; + + f.contents = Buffer.from(jsFile.contents); + f.sourceMap = JSON.parse(sourceMapFile.text); + + cb(undefined, f); + }, cb); + }), jsFilter.restore, cssFilter, minifyCSS({ reduceIdents: false }), diff --git a/build/package.json b/build/package.json index 091f8b77940..44660f4baff 100644 --- a/build/package.json +++ b/build/package.json @@ -34,9 +34,11 @@ "applicationinsights": "1.0.8", "azure-storage": "^2.1.0", "electron-osx-sign": "^0.4.16", + "esbuild": "^0.8.30", "iconv-lite-umd": "0.6.8", "jsonc-parser": "^2.3.0", "mime": "^1.4.1", + "source-map": "0.6.1", "typescript": "4.2.0-dev.20201207", "vsce": "1.48.0" }, @@ -46,7 +48,5 @@ "postinstall": "npm run compile", "npmCheckJs": "tsc --noEmit" }, - "dependencies": { - "source-map": "0.6.1" - } + "dependencies": {} } diff --git a/build/yarn.lock b/build/yarn.lock index 326c464c412..b987d878a15 100644 --- a/build/yarn.lock +++ b/build/yarn.lock @@ -679,6 +679,11 @@ entities@^1.1.1, entities@~1.1.1: resolved "https://registry.yarnpkg.com/entities/-/entities-1.1.2.tgz#bdfa735299664dfafd34529ed4f8522a275fea56" integrity sha512-f2LZMYl1Fzu7YSBKg+RoROelpOaNrcGmE9AZubeDfrCEia483oW4MI4VyFd5VNHIgQ/7qm1I0wUHK1eJnn2y2w== +esbuild@^0.8.30: + version "0.8.30" + resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.30.tgz#3d057ff9ffe6d5d30bccb0afe8cc92a2e69622d3" + integrity sha512-gCJQYUMO9QNrfpNOIiCnFoX41nWiPFCvURBQF+qWckyJ7gmw2xCShdKCXvS+RZcQ5krcxEOLIkzujqclePKhfw== + eslint-scope@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.0.0.tgz#e87c8887c73e8d1ec84f1ca591645c358bfc8fb9" diff --git a/package.json b/package.json index 883ab90dc2e..b9826c56fab 100644 --- a/package.json +++ b/package.json @@ -135,7 +135,6 @@ "gulp-buffer": "0.0.2", "gulp-concat": "^2.6.1", "gulp-cssnano": "^2.1.3", - "gulp-esbuild": "^0.3.12", "gulp-eslint": "^5.0.0", "gulp-filter": "^5.1.0", "gulp-flatmap": "^1.0.2", diff --git a/yarn.lock b/yarn.lock index 712616fbcbf..6b49cf9cff1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3194,11 +3194,6 @@ es6-weak-map@^2.0.1: es6-iterator "^2.0.1" es6-symbol "^3.1.1" -esbuild@^0.8.29: - version "0.8.29" - resolved "https://registry.yarnpkg.com/esbuild/-/esbuild-0.8.29.tgz#cc20fb752e0905a3546d68ae1be58f9b97044c39" - integrity sha512-UDsEoeXuctVgG2hEts1Hwq2jYDGqV7nksEHEZaiCy2v+lXF5ButX4ErPAJAFi5ZNKKW+6Pom93pArV7hki6HnQ== - escalade@^3.0.2: version "3.0.2" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.0.2.tgz#6a580d70edb87880f22b4c91d0d56078df6962c4" @@ -4583,15 +4578,6 @@ gulp-cssnano@^2.1.3: plugin-error "^1.0.1" vinyl-sourcemaps-apply "^0.2.1" -gulp-esbuild@^0.3.12: - version "0.3.12" - resolved "https://registry.yarnpkg.com/gulp-esbuild/-/gulp-esbuild-0.3.12.tgz#3b8b8e8110b445af76b3fb145fc208d86a6d0ef5" - integrity sha512-gUNMGMnfvF7tHvJilpXqH67phe25jVDnstqQQ69mS7DsPtI4LKPnF8y5o0rt56ww8+Pf9MmT+sKJfErqUGt+RA== - dependencies: - esbuild "^0.8.29" - plugin-error "^1.0.1" - vinyl "^2.2.1" - gulp-eslint@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/gulp-eslint/-/gulp-eslint-5.0.0.tgz#2a2684095f774b2cf79310262078c56cc7a12b52" @@ -10638,18 +10624,6 @@ vinyl@^2.0.2, vinyl@^2.2.0: remove-trailing-separator "^1.0.1" replace-ext "^1.0.0" -vinyl@^2.2.1: - version "2.2.1" - resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.2.1.tgz#23cfb8bbab5ece3803aa2c0a1eb28af7cbba1974" - integrity sha512-LII3bXRFBZLlezoG5FfZVcXflZgWP/4dCwKtxd5ky9+LOtM4CS3bIRQsmR1KMnMW07jpE8fqR2lcxPZ+8sJIcw== - dependencies: - clone "^2.1.1" - clone-buffer "^1.0.0" - clone-stats "^1.0.0" - cloneable-readable "^1.0.0" - remove-trailing-separator "^1.0.1" - replace-ext "^1.0.0" - vinyl@~2.0.1: version "2.0.2" resolved "https://registry.yarnpkg.com/vinyl/-/vinyl-2.0.2.tgz#0a3713d8d4e9221c58f10ca16c0116c9e25eda7c"