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.
		
		
		
		
		
			
		
			
				
					664 lines
				
				16 KiB
			
		
		
			
		
	
	
					664 lines
				
				16 KiB
			| 
											3 years ago
										 | "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"); | ||
|  | var _types2 = require("./types"); | ||
|  | const { | ||
|  |   isDeclareExportDeclaration, | ||
|  |   isStatement | ||
|  | } = _t; | ||
|  | function AnyTypeAnnotation() { | ||
|  |   this.word("any"); | ||
|  | } | ||
|  | function ArrayTypeAnnotation(node) { | ||
|  |   this.print(node.elementType, node, 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, node); | ||
|  |   this.print(node.id.typeAnnotation.typeAnnotation, node); | ||
|  |   if (node.predicate) { | ||
|  |     this.space(); | ||
|  |     this.print(node.predicate, node); | ||
|  |   } | ||
|  |   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, node); | ||
|  |   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, node); | ||
|  |   this.space(); | ||
|  |   this.print(node.body, node); | ||
|  | } | ||
|  | function DeclareModuleExports(node) { | ||
|  |   this.word("declare"); | ||
|  |   this.space(); | ||
|  |   this.word("module"); | ||
|  |   this.tokenChar(46); | ||
|  |   this.word("exports"); | ||
|  |   this.print(node.typeAnnotation, node); | ||
|  | } | ||
|  | 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, node); | ||
|  |   this.print(node.id.typeAnnotation, node); | ||
|  |   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, node); | ||
|  |   this.print(body, node); | ||
|  | } | ||
|  | 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, node); | ||
|  |     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, node); | ||
|  |   this.tokenChar(44); | ||
|  | } | ||
|  | function enumInitializedMember(context, node) { | ||
|  |   const { | ||
|  |     id, | ||
|  |     init | ||
|  |   } = node; | ||
|  |   context.print(id, node); | ||
|  |   context.space(); | ||
|  |   context.token("="); | ||
|  |   context.space(); | ||
|  |   context.print(init, node); | ||
|  |   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, node); | ||
|  |     if (!isStatement(declar)) this.semicolon(); | ||
|  |   } else { | ||
|  |     this.tokenChar(123); | ||
|  |     if (node.specifiers.length) { | ||
|  |       this.space(); | ||
|  |       this.printList(node.specifiers, node); | ||
|  |       this.space(); | ||
|  |     } | ||
|  |     this.tokenChar(125); | ||
|  |     if (node.source) { | ||
|  |       this.space(); | ||
|  |       this.word("from"); | ||
|  |       this.space(); | ||
|  |       this.print(node.source, node); | ||
|  |     } | ||
|  |     this.semicolon(); | ||
|  |   } | ||
|  | } | ||
|  | function ExistsTypeAnnotation() { | ||
|  |   this.tokenChar(42); | ||
|  | } | ||
|  | function FunctionTypeAnnotation(node, parent) { | ||
|  |   this.print(node.typeParameters, node); | ||
|  |   this.tokenChar(40); | ||
|  |   if (node.this) { | ||
|  |     this.word("this"); | ||
|  |     this.tokenChar(58); | ||
|  |     this.space(); | ||
|  |     this.print(node.this.typeAnnotation, node); | ||
|  |     if (node.params.length || node.rest) { | ||
|  |       this.tokenChar(44); | ||
|  |       this.space(); | ||
|  |     } | ||
|  |   } | ||
|  |   this.printList(node.params, node); | ||
|  |   if (node.rest) { | ||
|  |     if (node.params.length) { | ||
|  |       this.tokenChar(44); | ||
|  |       this.space(); | ||
|  |     } | ||
|  |     this.token("..."); | ||
|  |     this.print(node.rest, node); | ||
|  |   } | ||
|  |   this.tokenChar(41); | ||
|  | 
 | ||
|  |   if (parent && (parent.type === "ObjectTypeCallProperty" || parent.type === "ObjectTypeInternalSlot" || parent.type === "DeclareFunction" || parent.type === "ObjectTypeProperty" && parent.method)) { | ||
|  |     this.tokenChar(58); | ||
|  |   } else { | ||
|  |     this.space(); | ||
|  |     this.token("=>"); | ||
|  |   } | ||
|  |   this.space(); | ||
|  |   this.print(node.returnType, node); | ||
|  | } | ||
|  | function FunctionTypeParam(node) { | ||
|  |   this.print(node.name, node); | ||
|  |   if (node.optional) this.tokenChar(63); | ||
|  |   if (node.name) { | ||
|  |     this.tokenChar(58); | ||
|  |     this.space(); | ||
|  |   } | ||
|  |   this.print(node.typeAnnotation, node); | ||
|  | } | ||
|  | function InterfaceExtends(node) { | ||
|  |   this.print(node.id, node); | ||
|  |   this.print(node.typeParameters, node, true); | ||
|  | } | ||
|  | function _interfaceish(node) { | ||
|  |   var _node$extends; | ||
|  |   this.print(node.id, node); | ||
|  |   this.print(node.typeParameters, node); | ||
|  |   if ((_node$extends = node.extends) != null && _node$extends.length) { | ||
|  |     this.space(); | ||
|  |     this.word("extends"); | ||
|  |     this.space(); | ||
|  |     this.printList(node.extends, node); | ||
|  |   } | ||
|  |   if (node.mixins && node.mixins.length) { | ||
|  |     this.space(); | ||
|  |     this.word("mixins"); | ||
|  |     this.space(); | ||
|  |     this.printList(node.mixins, node); | ||
|  |   } | ||
|  |   if (node.implements && node.implements.length) { | ||
|  |     this.space(); | ||
|  |     this.word("implements"); | ||
|  |     this.space(); | ||
|  |     this.printList(node.implements, node); | ||
|  |   } | ||
|  |   this.space(); | ||
|  |   this.print(node.body, node); | ||
|  | } | ||
|  | function _variance(node) { | ||
|  |   if (node.variance) { | ||
|  |     if (node.variance.kind === "plus") { | ||
|  |       this.tokenChar(43); | ||
|  |     } else if (node.variance.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) { | ||
|  |   this.word("interface"); | ||
|  |   if (node.extends && node.extends.length) { | ||
|  |     this.space(); | ||
|  |     this.word("extends"); | ||
|  |     this.space(); | ||
|  |     this.printList(node.extends, node); | ||
|  |   } | ||
|  |   this.space(); | ||
|  |   this.print(node.body, node); | ||
|  | } | ||
|  | function IntersectionTypeAnnotation(node) { | ||
|  |   this.printJoin(node.types, node, { | ||
|  |     separator: andSeparator | ||
|  |   }); | ||
|  | } | ||
|  | function MixedTypeAnnotation() { | ||
|  |   this.word("mixed"); | ||
|  | } | ||
|  | function EmptyTypeAnnotation() { | ||
|  |   this.word("empty"); | ||
|  | } | ||
|  | function NullableTypeAnnotation(node) { | ||
|  |   this.tokenChar(63); | ||
|  |   this.print(node.typeAnnotation, node); | ||
|  | } | ||
|  | 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, node); | ||
|  |   this.tokenChar(93); | ||
|  | } | ||
|  | function TypeofTypeAnnotation(node) { | ||
|  |   this.word("typeof"); | ||
|  |   this.space(); | ||
|  |   this.print(node.argument, node); | ||
|  | } | ||
|  | function TypeAlias(node) { | ||
|  |   this.word("type"); | ||
|  |   this.space(); | ||
|  |   this.print(node.id, node); | ||
|  |   this.print(node.typeParameters, node); | ||
|  |   this.space(); | ||
|  |   this.tokenChar(61); | ||
|  |   this.space(); | ||
|  |   this.print(node.right, node); | ||
|  |   this.semicolon(); | ||
|  | } | ||
|  | function TypeAnnotation(node) { | ||
|  |   this.tokenChar(58); | ||
|  |   this.space(); | ||
|  |   if (node.optional) this.tokenChar(63); | ||
|  |   this.print(node.typeAnnotation, node); | ||
|  | } | ||
|  | function TypeParameterInstantiation(node) { | ||
|  |   this.tokenChar(60); | ||
|  |   this.printList(node.params, node, {}); | ||
|  |   this.tokenChar(62); | ||
|  | } | ||
|  | function TypeParameter(node) { | ||
|  |   this._variance(node); | ||
|  |   this.word(node.name); | ||
|  |   if (node.bound) { | ||
|  |     this.print(node.bound, node); | ||
|  |   } | ||
|  |   if (node.default) { | ||
|  |     this.space(); | ||
|  |     this.tokenChar(61); | ||
|  |     this.space(); | ||
|  |     this.print(node.default, node); | ||
|  |   } | ||
|  | } | ||
|  | function OpaqueType(node) { | ||
|  |   this.word("opaque"); | ||
|  |   this.space(); | ||
|  |   this.word("type"); | ||
|  |   this.space(); | ||
|  |   this.print(node.id, node); | ||
|  |   this.print(node.typeParameters, node); | ||
|  |   if (node.supertype) { | ||
|  |     this.tokenChar(58); | ||
|  |     this.space(); | ||
|  |     this.print(node.supertype, node); | ||
|  |   } | ||
|  |   if (node.impltype) { | ||
|  |     this.space(); | ||
|  |     this.tokenChar(61); | ||
|  |     this.space(); | ||
|  |     this.print(node.impltype, node); | ||
|  |   } | ||
|  |   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, node, { | ||
|  |       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, node); | ||
|  |   this.tokenChar(93); | ||
|  |   this.tokenChar(93); | ||
|  |   if (node.optional) this.tokenChar(63); | ||
|  |   if (!node.method) { | ||
|  |     this.tokenChar(58); | ||
|  |     this.space(); | ||
|  |   } | ||
|  |   this.print(node.value, node); | ||
|  | } | ||
|  | function ObjectTypeCallProperty(node) { | ||
|  |   if (node.static) { | ||
|  |     this.word("static"); | ||
|  |     this.space(); | ||
|  |   } | ||
|  |   this.print(node.value, node); | ||
|  | } | ||
|  | function ObjectTypeIndexer(node) { | ||
|  |   if (node.static) { | ||
|  |     this.word("static"); | ||
|  |     this.space(); | ||
|  |   } | ||
|  |   this._variance(node); | ||
|  |   this.tokenChar(91); | ||
|  |   if (node.id) { | ||
|  |     this.print(node.id, node); | ||
|  |     this.tokenChar(58); | ||
|  |     this.space(); | ||
|  |   } | ||
|  |   this.print(node.key, node); | ||
|  |   this.tokenChar(93); | ||
|  |   this.tokenChar(58); | ||
|  |   this.space(); | ||
|  |   this.print(node.value, node); | ||
|  | } | ||
|  | 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, node); | ||
|  |   if (node.optional) this.tokenChar(63); | ||
|  |   if (!node.method) { | ||
|  |     this.tokenChar(58); | ||
|  |     this.space(); | ||
|  |   } | ||
|  |   this.print(node.value, node); | ||
|  | } | ||
|  | function ObjectTypeSpreadProperty(node) { | ||
|  |   this.token("..."); | ||
|  |   this.print(node.argument, node); | ||
|  | } | ||
|  | function QualifiedTypeIdentifier(node) { | ||
|  |   this.print(node.qualification, node); | ||
|  |   this.tokenChar(46); | ||
|  |   this.print(node.id, node); | ||
|  | } | ||
|  | function SymbolTypeAnnotation() { | ||
|  |   this.word("symbol"); | ||
|  | } | ||
|  | function orSeparator() { | ||
|  |   this.space(); | ||
|  |   this.tokenChar(124); | ||
|  |   this.space(); | ||
|  | } | ||
|  | function UnionTypeAnnotation(node) { | ||
|  |   this.printJoin(node.types, node, { | ||
|  |     separator: orSeparator | ||
|  |   }); | ||
|  | } | ||
|  | function TypeCastExpression(node) { | ||
|  |   this.tokenChar(40); | ||
|  |   this.print(node.expression, node); | ||
|  |   this.print(node.typeAnnotation, node); | ||
|  |   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, node, true); | ||
|  |   this.tokenChar(91); | ||
|  |   this.print(node.indexType, node); | ||
|  |   this.tokenChar(93); | ||
|  | } | ||
|  | function OptionalIndexedAccessType(node) { | ||
|  |   this.print(node.objectType, node); | ||
|  |   if (node.optional) { | ||
|  |     this.token("?."); | ||
|  |   } | ||
|  |   this.tokenChar(91); | ||
|  |   this.print(node.indexType, node); | ||
|  |   this.tokenChar(93); | ||
|  | } | ||
|  | 
 | ||
|  | //# sourceMappingURL=flow.js.map
 |