From a99eed17452e7b0176dd652eec6de2d71ed087de Mon Sep 17 00:00:00 2001 From: Spencer Date: Fri, 20 Mar 2020 10:57:41 -0700 Subject: [PATCH] [estree] update with latest spec changes (#43103) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * [estree] support async for-of See https://github.com/estree/estree/blob/master/es2018.md#statements * [estree] support spread properties See https://github.com/estree/estree/blob/master/es2018.md#expressions * [estree] support rest property patterns See https://github.com/estree/estree/blob/master/es2018.md#patterns * [estree] add support for ImportExpression See https://github.com/estree/estree/blob/master/es2020.md#importexpression * [es2020] add support for BigInt literals See https://github.com/estree/estree/blob/master/es2020.md#bigintliteral * Revert "[es2020] add support for BigInt literals" This reverts commit 47134accb91cf73307d434f57acf97bc0328f39e. Supporting bigint would require TS 3.2 which requires dependency changes that can probably wait? 🤷‍♂️ * [estree] add new expression type to Union * narrow express node by ImportExpression Co-authored-by: spalger --- types/estree/estree-tests.ts | 17 +++++++++++++---- types/estree/index.d.ts | 8 +++++++- 2 files changed, 20 insertions(+), 5 deletions(-) diff --git a/types/estree/estree-tests.ts b/types/estree/estree-tests.ts index 744e8ef525..5099d62fa8 100644 --- a/types/estree/estree-tests.ts +++ b/types/estree/estree-tests.ts @@ -31,7 +31,7 @@ declare var baseExpression: ESTree.BaseExpression; declare var thisExpression: ESTree.ThisExpression; declare var arrayExpression: ESTree.ArrayExpression; declare var objectExpression: ESTree.ObjectExpression; -declare var property: ESTree.Property; +declare var property: ESTree.Property | ESTree.SpreadElement; declare var functionExpression: ESTree.FunctionExpression; declare var sequenceExpression: ESTree.SequenceExpression; declare var unaryExpression: ESTree.UnaryExpression; @@ -86,6 +86,7 @@ declare var exportSpecifier: ESTree.ExportSpecifier; declare var exportDefaultDeclaration: ESTree.ExportDefaultDeclaration; declare var exportAllDeclaration: ESTree.ExportAllDeclaration; declare var awaitExpression: ESTree.AwaitExpression; +declare var importExpression: ESTree.ImportExpression; declare var toplevelStatement: ESTree.Statement | ESTree.ModuleDeclaration; declare var expressionOrPattern: ESTree.Expression | ESTree.Pattern; @@ -183,9 +184,11 @@ var propertyOrSpread: ESTree.Property | ESTree.SpreadElement = objectExpression.properties[0]; string = property.type; -expression = property.key; -expressionOrPattern = property.value; -string = property.kind; +if (property.type === 'Property') { + expression = property.key; + expressionOrPattern = property.value; + string = property.kind; +} // FunctionExpression var functionExpression: ESTree.FunctionExpression; @@ -432,6 +435,9 @@ switch (node.type) { case 'AwaitExpression': awaitExpression = node; break; + case 'ImportExpression': + importExpression = node; + break; // end narrowing of Expression case 'Property': @@ -643,6 +649,9 @@ switch (expression.type) { case 'AwaitExpression': awaitExpression = expression; break; + case 'ImportExpression': + importExpression = expression; + break; default: never = expression; } diff --git a/types/estree/index.d.ts b/types/estree/index.d.ts index aed69d82d3..f08cf0d26e 100644 --- a/types/estree/index.d.ts +++ b/types/estree/index.d.ts @@ -226,7 +226,7 @@ type Expression = LogicalExpression | MemberExpression | ConditionalExpression | CallExpression | NewExpression | SequenceExpression | TemplateLiteral | TaggedTemplateExpression | ClassExpression | MetaProperty | Identifier | - AwaitExpression; + AwaitExpression | ImportExpression; export interface BaseExpression extends BaseNode { } @@ -387,6 +387,7 @@ export type UpdateOperator = "++" | "--"; export interface ForOfStatement extends BaseForXStatement { type: "ForOfStatement"; + await: boolean; } export interface Super extends BaseNode { @@ -518,6 +519,11 @@ export interface ImportSpecifier extends BaseModuleSpecifier { imported: Identifier; } +export interface ImportExpression extends BaseExpression { + type: "ImportExpression"; + source: Expression; +} + export interface ImportDefaultSpecifier extends BaseModuleSpecifier { type: "ImportDefaultSpecifier"; }