You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
670 lines
16 KiB
670 lines
16 KiB
"use strict";
|
|
|
|
Object.defineProperty(exports, "__esModule", {
|
|
value: true
|
|
});
|
|
exports.AnyTypeAnnotation = AnyTypeAnnotation;
|
|
exports.ArrayTypeAnnotation = ArrayTypeAnnotation;
|
|
exports.BooleanLiteralTypeAnnotation = BooleanLiteralTypeAnnotation;
|
|
exports.BooleanTypeAnnotation = BooleanTypeAnnotation;
|
|
exports.DeclareClass = DeclareClass;
|
|
exports.DeclareExportAllDeclaration = DeclareExportAllDeclaration;
|
|
exports.DeclareExportDeclaration = DeclareExportDeclaration;
|
|
exports.DeclareFunction = DeclareFunction;
|
|
exports.DeclareInterface = DeclareInterface;
|
|
exports.DeclareModule = DeclareModule;
|
|
exports.DeclareModuleExports = DeclareModuleExports;
|
|
exports.DeclareOpaqueType = DeclareOpaqueType;
|
|
exports.DeclareTypeAlias = DeclareTypeAlias;
|
|
exports.DeclareVariable = DeclareVariable;
|
|
exports.DeclaredPredicate = DeclaredPredicate;
|
|
exports.EmptyTypeAnnotation = EmptyTypeAnnotation;
|
|
exports.EnumBooleanBody = EnumBooleanBody;
|
|
exports.EnumBooleanMember = EnumBooleanMember;
|
|
exports.EnumDeclaration = EnumDeclaration;
|
|
exports.EnumDefaultedMember = EnumDefaultedMember;
|
|
exports.EnumNumberBody = EnumNumberBody;
|
|
exports.EnumNumberMember = EnumNumberMember;
|
|
exports.EnumStringBody = EnumStringBody;
|
|
exports.EnumStringMember = EnumStringMember;
|
|
exports.EnumSymbolBody = EnumSymbolBody;
|
|
exports.ExistsTypeAnnotation = ExistsTypeAnnotation;
|
|
exports.FunctionTypeAnnotation = FunctionTypeAnnotation;
|
|
exports.FunctionTypeParam = FunctionTypeParam;
|
|
exports.IndexedAccessType = IndexedAccessType;
|
|
exports.InferredPredicate = InferredPredicate;
|
|
exports.InterfaceDeclaration = InterfaceDeclaration;
|
|
exports.GenericTypeAnnotation = exports.ClassImplements = exports.InterfaceExtends = InterfaceExtends;
|
|
exports.InterfaceTypeAnnotation = InterfaceTypeAnnotation;
|
|
exports.IntersectionTypeAnnotation = IntersectionTypeAnnotation;
|
|
exports.MixedTypeAnnotation = MixedTypeAnnotation;
|
|
exports.NullLiteralTypeAnnotation = NullLiteralTypeAnnotation;
|
|
exports.NullableTypeAnnotation = NullableTypeAnnotation;
|
|
Object.defineProperty(exports, "NumberLiteralTypeAnnotation", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _types2.NumericLiteral;
|
|
}
|
|
});
|
|
exports.NumberTypeAnnotation = NumberTypeAnnotation;
|
|
exports.ObjectTypeAnnotation = ObjectTypeAnnotation;
|
|
exports.ObjectTypeCallProperty = ObjectTypeCallProperty;
|
|
exports.ObjectTypeIndexer = ObjectTypeIndexer;
|
|
exports.ObjectTypeInternalSlot = ObjectTypeInternalSlot;
|
|
exports.ObjectTypeProperty = ObjectTypeProperty;
|
|
exports.ObjectTypeSpreadProperty = ObjectTypeSpreadProperty;
|
|
exports.OpaqueType = OpaqueType;
|
|
exports.OptionalIndexedAccessType = OptionalIndexedAccessType;
|
|
exports.QualifiedTypeIdentifier = QualifiedTypeIdentifier;
|
|
Object.defineProperty(exports, "StringLiteralTypeAnnotation", {
|
|
enumerable: true,
|
|
get: function () {
|
|
return _types2.StringLiteral;
|
|
}
|
|
});
|
|
exports.StringTypeAnnotation = StringTypeAnnotation;
|
|
exports.SymbolTypeAnnotation = SymbolTypeAnnotation;
|
|
exports.ThisTypeAnnotation = ThisTypeAnnotation;
|
|
exports.TupleTypeAnnotation = TupleTypeAnnotation;
|
|
exports.TypeAlias = TypeAlias;
|
|
exports.TypeAnnotation = TypeAnnotation;
|
|
exports.TypeCastExpression = TypeCastExpression;
|
|
exports.TypeParameter = TypeParameter;
|
|
exports.TypeParameterDeclaration = exports.TypeParameterInstantiation = TypeParameterInstantiation;
|
|
exports.TypeofTypeAnnotation = TypeofTypeAnnotation;
|
|
exports.UnionTypeAnnotation = UnionTypeAnnotation;
|
|
exports.Variance = Variance;
|
|
exports.VoidTypeAnnotation = VoidTypeAnnotation;
|
|
exports._interfaceish = _interfaceish;
|
|
exports._variance = _variance;
|
|
var _t = require("@babel/types");
|
|
var _modules = require("./modules.js");
|
|
var _index = require("../node/index.js");
|
|
var _types2 = require("./types.js");
|
|
const {
|
|
isDeclareExportDeclaration,
|
|
isStatement
|
|
} = _t;
|
|
function AnyTypeAnnotation() {
|
|
this.word("any");
|
|
}
|
|
function ArrayTypeAnnotation(node) {
|
|
this.print(node.elementType, true);
|
|
this.tokenChar(91);
|
|
this.tokenChar(93);
|
|
}
|
|
function BooleanTypeAnnotation() {
|
|
this.word("boolean");
|
|
}
|
|
function BooleanLiteralTypeAnnotation(node) {
|
|
this.word(node.value ? "true" : "false");
|
|
}
|
|
function NullLiteralTypeAnnotation() {
|
|
this.word("null");
|
|
}
|
|
function DeclareClass(node, parent) {
|
|
if (!isDeclareExportDeclaration(parent)) {
|
|
this.word("declare");
|
|
this.space();
|
|
}
|
|
this.word("class");
|
|
this.space();
|
|
this._interfaceish(node);
|
|
}
|
|
function DeclareFunction(node, parent) {
|
|
if (!isDeclareExportDeclaration(parent)) {
|
|
this.word("declare");
|
|
this.space();
|
|
}
|
|
this.word("function");
|
|
this.space();
|
|
this.print(node.id);
|
|
this.print(node.id.typeAnnotation.typeAnnotation);
|
|
if (node.predicate) {
|
|
this.space();
|
|
this.print(node.predicate);
|
|
}
|
|
this.semicolon();
|
|
}
|
|
function InferredPredicate() {
|
|
this.tokenChar(37);
|
|
this.word("checks");
|
|
}
|
|
function DeclaredPredicate(node) {
|
|
this.tokenChar(37);
|
|
this.word("checks");
|
|
this.tokenChar(40);
|
|
this.print(node.value);
|
|
this.tokenChar(41);
|
|
}
|
|
function DeclareInterface(node) {
|
|
this.word("declare");
|
|
this.space();
|
|
this.InterfaceDeclaration(node);
|
|
}
|
|
function DeclareModule(node) {
|
|
this.word("declare");
|
|
this.space();
|
|
this.word("module");
|
|
this.space();
|
|
this.print(node.id);
|
|
this.space();
|
|
this.print(node.body);
|
|
}
|
|
function DeclareModuleExports(node) {
|
|
this.word("declare");
|
|
this.space();
|
|
this.word("module");
|
|
this.tokenChar(46);
|
|
this.word("exports");
|
|
this.print(node.typeAnnotation);
|
|
}
|
|
function DeclareTypeAlias(node) {
|
|
this.word("declare");
|
|
this.space();
|
|
this.TypeAlias(node);
|
|
}
|
|
function DeclareOpaqueType(node, parent) {
|
|
if (!isDeclareExportDeclaration(parent)) {
|
|
this.word("declare");
|
|
this.space();
|
|
}
|
|
this.OpaqueType(node);
|
|
}
|
|
function DeclareVariable(node, parent) {
|
|
if (!isDeclareExportDeclaration(parent)) {
|
|
this.word("declare");
|
|
this.space();
|
|
}
|
|
this.word("var");
|
|
this.space();
|
|
this.print(node.id);
|
|
this.print(node.id.typeAnnotation);
|
|
this.semicolon();
|
|
}
|
|
function DeclareExportDeclaration(node) {
|
|
this.word("declare");
|
|
this.space();
|
|
this.word("export");
|
|
this.space();
|
|
if (node.default) {
|
|
this.word("default");
|
|
this.space();
|
|
}
|
|
FlowExportDeclaration.call(this, node);
|
|
}
|
|
function DeclareExportAllDeclaration(node) {
|
|
this.word("declare");
|
|
this.space();
|
|
_modules.ExportAllDeclaration.call(this, node);
|
|
}
|
|
function EnumDeclaration(node) {
|
|
const {
|
|
id,
|
|
body
|
|
} = node;
|
|
this.word("enum");
|
|
this.space();
|
|
this.print(id);
|
|
this.print(body);
|
|
}
|
|
function enumExplicitType(context, name, hasExplicitType) {
|
|
if (hasExplicitType) {
|
|
context.space();
|
|
context.word("of");
|
|
context.space();
|
|
context.word(name);
|
|
}
|
|
context.space();
|
|
}
|
|
function enumBody(context, node) {
|
|
const {
|
|
members
|
|
} = node;
|
|
context.token("{");
|
|
context.indent();
|
|
context.newline();
|
|
for (const member of members) {
|
|
context.print(member);
|
|
context.newline();
|
|
}
|
|
if (node.hasUnknownMembers) {
|
|
context.token("...");
|
|
context.newline();
|
|
}
|
|
context.dedent();
|
|
context.token("}");
|
|
}
|
|
function EnumBooleanBody(node) {
|
|
const {
|
|
explicitType
|
|
} = node;
|
|
enumExplicitType(this, "boolean", explicitType);
|
|
enumBody(this, node);
|
|
}
|
|
function EnumNumberBody(node) {
|
|
const {
|
|
explicitType
|
|
} = node;
|
|
enumExplicitType(this, "number", explicitType);
|
|
enumBody(this, node);
|
|
}
|
|
function EnumStringBody(node) {
|
|
const {
|
|
explicitType
|
|
} = node;
|
|
enumExplicitType(this, "string", explicitType);
|
|
enumBody(this, node);
|
|
}
|
|
function EnumSymbolBody(node) {
|
|
enumExplicitType(this, "symbol", true);
|
|
enumBody(this, node);
|
|
}
|
|
function EnumDefaultedMember(node) {
|
|
const {
|
|
id
|
|
} = node;
|
|
this.print(id);
|
|
this.tokenChar(44);
|
|
}
|
|
function enumInitializedMember(context, node) {
|
|
context.print(node.id);
|
|
context.space();
|
|
context.token("=");
|
|
context.space();
|
|
context.print(node.init);
|
|
context.token(",");
|
|
}
|
|
function EnumBooleanMember(node) {
|
|
enumInitializedMember(this, node);
|
|
}
|
|
function EnumNumberMember(node) {
|
|
enumInitializedMember(this, node);
|
|
}
|
|
function EnumStringMember(node) {
|
|
enumInitializedMember(this, node);
|
|
}
|
|
function FlowExportDeclaration(node) {
|
|
if (node.declaration) {
|
|
const declar = node.declaration;
|
|
this.print(declar);
|
|
if (!isStatement(declar)) this.semicolon();
|
|
} else {
|
|
this.tokenChar(123);
|
|
if (node.specifiers.length) {
|
|
this.space();
|
|
this.printList(node.specifiers);
|
|
this.space();
|
|
}
|
|
this.tokenChar(125);
|
|
if (node.source) {
|
|
this.space();
|
|
this.word("from");
|
|
this.space();
|
|
this.print(node.source);
|
|
}
|
|
this.semicolon();
|
|
}
|
|
}
|
|
function ExistsTypeAnnotation() {
|
|
this.tokenChar(42);
|
|
}
|
|
function FunctionTypeAnnotation(node, parent) {
|
|
this.print(node.typeParameters);
|
|
this.tokenChar(40);
|
|
if (node.this) {
|
|
this.word("this");
|
|
this.tokenChar(58);
|
|
this.space();
|
|
this.print(node.this.typeAnnotation);
|
|
if (node.params.length || node.rest) {
|
|
this.tokenChar(44);
|
|
this.space();
|
|
}
|
|
}
|
|
this.printList(node.params);
|
|
if (node.rest) {
|
|
if (node.params.length) {
|
|
this.tokenChar(44);
|
|
this.space();
|
|
}
|
|
this.token("...");
|
|
this.print(node.rest);
|
|
}
|
|
this.tokenChar(41);
|
|
const type = parent == null ? void 0 : parent.type;
|
|
if (type != null && (type === "ObjectTypeCallProperty" || type === "ObjectTypeInternalSlot" || type === "DeclareFunction" || type === "ObjectTypeProperty" && parent.method)) {
|
|
this.tokenChar(58);
|
|
} else {
|
|
this.space();
|
|
this.token("=>");
|
|
}
|
|
this.space();
|
|
this.print(node.returnType);
|
|
}
|
|
function FunctionTypeParam(node) {
|
|
this.print(node.name);
|
|
if (node.optional) this.tokenChar(63);
|
|
if (node.name) {
|
|
this.tokenChar(58);
|
|
this.space();
|
|
}
|
|
this.print(node.typeAnnotation);
|
|
}
|
|
function InterfaceExtends(node) {
|
|
this.print(node.id);
|
|
this.print(node.typeParameters, true);
|
|
}
|
|
function _interfaceish(node) {
|
|
var _node$extends;
|
|
this.print(node.id);
|
|
this.print(node.typeParameters);
|
|
if ((_node$extends = node.extends) != null && _node$extends.length) {
|
|
this.space();
|
|
this.word("extends");
|
|
this.space();
|
|
this.printList(node.extends);
|
|
}
|
|
if (node.type === "DeclareClass") {
|
|
var _node$mixins, _node$implements;
|
|
if ((_node$mixins = node.mixins) != null && _node$mixins.length) {
|
|
this.space();
|
|
this.word("mixins");
|
|
this.space();
|
|
this.printList(node.mixins);
|
|
}
|
|
if ((_node$implements = node.implements) != null && _node$implements.length) {
|
|
this.space();
|
|
this.word("implements");
|
|
this.space();
|
|
this.printList(node.implements);
|
|
}
|
|
}
|
|
this.space();
|
|
this.print(node.body);
|
|
}
|
|
function _variance(node) {
|
|
var _node$variance;
|
|
const kind = (_node$variance = node.variance) == null ? void 0 : _node$variance.kind;
|
|
if (kind != null) {
|
|
if (kind === "plus") {
|
|
this.tokenChar(43);
|
|
} else if (kind === "minus") {
|
|
this.tokenChar(45);
|
|
}
|
|
}
|
|
}
|
|
function InterfaceDeclaration(node) {
|
|
this.word("interface");
|
|
this.space();
|
|
this._interfaceish(node);
|
|
}
|
|
function andSeparator() {
|
|
this.space();
|
|
this.tokenChar(38);
|
|
this.space();
|
|
}
|
|
function InterfaceTypeAnnotation(node) {
|
|
var _node$extends2;
|
|
this.word("interface");
|
|
if ((_node$extends2 = node.extends) != null && _node$extends2.length) {
|
|
this.space();
|
|
this.word("extends");
|
|
this.space();
|
|
this.printList(node.extends);
|
|
}
|
|
this.space();
|
|
this.print(node.body);
|
|
}
|
|
function IntersectionTypeAnnotation(node) {
|
|
this.printJoin(node.types, {
|
|
separator: andSeparator
|
|
});
|
|
}
|
|
function MixedTypeAnnotation() {
|
|
this.word("mixed");
|
|
}
|
|
function EmptyTypeAnnotation() {
|
|
this.word("empty");
|
|
}
|
|
function NullableTypeAnnotation(node) {
|
|
this.tokenChar(63);
|
|
this.print(node.typeAnnotation);
|
|
}
|
|
function NumberTypeAnnotation() {
|
|
this.word("number");
|
|
}
|
|
function StringTypeAnnotation() {
|
|
this.word("string");
|
|
}
|
|
function ThisTypeAnnotation() {
|
|
this.word("this");
|
|
}
|
|
function TupleTypeAnnotation(node) {
|
|
this.tokenChar(91);
|
|
this.printList(node.types);
|
|
this.tokenChar(93);
|
|
}
|
|
function TypeofTypeAnnotation(node) {
|
|
this.word("typeof");
|
|
this.space();
|
|
this.print(node.argument);
|
|
}
|
|
function TypeAlias(node) {
|
|
this.word("type");
|
|
this.space();
|
|
this.print(node.id);
|
|
this.print(node.typeParameters);
|
|
this.space();
|
|
this.tokenChar(61);
|
|
this.space();
|
|
this.print(node.right);
|
|
this.semicolon();
|
|
}
|
|
function TypeAnnotation(node, parent) {
|
|
this.tokenChar(58);
|
|
this.space();
|
|
if (parent.type === "ArrowFunctionExpression") {
|
|
this.tokenContext |= _index.TokenContext.arrowFlowReturnType;
|
|
} else if (node.optional) {
|
|
this.tokenChar(63);
|
|
}
|
|
this.print(node.typeAnnotation);
|
|
}
|
|
function TypeParameterInstantiation(node) {
|
|
this.tokenChar(60);
|
|
this.printList(node.params, {});
|
|
this.tokenChar(62);
|
|
}
|
|
function TypeParameter(node) {
|
|
this._variance(node);
|
|
this.word(node.name);
|
|
if (node.bound) {
|
|
this.print(node.bound);
|
|
}
|
|
if (node.default) {
|
|
this.space();
|
|
this.tokenChar(61);
|
|
this.space();
|
|
this.print(node.default);
|
|
}
|
|
}
|
|
function OpaqueType(node) {
|
|
this.word("opaque");
|
|
this.space();
|
|
this.word("type");
|
|
this.space();
|
|
this.print(node.id);
|
|
this.print(node.typeParameters);
|
|
if (node.supertype) {
|
|
this.tokenChar(58);
|
|
this.space();
|
|
this.print(node.supertype);
|
|
}
|
|
if (node.impltype) {
|
|
this.space();
|
|
this.tokenChar(61);
|
|
this.space();
|
|
this.print(node.impltype);
|
|
}
|
|
this.semicolon();
|
|
}
|
|
function ObjectTypeAnnotation(node) {
|
|
if (node.exact) {
|
|
this.token("{|");
|
|
} else {
|
|
this.tokenChar(123);
|
|
}
|
|
const props = [...node.properties, ...(node.callProperties || []), ...(node.indexers || []), ...(node.internalSlots || [])];
|
|
if (props.length) {
|
|
this.newline();
|
|
this.space();
|
|
this.printJoin(props, {
|
|
addNewlines(leading) {
|
|
if (leading && !props[0]) return 1;
|
|
},
|
|
indent: true,
|
|
statement: true,
|
|
iterator: () => {
|
|
if (props.length !== 1 || node.inexact) {
|
|
this.tokenChar(44);
|
|
this.space();
|
|
}
|
|
}
|
|
});
|
|
this.space();
|
|
}
|
|
if (node.inexact) {
|
|
this.indent();
|
|
this.token("...");
|
|
if (props.length) {
|
|
this.newline();
|
|
}
|
|
this.dedent();
|
|
}
|
|
if (node.exact) {
|
|
this.token("|}");
|
|
} else {
|
|
this.tokenChar(125);
|
|
}
|
|
}
|
|
function ObjectTypeInternalSlot(node) {
|
|
if (node.static) {
|
|
this.word("static");
|
|
this.space();
|
|
}
|
|
this.tokenChar(91);
|
|
this.tokenChar(91);
|
|
this.print(node.id);
|
|
this.tokenChar(93);
|
|
this.tokenChar(93);
|
|
if (node.optional) this.tokenChar(63);
|
|
if (!node.method) {
|
|
this.tokenChar(58);
|
|
this.space();
|
|
}
|
|
this.print(node.value);
|
|
}
|
|
function ObjectTypeCallProperty(node) {
|
|
if (node.static) {
|
|
this.word("static");
|
|
this.space();
|
|
}
|
|
this.print(node.value);
|
|
}
|
|
function ObjectTypeIndexer(node) {
|
|
if (node.static) {
|
|
this.word("static");
|
|
this.space();
|
|
}
|
|
this._variance(node);
|
|
this.tokenChar(91);
|
|
if (node.id) {
|
|
this.print(node.id);
|
|
this.tokenChar(58);
|
|
this.space();
|
|
}
|
|
this.print(node.key);
|
|
this.tokenChar(93);
|
|
this.tokenChar(58);
|
|
this.space();
|
|
this.print(node.value);
|
|
}
|
|
function ObjectTypeProperty(node) {
|
|
if (node.proto) {
|
|
this.word("proto");
|
|
this.space();
|
|
}
|
|
if (node.static) {
|
|
this.word("static");
|
|
this.space();
|
|
}
|
|
if (node.kind === "get" || node.kind === "set") {
|
|
this.word(node.kind);
|
|
this.space();
|
|
}
|
|
this._variance(node);
|
|
this.print(node.key);
|
|
if (node.optional) this.tokenChar(63);
|
|
if (!node.method) {
|
|
this.tokenChar(58);
|
|
this.space();
|
|
}
|
|
this.print(node.value);
|
|
}
|
|
function ObjectTypeSpreadProperty(node) {
|
|
this.token("...");
|
|
this.print(node.argument);
|
|
}
|
|
function QualifiedTypeIdentifier(node) {
|
|
this.print(node.qualification);
|
|
this.tokenChar(46);
|
|
this.print(node.id);
|
|
}
|
|
function SymbolTypeAnnotation() {
|
|
this.word("symbol");
|
|
}
|
|
function orSeparator() {
|
|
this.space();
|
|
this.tokenChar(124);
|
|
this.space();
|
|
}
|
|
function UnionTypeAnnotation(node) {
|
|
this.printJoin(node.types, {
|
|
separator: orSeparator
|
|
});
|
|
}
|
|
function TypeCastExpression(node) {
|
|
this.tokenChar(40);
|
|
this.print(node.expression);
|
|
this.print(node.typeAnnotation);
|
|
this.tokenChar(41);
|
|
}
|
|
function Variance(node) {
|
|
if (node.kind === "plus") {
|
|
this.tokenChar(43);
|
|
} else {
|
|
this.tokenChar(45);
|
|
}
|
|
}
|
|
function VoidTypeAnnotation() {
|
|
this.word("void");
|
|
}
|
|
function IndexedAccessType(node) {
|
|
this.print(node.objectType, true);
|
|
this.tokenChar(91);
|
|
this.print(node.indexType);
|
|
this.tokenChar(93);
|
|
}
|
|
function OptionalIndexedAccessType(node) {
|
|
this.print(node.objectType);
|
|
if (node.optional) {
|
|
this.token("?.");
|
|
}
|
|
this.tokenChar(91);
|
|
this.print(node.indexType);
|
|
this.tokenChar(93);
|
|
}
|
|
|
|
//# sourceMappingURL=flow.js.map
|