From c28465e03e18052ba70643bbb2efcc5327d9b5a2 Mon Sep 17 00:00:00 2001 From: jbrown215 Date: Tue, 15 Aug 2017 16:44:15 -0400 Subject: [PATCH] Flow opaque type 6.x backport (#6081) * Flow opaque type backport * Add tests for strip types, comments, and babel-generator * Fix failing tests, run scripts * Bump babylon to 6.18.0 --- lib/types.js | 184 ++++++++++++------ packages/babel-core/package.json | 2 +- packages/babel-generator/package.json | 2 +- .../babel-generator/src/generators/flow.js | 92 ++++++++- .../flow/declare-statements/actual.js | 4 + .../flow/declare-statements/expected.js | 4 + .../fixtures/flow/opaque-type-alias/actual.js | 14 ++ .../flow/opaque-type-alias/expected.js | 8 + .../flow-comments/opaque-type-alias/actual.js | 15 ++ .../opaque-type-alias/expected.js | 13 ++ .../strip-opaque-type-alias/actual.js | 16 ++ packages/babel-traverse/package.json | 2 +- packages/babel-types/README.md | 48 ++++- packages/babel-types/package.json | 2 +- packages/babel-types/src/definitions/flow.js | 24 +++ packages/babel-types/src/retrievers.js | 1 + 16 files changed, 353 insertions(+), 78 deletions(-) create mode 100644 packages/babel-generator/test/fixtures/flow/opaque-type-alias/actual.js create mode 100644 packages/babel-generator/test/fixtures/flow/opaque-type-alias/expected.js create mode 100644 packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/actual.js create mode 100644 packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/expected.js create mode 100644 packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-opaque-type-alias/actual.js diff --git a/lib/types.js b/lib/types.js index e42a516b4a54..208bef4a13b6 100644 --- a/lib/types.js +++ b/lib/types.js @@ -149,8 +149,8 @@ declare class BabelNodeFunctionDeclaration extends BabelNode { body: BabelNodeBlockStatement; generator?: boolean; async?: boolean; - returnType: any; - typeParameters: any; + returnType?: any; + typeParameters?: any; } declare class BabelNodeFunctionExpression extends BabelNode { @@ -160,14 +160,15 @@ declare class BabelNodeFunctionExpression extends BabelNode { body: BabelNodeBlockStatement; generator?: boolean; async?: boolean; - returnType: any; - typeParameters: any; + returnType?: any; + typeParameters?: any; } declare class BabelNodeIdentifier extends BabelNode { type: "Identifier"; name: any; - typeAnnotation: any; + decorators?: any; + typeAnnotation?: any; } declare class BabelNodeIfStatement extends BabelNode { @@ -244,20 +245,20 @@ declare class BabelNodeObjectMethod extends BabelNode { kind?: any; computed?: boolean; key: any; - decorators: any; + decorators?: any; body: BabelNodeBlockStatement; generator?: boolean; async?: boolean; params: any; - returnType: any; - typeParameters: any; + returnType?: any; + typeParameters?: any; } declare class BabelNodeObjectProperty extends BabelNode { type: "ObjectProperty"; computed?: boolean; key: any; - value: BabelNodeExpression; + value: BabelNodeExpression | BabelNodePattern | BabelNodeRestElement; shorthand?: boolean; decorators?: any; } @@ -265,6 +266,7 @@ declare class BabelNodeObjectProperty extends BabelNode { declare class BabelNodeRestElement extends BabelNode { type: "RestElement"; argument: BabelNodeLVal; + decorators?: any; typeAnnotation: any; } @@ -301,7 +303,7 @@ declare class BabelNodeThrowStatement extends BabelNode { declare class BabelNodeTryStatement extends BabelNode { type: "TryStatement"; - body: BabelNodeBlockStatement; + body?: ?BabelNodeBlockStatement; handler?: any; finalizer?: ?BabelNodeBlockStatement; block: any; @@ -349,11 +351,13 @@ declare class BabelNodeAssignmentPattern extends BabelNode { type: "AssignmentPattern"; left: BabelNodeIdentifier; right: BabelNodeExpression; + decorators?: any; } declare class BabelNodeArrayPattern extends BabelNode { type: "ArrayPattern"; elements: any; + decorators?: any; typeAnnotation: any; } @@ -362,7 +366,8 @@ declare class BabelNodeArrowFunctionExpression extends BabelNode { params: any; body: BabelNodeBlockStatement | BabelNodeExpression; async?: boolean; - returnType: any; + returnType?: any; + typeParameters?: any; } declare class BabelNodeClassBody extends BabelNode { @@ -376,9 +381,9 @@ declare class BabelNodeClassDeclaration extends BabelNode { body: BabelNodeClassBody; superClass?: ?BabelNodeExpression; decorators: any; - mixins: any; - typeParameters: any; - superTypeParameters: any; + mixins?: any; + typeParameters?: any; + superTypeParameters?: any; } declare class BabelNodeClassExpression extends BabelNode { @@ -387,9 +392,9 @@ declare class BabelNodeClassExpression extends BabelNode { body: BabelNodeClassBody; superClass?: ?BabelNodeExpression; decorators: any; - mixins: any; - typeParameters: any; - superTypeParameters: any; + mixins?: any; + typeParameters?: any; + superTypeParameters?: any; } declare class BabelNodeExportAllDeclaration extends BabelNode { @@ -412,8 +417,7 @@ declare class BabelNodeExportNamedDeclaration extends BabelNode { declare class BabelNodeExportSpecifier extends BabelNode { type: "ExportSpecifier"; local: BabelNodeIdentifier; - imported: BabelNodeIdentifier; - exported: any; + exported: BabelNodeIdentifier; } declare class BabelNodeForOfStatement extends BabelNode { @@ -443,6 +447,7 @@ declare class BabelNodeImportSpecifier extends BabelNode { type: "ImportSpecifier"; local: BabelNodeIdentifier; imported: BabelNodeIdentifier; + importKind?: null | "type" | "typeof"; } declare class BabelNodeMetaProperty extends BabelNode { @@ -460,14 +465,15 @@ declare class BabelNodeClassMethod extends BabelNode { body: BabelNodeBlockStatement; generator?: boolean; async?: boolean; - decorators: any; - returnType: any; - typeParameters: any; + decorators?: any; + returnType?: any; + typeParameters?: any; } declare class BabelNodeObjectPattern extends BabelNode { type: "ObjectPattern"; properties: any; + decorators?: any; typeAnnotation: any; } @@ -533,6 +539,7 @@ declare class BabelNodeClassImplements extends BabelNode { declare class BabelNodeClassProperty extends BabelNode { type: "ClassProperty"; + computed?: boolean; key: any; value: any; typeAnnotation: any; @@ -576,6 +583,13 @@ declare class BabelNodeDeclareTypeAlias extends BabelNode { right: any; } +declare class BabelNodeDeclareOpaqueType extends BabelNode { + type: "DeclareOpaqueType"; + id: any; + typeParameters: any; + supertype: any; +} + declare class BabelNodeDeclareVariable extends BabelNode { type: "DeclareVariable"; id: any; @@ -627,6 +641,10 @@ declare class BabelNodeMixedTypeAnnotation extends BabelNode { type: "MixedTypeAnnotation"; } +declare class BabelNodeEmptyTypeAnnotation extends BabelNode { + type: "EmptyTypeAnnotation"; +} + declare class BabelNodeNullableTypeAnnotation extends BabelNode { type: "NullableTypeAnnotation"; typeAnnotation: any; @@ -669,6 +687,14 @@ declare class BabelNodeTypeAlias extends BabelNode { right: any; } +declare class BabelNodeOpaqueType extends BabelNode { + type: "OpaqueType"; + id: any; + typeParameters: any; + impltype: any; + supertype: any; +} + declare class BabelNodeTypeAnnotation extends BabelNode { type: "TypeAnnotation"; typeAnnotation: any; @@ -680,6 +706,11 @@ declare class BabelNodeTypeCastExpression extends BabelNode { typeAnnotation: any; } +declare class BabelNodeTypeParameter extends BabelNode { + type: "TypeParameter"; + bound: any; +} + declare class BabelNodeTypeParameterDeclaration extends BabelNode { type: "TypeParameterDeclaration"; params: any; @@ -715,6 +746,11 @@ declare class BabelNodeObjectTypeProperty extends BabelNode { value: any; } +declare class BabelNodeObjectTypeSpreadProperty extends BabelNode { + type: "ObjectTypeSpreadProperty"; + argument: any; +} + declare class BabelNodeQualifiedTypeIdentifier extends BabelNode { type: "QualifiedTypeIdentifier"; id: any; @@ -758,6 +794,11 @@ declare class BabelNodeJSXExpressionContainer extends BabelNode { expression: BabelNodeExpression; } +declare class BabelNodeJSXSpreadChild extends BabelNode { + type: "JSXSpreadChild"; + expression: BabelNodeExpression; +} + declare class BabelNodeJSXIdentifier extends BabelNode { type: "JSXIdentifier"; name: string; @@ -806,12 +847,23 @@ declare class BabelNodeAwaitExpression extends BabelNode { argument: BabelNodeExpression; } +declare class BabelNodeForAwaitStatement extends BabelNode { + type: "ForAwaitStatement"; + left: BabelNodeVariableDeclaration | BabelNodeLVal; + right: BabelNodeExpression; + body: BabelNodeStatement; +} + declare class BabelNodeBindExpression extends BabelNode { type: "BindExpression"; object: any; callee: any; } +declare class BabelNodeImport extends BabelNode { + type: "Import"; +} + declare class BabelNodeDecorator extends BabelNode { type: "Decorator"; expression: BabelNodeExpression; @@ -842,28 +894,28 @@ declare class BabelNodeSpreadProperty extends BabelNode { argument: BabelNodeExpression; } -type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeParenthesizedExpression | BabelNodeAwaitExpression | BabelNodeBindExpression | BabelNodeDoExpression; +type BabelNodeExpression = BabelNodeArrayExpression | BabelNodeAssignmentExpression | BabelNodeBinaryExpression | BabelNodeCallExpression | BabelNodeConditionalExpression | BabelNodeFunctionExpression | BabelNodeIdentifier | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeLogicalExpression | BabelNodeMemberExpression | BabelNodeNewExpression | BabelNodeObjectExpression | BabelNodeSequenceExpression | BabelNodeThisExpression | BabelNodeUnaryExpression | BabelNodeUpdateExpression | BabelNodeArrowFunctionExpression | BabelNodeClassExpression | BabelNodeMetaProperty | BabelNodeSuper | BabelNodeTaggedTemplateExpression | BabelNodeTemplateLiteral | BabelNodeYieldExpression | BabelNodeTypeCastExpression | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeParenthesizedExpression | BabelNodeAwaitExpression | BabelNodeBindExpression | BabelNodeImport | BabelNodeDoExpression; type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression; -type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression | BabelNodeForOfStatement | BabelNodeClassMethod; -type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod; +type BabelNodeScopable = BabelNodeBlockStatement | BabelNodeCatchClause | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeForAwaitStatement; +type BabelNodeBlockParent = BabelNodeBlockStatement | BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeSwitchStatement | BabelNodeWhileStatement | BabelNodeArrowFunctionExpression | BabelNodeForOfStatement | BabelNodeClassMethod | BabelNodeForAwaitStatement; type BabelNodeBlock = BabelNodeBlockStatement | BabelNodeProgram; -type BabelNodeStatement = BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeReturnStatement | BabelNodeSwitchStatement | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeVariableDeclaration | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias; +type BabelNodeStatement = BabelNodeBlockStatement | BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeDebuggerStatement | BabelNodeDoWhileStatement | BabelNodeEmptyStatement | BabelNodeExpressionStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeFunctionDeclaration | BabelNodeIfStatement | BabelNodeLabeledStatement | BabelNodeReturnStatement | BabelNodeSwitchStatement | BabelNodeThrowStatement | BabelNodeTryStatement | BabelNodeVariableDeclaration | BabelNodeWhileStatement | BabelNodeWithStatement | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeForOfStatement | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeForAwaitStatement; type BabelNodeTerminatorless = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement | BabelNodeYieldExpression | BabelNodeAwaitExpression; type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement; type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement; -type BabelNodeLoop = BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeWhileStatement | BabelNodeForOfStatement; +type BabelNodeLoop = BabelNodeDoWhileStatement | BabelNodeForInStatement | BabelNodeForStatement | BabelNodeWhileStatement | BabelNodeForOfStatement | BabelNodeForAwaitStatement; type BabelNodeWhile = BabelNodeDoWhileStatement | BabelNodeWhileStatement; type BabelNodeExpressionWrapper = BabelNodeExpressionStatement | BabelNodeTypeCastExpression | BabelNodeParenthesizedExpression; -type BabelNodeFor = BabelNodeForInStatement | BabelNodeForStatement | BabelNodeForOfStatement; -type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement; +type BabelNodeFor = BabelNodeForInStatement | BabelNodeForStatement | BabelNodeForOfStatement | BabelNodeForAwaitStatement; +type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement | BabelNodeForAwaitStatement; type BabelNodeFunction = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod; type BabelNodeFunctionParent = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeProgram | BabelNodeObjectMethod | BabelNodeArrowFunctionExpression | BabelNodeClassMethod; type BabelNodePureish = BabelNodeFunctionDeclaration | BabelNodeFunctionExpression | BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeArrowFunctionExpression | BabelNodeClassDeclaration | BabelNodeClassExpression; -type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias; +type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType; type BabelNodeLVal = BabelNodeIdentifier | BabelNodeMemberExpression | BabelNodeRestElement | BabelNodeAssignmentPattern | BabelNodeArrayPattern | BabelNodeObjectPattern; type BabelNodeLiteral = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeRegExpLiteral | BabelNodeTemplateLiteral; -type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXOpeningElement; -type BabelNodeUserWhitespacable = BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty; +type BabelNodeImmutable = BabelNodeStringLiteral | BabelNodeNumericLiteral | BabelNodeNullLiteral | BabelNodeBooleanLiteral | BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXOpeningElement | BabelNodeJSXText; +type BabelNodeUserWhitespacable = BabelNodeObjectMethod | BabelNodeObjectProperty | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty; type BabelNodeMethod = BabelNodeObjectMethod | BabelNodeClassMethod; type BabelNodeObjectMember = BabelNodeObjectMethod | BabelNodeObjectProperty; type BabelNodeProperty = BabelNodeObjectProperty | BabelNodeClassProperty; @@ -873,10 +925,10 @@ type BabelNodeClass = BabelNodeClassDeclaration | BabelNodeClassExpression; type BabelNodeModuleDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration; type BabelNodeExportDeclaration = BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration; type BabelNodeModuleSpecifier = BabelNodeExportSpecifier | BabelNodeImportDefaultSpecifier | BabelNodeImportNamespaceSpecifier | BabelNodeImportSpecifier | BabelNodeExportDefaultSpecifier | BabelNodeExportNamespaceSpecifier; -type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeClassProperty | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeExistentialTypeParam | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumericLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeTypeAnnotation | BabelNodeTypeCastExpression | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameterInstantiation | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeQualifiedTypeIdentifier | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation; -type BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation; -type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias; -type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText; +type BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeExistentialTypeParam | BabelNodeFunctionTypeAnnotation | BabelNodeFunctionTypeParam | BabelNodeGenericTypeAnnotation | BabelNodeInterfaceExtends | BabelNodeInterfaceDeclaration | BabelNodeIntersectionTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNullableTypeAnnotation | BabelNodeNumericLiteralTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringLiteralTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeTupleTypeAnnotation | BabelNodeTypeofTypeAnnotation | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeTypeAnnotation | BabelNodeTypeCastExpression | BabelNodeTypeParameter | BabelNodeTypeParameterDeclaration | BabelNodeTypeParameterInstantiation | BabelNodeObjectTypeAnnotation | BabelNodeObjectTypeCallProperty | BabelNodeObjectTypeIndexer | BabelNodeObjectTypeProperty | BabelNodeObjectTypeSpreadProperty | BabelNodeQualifiedTypeIdentifier | BabelNodeUnionTypeAnnotation | BabelNodeVoidTypeAnnotation; +type BabelNodeFlowBaseAnnotation = BabelNodeAnyTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeMixedTypeAnnotation | BabelNodeEmptyTypeAnnotation | BabelNodeNumberTypeAnnotation | BabelNodeStringTypeAnnotation | BabelNodeThisTypeAnnotation | BabelNodeVoidTypeAnnotation; +type BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType; +type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText; declare module "babel-types" { declare function arrayExpression(elements?: any): BabelNodeArrayExpression; @@ -897,9 +949,9 @@ declare module "babel-types" { declare function file(program: BabelNodeProgram, comments: any, tokens: any): BabelNodeFile; declare function forInStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForInStatement; declare function forStatement(init?: ?BabelNodeVariableDeclaration | BabelNodeExpression, test?: ?BabelNodeExpression, update?: ?BabelNodeExpression, body: BabelNodeStatement): BabelNodeForStatement; - declare function functionDeclaration(id: BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType: any, typeParameters: any): BabelNodeFunctionDeclaration; - declare function functionExpression(id?: ?BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType: any, typeParameters: any): BabelNodeFunctionExpression; - declare function identifier(name: any, typeAnnotation: any): BabelNodeIdentifier; + declare function functionDeclaration(id: BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType?: any, typeParameters?: any): BabelNodeFunctionDeclaration; + declare function functionExpression(id?: ?BabelNodeIdentifier, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, returnType?: any, typeParameters?: any): BabelNodeFunctionExpression; + declare function identifier(name: any, decorators?: any, typeAnnotation?: any): BabelNodeIdentifier; declare function ifStatement(test: BabelNodeExpression, consequent: BabelNodeStatement, alternate?: ?BabelNodeStatement): BabelNodeIfStatement; declare function labeledStatement(label: BabelNodeIdentifier, body: BabelNodeStatement): BabelNodeLabeledStatement; declare function stringLiteral(value: string): BabelNodeStringLiteral; @@ -912,40 +964,40 @@ declare module "babel-types" { declare function newExpression(callee: BabelNodeExpression, _arguments: any): BabelNodeNewExpression; declare function program(directives?: any, body: any): BabelNodeProgram; declare function objectExpression(properties: any): BabelNodeObjectExpression; - declare function objectMethod(kind?: any, computed?: boolean, key: any, decorators: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, params: any, returnType: any, typeParameters: any): BabelNodeObjectMethod; - declare function objectProperty(computed?: boolean, key: any, value: BabelNodeExpression, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty; - declare function restElement(argument: BabelNodeLVal, typeAnnotation: any): BabelNodeRestElement; + declare function objectMethod(kind?: any, computed?: boolean, key: any, decorators?: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, params: any, returnType?: any, typeParameters?: any): BabelNodeObjectMethod; + declare function objectProperty(computed?: boolean, key: any, value: BabelNodeExpression | BabelNodePattern | BabelNodeRestElement, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty; + declare function restElement(argument: BabelNodeLVal, decorators?: any, typeAnnotation: any): BabelNodeRestElement; declare function returnStatement(argument?: ?BabelNodeExpression): BabelNodeReturnStatement; declare function sequenceExpression(expressions: any): BabelNodeSequenceExpression; declare function switchCase(test?: ?BabelNodeExpression, consequent: any): BabelNodeSwitchCase; declare function switchStatement(discriminant: BabelNodeExpression, cases: any): BabelNodeSwitchStatement; declare function thisExpression(): BabelNodeThisExpression; declare function throwStatement(argument: BabelNodeExpression): BabelNodeThrowStatement; - declare function tryStatement(body: BabelNodeBlockStatement, handler?: any, finalizer?: ?BabelNodeBlockStatement, block: any): BabelNodeTryStatement; + declare function tryStatement(body?: ?BabelNodeBlockStatement, handler?: any, finalizer?: ?BabelNodeBlockStatement, block: any): BabelNodeTryStatement; declare function unaryExpression(prefix?: boolean, argument: BabelNodeExpression, operator: "void" | "delete" | "!" | "+" | "-" | "++" | "--" | "~" | "typeof"): BabelNodeUnaryExpression; declare function updateExpression(prefix?: boolean, argument: BabelNodeExpression, operator: "++" | "--"): BabelNodeUpdateExpression; declare function variableDeclaration(kind: any, declarations: any): BabelNodeVariableDeclaration; declare function variableDeclarator(id: BabelNodeLVal, init?: ?BabelNodeExpression): BabelNodeVariableDeclarator; declare function whileStatement(test: BabelNodeExpression, body: BabelNodeBlockStatement | BabelNodeStatement): BabelNodeWhileStatement; declare function withStatement(object: any, body: BabelNodeBlockStatement | BabelNodeStatement): BabelNodeWithStatement; - declare function assignmentPattern(left: BabelNodeIdentifier, right: BabelNodeExpression): BabelNodeAssignmentPattern; - declare function arrayPattern(elements: any, typeAnnotation: any): BabelNodeArrayPattern; - declare function arrowFunctionExpression(params: any, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean, returnType: any): BabelNodeArrowFunctionExpression; + declare function assignmentPattern(left: BabelNodeIdentifier, right: BabelNodeExpression, decorators?: any): BabelNodeAssignmentPattern; + declare function arrayPattern(elements: any, decorators?: any, typeAnnotation: any): BabelNodeArrayPattern; + declare function arrowFunctionExpression(params: any, body: BabelNodeBlockStatement | BabelNodeExpression, async?: boolean, returnType?: any, typeParameters?: any): BabelNodeArrowFunctionExpression; declare function classBody(body: any): BabelNodeClassBody; - declare function classDeclaration(id: BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins: any, typeParameters: any, superTypeParameters: any, _implements: any): BabelNodeClassDeclaration; - declare function classExpression(id?: ?BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins: any, typeParameters: any, superTypeParameters: any, _implements: any): BabelNodeClassExpression; + declare function classDeclaration(id: BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins?: any, typeParameters?: any, superTypeParameters?: any, _implements?: any): BabelNodeClassDeclaration; + declare function classExpression(id?: ?BabelNodeIdentifier, body: BabelNodeClassBody, superClass?: ?BabelNodeExpression, decorators: any, mixins?: any, typeParameters?: any, superTypeParameters?: any, _implements?: any): BabelNodeClassExpression; declare function exportAllDeclaration(source: BabelNodeStringLiteral): BabelNodeExportAllDeclaration; declare function exportDefaultDeclaration(declaration: BabelNodeFunctionDeclaration | BabelNodeClassDeclaration | BabelNodeExpression): BabelNodeExportDefaultDeclaration; declare function exportNamedDeclaration(declaration?: ?BabelNodeDeclaration, specifiers: any, source?: ?BabelNodeStringLiteral): BabelNodeExportNamedDeclaration; - declare function exportSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier, exported: any): BabelNodeExportSpecifier; + declare function exportSpecifier(local: BabelNodeIdentifier, exported: BabelNodeIdentifier): BabelNodeExportSpecifier; declare function forOfStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForOfStatement; declare function importDeclaration(specifiers: any, source: BabelNodeStringLiteral): BabelNodeImportDeclaration; declare function importDefaultSpecifier(local: BabelNodeIdentifier): BabelNodeImportDefaultSpecifier; declare function importNamespaceSpecifier(local: BabelNodeIdentifier): BabelNodeImportNamespaceSpecifier; - declare function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier): BabelNodeImportSpecifier; + declare function importSpecifier(local: BabelNodeIdentifier, imported: BabelNodeIdentifier, importKind?: null | "type" | "typeof"): BabelNodeImportSpecifier; declare function metaProperty(meta: string, property: string): BabelNodeMetaProperty; - declare function classMethod(kind?: any, computed?: boolean, _static?: boolean, key: any, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, decorators: any, returnType: any, typeParameters: any): BabelNodeClassMethod; - declare function objectPattern(properties: any, typeAnnotation: any): BabelNodeObjectPattern; + declare function classMethod(kind?: any, computed?: boolean, _static?: boolean, key: any, params: any, body: BabelNodeBlockStatement, generator?: boolean, async?: boolean, decorators?: any, returnType?: any, typeParameters?: any): BabelNodeClassMethod; + declare function objectPattern(properties: any, decorators?: any, typeAnnotation: any): BabelNodeObjectPattern; declare function spreadElement(argument: BabelNodeExpression): BabelNodeSpreadElement; declare function taggedTemplateExpression(tag: BabelNodeExpression, quasi: BabelNodeTemplateLiteral): BabelNodeTaggedTemplateExpression; declare function templateElement(value: any, tail?: boolean): BabelNodeTemplateElement; @@ -957,13 +1009,14 @@ declare module "babel-types" { declare function booleanLiteralTypeAnnotation(): BabelNodeBooleanLiteralTypeAnnotation; declare function nullLiteralTypeAnnotation(): BabelNodeNullLiteralTypeAnnotation; declare function classImplements(id: any, typeParameters: any): BabelNodeClassImplements; - declare function classProperty(key: any, value: any, typeAnnotation: any, decorators: any): BabelNodeClassProperty; + declare function classProperty(computed?: boolean, key: any, value: any, typeAnnotation: any, decorators: any): BabelNodeClassProperty; declare function declareClass(id: any, typeParameters: any, _extends: any, body: any): BabelNodeDeclareClass; declare function declareFunction(id: any): BabelNodeDeclareFunction; declare function declareInterface(id: any, typeParameters: any, _extends: any, body: any): BabelNodeDeclareInterface; declare function declareModule(id: any, body: any): BabelNodeDeclareModule; declare function declareModuleExports(typeAnnotation: any): BabelNodeDeclareModuleExports; declare function declareTypeAlias(id: any, typeParameters: any, right: any): BabelNodeDeclareTypeAlias; + declare function declareOpaqueType(id: any, typeParameters: any, supertype: any): BabelNodeDeclareOpaqueType; declare function declareVariable(id: any): BabelNodeDeclareVariable; declare function existentialTypeParam(): BabelNodeExistentialTypeParam; declare function functionTypeAnnotation(typeParameters: any, params: any, rest: any, returnType: any): BabelNodeFunctionTypeAnnotation; @@ -973,6 +1026,7 @@ declare module "babel-types" { declare function interfaceDeclaration(id: any, typeParameters: any, _extends: any, body: any): BabelNodeInterfaceDeclaration; declare function intersectionTypeAnnotation(types: any): BabelNodeIntersectionTypeAnnotation; declare function mixedTypeAnnotation(): BabelNodeMixedTypeAnnotation; + declare function emptyTypeAnnotation(): BabelNodeEmptyTypeAnnotation; declare function nullableTypeAnnotation(typeAnnotation: any): BabelNodeNullableTypeAnnotation; declare function numericLiteralTypeAnnotation(): BabelNodeNumericLiteralTypeAnnotation; declare function numberTypeAnnotation(): BabelNodeNumberTypeAnnotation; @@ -982,14 +1036,17 @@ declare module "babel-types" { declare function tupleTypeAnnotation(types: any): BabelNodeTupleTypeAnnotation; declare function typeofTypeAnnotation(argument: any): BabelNodeTypeofTypeAnnotation; declare function typeAlias(id: any, typeParameters: any, right: any): BabelNodeTypeAlias; + declare function opaqueType(id: any, typeParameters: any, impltype: any, supertype: any): BabelNodeOpaqueType; declare function typeAnnotation(typeAnnotation: any): BabelNodeTypeAnnotation; declare function typeCastExpression(expression: any, typeAnnotation: any): BabelNodeTypeCastExpression; + declare function typeParameter(bound: any): BabelNodeTypeParameter; declare function typeParameterDeclaration(params: any): BabelNodeTypeParameterDeclaration; declare function typeParameterInstantiation(params: any): BabelNodeTypeParameterInstantiation; declare function objectTypeAnnotation(properties: any, indexers: any, callProperties: any): BabelNodeObjectTypeAnnotation; declare function objectTypeCallProperty(value: any): BabelNodeObjectTypeCallProperty; declare function objectTypeIndexer(id: any, key: any, value: any): BabelNodeObjectTypeIndexer; declare function objectTypeProperty(key: any, value: any): BabelNodeObjectTypeProperty; + declare function objectTypeSpreadProperty(argument: any): BabelNodeObjectTypeSpreadProperty; declare function qualifiedTypeIdentifier(id: any, qualification: any): BabelNodeQualifiedTypeIdentifier; declare function unionTypeAnnotation(types: any): BabelNodeUnionTypeAnnotation; declare function voidTypeAnnotation(): BabelNodeVoidTypeAnnotation; @@ -998,6 +1055,7 @@ declare module "babel-types" { declare function jSXElement(openingElement: BabelNodeJSXOpeningElement, closingElement?: ?BabelNodeJSXClosingElement, children: any, selfClosing: any): BabelNodeJSXElement; declare function jSXEmptyExpression(): BabelNodeJSXEmptyExpression; declare function jSXExpressionContainer(expression: BabelNodeExpression): BabelNodeJSXExpressionContainer; + declare function jSXSpreadChild(expression: BabelNodeExpression): BabelNodeJSXSpreadChild; declare function jSXIdentifier(name: string): BabelNodeJSXIdentifier; declare function jSXMemberExpression(object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier, property: BabelNodeJSXIdentifier): BabelNodeJSXMemberExpression; declare function jSXNamespacedName(namespace: BabelNodeJSXIdentifier, name: BabelNodeJSXIdentifier): BabelNodeJSXNamespacedName; @@ -1007,7 +1065,9 @@ declare module "babel-types" { declare function noop(): BabelNodeNoop; declare function parenthesizedExpression(expression: BabelNodeExpression): BabelNodeParenthesizedExpression; declare function awaitExpression(argument: BabelNodeExpression): BabelNodeAwaitExpression; + declare function forAwaitStatement(left: BabelNodeVariableDeclaration | BabelNodeLVal, right: BabelNodeExpression, body: BabelNodeStatement): BabelNodeForAwaitStatement; declare function bindExpression(object: any, callee: any): BabelNodeBindExpression; + declare function import(): BabelNodeImport; declare function decorator(expression: BabelNodeExpression): BabelNodeDecorator; declare function doExpression(body: BabelNodeBlockStatement): BabelNodeDoExpression; declare function exportDefaultSpecifier(exported: BabelNodeIdentifier): BabelNodeExportDefaultSpecifier; @@ -1100,6 +1160,7 @@ declare module "babel-types" { declare function isDeclareModule(node: Object, opts?: Object): boolean; declare function isDeclareModuleExports(node: Object, opts?: Object): boolean; declare function isDeclareTypeAlias(node: Object, opts?: Object): boolean; + declare function isDeclareOpaqueType(node: Object, opts?: Object): boolean; declare function isDeclareVariable(node: Object, opts?: Object): boolean; declare function isExistentialTypeParam(node: Object, opts?: Object): boolean; declare function isFunctionTypeAnnotation(node: Object, opts?: Object): boolean; @@ -1109,6 +1170,7 @@ declare module "babel-types" { declare function isInterfaceDeclaration(node: Object, opts?: Object): boolean; declare function isIntersectionTypeAnnotation(node: Object, opts?: Object): boolean; declare function isMixedTypeAnnotation(node: Object, opts?: Object): boolean; + declare function isEmptyTypeAnnotation(node: Object, opts?: Object): boolean; declare function isNullableTypeAnnotation(node: Object, opts?: Object): boolean; declare function isNumericLiteralTypeAnnotation(node: Object, opts?: Object): boolean; declare function isNumberTypeAnnotation(node: Object, opts?: Object): boolean; @@ -1118,14 +1180,17 @@ declare module "babel-types" { declare function isTupleTypeAnnotation(node: Object, opts?: Object): boolean; declare function isTypeofTypeAnnotation(node: Object, opts?: Object): boolean; declare function isTypeAlias(node: Object, opts?: Object): boolean; + declare function isOpaqueType(node: Object, opts?: Object): boolean; declare function isTypeAnnotation(node: Object, opts?: Object): boolean; declare function isTypeCastExpression(node: Object, opts?: Object): boolean; + declare function isTypeParameter(node: Object, opts?: Object): boolean; declare function isTypeParameterDeclaration(node: Object, opts?: Object): boolean; declare function isTypeParameterInstantiation(node: Object, opts?: Object): boolean; declare function isObjectTypeAnnotation(node: Object, opts?: Object): boolean; declare function isObjectTypeCallProperty(node: Object, opts?: Object): boolean; declare function isObjectTypeIndexer(node: Object, opts?: Object): boolean; declare function isObjectTypeProperty(node: Object, opts?: Object): boolean; + declare function isObjectTypeSpreadProperty(node: Object, opts?: Object): boolean; declare function isQualifiedTypeIdentifier(node: Object, opts?: Object): boolean; declare function isUnionTypeAnnotation(node: Object, opts?: Object): boolean; declare function isVoidTypeAnnotation(node: Object, opts?: Object): boolean; @@ -1134,6 +1199,7 @@ declare module "babel-types" { declare function isJSXElement(node: Object, opts?: Object): boolean; declare function isJSXEmptyExpression(node: Object, opts?: Object): boolean; declare function isJSXExpressionContainer(node: Object, opts?: Object): boolean; + declare function isJSXSpreadChild(node: Object, opts?: Object): boolean; declare function isJSXIdentifier(node: Object, opts?: Object): boolean; declare function isJSXMemberExpression(node: Object, opts?: Object): boolean; declare function isJSXNamespacedName(node: Object, opts?: Object): boolean; @@ -1143,7 +1209,9 @@ declare module "babel-types" { declare function isNoop(node: Object, opts?: Object): boolean; declare function isParenthesizedExpression(node: Object, opts?: Object): boolean; declare function isAwaitExpression(node: Object, opts?: Object): boolean; + declare function isForAwaitStatement(node: Object, opts?: Object): boolean; declare function isBindExpression(node: Object, opts?: Object): boolean; + declare function isImport(node: Object, opts?: Object): boolean; declare function isDecorator(node: Object, opts?: Object): boolean; declare function isDoExpression(node: Object, opts?: Object): boolean; declare function isExportDefaultSpecifier(node: Object, opts?: Object): boolean; @@ -1187,14 +1255,4 @@ declare module "babel-types" { declare function isJSX(node: Object, opts?: Object): boolean; declare function isNumberLiteral(node: Object, opts?: Object): boolean; declare function isRegexLiteral(node: Object, opts?: Object): boolean; - declare function isReferencedIdentifier(node: Object, opts?: Object): boolean; - declare function isReferencedMemberExpression(node: Object, opts?: Object): boolean; - declare function isBindingIdentifier(node: Object, opts?: Object): boolean; - declare function isScope(node: Object, opts?: Object): boolean; - declare function isReferenced(node: Object, opts?: Object): boolean; - declare function isBlockScoped(node: Object, opts?: Object): boolean; - declare function isVar(node: Object, opts?: Object): boolean; - declare function isUser(node: Object, opts?: Object): boolean; - declare function isGenerated(node: Object, opts?: Object): boolean; - declare function isPure(node: Object, opts?: Object): boolean; } diff --git a/packages/babel-core/package.json b/packages/babel-core/package.json index ba942c69ce38..fafb82eefc41 100644 --- a/packages/babel-core/package.json +++ b/packages/babel-core/package.json @@ -35,7 +35,7 @@ "babel-register": "^6.24.1", "babel-traverse": "^6.25.0", "babel-types": "^6.25.0", - "babylon": "^6.17.2", + "babylon": "^6.18.0", "convert-source-map": "^1.1.0", "debug": "^2.1.1", "json5": "^0.5.0", diff --git a/packages/babel-generator/package.json b/packages/babel-generator/package.json index f67946136786..654e5817fe11 100644 --- a/packages/babel-generator/package.json +++ b/packages/babel-generator/package.json @@ -22,6 +22,6 @@ }, "devDependencies": { "babel-helper-fixtures": "^6.22.0", - "babylon": "^6.17.2" + "babylon": "^6.18.0" } } diff --git a/packages/babel-generator/src/generators/flow.js b/packages/babel-generator/src/generators/flow.js index ecb676ba7d02..ec0abb32fdff 100644 --- a/packages/babel-generator/src/generators/flow.js +++ b/packages/babel-generator/src/generators/flow.js @@ -1,3 +1,5 @@ +import * as t from "babel-types"; + export function AnyTypeAnnotation() { this.word("any"); } @@ -20,17 +22,21 @@ export function NullLiteralTypeAnnotation() { this.word("null"); } -export function DeclareClass(node: Object) { - this.word("declare"); - this.space(); +export function DeclareClass(node: Object, parent: Object) { + if (!t.isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } this.word("class"); this.space(); this._interfaceish(node); } -export function DeclareFunction(node: Object) { - this.word("declare"); - this.space(); +export function DeclareFunction(node: Object, parent: Object) { + if (!t.isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } this.word("function"); this.space(); this.print(node.id, node); @@ -69,9 +75,19 @@ export function DeclareTypeAlias(node: Object) { this.TypeAlias(node); } -export function DeclareVariable(node: Object) { - this.word("declare"); - this.space(); +export function DeclareOpaqueType(node: Object, parent: Object) { + if (!t.isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } + this.OpaqueType(node); +} + +export function DeclareVariable(node: Object, parent: Object) { + if (!t.isDeclareExportDeclaration(parent)) { + this.word("declare"); + this.space(); + } this.word("var"); this.space(); this.print(node.id, node); @@ -79,6 +95,44 @@ export function DeclareVariable(node: Object) { this.semicolon(); } +export function DeclareExportDeclaration(node: Object) { + this.word("declare"); + this.space(); + this.word("export"); + this.space(); + if (node.default) { + this.word("default"); + this.space(); + } + + FlowExportDeclaration.apply(this, arguments); +} + +function FlowExportDeclaration(node: Object) { + if (node.declaration) { + const declar = node.declaration; + this.print(declar, node); + if (!t.isStatement(declar)) this.semicolon(); + } else { + this.token("{"); + if (node.specifiers.length) { + this.space(); + this.printList(node.specifiers, node); + this.space(); + } + this.token("}"); + + if (node.source) { + this.space(); + this.word("from"); + this.space(); + this.print(node.source, node); + } + + this.semicolon(); + } +} + export function ExistentialTypeParam() { this.token("*"); } @@ -222,6 +276,26 @@ export function TypeAlias(node: Object) { this.print(node.right, node); this.semicolon(); } +export function OpaqueType(node: Object) { + this.word("opaque"); + this.space(); + this.word("type"); + this.space(); + this.print(node.id, node); + this.print(node.typeParameters, node); + if (node.supertype) { + this.token(":"); + this.space(); + this.print(node.supertype, node); + } + if (node.impltype) { + this.space(); + this.token("="); + this.space(); + this.print(node.impltype, node); + } + this.semicolon(); +} export function TypeAnnotation(node: Object) { this.token(":"); diff --git a/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js b/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js index 543efd048a7c..e9dfb90dc72a 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js +++ b/packages/babel-generator/test/fixtures/flow/declare-statements/actual.js @@ -18,3 +18,7 @@ declare type B = { declare interface I { foo: string } declare interface I { foo: T } declare module.exports: { foo: string } +declare opaque type Foo: Bar; +declare opaque type ID; +declare opaque type num: number; +declare opaque type NumArray; diff --git a/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js b/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js index 8f667c013739..9ea5f57fcc76 100644 --- a/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js +++ b/packages/babel-generator/test/fixtures/flow/declare-statements/expected.js @@ -18,3 +18,7 @@ declare type B = { declare interface I { foo: string } declare interface I { foo: T } declare module.exports: { foo: string } +declare opaque type Foo: Bar; +declare opaque type ID; +declare opaque type num: number; +declare opaque type NumArray; diff --git a/packages/babel-generator/test/fixtures/flow/opaque-type-alias/actual.js b/packages/babel-generator/test/fixtures/flow/opaque-type-alias/actual.js new file mode 100644 index 000000000000..1988fcaeed71 --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/opaque-type-alias/actual.js @@ -0,0 +1,14 @@ +opaque type ID = string; +opaque type Foo = Bar; +opaque type Maybe = _Maybe; +export opaque type Foo = number; + +opaque type union = + | {type: "A"} + | {type: "B"} +; + +opaque type overloads = + & ((x: string) => number) + & ((x: number) => string) +; diff --git a/packages/babel-generator/test/fixtures/flow/opaque-type-alias/expected.js b/packages/babel-generator/test/fixtures/flow/opaque-type-alias/expected.js new file mode 100644 index 000000000000..301e7dfec65c --- /dev/null +++ b/packages/babel-generator/test/fixtures/flow/opaque-type-alias/expected.js @@ -0,0 +1,8 @@ +opaque type ID = string; +opaque type Foo = Bar; +opaque type Maybe = _Maybe; +export opaque type Foo = number; + +opaque type union = { type: "A" } | { type: "B" }; + +opaque type overloads = (x: string) => number & (x: number) => string; diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/actual.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/actual.js new file mode 100644 index 000000000000..50a01cdb53d2 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/actual.js @@ -0,0 +1,15 @@ +function a() {} +opaque type A = number; +opaque type B = { + name: string; +}; + +opaque type union = + | {type: "A"} + | {type: "B"} +; + +opaque type overloads = + & ((x: string) => number) + & ((x: number) => string) +; diff --git a/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/expected.js b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/expected.js new file mode 100644 index 000000000000..00fea63b9da4 --- /dev/null +++ b/packages/babel-plugin-transform-flow-comments/test/fixtures/flow-comments/opaque-type-alias/expected.js @@ -0,0 +1,13 @@ +function a() {} +/*:: opaque type A = number;*/ +/*:: opaque type B = { + name: string; +};*/ +/*:: opaque type union = + | {type: "A"} + | {type: "B"} +;*/ +/*:: opaque type overloads = + & ((x: string) => number) + & ((x: number) => string) +;*/ diff --git a/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-opaque-type-alias/actual.js b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-opaque-type-alias/actual.js new file mode 100644 index 000000000000..53dfc2c87440 --- /dev/null +++ b/packages/babel-plugin-transform-flow-strip-types/test/fixtures/strip-types/strip-opaque-type-alias/actual.js @@ -0,0 +1,16 @@ +opaque type ID = string; +opaque type Foo = Bar +export opaque type Foo = number; + +opaque type union = + | {type: "A"} + | {type: "B"} +; + +opaque type overloads = + & ((x: string) => number) + & ((x: number) => string) +; + +declare opaque type Foo: Bar; +declare export opaque type Foo: Bar; diff --git a/packages/babel-traverse/package.json b/packages/babel-traverse/package.json index d683fb07987a..71cb6e71fde3 100644 --- a/packages/babel-traverse/package.json +++ b/packages/babel-traverse/package.json @@ -12,7 +12,7 @@ "babel-messages": "^6.23.0", "babel-runtime": "^6.22.0", "babel-types": "^6.25.0", - "babylon": "^6.17.2", + "babylon": "^6.18.0", "debug": "^2.2.0", "globals": "^9.0.0", "invariant": "^2.2.0", diff --git a/packages/babel-types/README.md b/packages/babel-types/README.md index 683388362925..48146044d5ce 100644 --- a/packages/babel-types/README.md +++ b/packages/babel-types/README.md @@ -46,7 +46,7 @@ See also `t.isArrayPattern(node, opts)` and `t.assertArrayPattern(node, opts)`. Aliases: `Pattern`, `LVal` - - `elements`: `Array` (required) + - `elements`: `Array` (required) - `typeAnnotation` (required) - `decorators`: `Array` (default: `null`) @@ -463,6 +463,21 @@ Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` --- +### declareOpaqueType +```javascript +t.declareOpaqueType(id, typeParameters, supertype) +``` + +See also `t.isDeclareOpaqueType(node, opts)` and `t.assertDeclareOpaqueType(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + - `typeParameters` (required) + - `supertype` (required) + +--- + ### declareTypeAlias ```javascript t.declareTypeAlias(id, typeParameters, right) @@ -1368,7 +1383,7 @@ See also `t.isObjectProperty(node, opts)` and `t.assertObjectProperty(node, opts Aliases: `UserWhitespacable`, `Property`, `ObjectMember` - `key`if computed then `Expression` else `Identifier | Literal` (required) - - `value`: `Expression` (required) + - `value`: `Expression | Pattern | RestElement` (required) - `computed`: `boolean` (default: `false`) - `shorthand`: `boolean` (default: `false`) - `decorators`: `Array` (default: `null`) @@ -1432,6 +1447,35 @@ Aliases: `Flow`, `UserWhitespacable` --- +### objectTypeSpreadProperty +```javascript +t.objectTypeSpreadProperty(argument) +``` + +See also `t.isObjectTypeSpreadProperty(node, opts)` and `t.assertObjectTypeSpreadProperty(node, opts)`. + +Aliases: `Flow`, `UserWhitespacable` + + - `argument` (required) + +--- + +### opaqueType +```javascript +t.opaqueType(id, typeParameters, impltype, supertype) +``` + +See also `t.isOpaqueType(node, opts)` and `t.assertOpaqueType(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `id` (required) + - `typeParameters` (required) + - `impltype` (required) + - `supertype` (required) + +--- + ### parenthesizedExpression ```javascript t.parenthesizedExpression(expression) diff --git a/packages/babel-types/package.json b/packages/babel-types/package.json index 125642c8ad96..c546b33673ec 100644 --- a/packages/babel-types/package.json +++ b/packages/babel-types/package.json @@ -15,6 +15,6 @@ }, "devDependencies": { "babel-generator": "^6.22.0", - "babylon": "^6.17.2" + "babylon": "^6.18.0" } } diff --git a/packages/babel-types/src/definitions/flow.js b/packages/babel-types/src/definitions/flow.js index 0c74bdb00d2d..23dca259ce0d 100644 --- a/packages/babel-types/src/definitions/flow.js +++ b/packages/babel-types/src/definitions/flow.js @@ -103,6 +103,14 @@ defineType("DeclareTypeAlias", { } }); +defineType("DeclareOpaqueType", { + visitor: ["id", "typeParameters", "supertype"], + aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], + fields: { + // todo + } +}); + defineType("DeclareVariable", { visitor: ["id"], aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], @@ -111,6 +119,14 @@ defineType("DeclareVariable", { } }); +defineType("DeclareExportDeclaration", { + visitor: ["declaration", "specifiers", "source"], + aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], + fields: { + // todo + }, +}); + defineType("ExistentialTypeParam", { aliases: ["Flow"] }); @@ -236,6 +252,14 @@ defineType("TypeAlias", { } }); +defineType("OpaqueType", { + visitor: ["id", "typeParameters", "impltype", "supertype"], + aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"], + fields: { + // todo + } +}); + defineType("TypeAnnotation", { visitor: ["typeAnnotation"], aliases: ["Flow"], diff --git a/packages/babel-types/src/retrievers.js b/packages/babel-types/src/retrievers.js index 2395ba30467a..c8f8314efd42 100644 --- a/packages/babel-types/src/retrievers.js +++ b/packages/babel-types/src/retrievers.js @@ -70,6 +70,7 @@ getBindingIdentifiers.keys = { DeclareVariable: ["id"], InterfaceDeclaration: ["id"], TypeAlias: ["id"], + OpaqueType: ["id"], CatchClause: ["param"], LabeledStatement: ["label"],