@@ -35,6 +35,7 @@ const glob = require("glob");
3535const crypto = require ( "crypto" ) ;
3636const rename = require ( "gulp-rename" ) ;
3737const execSync = require ( 'child_process' ) . execSync ;
38+ const terser = require ( 'terser' ) ;
3839
3940function cleanDist ( ) {
4041 return del ( [ 'dist' , 'dist-test' ] ) ;
@@ -104,7 +105,6 @@ function _deletePhoenixProSourceFolder() {
104105 for ( const folder of phoenixProFolders ) {
105106 if ( fs . existsSync ( folder ) ) {
106107 fs . rmSync ( folder , { recursive : true , force : true } ) ;
107- console . log ( `Deleted phoenix-pro source folder: ${ folder } ` ) ;
108108 }
109109 }
110110 resolve ( ) ;
@@ -581,24 +581,69 @@ function containsRegExpExcludingEmpty(str) {
581581}
582582
583583
584+ // Paths that should be minified during production builds
585+ const minifyablePaths = [
586+ 'src/extensionsIntegrated/phoenix-pro/browser-context'
587+ ] ;
588+
589+ function _minifyBrowserContextFile ( fileContent ) {
590+ const minified = terser . minify ( fileContent , {
591+ mangle : false ,
592+ compress : {
593+ unused : false
594+ } ,
595+ output : {
596+ comments : function ( node , comment ) {
597+ const text = comment . value . trim ( ) ;
598+ return text . includes ( "DONT_STRIP_MINIFY:" ) ;
599+ }
600+ }
601+ } ) ;
602+
603+ if ( minified . error ) {
604+ throw new Error ( `Failed to minify file: ${ minified . error } ` ) ;
605+ }
606+
607+ return minified . code ;
608+ }
609+
610+ function _isMinifyablePath ( filePath ) {
611+ const normalizedFilePath = path . normalize ( filePath ) ;
612+ return minifyablePaths . some ( minifyPath =>
613+ normalizedFilePath . startsWith ( path . normalize ( minifyPath ) )
614+ ) ;
615+ }
616+
617+ function getKey ( filePath , isDevBuild ) {
618+ return isDevBuild + filePath ;
619+ }
620+
584621const textContentMap = { } ;
585622const excludeSuffixPathsInlining = [ "MessageIds.json" ] ;
586- function inlineTextRequire ( file , content , srcDir ) {
623+ function inlineTextRequire ( file , content , srcDir , isDevBuild = true ) {
587624 if ( content . includes ( `'text!` ) || content . includes ( "`text!" ) ) {
588625 throw new Error ( `in file ${ file } require("text!...") should always use a double quote "text! instead of " or \`` ) ;
589626 }
590627 if ( content . includes ( `"text!` ) ) {
591628 const requireFragments = extractRequireTextFragments ( content ) ;
592629 for ( const { requirePath, requireStatement} of requireFragments ) {
593- let textContent = textContentMap [ requirePath ] ;
594630 let filePath = srcDir + requirePath ;
595631 if ( requirePath . startsWith ( "./" ) ) {
596632 filePath = path . join ( path . dirname ( file ) , requirePath ) ;
597633 }
634+ let textContent = textContentMap [ getKey ( filePath , isDevBuild ) ] ;
635+
598636 if ( ! textContent ) {
599637 console . log ( "reading file at path: " , filePath ) ;
600- const fileContent = fs . readFileSync ( filePath , "utf8" ) ;
601- textContentMap [ requirePath ] = fileContent ;
638+ let fileContent = fs . readFileSync ( filePath , "utf8" ) ;
639+
640+ // Minify inline if this is a minifyable path and we're in production mode
641+ if ( ! isDevBuild && _isMinifyablePath ( filePath ) ) {
642+ console . log ( "Minifying file inline:" , filePath ) ;
643+ fileContent = _minifyBrowserContextFile ( fileContent ) ;
644+ }
645+
646+ textContentMap [ getKey ( filePath , isDevBuild ) ] = fileContent ;
602647 textContent = fileContent ;
603648 }
604649 if ( ( requirePath . endsWith ( ".js" ) && ! requirePath . includes ( "./" ) ) // js files that are relative paths are ok
@@ -626,7 +671,7 @@ function inlineTextRequire(file, content, srcDir) {
626671 return content ;
627672}
628673
629- function makeBracketsConcatJS ( ) {
674+ function _makeBracketsConcatJSInternal ( isDevBuild = true ) {
630675 return new Promise ( ( resolve ) => {
631676 const srcDir = "src/" ;
632677 const DO_NOT_CONCATENATE = [
@@ -660,7 +705,7 @@ function makeBracketsConcatJS() {
660705 console . log ( "Merging: " , requirePath ) ;
661706 mergeCount ++ ;
662707 content = content . replace ( "define(" , `define("${ requirePath } ", ` ) ;
663- content = inlineTextRequire ( file , content , srcDir ) ;
708+ content = inlineTextRequire ( file , content , srcDir , isDevBuild ) ;
664709 concatenatedFile = concatenatedFile + "\n" + content ;
665710 }
666711 }
@@ -671,6 +716,14 @@ function makeBracketsConcatJS() {
671716 } ) ;
672717}
673718
719+ function makeBracketsConcatJS ( ) {
720+ return _makeBracketsConcatJSInternal ( true ) ;
721+ }
722+
723+ function makeBracketsConcatJSWithMinifiedBrowserScripts ( ) {
724+ return _makeBracketsConcatJSInternal ( false ) ;
725+ }
726+
674727function _renameBracketsConcatAsBracketsJSInDist ( ) {
675728 return new Promise ( ( resolve ) => {
676729 fs . unlinkSync ( "dist/brackets.js" ) ;
@@ -759,8 +812,8 @@ function makeExtensionConcatJS(extensionName) {
759812 `define("${ defineId } ", `
760813 ) ;
761814
762- // inline text requires
763- content = inlineTextRequire ( file , content , extensionDir ) ;
815+ // inline text requires (extensions use isDevBuild=true, they're minified via makeJSDist)
816+ content = inlineTextRequire ( file , content , extensionDir , true ) ;
764817
765818 concatenatedFile += '\n' + content ;
766819 mergeCount ++ ;
@@ -1005,25 +1058,27 @@ function _patchMinifiedCSSInDistIndex() {
10051058const createDistTest = series ( copyDistToDistTestFolder , copyTestToDistTestFolder , copyIndexToDistTestFolder ) ;
10061059
10071060exports . build = series ( copyThirdPartyLibs . copyAll , makeLoggerConfig , generateProLoaderFiles , zipDefaultProjectFiles , zipSampleProjectFiles ,
1008- makeBracketsConcatJS , _compileLessSrc , _cleanReleaseBuildArtefactsInSrc , // these are here only as sanity check so as to catch release build minify fails not too late
1061+ makeBracketsConcatJS , makeBracketsConcatJSWithMinifiedBrowserScripts , _compileLessSrc , _cleanReleaseBuildArtefactsInSrc , // these are here only as sanity check so as to catch release build minify fails not too late
10091062 createSrcCacheManifest , validatePackageVersions ) ;
10101063exports . buildDebug = series ( copyThirdPartyLibs . copyAllDebug , makeLoggerConfig , generateProLoaderFiles , zipDefaultProjectFiles ,
1011- makeBracketsConcatJS , _compileLessSrc , _cleanReleaseBuildArtefactsInSrc , // these are here only as sanity check so as to catch release build minify fails not too late
1064+ makeBracketsConcatJS , makeBracketsConcatJSWithMinifiedBrowserScripts , _compileLessSrc , _cleanReleaseBuildArtefactsInSrc , // these are here only as sanity check so as to catch release build minify fails not too late
10121065 zipSampleProjectFiles , createSrcCacheManifest ) ;
10131066exports . clean = series ( cleanDist ) ;
10141067exports . reset = series ( cleanAll ) ;
10151068
10161069exports . releaseDev = series ( cleanDist , exports . buildDebug , makeBracketsConcatJS , makeConcatExtensions , _compileLessSrc ,
10171070 makeDistAll , cleanUnwantedFilesInDist , releaseDev , _renameConcatExtensionsinDist ,
10181071 createDistCacheManifest , createDistTest , _cleanPhoenixProGitFolder , _cleanReleaseBuildArtefactsInSrc ) ;
1019- exports . releaseStaging = series ( cleanDist , exports . build , makeBracketsConcatJS , makeConcatExtensions , _compileLessSrc ,
1020- makeDistNonJS , makeJSDist , makeJSPrettierDist , makeNonMinifyDist , cleanUnwantedFilesInDist ,
1021- _renameBracketsConcatAsBracketsJSInDist , _renameConcatExtensionsinDist , _patchMinifiedCSSInDistIndex , releaseStaging ,
1022- createDistCacheManifest , createDistTest , _deletePhoenixProSourceFolder , _cleanReleaseBuildArtefactsInSrc ) ;
1023- exports . releaseProd = series ( cleanDist , exports . build , makeBracketsConcatJS , makeConcatExtensions , _compileLessSrc ,
1024- makeDistNonJS , makeJSDist , makeJSPrettierDist , makeNonMinifyDist , cleanUnwantedFilesInDist ,
1025- _renameBracketsConcatAsBracketsJSInDist , _renameConcatExtensionsinDist , _patchMinifiedCSSInDistIndex , releaseProd ,
1026- createDistCacheManifest , createDistTest , _deletePhoenixProSourceFolder , _cleanReleaseBuildArtefactsInSrc ) ;
1072+ exports . releaseStaging = series ( cleanDist , exports . build , makeBracketsConcatJSWithMinifiedBrowserScripts ,
1073+ makeConcatExtensions , _compileLessSrc , makeDistNonJS , makeJSDist , makeJSPrettierDist , makeNonMinifyDist ,
1074+ cleanUnwantedFilesInDist , _renameBracketsConcatAsBracketsJSInDist , _renameConcatExtensionsinDist ,
1075+ _patchMinifiedCSSInDistIndex , releaseStaging , createDistCacheManifest , createDistTest ,
1076+ _deletePhoenixProSourceFolder , _cleanReleaseBuildArtefactsInSrc ) ;
1077+ exports . releaseProd = series ( cleanDist , exports . build , makeBracketsConcatJSWithMinifiedBrowserScripts ,
1078+ makeConcatExtensions , _compileLessSrc , makeDistNonJS , makeJSDist , makeJSPrettierDist , makeNonMinifyDist ,
1079+ cleanUnwantedFilesInDist , _renameBracketsConcatAsBracketsJSInDist , _renameConcatExtensionsinDist ,
1080+ _patchMinifiedCSSInDistIndex , releaseProd , createDistCacheManifest , createDistTest ,
1081+ _deletePhoenixProSourceFolder , _cleanReleaseBuildArtefactsInSrc ) ;
10271082exports . releaseWebCache = series ( makeDistWebCache ) ;
10281083exports . serve = series ( exports . build , serve ) ;
10291084exports . zipTestFiles = series ( zipTestFiles ) ;
0 commit comments