Emit dynamic import when module kind is es2018

This commit is contained in:
Kanchalai Tanglertsampan
2017-03-13 15:12:10 -07:00
parent 18c826b3aa
commit ddf5ed944b
4 changed files with 26 additions and 0 deletions
+9
View File
@@ -671,6 +671,8 @@ namespace ts {
return emitCallExpression(<CallExpression>node);
case SyntaxKind.NewExpression:
return emitNewExpression(<NewExpression>node);
case SyntaxKind.ImportCallExpression:
return emitImportCallExpression(<ImportCallExpression>node);
case SyntaxKind.TaggedTemplateExpression:
return emitTaggedTemplateExpression(<TaggedTemplateExpression>node);
case SyntaxKind.TypeAssertionExpression:
@@ -1153,6 +1155,13 @@ namespace ts {
emitExpressionList(node, node.arguments, ListFormat.NewExpressionArguments);
}
function emitImportCallExpression(node: ImportCallExpression) {
write("import");
write("(");
emitExpression(node.specifier);
write(")");
}
function emitTaggedTemplateExpression(node: TaggedTemplateExpression) {
emitExpression(node.tag);
write(" ");
+12
View File
@@ -503,6 +503,18 @@ namespace ts {
: node;
}
export function createImportCall(specifier: Expression): ImportCallExpression {
const node = <ImportCallExpression>createSynthesizedNode(SyntaxKind.ImportCallExpression);
node.specifier = specifier;
return node;
}
export function updateImportCall(node: ImportCallExpression, specifier: Expression): ImportCallExpression {
return node.specifier !== specifier
? updateNode(createImportCall(specifier), node)
: node;
}
export function createTaggedTemplate(tag: Expression, template: TemplateLiteral) {
const node = <TaggedTemplateExpression>createSynthesizedNode(SyntaxKind.TaggedTemplateExpression);
node.tag = parenthesizeForAccess(tag);
+1
View File
@@ -15,6 +15,7 @@
namespace ts {
function getModuleTransformer(moduleKind: ModuleKind): TransformerFactory<SourceFile> {
switch (moduleKind) {
case ModuleKind.ES2018:
case ModuleKind.ES2015:
return transformES2015Module;
case ModuleKind.System:
+4
View File
@@ -339,6 +339,10 @@ namespace ts {
visitNodes((<CallExpression>node).typeArguments, visitor, isTypeNode),
visitNodes((<CallExpression>node).arguments, visitor, isExpression));
case SyntaxKind.ImportCallExpression:
return updateImportCall(<ImportCallExpression>node,
visitNode((<ImportCallExpression>node).specifier, visitor, isExpression));
case SyntaxKind.NewExpression:
return updateNew(<NewExpression>node,
visitNode((<NewExpression>node).expression, visitor, isExpression),