Merge pull request #10874 from Microsoft/fix10855

Support export default for target=ES5/module=ES6.
This commit is contained in:
Ron Buckton
2016-09-12 16:23:24 -07:00
committed by GitHub
7 changed files with 34 additions and 4 deletions

View File

@@ -541,7 +541,7 @@ namespace ts {
*
* @param node A ClassDeclaration node.
*/
function visitClassDeclaration(node: ClassDeclaration): Statement {
function visitClassDeclaration(node: ClassDeclaration): VisitResult<Statement> {
// [source]
// class C { }
//
@@ -552,8 +552,17 @@ namespace ts {
// return C;
// }());
const modifierFlags = getModifierFlags(node);
const isExported = modifierFlags & ModifierFlags.Export;
const isDefault = modifierFlags & ModifierFlags.Default;
// Add an `export` modifier to the statement if needed (for `--target es5 --module es6`)
const modifiers = isExported && !isDefault
? filter(node.modifiers, isExportModifier)
: undefined;
const statement = createVariableStatement(
/*modifiers*/ undefined,
modifiers,
createVariableDeclarationList([
createVariableDeclaration(
getDeclarationName(node, /*allowComments*/ true),
@@ -566,9 +575,26 @@ namespace ts {
setOriginalNode(statement, node);
startOnNewLine(statement);
// Add an `export default` statement for default exports (for `--target es5 --module es6`)
if (isExported && isDefault) {
const statements: Statement[] = [statement];
statements.push(createExportAssignment(
/*decorators*/ undefined,
/*modifiers*/ undefined,
/*isExportEquals*/ false,
getDeclarationName(node, /*allowComments*/ false)
));
return statements;
}
return statement;
}
function isExportModifier(node: Modifier) {
return node.kind === SyntaxKind.ExportKeyword;
}
/**
* Visits a ClassExpression and transforms it into an expression.
*