From f4716dc816fc9fd81e56aa4537e2f0ff6aa8290e Mon Sep 17 00:00:00 2001 From: jbrown215 Date: Tue, 15 Aug 2017 17:42:01 -0400 Subject: [PATCH] Backport #6031 (#6112) * Backport #6031 * Backport #6031 * Rebase on master, rerun scripts * Update flowconfig --- .flowconfig | 1 + lib/types.js | 100 ++++++++++++++++++--------------- packages/babel-types/README.md | 15 +++++ scripts/generate-interfaces.js | 79 +++++++++++++++----------- 4 files changed, 117 insertions(+), 78 deletions(-) diff --git a/.flowconfig b/.flowconfig index 1f7415a49524..50a3b68e8474 100644 --- a/.flowconfig +++ b/.flowconfig @@ -1,6 +1,7 @@ [ignore] .*/packages/.*/lib .*/packages/.*/test +.*/node_modules/conventional-changelog-core/ [include] packages/*/src diff --git a/lib/types.js b/lib/types.js index 208bef4a13b6..a5e6e79dfad2 100644 --- a/lib/types.js +++ b/lib/types.js @@ -68,8 +68,8 @@ declare class BabelNodeDirectiveLiteral extends BabelNode { declare class BabelNodeBlockStatement extends BabelNode { type: "BlockStatement"; - directives?: any; body: any; + directives?: any; } declare class BabelNodeBreakStatement extends BabelNode { @@ -231,8 +231,8 @@ declare class BabelNodeNewExpression extends BabelNode { declare class BabelNodeProgram extends BabelNode { type: "Program"; - directives?: any; body: any; + directives?: any; } declare class BabelNodeObjectExpression extends BabelNode { @@ -243,22 +243,22 @@ declare class BabelNodeObjectExpression extends BabelNode { declare class BabelNodeObjectMethod extends BabelNode { type: "ObjectMethod"; kind?: any; - computed?: boolean; key: any; - decorators?: any; + params: any; body: BabelNodeBlockStatement; - generator?: boolean; + computed?: boolean; async?: boolean; - params: any; + decorators?: any; + generator?: boolean; returnType?: any; typeParameters?: any; } declare class BabelNodeObjectProperty extends BabelNode { type: "ObjectProperty"; - computed?: boolean; key: any; value: BabelNodeExpression | BabelNodePattern | BabelNodeRestElement; + computed?: boolean; shorthand?: boolean; decorators?: any; } @@ -266,8 +266,8 @@ declare class BabelNodeObjectProperty extends BabelNode { declare class BabelNodeRestElement extends BabelNode { type: "RestElement"; argument: BabelNodeLVal; - decorators?: any; typeAnnotation: any; + decorators?: any; } declare class BabelNodeReturnStatement extends BabelNode { @@ -303,24 +303,24 @@ declare class BabelNodeThrowStatement extends BabelNode { declare class BabelNodeTryStatement extends BabelNode { type: "TryStatement"; - body?: ?BabelNodeBlockStatement; + block: any; handler?: any; finalizer?: ?BabelNodeBlockStatement; - block: any; + body?: ?BabelNodeBlockStatement; } declare class BabelNodeUnaryExpression extends BabelNode { type: "UnaryExpression"; - prefix?: boolean; - argument: BabelNodeExpression; operator: "void" | "delete" | "!" | "+" | "-" | "++" | "--" | "~" | "typeof"; + argument: BabelNodeExpression; + prefix?: boolean; } declare class BabelNodeUpdateExpression extends BabelNode { type: "UpdateExpression"; - prefix?: boolean; - argument: BabelNodeExpression; operator: "++" | "--"; + argument: BabelNodeExpression; + prefix?: boolean; } declare class BabelNodeVariableDeclaration extends BabelNode { @@ -357,8 +357,8 @@ declare class BabelNodeAssignmentPattern extends BabelNode { declare class BabelNodeArrayPattern extends BabelNode { type: "ArrayPattern"; elements: any; - decorators?: any; typeAnnotation: any; + decorators?: any; } declare class BabelNodeArrowFunctionExpression extends BabelNode { @@ -378,23 +378,23 @@ declare class BabelNodeClassBody extends BabelNode { declare class BabelNodeClassDeclaration extends BabelNode { type: "ClassDeclaration"; id: BabelNodeIdentifier; - body: BabelNodeClassBody; superClass?: ?BabelNodeExpression; + body: BabelNodeClassBody; decorators: any; mixins?: any; - typeParameters?: any; superTypeParameters?: any; + typeParameters?: any; } declare class BabelNodeClassExpression extends BabelNode { type: "ClassExpression"; id?: ?BabelNodeIdentifier; - body: BabelNodeClassBody; superClass?: ?BabelNodeExpression; + body: BabelNodeClassBody; decorators: any; mixins?: any; - typeParameters?: any; superTypeParameters?: any; + typeParameters?: any; } declare class BabelNodeExportAllDeclaration extends BabelNode { @@ -459,13 +459,13 @@ declare class BabelNodeMetaProperty extends BabelNode { declare class BabelNodeClassMethod extends BabelNode { type: "ClassMethod"; kind?: any; - computed?: boolean; key: any; params: any; body: BabelNodeBlockStatement; - generator?: boolean; + computed?: boolean; async?: boolean; decorators?: any; + generator?: boolean; returnType?: any; typeParameters?: any; } @@ -473,8 +473,8 @@ declare class BabelNodeClassMethod extends BabelNode { declare class BabelNodeObjectPattern extends BabelNode { type: "ObjectPattern"; properties: any; - decorators?: any; typeAnnotation: any; + decorators?: any; } declare class BabelNodeSpreadElement extends BabelNode { @@ -506,8 +506,8 @@ declare class BabelNodeTemplateLiteral extends BabelNode { declare class BabelNodeYieldExpression extends BabelNode { type: "YieldExpression"; - delegate?: boolean; argument?: ?BabelNodeExpression; + delegate?: boolean; } declare class BabelNodeAnyTypeAnnotation extends BabelNode { @@ -539,11 +539,11 @@ declare class BabelNodeClassImplements extends BabelNode { declare class BabelNodeClassProperty extends BabelNode { type: "ClassProperty"; - computed?: boolean; key: any; value: any; typeAnnotation: any; decorators: any; + computed?: boolean; } declare class BabelNodeDeclareClass extends BabelNode { @@ -595,6 +595,13 @@ declare class BabelNodeDeclareVariable extends BabelNode { id: any; } +declare class BabelNodeDeclareExportDeclaration extends BabelNode { + type: "DeclareExportDeclaration"; + declaration: any; + specifiers: any; + source: any; +} + declare class BabelNodeExistentialTypeParam extends BabelNode { type: "ExistentialTypeParam"; } @@ -819,8 +826,8 @@ declare class BabelNodeJSXNamespacedName extends BabelNode { declare class BabelNodeJSXOpeningElement extends BabelNode { type: "JSXOpeningElement"; name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression; - selfClosing?: boolean; attributes: any; + selfClosing?: boolean; } declare class BabelNodeJSXSpreadAttribute extends BabelNode { @@ -899,7 +906,7 @@ type BabelNodeBinary = BabelNodeBinaryExpression | BabelNodeLogicalExpression; 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 | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeForAwaitStatement; +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 | BabelNodeDeclareExportDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType | BabelNodeForAwaitStatement; type BabelNodeTerminatorless = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement | BabelNodeYieldExpression | BabelNodeAwaitExpression; type BabelNodeCompletionStatement = BabelNodeBreakStatement | BabelNodeContinueStatement | BabelNodeReturnStatement | BabelNodeThrowStatement; type BabelNodeConditional = BabelNodeConditionalExpression | BabelNodeIfStatement; @@ -911,7 +918,7 @@ type BabelNodeForXStatement = BabelNodeForInStatement | BabelNodeForOfStatement 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 | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType; +type BabelNodeDeclaration = BabelNodeFunctionDeclaration | BabelNodeVariableDeclaration | BabelNodeClassDeclaration | BabelNodeExportAllDeclaration | BabelNodeExportDefaultDeclaration | BabelNodeExportNamedDeclaration | BabelNodeImportDeclaration | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | 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 | BabelNodeJSXSpreadChild | BabelNodeJSXOpeningElement | BabelNodeJSXText; @@ -925,9 +932,9 @@ 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 | 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 BabelNodeFlow = BabelNodeAnyTypeAnnotation | BabelNodeArrayTypeAnnotation | BabelNodeBooleanTypeAnnotation | BabelNodeBooleanLiteralTypeAnnotation | BabelNodeNullLiteralTypeAnnotation | BabelNodeClassImplements | BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | 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 BabelNodeFlowDeclaration = BabelNodeDeclareClass | BabelNodeDeclareFunction | BabelNodeDeclareInterface | BabelNodeDeclareModule | BabelNodeDeclareModuleExports | BabelNodeDeclareTypeAlias | BabelNodeDeclareOpaqueType | BabelNodeDeclareVariable | BabelNodeDeclareExportDeclaration | BabelNodeInterfaceDeclaration | BabelNodeTypeAlias | BabelNodeOpaqueType; type BabelNodeJSX = BabelNodeJSXAttribute | BabelNodeJSXClosingElement | BabelNodeJSXElement | BabelNodeJSXEmptyExpression | BabelNodeJSXExpressionContainer | BabelNodeJSXSpreadChild | BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression | BabelNodeJSXNamespacedName | BabelNodeJSXOpeningElement | BabelNodeJSXSpreadAttribute | BabelNodeJSXText; declare module "babel-types" { @@ -936,7 +943,7 @@ declare module "babel-types" { declare function binaryExpression(operator: "+" | "-" | "/" | "%" | "*" | "**" | "&" | "|" | ">>" | ">>>" | "<<" | "^" | "==" | "===" | "!=" | "!==" | "in" | "instanceof" | ">" | "<" | ">=" | "<=", left: BabelNodeExpression, right: BabelNodeExpression): BabelNodeBinaryExpression; declare function directive(value: BabelNodeDirectiveLiteral): BabelNodeDirective; declare function directiveLiteral(value: string): BabelNodeDirectiveLiteral; - declare function blockStatement(directives?: any, body: any): BabelNodeBlockStatement; + declare function blockStatement(body: any, directives?: any): BabelNodeBlockStatement; declare function breakStatement(label?: ?BabelNodeIdentifier): BabelNodeBreakStatement; declare function callExpression(callee: BabelNodeExpression, _arguments: any): BabelNodeCallExpression; declare function catchClause(param: BabelNodeIdentifier, body: BabelNodeBlockStatement): BabelNodeCatchClause; @@ -962,30 +969,30 @@ declare module "babel-types" { declare function logicalExpression(operator: "||" | "&&", left: BabelNodeExpression, right: BabelNodeExpression): BabelNodeLogicalExpression; declare function memberExpression(object: BabelNodeExpression, property: any, computed?: boolean): BabelNodeMemberExpression; declare function newExpression(callee: BabelNodeExpression, _arguments: any): BabelNodeNewExpression; - declare function program(directives?: any, body: any): BabelNodeProgram; + declare function program(body: any, directives?: 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 | BabelNodePattern | BabelNodeRestElement, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty; - declare function restElement(argument: BabelNodeLVal, decorators?: any, typeAnnotation: any): BabelNodeRestElement; + declare function objectMethod(kind?: any, key: any, params: any, body: BabelNodeBlockStatement, computed?: boolean, async?: boolean, decorators?: any, generator?: boolean, returnType?: any, typeParameters?: any): BabelNodeObjectMethod; + declare function objectProperty(key: any, value: BabelNodeExpression | BabelNodePattern | BabelNodeRestElement, computed?: boolean, shorthand?: boolean, decorators?: any): BabelNodeObjectProperty; + declare function restElement(argument: BabelNodeLVal, typeAnnotation: any, decorators?: 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 unaryExpression(prefix?: boolean, argument: BabelNodeExpression, operator: "void" | "delete" | "!" | "+" | "-" | "++" | "--" | "~" | "typeof"): BabelNodeUnaryExpression; - declare function updateExpression(prefix?: boolean, argument: BabelNodeExpression, operator: "++" | "--"): BabelNodeUpdateExpression; + declare function tryStatement(block: any, handler?: any, finalizer?: ?BabelNodeBlockStatement, body?: ?BabelNodeBlockStatement): BabelNodeTryStatement; + declare function unaryExpression(operator: "void" | "delete" | "!" | "+" | "-" | "++" | "--" | "~" | "typeof", argument: BabelNodeExpression, prefix?: boolean): BabelNodeUnaryExpression; + declare function updateExpression(operator: "++" | "--", argument: BabelNodeExpression, prefix?: boolean): 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, decorators?: any): BabelNodeAssignmentPattern; - declare function arrayPattern(elements: any, decorators?: any, typeAnnotation: any): BabelNodeArrayPattern; + declare function arrayPattern(elements: any, typeAnnotation: any, decorators?: 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, superClass?: ?BabelNodeExpression, body: BabelNodeClassBody, decorators: any, _implements?: any, mixins?: any, superTypeParameters?: any, typeParameters?: any): BabelNodeClassDeclaration; + declare function classExpression(id?: ?BabelNodeIdentifier, superClass?: ?BabelNodeExpression, body: BabelNodeClassBody, decorators: any, _implements?: any, mixins?: any, superTypeParameters?: any, typeParameters?: 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; @@ -996,20 +1003,20 @@ declare module "babel-types" { declare function importNamespaceSpecifier(local: BabelNodeIdentifier): BabelNodeImportNamespaceSpecifier; 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, decorators?: any, typeAnnotation: any): BabelNodeObjectPattern; + declare function classMethod(kind?: any, key: any, params: any, body: BabelNodeBlockStatement, computed?: boolean, _static?: boolean, async?: boolean, decorators?: any, generator?: boolean, returnType?: any, typeParameters?: any): BabelNodeClassMethod; + declare function objectPattern(properties: any, typeAnnotation: any, decorators?: any): BabelNodeObjectPattern; declare function spreadElement(argument: BabelNodeExpression): BabelNodeSpreadElement; declare function taggedTemplateExpression(tag: BabelNodeExpression, quasi: BabelNodeTemplateLiteral): BabelNodeTaggedTemplateExpression; declare function templateElement(value: any, tail?: boolean): BabelNodeTemplateElement; declare function templateLiteral(quasis: any, expressions: any): BabelNodeTemplateLiteral; - declare function yieldExpression(delegate?: boolean, argument?: ?BabelNodeExpression): BabelNodeYieldExpression; + declare function yieldExpression(argument?: ?BabelNodeExpression, delegate?: boolean): BabelNodeYieldExpression; declare function anyTypeAnnotation(): BabelNodeAnyTypeAnnotation; declare function arrayTypeAnnotation(elementType: any): BabelNodeArrayTypeAnnotation; declare function booleanTypeAnnotation(): BabelNodeBooleanTypeAnnotation; declare function booleanLiteralTypeAnnotation(): BabelNodeBooleanLiteralTypeAnnotation; declare function nullLiteralTypeAnnotation(): BabelNodeNullLiteralTypeAnnotation; declare function classImplements(id: any, typeParameters: any): BabelNodeClassImplements; - declare function classProperty(computed?: boolean, key: any, value: any, typeAnnotation: any, decorators: any): BabelNodeClassProperty; + declare function classProperty(key: any, value: any, typeAnnotation: any, decorators: any, computed?: boolean): 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; @@ -1018,6 +1025,7 @@ declare module "babel-types" { 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 declareExportDeclaration(declaration: any, specifiers: any, source: any): BabelNodeDeclareExportDeclaration; declare function existentialTypeParam(): BabelNodeExistentialTypeParam; declare function functionTypeAnnotation(typeParameters: any, params: any, rest: any, returnType: any): BabelNodeFunctionTypeAnnotation; declare function functionTypeParam(name: any, typeAnnotation: any): BabelNodeFunctionTypeParam; @@ -1059,7 +1067,7 @@ declare module "babel-types" { declare function jSXIdentifier(name: string): BabelNodeJSXIdentifier; declare function jSXMemberExpression(object: BabelNodeJSXMemberExpression | BabelNodeJSXIdentifier, property: BabelNodeJSXIdentifier): BabelNodeJSXMemberExpression; declare function jSXNamespacedName(namespace: BabelNodeJSXIdentifier, name: BabelNodeJSXIdentifier): BabelNodeJSXNamespacedName; - declare function jSXOpeningElement(name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression, selfClosing?: boolean, attributes: any): BabelNodeJSXOpeningElement; + declare function jSXOpeningElement(name: BabelNodeJSXIdentifier | BabelNodeJSXMemberExpression, attributes: any, selfClosing?: boolean): BabelNodeJSXOpeningElement; declare function jSXSpreadAttribute(argument: BabelNodeExpression): BabelNodeJSXSpreadAttribute; declare function jSXText(value: string): BabelNodeJSXText; declare function noop(): BabelNodeNoop; @@ -1067,7 +1075,6 @@ declare module "babel-types" { 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; @@ -1162,6 +1169,7 @@ declare module "babel-types" { 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 isDeclareExportDeclaration(node: Object, opts?: Object): boolean; declare function isExistentialTypeParam(node: Object, opts?: Object): boolean; declare function isFunctionTypeAnnotation(node: Object, opts?: Object): boolean; declare function isFunctionTypeParam(node: Object, opts?: Object): boolean; diff --git a/packages/babel-types/README.md b/packages/babel-types/README.md index 48146044d5ce..b0e3f1a1b169 100644 --- a/packages/babel-types/README.md +++ b/packages/babel-types/README.md @@ -407,6 +407,21 @@ Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` --- +### declareExportDeclaration +```javascript +t.declareExportDeclaration(declaration, specifiers, source) +``` + +See also `t.isDeclareExportDeclaration(node, opts)` and `t.assertDeclareExportDeclaration(node, opts)`. + +Aliases: `Flow`, `FlowDeclaration`, `Statement`, `Declaration` + + - `declaration` (required) + - `specifiers` (required) + - `source` (required) + +--- + ### declareFunction ```javascript t.declareFunction(id) diff --git a/scripts/generate-interfaces.js b/scripts/generate-interfaces.js index e51f8f39b6d3..b091d6d9d3ad 100644 --- a/scripts/generate-interfaces.js +++ b/scripts/generate-interfaces.js @@ -52,52 +52,67 @@ for (var type in t.NODE_FIELDS) { var struct = ['type: "' + type + '";']; var args = []; - for (var fieldName in fields) { - var field = fields[fieldName]; - - var suffix = ""; - if (field.optional || field.default != null) suffix += "?"; - - var typeAnnotation = "any"; + Object.keys(t.NODE_FIELDS[type]) + .sort((fieldA, fieldB) => { + const indexA = t.BUILDER_KEYS[type].indexOf(fieldA); + const indexB = t.BUILDER_KEYS[type].indexOf(fieldB); + if (indexA === indexB) return fieldA < fieldB ? -1 : 1; + if (indexA === -1) return 1; + if (indexB === -1) return -1; + return indexA - indexB; + }) + .forEach(fieldName => { + const field = fields[fieldName]; + + let suffix = ""; + if (field.optional || field.default != null) suffix += "?"; + + let typeAnnotation = "any"; + + const validate = field.validate; + if (validate) { + if (validate.oneOf) { + typeAnnotation = validate.oneOf + .map(function(val) { + return JSON.stringify(val); + }) + .join(" | "); + } - var validate = field.validate; - if (validate) { - if (validate.oneOf) { - typeAnnotation = validate.oneOf.map(function (val) { - return JSON.stringify(val); - }).join(" | "); - } + if (validate.type) { + typeAnnotation = validate.type; - if (validate.type) { - typeAnnotation = validate.type; + if (typeAnnotation === "array") { + typeAnnotation = "Array"; + } + } - if (typeAnnotation === "array") { - typeAnnotation = "Array"; + if (validate.oneOfNodeTypes) { + const types = validate.oneOfNodeTypes.map( + type => `${NODE_PREFIX}${type}` + ); + typeAnnotation = types.join(" | "); + if (suffix === "?") typeAnnotation = "?" + typeAnnotation; } } - if (validate.oneOfNodeTypes) { - var types = validate.oneOfNodeTypes.map(type => `${NODE_PREFIX}${type}`); - typeAnnotation = types.join(" | "); - if (suffix === "?") typeAnnotation = "?" + typeAnnotation; + if (typeAnnotation) { + suffix += ": " + typeAnnotation; } - } - if (typeAnnotation) { - suffix += ": " + typeAnnotation; - } + args.push(t.toBindingIdentifierName(fieldName) + suffix); - args.push(t.toBindingIdentifierName(fieldName) + suffix); - if (!t.isValidIdentifier(fieldName)) continue; - struct.push(fieldName + suffix + ";"); - } + if (t.isValidIdentifier(fieldName)) { + struct.push(fieldName + suffix + ";"); + } + }); code += `declare class ${NODE_PREFIX}${type} extends ${NODE_PREFIX} { ${struct.join("\n ").trim()} }\n\n`; - // Flow chokes on super() :/ - if (type !== 'Super') { + // Flow chokes on super() and import() :/ + if (type !== "Super" && type !== "Import") { lines.push(`declare function ${type[0].toLowerCase() + type.slice(1)}(${args.join(", ")}): ${NODE_PREFIX}${type};`); } }