From b239cf44c169bc946d48fee5fa78ea10a7238933 Mon Sep 17 00:00:00 2001
From: Jesse Weaver <pianohacker@gmail.com>
Date: Tue, 17 Oct 2017 16:42:22 -0600
Subject: [PATCH] Bug 15522: Add production JS build mode

To use, run yarn build (or make js-build) with PRODUCTION=1.
---
 gulpfile.js  | 21 +++++++++++++--------
 package.json |  1 +
 yarn.lock    | 33 +++++++++++++++++++++++++++++++--
 3 files changed, 45 insertions(+), 10 deletions(-)

diff --git a/gulpfile.js b/gulpfile.js
index 3dce49592c..eaecbf7c90 100644
--- a/gulpfile.js
+++ b/gulpfile.js
@@ -36,23 +36,28 @@ gulp.task( "watch", () => {
 
 let vendorBuilt = false;
 
-gulp.task( "build", () => {
+function getBundler() {
     let bundler = browserify( {
-        debug: true
-    } )
-        .transform( "babelify", { presets: [ "es2015", "react" ], plugins: [ "transform-class-properties" ] } );
+        debug: !process.env.PRODUCTION,
+    } );
+
+    if ( process.env.DESCRIPTION ) {
+        bundler.transform( "uglifyify" );
+    }
 
+    return bundler;
+}
+
+gulp.task( "build", () => {
     if ( !vendorBuilt ) {
-        browserify( {
-            require: VENDOR_DEPENDENCIES,
-            debug: true,
-        } )
+        getBundler().require( VENDOR_DEPENDENCIES )
             .bundle()
             .on( "error", gutil.log )
             .pipe( source( "vendor.js" ) )
             .pipe( gulp.dest( BASE + "/built/" ) );
     }
 
+    let bundler = getBundler().transform( "babelify", { presets: [ "es2015", "react" ], plugins: [ "transform-class-properties" ] } );
 
     return gulp.src( BUILT_FILES )
         .pipe( tap( file => {
diff --git a/package.json b/package.json
index 2ee718fdd3..7e16d618b7 100644
--- a/package.json
+++ b/package.json
@@ -18,6 +18,7 @@
     "promise-polyfill": "^6.0.2",
     "react": "^16.0.0",
     "react-dom": "^16.0.0",
+    "uglifyify": "^4.0.4",
     "vinyl-source-stream": "^1.1.0",
     "whatwg-fetch": "^2.0.3"
   },
diff --git a/yarn.lock b/yarn.lock
index 5c1b44f8ca..fb77630237 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -788,6 +788,10 @@ combine-source-map@~0.7.1:
     lodash.memoize "~3.0.3"
     source-map "~0.5.3"
 
+commander@~2.11.0:
+  version "2.11.0"
+  resolved "https://registry.yarnpkg.com/commander/-/commander-2.11.0.tgz#157152fd1e7a6c8d98a5b715cf376df928004563"
+
 concat-map@0.0.1:
   version "0.0.1"
   resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b"
@@ -1025,6 +1029,10 @@ expand-tilde@^2.0.2:
   dependencies:
     homedir-polyfill "^1.0.1"
 
+extend@^1.2.1:
+  version "1.3.0"
+  resolved "https://registry.yarnpkg.com/extend/-/extend-1.3.0.tgz#d1516fb0ff5624d2ebf9123ea1dac5a1994004f8"
+
 extend@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.1.tgz#a755ea7bc1adfcc5a31ce7e762dbaadc5e636444"
@@ -1768,7 +1776,7 @@ minimatch@^2.0.1:
   dependencies:
     brace-expansion "^1.0.0"
 
-minimatch@^3.0.4:
+minimatch@^3.0.2, minimatch@^3.0.4:
   version "3.0.4"
   resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.0.4.tgz#5166e286457f03306064be5497e8dbb0c3d32083"
   dependencies:
@@ -2280,6 +2288,10 @@ source-map@^0.5.6, source-map@~0.5.3:
   version "0.5.6"
   resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.6.tgz#75ce38f52bf0733c5a7f0c118d81334a2bb5f412"
 
+source-map@~0.5.1:
+  version "0.5.7"
+  resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc"
+
 sparkles@^1.0.0:
   version "1.0.0"
   resolved "https://registry.yarnpkg.com/sparkles/-/sparkles-1.0.0.tgz#1acbbfb592436d10bbe8f785b7cc6f82815012c3"
@@ -2372,7 +2384,7 @@ through2@^2.0.0, through2@^2.0.3:
     readable-stream "^2.1.5"
     xtend "~4.0.1"
 
-"through@>=2.2.7 <3":
+"through@>=2.2.7 <3", through@~2.3.4:
   version "2.3.8"
   resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5"
 
@@ -2416,6 +2428,23 @@ ua-parser-js@^0.7.9:
   version "0.7.14"
   resolved "https://registry.yarnpkg.com/ua-parser-js/-/ua-parser-js-0.7.14.tgz#110d53fa4c3f326c121292bbeac904d2e03387ca"
 
+uglify-es@^3.0.15:
+  version "3.1.3"
+  resolved "https://registry.yarnpkg.com/uglify-es/-/uglify-es-3.1.3.tgz#a21eeb149cb120a1f8302563689e19496550780b"
+  dependencies:
+    commander "~2.11.0"
+    source-map "~0.5.1"
+
+uglifyify@^4.0.4:
+  version "4.0.4"
+  resolved "https://registry.yarnpkg.com/uglifyify/-/uglifyify-4.0.4.tgz#929f47acdbbf5e0626eae5002acc1e32349c7b3c"
+  dependencies:
+    convert-source-map "~1.1.0"
+    extend "^1.2.1"
+    minimatch "^3.0.2"
+    through "~2.3.4"
+    uglify-es "^3.0.15"
+
 umd@^3.0.0:
   version "3.0.1"
   resolved "https://registry.yarnpkg.com/umd/-/umd-3.0.1.tgz#8ae556e11011f63c2596708a8837259f01b3d60e"
-- 
2.15.1