Skip to content

Commit 0018b8f

Browse files
authored
Preserve module marker in es2015+ module emit for tool compatability (microsoft#38712)
1 parent 62675a5 commit 0018b8f

36 files changed

+67
-13
lines changed

src/compiler/transformers/module/esnextAnd2015.ts

+24-13
Original file line numberDiff line numberDiff line change
@@ -18,25 +18,36 @@ namespace ts {
1818
}
1919

2020
if (isExternalModule(node) || compilerOptions.isolatedModules) {
21-
const externalHelpersImportDeclaration = createExternalHelpersImportDeclarationIfNeeded(node, compilerOptions);
22-
if (externalHelpersImportDeclaration) {
23-
const statements: Statement[] = [];
24-
const statementOffset = addPrologue(statements, node.statements);
25-
append(statements, externalHelpersImportDeclaration);
26-
27-
addRange(statements, visitNodes(node.statements, visitor, isStatement, statementOffset));
28-
return updateSourceFileNode(
29-
node,
30-
setTextRange(createNodeArray(statements), node.statements));
31-
}
32-
else {
33-
return visitEachChild(node, visitor, context);
21+
const result = updateExternalModule(node);
22+
if (!isExternalModule(node) || some(result.statements, isExternalModuleIndicator)) {
23+
return result;
3424
}
25+
return updateSourceFileNode(
26+
result,
27+
setTextRange(createNodeArray([...result.statements, createEmptyExports()]), result.statements),
28+
);
3529
}
3630

3731
return node;
3832
}
3933

34+
function updateExternalModule(node: SourceFile) {
35+
const externalHelpersImportDeclaration = createExternalHelpersImportDeclarationIfNeeded(node, compilerOptions);
36+
if (externalHelpersImportDeclaration) {
37+
const statements: Statement[] = [];
38+
const statementOffset = addPrologue(statements, node.statements);
39+
append(statements, externalHelpersImportDeclaration);
40+
41+
addRange(statements, visitNodes(node.statements, visitor, isStatement, statementOffset));
42+
return updateSourceFileNode(
43+
node,
44+
setTextRange(createNodeArray(statements), node.statements));
45+
}
46+
else {
47+
return visitEachChild(node, visitor, context);
48+
}
49+
}
50+
4051
function visitor(node: Node): VisitResult<Node> {
4152
switch (node.kind) {
4253
case SyntaxKind.ImportEqualsDeclaration:

tests/baselines/reference/asyncAwaitIsolatedModules_es2017.js

+1
Original file line numberDiff line numberDiff line change
@@ -71,3 +71,4 @@ var M;
7171
async function f1() { }
7272
M.f1 = f1;
7373
})(M || (M = {}));
74+
export {};

tests/baselines/reference/asyncAwaitIsolatedModules_es6.js

+1
Original file line numberDiff line numberDiff line change
@@ -112,3 +112,4 @@ var M;
112112
}
113113
M.f1 = f1;
114114
})(M || (M = {}));
115+
export {};

tests/baselines/reference/computedPropertyName.js

+1
Original file line numberDiff line numberDiff line change
@@ -65,3 +65,4 @@ class F {
6565
}
6666
class G {
6767
}
68+
export {};

tests/baselines/reference/decoratedClassFromExternalModule.js

+1
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ let Decorated = /** @class */ (() => {
2727
})();
2828
export default Decorated;
2929
//// [undecorated.js]
30+
export {};

tests/baselines/reference/es6ExportAssignment.js

+1
Original file line numberDiff line numberDiff line change
@@ -4,3 +4,4 @@ export = a;
44

55
//// [es6ExportAssignment.js]
66
var a = 10;
7+
export {};

tests/baselines/reference/es6ExportAssignment2.js

+2
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,6 @@ import * as a from "a";
1010

1111
//// [a.js]
1212
var a = 10;
13+
export {};
1314
//// [b.js]
15+
export {};

tests/baselines/reference/es6ExportAssignment3.js

+1
Original file line numberDiff line numberDiff line change
@@ -9,3 +9,4 @@ import * as a from "a";
99

1010

1111
//// [b.js]
12+
export {};

tests/baselines/reference/es6ExportAssignment4.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ import * as a from "a";
1111

1212

1313
//// [b.js]
14+
export {};

tests/baselines/reference/es6ImportEqualsDeclaration.js

+2
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ import a = require("server");
99

1010
//// [server.js]
1111
var a = 10;
12+
export {};
1213
//// [client.js]
14+
export {};

tests/baselines/reference/es6ImportEqualsDeclaration2.js

+1
Original file line numberDiff line numberDiff line change
@@ -20,3 +20,4 @@ import {a} from "server";
2020

2121

2222
//// [client.js]
23+
export {};

tests/baselines/reference/es6ImportEqualsExportModuleEs2015Error.js

+1
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ var a = /** @class */ (function () {
1717
}
1818
return a;
1919
}());
20+
export {};
2021
//// [main.js]
2122
import * as a from "./a";
2223
a;

tests/baselines/reference/es6ImportNamedImportIdentifiersParsing.js

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ import { default as yield } from "somemodule"; // no error
66
import { default as default } from "somemodule"; // default as is ok, error of default binding name
77

88
//// [es6ImportNamedImportIdentifiersParsing.js]
9+
export {};

tests/baselines/reference/es6ImportWithoutFromClauseNonInstantiatedModule.js

+1
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ export interface i {
88
import "es6ImportWithoutFromClauseNonInstantiatedModule_0";
99

1010
//// [es6ImportWithoutFromClauseNonInstantiatedModule_0.js]
11+
export {};
1112
//// [es6ImportWithoutFromClauseNonInstantiatedModule_1.js]
1213
import "es6ImportWithoutFromClauseNonInstantiatedModule_0";
1314

tests/baselines/reference/es6modulekindWithES5Target10.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ namespace N {
77
export = N; // Error
88

99
//// [es6modulekindWithES5Target10.js]
10+
export {};

tests/baselines/reference/esnextmodulekindWithES5Target10.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ namespace N {
77
export = N; // Error
88

99
//// [esnextmodulekindWithES5Target10.js]
10+
export {};

tests/baselines/reference/exportAssignmentWithoutAllowSyntheticDefaultImportsError.js

+2
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,6 @@ import bar from './bar';
99

1010
//// [bar.js]
1111
function bar() { }
12+
export {};
1213
//// [foo.js]
14+
export {};

tests/baselines/reference/exportDefaultForNonInstantiatedModule.js

+1
Original file line numberDiff line numberDiff line change
@@ -7,3 +7,4 @@ module m {
77
export default m;
88

99
//// [exportDefaultForNonInstantiatedModule.js]
10+
export {};

tests/baselines/reference/importCallExpressionIncorrect2.js

+1
Original file line numberDiff line numberDiff line change
@@ -11,3 +11,4 @@ var x = import { foo } from './0';
1111
export function foo() { return "foo"; }
1212
//// [1.js]
1313
var x = ;
14+
export {};

tests/baselines/reference/importMeta(module=esnext,target=es5).js

+2
Original file line numberDiff line numberDiff line change
@@ -95,6 +95,7 @@ var __generator = (this && this.__generator) || function (thisArg, body) {
9595
}
9696
});
9797
}); })();
98+
export {};
9899
//// [moduleLookingFile01.js]
99100
export var x = import.meta;
100101
export var y = import.metal;
@@ -103,6 +104,7 @@ export var z = import.import.import.malkovich;
103104
var globalA = import.meta;
104105
var globalB = import.metal;
105106
var globalC = import.import.import.malkovich;
107+
export {};
106108
//// [assignmentTargets.js]
107109
export var foo = import.meta.blah = import.meta.blue = import.meta;
108110
import.meta = foo;

tests/baselines/reference/importMeta(module=esnext,target=esnext).js

+2
Original file line numberDiff line numberDiff line change
@@ -49,6 +49,7 @@ const { a, b, c } = import.meta.wellKnownProperty;
4949
image.width = image.height = size;
5050
document.body.appendChild(image);
5151
})();
52+
export {};
5253
//// [moduleLookingFile01.js]
5354
export let x = import.meta;
5455
export let y = import.metal;
@@ -57,6 +58,7 @@ export let z = import.import.import.malkovich;
5758
let globalA = import.meta;
5859
let globalB = import.metal;
5960
let globalC = import.import.import.malkovich;
61+
export {};
6062
//// [assignmentTargets.js]
6163
export const foo = import.meta.blah = import.meta.blue = import.meta;
6264
import.meta = foo;

tests/baselines/reference/importNonExportedMember6.js

+2
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ var Foo = /** @class */ (function () {
1313
}
1414
return Foo;
1515
}());
16+
export {};
1617
//// [b.js]
18+
export {};

tests/baselines/reference/importNonExportedMember7.js

+2
Original file line numberDiff line numberDiff line change
@@ -13,4 +13,6 @@ var Foo = /** @class */ (function () {
1313
}
1414
return Foo;
1515
}());
16+
export {};
1617
//// [b.js]
18+
export {};

tests/baselines/reference/instantiateContextualTypes.js

+1
Original file line numberDiff line numberDiff line change
@@ -236,3 +236,4 @@ let obj = {
236236
foo(bar) { }
237237
};
238238
assignPartial(obj, { foo(...args) { } }); // args has type [string]
239+
export {};

tests/baselines/reference/isolatedModulesDontElideReExportStar.js

+1
Original file line numberDiff line numberDiff line change
@@ -8,5 +8,6 @@ export * from "./a";
88

99

1010
//// [a.js]
11+
export {};
1112
//// [b.js]
1213
export * from "./a";

tests/baselines/reference/potentiallyUncalledDecorators.js

+1
Original file line numberDiff line numberDiff line change
@@ -217,3 +217,4 @@ let G = /** @class */ (() => {
217217
], G);
218218
return G;
219219
})();
220+
export {};

tests/baselines/reference/requireOfJsonFileWithModuleNodeResolutionEmitEs2015.js

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ import * as b from './b.json';
1515
"b": "hello"
1616
}
1717
//// [out/file1.js]
18+
export {};

tests/baselines/reference/requireOfJsonFileWithModuleNodeResolutionEmitEsNext.js

+1
Original file line numberDiff line numberDiff line change
@@ -15,3 +15,4 @@ import * as b from './b.json';
1515
"b": "hello"
1616
}
1717
//// [out/file1.js]
18+
export {};

tests/baselines/reference/scannerUnicodeEscapeInKeyword2.js

+2
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@ var \u0079ield = 12; // ok
4848
function* gen() {
4949
yield 12; //not ok
5050
}
51+
export {};
5152
//// [file2.js]
5253
var x = "hello"; // not ok
5354
var \u{0061}wait = 12; // ok
@@ -59,4 +60,5 @@ function* gen() {
5960
yield 12; //not ok
6061
}
6162
const a = { def\u0061ult: 12 }; // OK, `default` not in keyword position
63+
export {};
6264
// chrome and jsc may still error on this, ref https://bugs.chromium.org/p/chromium/issues/detail?id=993000 and https://bugs.webkit.org/show_bug.cgi?id=200638

tests/baselines/reference/strictModeWordInImportDeclaration.js

+1
Original file line numberDiff line numberDiff line change
@@ -6,3 +6,4 @@ import public from "./1"
66

77
//// [strictModeWordInImportDeclaration.js]
88
"use strict";
9+
export {};

tests/baselines/reference/taggedTemplatesWithTypeArguments2.js

+1
Original file line numberDiff line numberDiff line change
@@ -59,3 +59,4 @@ class SomeDerived extends SomeBase {
5959
super. `hello world`;
6060
}
6161
}
62+
export {};

tests/baselines/reference/tsxResolveExternalModuleExportsTypes.js

+1
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ const Foo = (<h1></h1>);
2424

2525
//// [foo.jsx]
2626
var Foo = (<h1></h1>);
27+
export {};

tests/baselines/reference/umdGlobalAugmentationNoCrash.js

+1
Original file line numberDiff line numberDiff line change
@@ -21,6 +21,7 @@ React.foo;
2121

2222
//// [some_module.js]
2323
React.foo;
24+
export {};
2425
//// [emits.js]
2526
"use strict";
2627
console.log("hello");

tests/baselines/reference/umdNamespaceMergedWithGlobalAugmentationIsNotCircular.js

+1
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ React.createRef;
2525

2626
//// [some_module.js]
2727
React.createRef;
28+
export {};
2829
//// [emits.js]
2930
"use strict";
3031
console.log("hello");

tests/baselines/reference/unionAndIntersectionInference3.js

+1
Original file line numberDiff line numberDiff line change
@@ -105,3 +105,4 @@ let x2 = foo2(sa); // unknown
105105
let y2 = foo2(sx); // { extra: number }
106106
withRouter(MyComponent);
107107
let z = foo(ab); // [AB<string>, string]
108+
export {};

tests/baselines/reference/unionTypeInference.js

+1
Original file line numberDiff line numberDiff line change
@@ -111,3 +111,4 @@ async function fun(deepPromised) {
111111
}
112112
}
113113
baz(xx);
114+
export {};

0 commit comments

Comments
 (0)