Skip to content

Commit a34834c

Browse files
author
Kanchalai Tanglertsampan
committed
Error when users define "__esModule"
1 parent 535a001 commit a34834c

File tree

7 files changed

+58
-1
lines changed

7 files changed

+58
-1
lines changed

src/compiler/checker.ts

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -21909,6 +21909,10 @@ namespace ts {
2190921909
}
2191021910
}
2191121911

21912+
if (hasModifier(node.parent.parent, ModifierFlags.Export) && compilerOptions.module !== ModuleKind.ES2015) {
21913+
checkESModuleMarker(node.name);
21914+
}
21915+
2191221916
const checkLetConstNames = (isLet(node) || isConst(node));
2191321917

2191421918
// 1. LexicalDeclaration : LetOrConst BindingList ;
@@ -21921,6 +21925,22 @@ namespace ts {
2192121925
return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
2192221926
}
2192321927

21928+
function checkESModuleMarker(name: Identifier | BindingPattern): boolean {
21929+
if (name.kind === SyntaxKind.Identifier) {
21930+
if (unescapeIdentifier(name.text) === "__esModule") {
21931+
return grammarErrorOnNode(name, Diagnostics.Identifier_expected_esModule_is_reserved_as_a_marker_for_transpiled_ES2015_module);
21932+
}
21933+
}
21934+
else {
21935+
const elements = (<BindingPattern>name).elements;
21936+
for (const element of elements) {
21937+
if (!isOmittedExpression(element)) {
21938+
return checkESModuleMarker(element.name);
21939+
}
21940+
}
21941+
}
21942+
}
21943+
2192421944
function checkGrammarNameInLetOrConstDeclarations(name: Identifier | BindingPattern): boolean {
2192521945
if (name.kind === SyntaxKind.Identifier) {
2192621946
if ((<Identifier>name).originalKeywordKind === SyntaxKind.LetKeyword) {

src/compiler/diagnosticMessages.json

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -671,6 +671,10 @@
671671
"category": "Error",
672672
"code": 1215
673673
},
674+
"Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.": {
675+
"category": "Error",
676+
"code": 1216
677+
},
674678
"Export assignment is not supported when '--module' flag is 'system'.": {
675679
"category": "Error",
676680
"code": 1218

src/compiler/transformers/module/module.ts

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -835,7 +835,7 @@ namespace ts {
835835
const parseTreeNode = getParseTreeNode(node);
836836
if (parseTreeNode && !shouldAppendEsModuleMarker) {
837837
// class declaration get down-level transformed to be variable statement
838-
shouldAppendEsModuleMarker = (parseTreeNode.kind === SyntaxKind.VariableStatement || parseTreeNode.kind === SyntaxKind.ClassDeclaration || parseTreeNode.kind === SyntaxKind.ImportEqualsDeclaration)
838+
shouldAppendEsModuleMarker = (parseTreeNode.kind === SyntaxKind.VariableStatement ||parseTreeNode.kind === SyntaxKind.ClassDeclaration || parseTreeNode.kind === SyntaxKind.ImportEqualsDeclaration)
839839
&& hasModifier(parseTreeNode, ModifierFlags.Export);
840840
}
841841

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,10 @@
1+
tests/cases/compiler/es5-commonjs3.ts(3,12): error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.
2+
3+
4+
==== tests/cases/compiler/es5-commonjs3.ts (1 errors) ====
5+
6+
export default "test";
7+
export var __esModule = 1;
8+
~~~~~~~~~~
9+
!!! error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.
10+

tests/baselines/reference/es5-commonjs3.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,3 +8,4 @@ export var __esModule = 1;
88
"use strict";
99
exports.default = "test";
1010
exports.__esModule = 1;
11+
Object.defineProperty(exports, "__esModule", { value: true });
Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
tests/cases/compiler/es5-commonjs4.ts(14,12): error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.
2+
3+
4+
==== tests/cases/compiler/es5-commonjs4.ts (1 errors) ====
5+
6+
export default class A
7+
{
8+
constructor ()
9+
{
10+
11+
}
12+
13+
public B()
14+
{
15+
return 42;
16+
}
17+
}
18+
export var __esModule = 1;
19+
~~~~~~~~~~
20+
!!! error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.
21+

tests/baselines/reference/es5-commonjs4.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -27,3 +27,4 @@ var A = (function () {
2727
}());
2828
exports.default = A;
2929
exports.__esModule = 1;
30+
Object.defineProperty(exports, "__esModule", { value: true });

0 commit comments

Comments
 (0)