Skip to content
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
36 changes: 27 additions & 9 deletions src/compiler/transformers/module/module.ts
Original file line number Diff line number Diff line change
Expand Up @@ -103,7 +103,9 @@ namespace ts {
}

append(statements, visitNode(currentModuleInfo.externalHelpersImportDeclaration, sourceElementVisitor, isStatement));
addRange(statements, visitNodes(node.statements, sourceElementVisitor, isStatement, statementOffset));
// hoist import declarations first, then transform others.
addRange(statements, visitNodes(node.statements, importDeclarationOnlyVisitor, isStatement, statementOffset));
addRange(statements, visitNodes(node.statements, sourceElementIgnoreImportDeclarationVisitor, isStatement, statementOffset));
addExportEqualsIfNeeded(statements, /*emitAsReturn*/ false);
insertStatementsAfterStandardPrologue(statements, endLexicalEnvironment());

Expand Down Expand Up @@ -429,7 +431,9 @@ namespace ts {
if (moduleKind === ModuleKind.AMD) {
addRange(statements, mapDefined(currentModuleInfo.externalImports, getAMDImportExpressionForImport));
}
addRange(statements, visitNodes(node.statements, sourceElementVisitor, isStatement, statementOffset));
// hoist import declarations first, then transform others.
addRange(statements, visitNodes(node.statements, importDeclarationOnlyVisitor, isStatement, statementOffset));
addRange(statements, visitNodes(node.statements, sourceElementIgnoreImportDeclarationVisitor, isStatement, statementOffset));

// Append the 'export =' statement if provided.
addExportEqualsIfNeeded(statements, /*emitAsReturn*/ true);
Expand Down Expand Up @@ -487,15 +491,17 @@ namespace ts {
// Top-Level Source Element Visitors
//

/**
* Visits a node at the top level of the source file.
*
* @param node The node to visit.
*/
function sourceElementVisitor(node: Node): VisitResult<Node> {
function importDeclarationOnlyVisitor(node: Node): VisitResult<Node> {
if (node.kind === SyntaxKind.ImportDeclaration) {
return visitImportDeclaration(node as ImportDeclaration);
}
return undefined;
}

function sourceElementIgnoreImportDeclarationVisitor(node: Node): VisitResult<Node> {
switch (node.kind) {
case SyntaxKind.ImportDeclaration:
return visitImportDeclaration(<ImportDeclaration>node);
return undefined;

case SyntaxKind.ImportEqualsDeclaration:
return visitImportEqualsDeclaration(<ImportEqualsDeclaration>node);
Expand Down Expand Up @@ -526,6 +532,18 @@ namespace ts {
}
}

/**
* Visits a node at the top level of the source file.
*
* @param node The node to visit.
*/
function sourceElementVisitor(node: Node): VisitResult<Node> {
if (node.kind === SyntaxKind.ImportDeclaration) {
return importDeclarationOnlyVisitor(node);
}
return sourceElementIgnoreImportDeclarationVisitor(node);
}

function moduleExpressionElementVisitor(node: Expression): VisitResult<Expression> {
// This visitor does not need to descend into the tree if there is no dynamic import or destructuring assignment,
// as export/import statements are only transformed at the top level of a file.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,8 +44,8 @@ b_1["default"];
//// [index.js]
"use strict";
exports.__esModule = true;
var b_1 = require("./b");
var x = { x: "" };
zzz;
var b_1 = require("./b");
b_1["default"];
var y = x;
4 changes: 2 additions & 2 deletions tests/baselines/reference/ambientDeclarationsPatterns.js
Original file line number Diff line number Diff line change
Expand Up @@ -37,9 +37,9 @@ foo(fileText);
exports.__esModule = true;
///<reference path="declarations.d.ts" />
var foobarbaz_1 = require("foobarbaz");
foobarbaz_1.foo(foobarbaz_1.baz);
var foosball_1 = require("foosball");
foobarbaz_1.foo(foosball_1.foos);
// Works with relative file name
var file_text_1 = require("./file!text");
foobarbaz_1.foo(foobarbaz_1.baz);
foobarbaz_1.foo(foosball_1.foos);
foobarbaz_1.foo(file_text_1["default"]);
40 changes: 20 additions & 20 deletions tests/baselines/reference/es6ExportEqualsInterop.js
Original file line number Diff line number Diff line change
Expand Up @@ -221,6 +221,26 @@ var __exportStar = (this && this.__exportStar) || function(m, exports) {
};
exports.__esModule = true;
exports.a0 = exports.a9 = exports.a8 = exports.a7 = exports.a6 = exports.a5 = exports.a4 = exports.a3 = exports.a2 = exports.a1 = void 0;
var y2 = require("variable");
var y3 = require("interface-variable");
var y4 = require("module");
var y5 = require("interface-module");
var y6 = require("variable-module");
var y7 = require("function");
var y8 = require("function-module");
var y9 = require("class");
var y0 = require("class-module");
// named import
var interface_1 = require("interface");
var variable_1 = require("variable");
var interface_variable_1 = require("interface-variable");
var module_1 = require("module");
var interface_module_1 = require("interface-module");
var variable_module_1 = require("variable-module");
var function_1 = require("function");
var function_module_1 = require("function-module");
var class_1 = require("class");
var class_module_1 = require("class-module");
var z2 = require("variable");
var z3 = require("interface-variable");
var z4 = require("module");
Expand All @@ -240,15 +260,6 @@ z7.a;
z8.a;
z9.a;
z0.a;
var y2 = require("variable");
var y3 = require("interface-variable");
var y4 = require("module");
var y5 = require("interface-module");
var y6 = require("variable-module");
var y7 = require("function");
var y8 = require("function-module");
var y9 = require("class");
var y0 = require("class-module");
y1.a;
y2.a;
y3.a;
Expand All @@ -259,17 +270,6 @@ y7.a;
y8.a;
y9.a;
y0.a;
// named import
var interface_1 = require("interface");
var variable_1 = require("variable");
var interface_variable_1 = require("interface-variable");
var module_1 = require("module");
var interface_module_1 = require("interface-module");
var variable_module_1 = require("variable-module");
var function_1 = require("function");
var function_module_1 = require("function-module");
var class_1 = require("class");
var class_module_1 = require("class-module");
interface_1.a;
variable_1.a;
interface_variable_1.a;
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -33,15 +33,15 @@ exports.default = {};
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const es6ImportDefaultBindingFollowedWithNamedImport_0_1 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_1.a;
const es6ImportDefaultBindingFollowedWithNamedImport_0_2 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_2.a;
const es6ImportDefaultBindingFollowedWithNamedImport_0_3 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
const es6ImportDefaultBindingFollowedWithNamedImport_0_4 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
const es6ImportDefaultBindingFollowedWithNamedImport_0_5 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_1.a;
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_2.a;
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_3.x;
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_3.a;
const es6ImportDefaultBindingFollowedWithNamedImport_0_4 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_4.x;
const es6ImportDefaultBindingFollowedWithNamedImport_0_5 = require("./es6ImportDefaultBindingFollowedWithNamedImport_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImport_0_5.m;


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -28,16 +28,16 @@ exports.default = a;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_1 = require("./es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_1.default;
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_2 = require("./es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_2.default;
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_3 = require("./es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_3.default;
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_4 = require("./es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_4.default;
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_5 = require("./es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_5.default;
var es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_6 = require("./es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0");
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_1.default;
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_2.default;
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_3.default;
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_4.default;
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_5.default;
var x = es6ImportDefaultBindingFollowedWithNamedImport1InEs5_0_6.default;


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -29,16 +29,16 @@ exports.default = a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.x1 = void 0;
var server_1 = require("./server");
exports.x1 = server_1.default;
var server_2 = require("./server");
exports.x1 = server_2.default;
var server_3 = require("./server");
exports.x1 = server_3.default;
var server_4 = require("./server");
exports.x1 = server_4.default;
var server_5 = require("./server");
exports.x1 = server_5.default;
var server_6 = require("./server");
exports.x1 = server_1.default;
exports.x1 = server_2.default;
exports.x1 = server_3.default;
exports.x1 = server_4.default;
exports.x1 = server_5.default;
exports.x1 = server_6.default;


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,15 +68,15 @@ exports.x11 = x11;
exports.__esModule = true;
exports.x6 = exports.x3 = exports.x5 = exports.x4 = exports.x2 = exports.x1 = void 0;
var server_1 = require("./server");
exports.x1 = new server_1.a();
var server_2 = require("./server");
exports.x2 = new server_2.a11();
var server_3 = require("./server");
var server_4 = require("./server");
var server_5 = require("./server");
exports.x1 = new server_1.a();
exports.x2 = new server_2.a11();
exports.x4 = new server_3.x();
exports.x5 = new server_3.a12();
var server_4 = require("./server");
exports.x3 = new server_4.x11();
var server_5 = require("./server");
exports.x6 = new server_5.m();


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,16 +32,16 @@ exports.default = a;
Object.defineProperty(exports, "__esModule", { value: true });
exports.x6 = exports.x5 = exports.x4 = exports.x3 = exports.x2 = exports.x1 = void 0;
var server_1 = require("./server");
exports.x1 = new server_1.default();
var server_2 = require("./server");
exports.x2 = new server_2.default();
var server_3 = require("./server");
exports.x3 = new server_3.default();
var server_4 = require("./server");
exports.x4 = new server_4.default();
var server_5 = require("./server");
exports.x5 = new server_5.default();
var server_6 = require("./server");
exports.x1 = new server_1.default();
exports.x2 = new server_2.default();
exports.x3 = new server_3.default();
exports.x4 = new server_4.default();
exports.x5 = new server_5.default();
exports.x6 = new server_6.default();


Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -31,15 +31,15 @@ exports.m = exports.a;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_1 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_1.a;
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_2 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_2.a;
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_3 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_4 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_5 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_1.a;
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_2.a;
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_3.x;
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_3.a;
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_4 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_4.x;
var es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_5 = require("./es6ImportDefaultBindingFollowedWithNamedImportInEs5_0");
var x1 = es6ImportDefaultBindingFollowedWithNamedImportInEs5_0_5.m;


Expand Down
16 changes: 8 additions & 8 deletions tests/baselines/reference/es6ImportNamedImport.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,25 @@ exports.aaaa = 10;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
const es6ImportNamedImport_0_1 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_1.a;
const es6ImportNamedImport_0_2 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_2.a;
const es6ImportNamedImport_0_3 = require("./es6ImportNamedImport_0");
const es6ImportNamedImport_0_4 = require("./es6ImportNamedImport_0");
const es6ImportNamedImport_0_5 = require("./es6ImportNamedImport_0");
const es6ImportNamedImport_0_6 = require("./es6ImportNamedImport_0");
const es6ImportNamedImport_0_7 = require("./es6ImportNamedImport_0");
const es6ImportNamedImport_0_8 = require("./es6ImportNamedImport_0");
const es6ImportNamedImport_0_9 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_1.a;
var xxxx = es6ImportNamedImport_0_2.a;
var xxxx = es6ImportNamedImport_0_3.x;
var xxxx = es6ImportNamedImport_0_3.a;
const es6ImportNamedImport_0_4 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_4.x;
const es6ImportNamedImport_0_5 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_5.m;
const es6ImportNamedImport_0_6 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_6.a1;
var xxxx = es6ImportNamedImport_0_6.x1;
const es6ImportNamedImport_0_7 = require("./es6ImportNamedImport_0");
var xxxx = es6ImportNamedImport_0_7.a1;
var xxxx = es6ImportNamedImport_0_7.x1;
const es6ImportNamedImport_0_8 = require("./es6ImportNamedImport_0");
var z111 = es6ImportNamedImport_0_8.z1;
const es6ImportNamedImport_0_9 = require("./es6ImportNamedImport_0");
var z2 = es6ImportNamedImport_0_9.z2; // z2 shouldn't give redeclare error


Expand Down
16 changes: 8 additions & 8 deletions tests/baselines/reference/es6ImportNamedImportDts.js
Original file line number Diff line number Diff line change
Expand Up @@ -138,25 +138,25 @@ exports.aaaa1 = aaaa1;
exports.__esModule = true;
exports.z2 = exports.z111 = exports.xxxx9 = exports.xxxx8 = exports.xxxx7 = exports.xxxx6 = exports.xxxx5 = exports.xxxx4 = exports.xxxx3 = exports.xxxx2 = exports.xxxx1 = exports.xxxx = void 0;
var server_1 = require("./server");
exports.xxxx = new server_1.a();
var server_2 = require("./server");
exports.xxxx1 = new server_2.a11();
var server_3 = require("./server");
var server_4 = require("./server");
var server_5 = require("./server");
var server_6 = require("./server");
var server_7 = require("./server");
var server_8 = require("./server");
var server_9 = require("./server");
exports.xxxx = new server_1.a();
exports.xxxx1 = new server_2.a11();
exports.xxxx2 = new server_3.x();
exports.xxxx3 = new server_3.a12();
var server_4 = require("./server");
exports.xxxx4 = new server_4.x11();
var server_5 = require("./server");
exports.xxxx5 = new server_5.m();
var server_6 = require("./server");
exports.xxxx6 = new server_6.a1();
exports.xxxx7 = new server_6.x1();
var server_7 = require("./server");
exports.xxxx8 = new server_7.a111();
exports.xxxx9 = new server_7.x111();
var server_8 = require("./server");
exports.z111 = new server_8.z1();
var server_9 = require("./server");
exports.z2 = new server_9.z2(); // z2 shouldn't give redeclare error


Expand Down
16 changes: 8 additions & 8 deletions tests/baselines/reference/es6ImportNamedImportInEs5.js
Original file line number Diff line number Diff line change
Expand Up @@ -56,25 +56,25 @@ exports.aaaa = 10;
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
var es6ImportNamedImportInEs5_0_1 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_1.a;
var es6ImportNamedImportInEs5_0_2 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_2.a;
var es6ImportNamedImportInEs5_0_3 = require("./es6ImportNamedImportInEs5_0");
var es6ImportNamedImportInEs5_0_4 = require("./es6ImportNamedImportInEs5_0");
var es6ImportNamedImportInEs5_0_5 = require("./es6ImportNamedImportInEs5_0");
var es6ImportNamedImportInEs5_0_6 = require("./es6ImportNamedImportInEs5_0");
var es6ImportNamedImportInEs5_0_7 = require("./es6ImportNamedImportInEs5_0");
var es6ImportNamedImportInEs5_0_8 = require("./es6ImportNamedImportInEs5_0");
var es6ImportNamedImportInEs5_0_9 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_1.a;
var xxxx = es6ImportNamedImportInEs5_0_2.a;
var xxxx = es6ImportNamedImportInEs5_0_3.x;
var xxxx = es6ImportNamedImportInEs5_0_3.a;
var es6ImportNamedImportInEs5_0_4 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_4.x;
var es6ImportNamedImportInEs5_0_5 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_5.m;
var es6ImportNamedImportInEs5_0_6 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_6.a1;
var xxxx = es6ImportNamedImportInEs5_0_6.x1;
var es6ImportNamedImportInEs5_0_7 = require("./es6ImportNamedImportInEs5_0");
var xxxx = es6ImportNamedImportInEs5_0_7.a1;
var xxxx = es6ImportNamedImportInEs5_0_7.x1;
var es6ImportNamedImportInEs5_0_8 = require("./es6ImportNamedImportInEs5_0");
var z111 = es6ImportNamedImportInEs5_0_8.z1;
var es6ImportNamedImportInEs5_0_9 = require("./es6ImportNamedImportInEs5_0");
var z2 = es6ImportNamedImportInEs5_0_9.z2; // z2 shouldn't give redeclare error


Expand Down
Loading