"use strict";
|
|
var _utils = require("./utils");
|
|
const defineInterfaceishType = (name, typeParameterType = "TypeParameterDeclaration") => {
|
(0, _utils.default)(name, {
|
builder: ["id", "typeParameters", "extends", "body"],
|
visitor: ["id", "typeParameters", "extends", "mixins", "implements", "body"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
typeParameters: (0, _utils.validateOptionalType)(typeParameterType),
|
extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
|
mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
|
implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements")),
|
body: (0, _utils.validateType)("ObjectTypeAnnotation")
|
}
|
});
|
};
|
|
(0, _utils.default)("AnyTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("ArrayTypeAnnotation", {
|
visitor: ["elementType"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
elementType: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("BooleanTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("BooleanLiteralTypeAnnotation", {
|
builder: ["value"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
value: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("NullLiteralTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("ClassImplements", {
|
visitor: ["id", "typeParameters"],
|
aliases: ["Flow"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
|
}
|
});
|
defineInterfaceishType("DeclareClass");
|
(0, _utils.default)("DeclareFunction", {
|
visitor: ["id"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
predicate: (0, _utils.validateOptionalType)("DeclaredPredicate")
|
}
|
});
|
defineInterfaceishType("DeclareInterface");
|
(0, _utils.default)("DeclareModule", {
|
builder: ["id", "body", "kind"],
|
visitor: ["id", "body"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
|
body: (0, _utils.validateType)("BlockStatement"),
|
kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("CommonJS", "ES"))
|
}
|
});
|
(0, _utils.default)("DeclareModuleExports", {
|
visitor: ["typeAnnotation"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
|
}
|
});
|
(0, _utils.default)("DeclareTypeAlias", {
|
visitor: ["id", "typeParameters", "right"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
right: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("DeclareOpaqueType", {
|
visitor: ["id", "typeParameters", "supertype"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
supertype: (0, _utils.validateOptionalType)("FlowType"),
|
impltype: (0, _utils.validateOptionalType)("FlowType")
|
}
|
});
|
(0, _utils.default)("DeclareVariable", {
|
visitor: ["id"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier")
|
}
|
});
|
(0, _utils.default)("DeclareExportDeclaration", {
|
visitor: ["declaration", "specifiers", "source"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
declaration: (0, _utils.validateOptionalType)("Flow"),
|
specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)(["ExportSpecifier", "ExportNamespaceSpecifier"])),
|
source: (0, _utils.validateOptionalType)("StringLiteral"),
|
default: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("DeclareExportAllDeclaration", {
|
visitor: ["source"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
source: (0, _utils.validateType)("StringLiteral"),
|
exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value"))
|
}
|
});
|
(0, _utils.default)("DeclaredPredicate", {
|
visitor: ["value"],
|
aliases: ["Flow", "FlowPredicate"],
|
fields: {
|
value: (0, _utils.validateType)("Flow")
|
}
|
});
|
(0, _utils.default)("ExistsTypeAnnotation", {
|
aliases: ["Flow", "FlowType"]
|
});
|
(0, _utils.default)("FunctionTypeAnnotation", {
|
visitor: ["typeParameters", "params", "rest", "returnType"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
params: (0, _utils.validate)((0, _utils.arrayOfType)("FunctionTypeParam")),
|
rest: (0, _utils.validateOptionalType)("FunctionTypeParam"),
|
this: (0, _utils.validateOptionalType)("FunctionTypeParam"),
|
returnType: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("FunctionTypeParam", {
|
visitor: ["name", "typeAnnotation"],
|
aliases: ["Flow"],
|
fields: {
|
name: (0, _utils.validateOptionalType)("Identifier"),
|
typeAnnotation: (0, _utils.validateType)("FlowType"),
|
optional: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("GenericTypeAnnotation", {
|
visitor: ["id", "typeParameters"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
|
}
|
});
|
(0, _utils.default)("InferredPredicate", {
|
aliases: ["Flow", "FlowPredicate"]
|
});
|
(0, _utils.default)("InterfaceExtends", {
|
visitor: ["id", "typeParameters"],
|
aliases: ["Flow"],
|
fields: {
|
id: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"]),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
|
}
|
});
|
defineInterfaceishType("InterfaceDeclaration");
|
(0, _utils.default)("InterfaceTypeAnnotation", {
|
visitor: ["extends", "body"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
|
body: (0, _utils.validateType)("ObjectTypeAnnotation")
|
}
|
});
|
(0, _utils.default)("IntersectionTypeAnnotation", {
|
visitor: ["types"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
}
|
});
|
(0, _utils.default)("MixedTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("EmptyTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("NullableTypeAnnotation", {
|
visitor: ["typeAnnotation"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
typeAnnotation: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("NumberLiteralTypeAnnotation", {
|
builder: ["value"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
value: (0, _utils.validate)((0, _utils.assertValueType)("number"))
|
}
|
});
|
(0, _utils.default)("NumberTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("ObjectTypeAnnotation", {
|
visitor: ["properties", "indexers", "callProperties", "internalSlots"],
|
aliases: ["Flow", "FlowType"],
|
builder: ["properties", "indexers", "callProperties", "internalSlots", "exact"],
|
fields: {
|
properties: (0, _utils.validate)((0, _utils.arrayOfType)(["ObjectTypeProperty", "ObjectTypeSpreadProperty"])),
|
indexers: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeIndexer")),
|
callProperties: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeCallProperty")),
|
internalSlots: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ObjectTypeInternalSlot")),
|
exact: {
|
validate: (0, _utils.assertValueType)("boolean"),
|
default: false
|
},
|
inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("ObjectTypeInternalSlot", {
|
visitor: ["id", "value", "optional", "static", "method"],
|
aliases: ["Flow", "UserWhitespacable"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
value: (0, _utils.validateType)("FlowType"),
|
optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("ObjectTypeCallProperty", {
|
visitor: ["value"],
|
aliases: ["Flow", "UserWhitespacable"],
|
fields: {
|
value: (0, _utils.validateType)("FlowType"),
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("ObjectTypeIndexer", {
|
visitor: ["id", "key", "value", "variance"],
|
aliases: ["Flow", "UserWhitespacable"],
|
fields: {
|
id: (0, _utils.validateOptionalType)("Identifier"),
|
key: (0, _utils.validateType)("FlowType"),
|
value: (0, _utils.validateType)("FlowType"),
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
variance: (0, _utils.validateOptionalType)("Variance")
|
}
|
});
|
(0, _utils.default)("ObjectTypeProperty", {
|
visitor: ["key", "value", "variance"],
|
aliases: ["Flow", "UserWhitespacable"],
|
fields: {
|
key: (0, _utils.validateType)(["Identifier", "StringLiteral"]),
|
value: (0, _utils.validateType)("FlowType"),
|
kind: (0, _utils.validate)((0, _utils.assertOneOf)("init", "get", "set")),
|
static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
proto: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
variance: (0, _utils.validateOptionalType)("Variance"),
|
method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("ObjectTypeSpreadProperty", {
|
visitor: ["argument"],
|
aliases: ["Flow", "UserWhitespacable"],
|
fields: {
|
argument: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("OpaqueType", {
|
visitor: ["id", "typeParameters", "supertype", "impltype"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
supertype: (0, _utils.validateOptionalType)("FlowType"),
|
impltype: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("QualifiedTypeIdentifier", {
|
visitor: ["id", "qualification"],
|
aliases: ["Flow"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
qualification: (0, _utils.validateType)(["Identifier", "QualifiedTypeIdentifier"])
|
}
|
});
|
(0, _utils.default)("StringLiteralTypeAnnotation", {
|
builder: ["value"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
value: (0, _utils.validate)((0, _utils.assertValueType)("string"))
|
}
|
});
|
(0, _utils.default)("StringTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("SymbolTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("ThisTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("TupleTypeAnnotation", {
|
visitor: ["types"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
}
|
});
|
(0, _utils.default)("TypeofTypeAnnotation", {
|
visitor: ["argument"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
argument: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("TypeAlias", {
|
visitor: ["id", "typeParameters", "right"],
|
aliases: ["Flow", "FlowDeclaration", "Statement", "Declaration"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
|
right: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("TypeAnnotation", {
|
aliases: ["Flow"],
|
visitor: ["typeAnnotation"],
|
fields: {
|
typeAnnotation: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("TypeCastExpression", {
|
visitor: ["expression", "typeAnnotation"],
|
aliases: ["Flow", "ExpressionWrapper", "Expression"],
|
fields: {
|
expression: (0, _utils.validateType)("Expression"),
|
typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
|
}
|
});
|
(0, _utils.default)("TypeParameter", {
|
aliases: ["Flow"],
|
visitor: ["bound", "default", "variance"],
|
fields: {
|
name: (0, _utils.validate)((0, _utils.assertValueType)("string")),
|
bound: (0, _utils.validateOptionalType)("TypeAnnotation"),
|
default: (0, _utils.validateOptionalType)("FlowType"),
|
variance: (0, _utils.validateOptionalType)("Variance")
|
}
|
});
|
(0, _utils.default)("TypeParameterDeclaration", {
|
aliases: ["Flow"],
|
visitor: ["params"],
|
fields: {
|
params: (0, _utils.validate)((0, _utils.arrayOfType)("TypeParameter"))
|
}
|
});
|
(0, _utils.default)("TypeParameterInstantiation", {
|
aliases: ["Flow"],
|
visitor: ["params"],
|
fields: {
|
params: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
}
|
});
|
(0, _utils.default)("UnionTypeAnnotation", {
|
visitor: ["types"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
|
}
|
});
|
(0, _utils.default)("Variance", {
|
aliases: ["Flow"],
|
builder: ["kind"],
|
fields: {
|
kind: (0, _utils.validate)((0, _utils.assertOneOf)("minus", "plus"))
|
}
|
});
|
(0, _utils.default)("VoidTypeAnnotation", {
|
aliases: ["Flow", "FlowType", "FlowBaseAnnotation"]
|
});
|
(0, _utils.default)("EnumDeclaration", {
|
aliases: ["Statement", "Declaration"],
|
visitor: ["id", "body"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
body: (0, _utils.validateType)(["EnumBooleanBody", "EnumNumberBody", "EnumStringBody", "EnumSymbolBody"])
|
}
|
});
|
(0, _utils.default)("EnumBooleanBody", {
|
aliases: ["EnumBody"],
|
visitor: ["members"],
|
fields: {
|
explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
members: (0, _utils.validateArrayOfType)("EnumBooleanMember"),
|
hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("EnumNumberBody", {
|
aliases: ["EnumBody"],
|
visitor: ["members"],
|
fields: {
|
explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
members: (0, _utils.validateArrayOfType)("EnumNumberMember"),
|
hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("EnumStringBody", {
|
aliases: ["EnumBody"],
|
visitor: ["members"],
|
fields: {
|
explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
|
members: (0, _utils.validateArrayOfType)(["EnumStringMember", "EnumDefaultedMember"]),
|
hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("EnumSymbolBody", {
|
aliases: ["EnumBody"],
|
visitor: ["members"],
|
fields: {
|
members: (0, _utils.validateArrayOfType)("EnumDefaultedMember"),
|
hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|
(0, _utils.default)("EnumBooleanMember", {
|
aliases: ["EnumMember"],
|
visitor: ["id"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
init: (0, _utils.validateType)("BooleanLiteral")
|
}
|
});
|
(0, _utils.default)("EnumNumberMember", {
|
aliases: ["EnumMember"],
|
visitor: ["id", "init"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
init: (0, _utils.validateType)("NumericLiteral")
|
}
|
});
|
(0, _utils.default)("EnumStringMember", {
|
aliases: ["EnumMember"],
|
visitor: ["id", "init"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier"),
|
init: (0, _utils.validateType)("StringLiteral")
|
}
|
});
|
(0, _utils.default)("EnumDefaultedMember", {
|
aliases: ["EnumMember"],
|
visitor: ["id"],
|
fields: {
|
id: (0, _utils.validateType)("Identifier")
|
}
|
});
|
(0, _utils.default)("IndexedAccessType", {
|
visitor: ["objectType", "indexType"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
objectType: (0, _utils.validateType)("FlowType"),
|
indexType: (0, _utils.validateType)("FlowType")
|
}
|
});
|
(0, _utils.default)("OptionalIndexedAccessType", {
|
visitor: ["objectType", "indexType"],
|
aliases: ["Flow", "FlowType"],
|
fields: {
|
objectType: (0, _utils.validateType)("FlowType"),
|
indexType: (0, _utils.validateType)("FlowType"),
|
optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
|
}
|
});
|