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