diff --git a/packages/build/src/optimize-streams.ts b/packages/build/src/optimize-streams.ts index ed6c0ea98..52d1e8aec 100644 --- a/packages/build/src/optimize-streams.ts +++ b/packages/build/src/optimize-streams.ts @@ -105,6 +105,26 @@ export class GenericOptimizeTransform extends Transform { } } +function getCompileTarget( + file: vinyl, options: JsOptimizeOptions): JsCompileTarget|boolean { + let target: JsCompileTarget|boolean|undefined; + const compileOptions = options.compile; + if (notExcluded(options.compile)(file)) { + if (typeof compileOptions === 'object') { + target = + (compileOptions.target === undefined) ? true : compileOptions.target; + } else { + target = compileOptions; + } + if (target === undefined) { + target = false; + } + } else { + target = false; + } + return target; +} + /** * Transform JavaScript. */ @@ -112,26 +132,6 @@ export class JsTransform extends GenericOptimizeTransform { constructor(options: OptimizeOptions) { const jsOptions: JsOptimizeOptions = options.js || {}; - function getCompileTarget(file: vinyl): JsCompileTarget|boolean { - let target: JsCompileTarget|boolean|undefined; - const compileOptions = jsOptions.compile; - if (notExcluded(jsOptions.compile)(file)) { - if (typeof compileOptions === 'object') { - target = (compileOptions.target === undefined) ? - true : - compileOptions.target; - } else { - target = compileOptions; - } - if (target === undefined) { - target = false; - } - } else { - target = false; - } - return target; - } - const shouldMinifyFile = jsOptions.minify ? notExcluded(jsOptions.minify) : () => false; @@ -153,7 +153,7 @@ export class JsTransform extends GenericOptimizeTransform { } return jsTransform(content, { - compile: getCompileTarget(file), + compile: getCompileTarget(file, jsOptions), externalHelpers: true, minify: shouldMinifyFile(file), moduleResolution: jsOptions.moduleResolution, @@ -173,7 +173,7 @@ export class JsTransform extends GenericOptimizeTransform { */ export class HtmlTransform extends GenericOptimizeTransform { constructor(options: OptimizeOptions) { - const anyJsCompiledToEs5 = options.js && !!options.js.compile; + const jsOptions: JsOptimizeOptions = options.js || {}; const shouldMinifyFile = options.html && options.html.minify ? notExcluded(options.html.minify) : @@ -188,11 +188,27 @@ export class HtmlTransform extends GenericOptimizeTransform { let injectBabelHelpers: 'none'|'full'|'amd' = 'none'; let injectRegeneratorRuntime = false; if (isEntryPoint) { - if (anyJsCompiledToEs5) { - injectBabelHelpers = 'full'; - injectRegeneratorRuntime = true; - } else if (transformModulesToAmd) { - injectBabelHelpers = 'amd'; + const compileTarget = getCompileTarget(file, jsOptions); + switch (compileTarget) { + case 'es5': + case true: + injectBabelHelpers = 'full'; + injectRegeneratorRuntime = true; + break; + case 'es2015': + case 'es2016': + case 'es2017': + injectBabelHelpers = 'full'; + injectRegeneratorRuntime = false; + break; + case 'es2018': + case false: + injectBabelHelpers = transformModulesToAmd ? 'amd' : 'none'; + injectRegeneratorRuntime = false; + break; + default: + const never: never = compileTarget; + throw new Error(`Unexpected compile target ${never}`); } }