diff --git a/package.json b/package.json
index 38c82e807896..db9c7201528c 100644
--- a/package.json
+++ b/package.json
@@ -74,9 +74,9 @@
"ts-jest": "^25.0.0",
"ts-node": "^8.5.0",
"tslint": "^5.20.1",
- "typescript": ">=3.2.1 <3.8.0"
+ "typescript": ">=3.2.1 <3.9.0"
},
"resolutions": {
- "typescript": "^3.7.2"
+ "typescript": "^3.8.3"
}
}
diff --git a/packages/parser/tests/lib/__snapshots__/jsx.ts.snap b/packages/parser/tests/lib/__snapshots__/jsx.ts.snap
index 8d9c75da11d7..d45d40982a51 100644
--- a/packages/parser/tests/lib/__snapshots__/jsx.ts.snap
+++ b/packages/parser/tests/lib/__snapshots__/jsx.ts.snap
@@ -651,6 +651,8 @@ Object {
}
`;
+exports[`JSX useJSXTextNode: false fixtures/member-expression-private.src 1`] = `"Identifier expected."`;
+
exports[`JSX useJSXTextNode: false fixtures/member-expression-this.src 1`] = `
Object {
"$id": 1,
diff --git a/packages/parser/tests/lib/__snapshots__/tsx.ts.snap b/packages/parser/tests/lib/__snapshots__/tsx.ts.snap
index 0fb95a3acc74..f8e20c7ce802 100644
--- a/packages/parser/tests/lib/__snapshots__/tsx.ts.snap
+++ b/packages/parser/tests/lib/__snapshots__/tsx.ts.snap
@@ -50,6 +50,8 @@ Object {
}
`;
+exports[`TSX fixtures/generic-jsx-member-expression-private.src 1`] = `"Identifier expected."`;
+
exports[`TSX fixtures/generic-jsx-opening-element.src 1`] = `
Object {
"$id": 1,
diff --git a/packages/shared-fixtures/fixtures/jsx/member-expression-private.src.js b/packages/shared-fixtures/fixtures/jsx/member-expression-private.src.js
new file mode 100644
index 000000000000..48691af12721
--- /dev/null
+++ b/packages/shared-fixtures/fixtures/jsx/member-expression-private.src.js
@@ -0,0 +1 @@
+;
diff --git a/packages/shared-fixtures/fixtures/tsx/generic-jsx-member-expression-private.src.tsx b/packages/shared-fixtures/fixtures/tsx/generic-jsx-member-expression-private.src.tsx
new file mode 100644
index 000000000000..df915e2afc6a
--- /dev/null
+++ b/packages/shared-fixtures/fixtures/tsx/generic-jsx-member-expression-private.src.tsx
@@ -0,0 +1 @@
+const foo = />
diff --git a/packages/typescript-estree/src/convert.ts b/packages/typescript-estree/src/convert.ts
index cc38171caf13..eb21bdbf2cdf 100644
--- a/packages/typescript-estree/src/convert.ts
+++ b/packages/typescript-estree/src/convert.ts
@@ -458,6 +458,12 @@ export class Converter {
let result: TSESTree.JSXMemberExpression | TSESTree.JSXIdentifier;
switch (node.kind) {
case SyntaxKind.PropertyAccessExpression:
+ if (node.name.kind === SyntaxKind.PrivateIdentifier) {
+ // This is one of the few times where TS explicitly errors, and doesn't even gracefully handle the syntax.
+ // So we shouldn't ever get into this state to begin with.
+ throw new Error('Non-private identifier expected.');
+ }
+
result = this.createNode(node, {
type: AST_NODE_TYPES.JSXMemberExpression,
object: this.convertJSXTagName(node.expression, parent),
@@ -467,12 +473,14 @@ export class Converter {
) as TSESTree.JSXIdentifier,
});
break;
+
case SyntaxKind.ThisKeyword:
result = this.createNode(node, {
type: AST_NODE_TYPES.JSXIdentifier,
name: 'this',
});
break;
+
case SyntaxKind.Identifier:
default:
result = this.createNode(node, {
@@ -1570,6 +1578,9 @@ export class Converter {
case SyntaxKind.ExportDeclaration:
if (node.exportClause) {
+ if (node.exportClause.kind !== SyntaxKind.NamedExports) {
+ throw new Error('`export * as ns` is not yet supported.');
+ }
return this.createNode(node, {
type: AST_NODE_TYPES.ExportNamedDeclaration,
source: this.convertChild(node.moduleSpecifier),
diff --git a/packages/typescript-estree/tests/lib/__snapshots__/jsx.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/jsx.ts.snap
index 037f88206448..4dd9a5c93dd2 100644
--- a/packages/typescript-estree/tests/lib/__snapshots__/jsx.ts.snap
+++ b/packages/typescript-estree/tests/lib/__snapshots__/jsx.ts.snap
@@ -5289,6 +5289,8 @@ Object {
}
`;
+exports[`JSX useJSXTextNode: false fixtures/member-expression-private.src 1`] = `"Identifier expected."`;
+
exports[`JSX useJSXTextNode: false fixtures/member-expression-this.src 1`] = `
Object {
"body": Array [
diff --git a/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.ts.snap
index 1b81d29c0842..e1c91feca7fc 100644
--- a/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.ts.snap
+++ b/packages/typescript-estree/tests/lib/__snapshots__/semantic-diagnostics-enabled.ts.snap
@@ -1555,6 +1555,15 @@ exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" e
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/jsx/member-expression.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
+exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/jsx/member-expression-private.src 1`] = `
+Object {
+ "column": 10,
+ "index": 10,
+ "lineNumber": 1,
+ "message": "Identifier expected.",
+}
+`;
+
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/jsx/member-expression-this.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/jsx/multiple-blank-spaces.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
@@ -1627,6 +1636,15 @@ exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" e
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/tsx/generic-jsx-element.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
+exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/tsx/generic-jsx-member-expression-private.src 1`] = `
+Object {
+ "column": 22,
+ "index": 22,
+ "lineNumber": 1,
+ "message": "Identifier expected.",
+}
+`;
+
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/tsx/generic-jsx-opening-element.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
exports[`Parse all fixtures with "errorOnTypeScriptSyntacticAndSemanticIssues" enabled fixtures/tsx/react-typed-props.src 1`] = `"TEST OUTPUT: No semantic or syntactic issues found"`;
@@ -1689,7 +1707,7 @@ Object {
"column": 14,
"index": 31,
"lineNumber": 2,
- "message": "'await' expression is only allowed within an async function.",
+ "message": "'await' expressions are only allowed within async functions and at the top levels of modules.",
}
`;
diff --git a/packages/typescript-estree/tests/lib/__snapshots__/tsx.ts.snap b/packages/typescript-estree/tests/lib/__snapshots__/tsx.ts.snap
index c0240d2580e9..84558c7e0a6b 100644
--- a/packages/typescript-estree/tests/lib/__snapshots__/tsx.ts.snap
+++ b/packages/typescript-estree/tests/lib/__snapshots__/tsx.ts.snap
@@ -422,6 +422,8 @@ Object {
}
`;
+exports[`TSX fixtures/generic-jsx-member-expression-private.src 1`] = `"Identifier expected."`;
+
exports[`TSX fixtures/generic-jsx-opening-element.src 1`] = `
Object {
"body": Array [
diff --git a/yarn.lock b/yarn.lock
index 05923ed503f9..20ca893a3921 100644
--- a/yarn.lock
+++ b/yarn.lock
@@ -8152,10 +8152,10 @@ typedarray@^0.0.6:
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c=
-typescript@*, "typescript@>=3.2.1 <3.8.0", typescript@^3.7.2:
- version "3.7.5"
- resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.7.5.tgz#0692e21f65fd4108b9330238aac11dd2e177a1ae"
- integrity sha512-/P5lkRXkWHNAbcJIiHPfRoKqyd7bsyCma1hZNUGfn20qm64T6ZBlrzprymeu918H+mB/0rIg2gGK/BXkhhYgBw==
+typescript@*, "typescript@>=3.2.1 <3.9.0", typescript@^3.8.3:
+ version "3.8.3"
+ resolved "https://registry.yarnpkg.com/typescript/-/typescript-3.8.3.tgz#409eb8544ea0335711205869ec458ab109ee1061"
+ integrity sha512-MYlEfn5VrLNsgudQTVJeNaQFUAI7DkhnOjdpAp4T+ku1TfQClewlbSuTVHiA+8skNBgaf02TL/kLOvig4y3G8w==
uglify-js@^3.1.4:
version "3.6.0"