Skip to content

Commit ddf5ed9

Browse files
author
Kanchalai Tanglertsampan
committed
Emit dynamic import when module kind is es2018
1 parent 18c826b commit ddf5ed9

4 files changed

Lines changed: 26 additions & 0 deletions

File tree

src/compiler/emitter.ts

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,8 @@ namespace ts {
671671
return emitCallExpression(<CallExpression>node);
672672
case SyntaxKind.NewExpression:
673673
return emitNewExpression(<NewExpression>node);
674+
case SyntaxKind.ImportCallExpression:
675+
return emitImportCallExpression(<ImportCallExpression>node);
674676
case SyntaxKind.TaggedTemplateExpression:
675677
return emitTaggedTemplateExpression(<TaggedTemplateExpression>node);
676678
case SyntaxKind.TypeAssertionExpression:
@@ -1153,6 +1155,13 @@ namespace ts {
11531155
emitExpressionList(node, node.arguments, ListFormat.NewExpressionArguments);
11541156
}
11551157

1158+
function emitImportCallExpression(node: ImportCallExpression) {
1159+
write("import");
1160+
write("(");
1161+
emitExpression(node.specifier);
1162+
write(")");
1163+
}
1164+
11561165
function emitTaggedTemplateExpression(node: TaggedTemplateExpression) {
11571166
emitExpression(node.tag);
11581167
write(" ");

src/compiler/factory.ts

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -503,6 +503,18 @@ namespace ts {
503503
: node;
504504
}
505505

506+
export function createImportCall(specifier: Expression): ImportCallExpression {
507+
const node = <ImportCallExpression>createSynthesizedNode(SyntaxKind.ImportCallExpression);
508+
node.specifier = specifier;
509+
return node;
510+
}
511+
512+
export function updateImportCall(node: ImportCallExpression, specifier: Expression): ImportCallExpression {
513+
return node.specifier !== specifier
514+
? updateNode(createImportCall(specifier), node)
515+
: node;
516+
}
517+
506518
export function createTaggedTemplate(tag: Expression, template: TemplateLiteral) {
507519
const node = <TaggedTemplateExpression>createSynthesizedNode(SyntaxKind.TaggedTemplateExpression);
508520
node.tag = parenthesizeForAccess(tag);

src/compiler/transformer.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515
namespace ts {
1616
function getModuleTransformer(moduleKind: ModuleKind): TransformerFactory<SourceFile> {
1717
switch (moduleKind) {
18+
case ModuleKind.ES2018:
1819
case ModuleKind.ES2015:
1920
return transformES2015Module;
2021
case ModuleKind.System:

src/compiler/visitor.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -339,6 +339,10 @@ namespace ts {
339339
visitNodes((<CallExpression>node).typeArguments, visitor, isTypeNode),
340340
visitNodes((<CallExpression>node).arguments, visitor, isExpression));
341341

342+
case SyntaxKind.ImportCallExpression:
343+
return updateImportCall(<ImportCallExpression>node,
344+
visitNode((<ImportCallExpression>node).specifier, visitor, isExpression));
345+
342346
case SyntaxKind.NewExpression:
343347
return updateNew(<NewExpression>node,
344348
visitNode((<NewExpression>node).expression, visitor, isExpression),

0 commit comments

Comments
 (0)