diff --git a/src/compiler/transformers/module/module.ts b/src/compiler/transformers/module/module.ts index d81265a569f..f776ec23695 100644 --- a/src/compiler/transformers/module/module.ts +++ b/src/compiler/transformers/module/module.ts @@ -553,8 +553,8 @@ namespace ts { // ... // new Promise(function (_a, _b) { require([x], _a, _b); }); /*Amd Require*/ // }); - const resolve = createIdentifier("_a"); - const reject = createIdentifier("_b"); + const resolve = createUniqueName("resolve"); + const reject = createUniqueName("reject") return createNew( createIdentifier("Promise"), /*typeArguments*/ undefined, @@ -570,7 +570,7 @@ namespace ts { createCall( createIdentifier("require"), /*typeArguments*/ undefined, - [createArrayLiteral(node.arguments), resolve, reject] + [createArrayLiteral([firstOrUndefined(node.arguments) || createOmittedExpression()]), resolve, reject] ))]) )]); } @@ -578,16 +578,13 @@ namespace ts { function transformImportCallExpressionCommonJS(node: ImportCall): Expression { // import("./blah") // emit as - // var __resolved = new Promise(function (resolve) { resolve(); }); - // .... - // __resolved.then(function () { return require(x); }) /*CommonJs Require*/ - - // Promise.resolve().then(() => require("./blah")); + // Promise.resolve().then(function () { return require(x); }) /*CommonJs Require*/ // We have to wrap require in then callback so that require is done in asynchronously // if we simply do require in resolve callback in Promise constructor. We will execute the loading immediately - context.requestEmitHelper(dynamicImportCreateResolvedHelper); return createCall( - createPropertyAccess(createIdentifier("__resolved"), "then"), + createPropertyAccess( + createCall(createPropertyAccess(createIdentifier("Promise"), "resolve"), /*typeArguments*/ undefined, /*argumentsArray*/ []), + "then"), /*typeArguments*/ undefined, [createFunctionExpression( /*modifiers*/ undefined, @@ -1609,14 +1606,6 @@ namespace ts { name: "typescript:dynamicimport-sync-require", scoped: true, text: ` - var __syncRequire = typeof module === "object" && typeof module.exports === "object"; - var __resolved = new Promise(function (resolve) { resolve(); });` - }; - - const dynamicImportCreateResolvedHelper: EmitHelper = { - name: "typescript:dynamicimport-create-resolved", - scoped: false, - priority: 1, - text: `var __resolved = new Promise(function (resolve) { resolve(); });` + var __syncRequire = typeof module === "object" && typeof module.exports === "object";` }; } diff --git a/src/compiler/transformers/module/system.ts b/src/compiler/transformers/module/system.ts index 8e7f0ae30d9..6005f381d8b 100644 --- a/src/compiler/transformers/module/system.ts +++ b/src/compiler/transformers/module/system.ts @@ -50,7 +50,7 @@ namespace ts { * @param node The SourceFile node. */ function transformSourceFile(node: SourceFile) { - if (node.isDeclarationFile || !(isExternalModule(node) || compilerOptions.isolatedModules || node.transformFlags & TransformFlags.ContainsDynamicImport)) { + if (node.isDeclarationFile || !(isEffectiveExternalModule(node, compilerOptions)|| node.transformFlags & TransformFlags.ContainsDynamicImport)) { return node; }