Error when users define "__esModule"

This commit is contained in:
Kanchalai Tanglertsampan 2017-02-06 11:08:29 -08:00
parent 535a001cbb
commit a34834cb52
7 changed files with 58 additions and 1 deletions

View File

@ -21909,6 +21909,10 @@ namespace ts {
}
}
if (hasModifier(node.parent.parent, ModifierFlags.Export) && compilerOptions.module !== ModuleKind.ES2015) {
checkESModuleMarker(node.name);
}
const checkLetConstNames = (isLet(node) || isConst(node));
// 1. LexicalDeclaration : LetOrConst BindingList ;
@ -21921,6 +21925,22 @@ namespace ts {
return checkLetConstNames && checkGrammarNameInLetOrConstDeclarations(node.name);
}
function checkESModuleMarker(name: Identifier | BindingPattern): boolean {
if (name.kind === SyntaxKind.Identifier) {
if (unescapeIdentifier(name.text) === "__esModule") {
return grammarErrorOnNode(name, Diagnostics.Identifier_expected_esModule_is_reserved_as_a_marker_for_transpiled_ES2015_module);
}
}
else {
const elements = (<BindingPattern>name).elements;
for (const element of elements) {
if (!isOmittedExpression(element)) {
return checkESModuleMarker(element.name);
}
}
}
}
function checkGrammarNameInLetOrConstDeclarations(name: Identifier | BindingPattern): boolean {
if (name.kind === SyntaxKind.Identifier) {
if ((<Identifier>name).originalKeywordKind === SyntaxKind.LetKeyword) {

View File

@ -671,6 +671,10 @@
"category": "Error",
"code": 1215
},
"Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.": {
"category": "Error",
"code": 1216
},
"Export assignment is not supported when '--module' flag is 'system'.": {
"category": "Error",
"code": 1218

View File

@ -835,7 +835,7 @@ namespace ts {
const parseTreeNode = getParseTreeNode(node);
if (parseTreeNode && !shouldAppendEsModuleMarker) {
// class declaration get down-level transformed to be variable statement
shouldAppendEsModuleMarker = (parseTreeNode.kind === SyntaxKind.VariableStatement || parseTreeNode.kind === SyntaxKind.ClassDeclaration || parseTreeNode.kind === SyntaxKind.ImportEqualsDeclaration)
shouldAppendEsModuleMarker = (parseTreeNode.kind === SyntaxKind.VariableStatement ||parseTreeNode.kind === SyntaxKind.ClassDeclaration || parseTreeNode.kind === SyntaxKind.ImportEqualsDeclaration)
&& hasModifier(parseTreeNode, ModifierFlags.Export);
}

View File

@ -0,0 +1,10 @@
tests/cases/compiler/es5-commonjs3.ts(3,12): error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.
==== tests/cases/compiler/es5-commonjs3.ts (1 errors) ====
export default "test";
export var __esModule = 1;
~~~~~~~~~~
!!! error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.

View File

@ -8,3 +8,4 @@ export var __esModule = 1;
"use strict";
exports.default = "test";
exports.__esModule = 1;
Object.defineProperty(exports, "__esModule", { value: true });

View File

@ -0,0 +1,21 @@
tests/cases/compiler/es5-commonjs4.ts(14,12): error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.
==== tests/cases/compiler/es5-commonjs4.ts (1 errors) ====
export default class A
{
constructor ()
{
}
public B()
{
return 42;
}
}
export var __esModule = 1;
~~~~~~~~~~
!!! error TS1216: Identifier expected. '__esModule' is reserved as a marker for transpiled ES2015 module.

View File

@ -27,3 +27,4 @@ var A = (function () {
}());
exports.default = A;
exports.__esModule = 1;
Object.defineProperty(exports, "__esModule", { value: true });