Call dynamic import transform on expression used by export equal statement (#18028)

* Call dynamic import transform on expression used by export equal statement

* Use Debug.fail
This commit is contained in:
Wesley Wigham
2017-08-24 17:08:57 -07:00
committed by GitHub
parent 05402b8596
commit 643a7e7e33
13 changed files with 204 additions and 20 deletions

View File

@@ -430,26 +430,32 @@ namespace ts {
*/
function addExportEqualsIfNeeded(statements: Statement[], emitAsReturn: boolean) {
if (currentModuleInfo.exportEquals) {
if (emitAsReturn) {
const statement = createReturn(currentModuleInfo.exportEquals.expression);
setTextRange(statement, currentModuleInfo.exportEquals);
setEmitFlags(statement, EmitFlags.NoTokenSourceMaps | EmitFlags.NoComments);
statements.push(statement);
}
else {
const statement = createStatement(
createAssignment(
createPropertyAccess(
createIdentifier("module"),
"exports"
),
currentModuleInfo.exportEquals.expression
)
);
const expressionResult = importCallExpressionVisitor(currentModuleInfo.exportEquals.expression);
if (expressionResult) {
if (expressionResult instanceof Array) {
return Debug.fail("export= expression should never be replaced with multiple expressions!");
}
if (emitAsReturn) {
const statement = createReturn(expressionResult);
setTextRange(statement, currentModuleInfo.exportEquals);
setEmitFlags(statement, EmitFlags.NoTokenSourceMaps | EmitFlags.NoComments);
statements.push(statement);
}
else {
const statement = createStatement(
createAssignment(
createPropertyAccess(
createIdentifier("module"),
"exports"
),
expressionResult
)
);
setTextRange(statement, currentModuleInfo.exportEquals);
setEmitFlags(statement, EmitFlags.NoComments);
statements.push(statement);
setTextRange(statement, currentModuleInfo.exportEquals);
setEmitFlags(statement, EmitFlags.NoComments);
statements.push(statement);
}
}
}
}
@@ -497,7 +503,7 @@ namespace ts {
}
}
function importCallExpressionVisitor(node: Node): VisitResult<Node> {
function importCallExpressionVisitor(node: Expression): VisitResult<Expression> {
// This visitor does not need to descend into the tree if there is no dynamic import,
// as export/import statements are only transformed at the top level of a file.
if (!(node.transformFlags & TransformFlags.ContainsDynamicImport)) {