From cdeb1e36603d1de471f228c5af29a6ca165fa59d Mon Sep 17 00:00:00 2001 From: Oleksandr T Date: Tue, 7 Feb 2023 02:18:06 +0200 Subject: [PATCH] feat(48702): Emit for dynamic import (import()) when target >= ES2020 and module == None (#50942) --- src/compiler/transformers/module/module.ts | 3 +++ .../moduleNoneDynamicImport(target=es2015).js | 11 +++++++++++ .../moduleNoneDynamicImport(target=es2015).symbols | 9 +++++++++ .../moduleNoneDynamicImport(target=es2015).types | 10 ++++++++++ .../moduleNoneDynamicImport(target=es2020).js | 11 +++++++++++ .../moduleNoneDynamicImport(target=es2020).symbols | 9 +++++++++ .../moduleNoneDynamicImport(target=es2020).types | 10 ++++++++++ tests/cases/compiler/moduleNoneDynamicImport.ts | 9 +++++++++ 8 files changed, 72 insertions(+) create mode 100644 tests/baselines/reference/moduleNoneDynamicImport(target=es2015).js create mode 100644 tests/baselines/reference/moduleNoneDynamicImport(target=es2015).symbols create mode 100644 tests/baselines/reference/moduleNoneDynamicImport(target=es2015).types create mode 100644 tests/baselines/reference/moduleNoneDynamicImport(target=es2020).js create mode 100644 tests/baselines/reference/moduleNoneDynamicImport(target=es2020).symbols create mode 100644 tests/baselines/reference/moduleNoneDynamicImport(target=es2020).types create mode 100644 tests/cases/compiler/moduleNoneDynamicImport.ts diff --git a/src/compiler/transformers/module/module.ts b/src/compiler/transformers/module/module.ts index 311dcfe85a5..19b8977a873 100644 --- a/src/compiler/transformers/module/module.ts +++ b/src/compiler/transformers/module/module.ts @@ -850,6 +850,9 @@ export function transformModule(context: TransformationContext): (x: SourceFile } function visitImportCallExpression(node: ImportCall): Expression { + if (moduleKind === ModuleKind.None && languageVersion >= ScriptTarget.ES2020) { + return visitEachChild(node, visitor, context); + } const externalModuleName = getExternalModuleNameLiteral(factory, node, currentSourceFile, host, resolver, compilerOptions); const firstArgument = visitNode(firstOrUndefined(node.arguments), visitor, isExpression); // Only use the external module name if it differs from the first argument. This allows us to preserve the quote style of the argument on output. diff --git a/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).js b/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).js new file mode 100644 index 00000000000..e112ffae288 --- /dev/null +++ b/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).js @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/moduleNoneDynamicImport.ts] //// + +//// [a.ts] +const foo = import("./b"); + +//// [b.js] +export default 1; + + +//// [a.js] +const foo = Promise.resolve().then(() => require("b")); diff --git a/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).symbols b/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).symbols new file mode 100644 index 00000000000..73567b5d75b --- /dev/null +++ b/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).symbols @@ -0,0 +1,9 @@ +=== /a.ts === +const foo = import("./b"); +>foo : Symbol(foo, Decl(a.ts, 0, 5)) +>"./b" : Symbol("/b", Decl(b.js, 0, 0)) + +=== /b.js === + +export default 1; + diff --git a/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).types b/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).types new file mode 100644 index 00000000000..c6ff188f8cb --- /dev/null +++ b/tests/baselines/reference/moduleNoneDynamicImport(target=es2015).types @@ -0,0 +1,10 @@ +=== /a.ts === +const foo = import("./b"); +>foo : Promise +>import("./b") : Promise +>"./b" : "./b" + +=== /b.js === + +export default 1; + diff --git a/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).js b/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).js new file mode 100644 index 00000000000..af2a4e0bf4f --- /dev/null +++ b/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).js @@ -0,0 +1,11 @@ +//// [tests/cases/compiler/moduleNoneDynamicImport.ts] //// + +//// [a.ts] +const foo = import("./b"); + +//// [b.js] +export default 1; + + +//// [a.js] +const foo = import("./b"); diff --git a/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).symbols b/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).symbols new file mode 100644 index 00000000000..73567b5d75b --- /dev/null +++ b/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).symbols @@ -0,0 +1,9 @@ +=== /a.ts === +const foo = import("./b"); +>foo : Symbol(foo, Decl(a.ts, 0, 5)) +>"./b" : Symbol("/b", Decl(b.js, 0, 0)) + +=== /b.js === + +export default 1; + diff --git a/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).types b/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).types new file mode 100644 index 00000000000..c6ff188f8cb --- /dev/null +++ b/tests/baselines/reference/moduleNoneDynamicImport(target=es2020).types @@ -0,0 +1,10 @@ +=== /a.ts === +const foo = import("./b"); +>foo : Promise +>import("./b") : Promise +>"./b" : "./b" + +=== /b.js === + +export default 1; + diff --git a/tests/cases/compiler/moduleNoneDynamicImport.ts b/tests/cases/compiler/moduleNoneDynamicImport.ts new file mode 100644 index 00000000000..a7309ba5faa --- /dev/null +++ b/tests/cases/compiler/moduleNoneDynamicImport.ts @@ -0,0 +1,9 @@ +// @allowJs: true +// @target: es2015,es2020 +// @module: none +// @outFile: /a.js +// @filename: /a.ts +const foo = import("./b"); + +// @filename: /b.js +export default 1;