46060ade2ccb46765cffc2411f106798d7183a3e3923e3df4da8ef2247a0cd32a073199664dc3740023c9c349d7754a215120eafad206d7ffad2a9b983a244 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495
  1. "use strict";
  2. var _core = require("./core.js");
  3. var _utils = require("./utils.js");
  4. const defineType = (0, _utils.defineAliasedType)("Flow");
  5. const defineInterfaceishType = name => {
  6. const isDeclareClass = name === "DeclareClass";
  7. defineType(name, {
  8. builder: ["id", "typeParameters", "extends", "body"],
  9. visitor: ["id", "typeParameters", "extends", ...(isDeclareClass ? ["mixins", "implements"] : []), "body"],
  10. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  11. fields: Object.assign({
  12. id: (0, _utils.validateType)("Identifier"),
  13. typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
  14. extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends"))
  15. }, isDeclareClass ? {
  16. mixins: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
  17. implements: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ClassImplements"))
  18. } : {}, {
  19. body: (0, _utils.validateType)("ObjectTypeAnnotation")
  20. })
  21. });
  22. };
  23. defineType("AnyTypeAnnotation", {
  24. aliases: ["FlowType", "FlowBaseAnnotation"]
  25. });
  26. defineType("ArrayTypeAnnotation", {
  27. visitor: ["elementType"],
  28. aliases: ["FlowType"],
  29. fields: {
  30. elementType: (0, _utils.validateType)("FlowType")
  31. }
  32. });
  33. defineType("BooleanTypeAnnotation", {
  34. aliases: ["FlowType", "FlowBaseAnnotation"]
  35. });
  36. defineType("BooleanLiteralTypeAnnotation", {
  37. builder: ["value"],
  38. aliases: ["FlowType"],
  39. fields: {
  40. value: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  41. }
  42. });
  43. defineType("NullLiteralTypeAnnotation", {
  44. aliases: ["FlowType", "FlowBaseAnnotation"]
  45. });
  46. defineType("ClassImplements", {
  47. visitor: ["id", "typeParameters"],
  48. fields: {
  49. id: (0, _utils.validateType)("Identifier"),
  50. typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
  51. }
  52. });
  53. defineInterfaceishType("DeclareClass");
  54. defineType("DeclareFunction", {
  55. builder: ["id"],
  56. visitor: ["id", "predicate"],
  57. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  58. fields: {
  59. id: (0, _utils.validateType)("Identifier"),
  60. predicate: (0, _utils.validateOptionalType)("DeclaredPredicate")
  61. }
  62. });
  63. defineInterfaceishType("DeclareInterface");
  64. defineType("DeclareModule", {
  65. builder: ["id", "body", "kind"],
  66. visitor: ["id", "body"],
  67. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  68. fields: {
  69. id: (0, _utils.validateType)("Identifier", "StringLiteral"),
  70. body: (0, _utils.validateType)("BlockStatement"),
  71. kind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("CommonJS", "ES"))
  72. }
  73. });
  74. defineType("DeclareModuleExports", {
  75. visitor: ["typeAnnotation"],
  76. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  77. fields: {
  78. typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
  79. }
  80. });
  81. defineType("DeclareTypeAlias", {
  82. visitor: ["id", "typeParameters", "right"],
  83. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  84. fields: {
  85. id: (0, _utils.validateType)("Identifier"),
  86. typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
  87. right: (0, _utils.validateType)("FlowType")
  88. }
  89. });
  90. defineType("DeclareOpaqueType", {
  91. visitor: ["id", "typeParameters", "supertype"],
  92. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  93. fields: {
  94. id: (0, _utils.validateType)("Identifier"),
  95. typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
  96. supertype: (0, _utils.validateOptionalType)("FlowType"),
  97. impltype: (0, _utils.validateOptionalType)("FlowType")
  98. }
  99. });
  100. defineType("DeclareVariable", {
  101. visitor: ["id"],
  102. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  103. fields: {
  104. id: (0, _utils.validateType)("Identifier")
  105. }
  106. });
  107. defineType("DeclareExportDeclaration", {
  108. visitor: ["declaration", "specifiers", "source", "attributes"],
  109. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  110. fields: Object.assign({
  111. declaration: (0, _utils.validateOptionalType)("Flow"),
  112. specifiers: (0, _utils.validateOptional)((0, _utils.arrayOfType)("ExportSpecifier", "ExportNamespaceSpecifier")),
  113. source: (0, _utils.validateOptionalType)("StringLiteral"),
  114. default: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
  115. }, _core.importAttributes)
  116. });
  117. defineType("DeclareExportAllDeclaration", {
  118. visitor: ["source", "attributes"],
  119. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  120. fields: Object.assign({
  121. source: (0, _utils.validateType)("StringLiteral"),
  122. exportKind: (0, _utils.validateOptional)((0, _utils.assertOneOf)("type", "value"))
  123. }, _core.importAttributes)
  124. });
  125. defineType("DeclaredPredicate", {
  126. visitor: ["value"],
  127. aliases: ["FlowPredicate"],
  128. fields: {
  129. value: (0, _utils.validateType)("Flow")
  130. }
  131. });
  132. defineType("ExistsTypeAnnotation", {
  133. aliases: ["FlowType"]
  134. });
  135. defineType("FunctionTypeAnnotation", {
  136. builder: ["typeParameters", "params", "rest", "returnType"],
  137. visitor: ["typeParameters", "this", "params", "rest", "returnType"],
  138. aliases: ["FlowType"],
  139. fields: {
  140. typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
  141. params: (0, _utils.validateArrayOfType)("FunctionTypeParam"),
  142. rest: (0, _utils.validateOptionalType)("FunctionTypeParam"),
  143. this: (0, _utils.validateOptionalType)("FunctionTypeParam"),
  144. returnType: (0, _utils.validateType)("FlowType")
  145. }
  146. });
  147. defineType("FunctionTypeParam", {
  148. visitor: ["name", "typeAnnotation"],
  149. fields: {
  150. name: (0, _utils.validateOptionalType)("Identifier"),
  151. typeAnnotation: (0, _utils.validateType)("FlowType"),
  152. optional: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
  153. }
  154. });
  155. defineType("GenericTypeAnnotation", {
  156. visitor: ["id", "typeParameters"],
  157. aliases: ["FlowType"],
  158. fields: {
  159. id: (0, _utils.validateType)("Identifier", "QualifiedTypeIdentifier"),
  160. typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
  161. }
  162. });
  163. defineType("InferredPredicate", {
  164. aliases: ["FlowPredicate"]
  165. });
  166. defineType("InterfaceExtends", {
  167. visitor: ["id", "typeParameters"],
  168. fields: {
  169. id: (0, _utils.validateType)("Identifier", "QualifiedTypeIdentifier"),
  170. typeParameters: (0, _utils.validateOptionalType)("TypeParameterInstantiation")
  171. }
  172. });
  173. defineInterfaceishType("InterfaceDeclaration");
  174. defineType("InterfaceTypeAnnotation", {
  175. visitor: ["extends", "body"],
  176. aliases: ["FlowType"],
  177. fields: {
  178. extends: (0, _utils.validateOptional)((0, _utils.arrayOfType)("InterfaceExtends")),
  179. body: (0, _utils.validateType)("ObjectTypeAnnotation")
  180. }
  181. });
  182. defineType("IntersectionTypeAnnotation", {
  183. visitor: ["types"],
  184. aliases: ["FlowType"],
  185. fields: {
  186. types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
  187. }
  188. });
  189. defineType("MixedTypeAnnotation", {
  190. aliases: ["FlowType", "FlowBaseAnnotation"]
  191. });
  192. defineType("EmptyTypeAnnotation", {
  193. aliases: ["FlowType", "FlowBaseAnnotation"]
  194. });
  195. defineType("NullableTypeAnnotation", {
  196. visitor: ["typeAnnotation"],
  197. aliases: ["FlowType"],
  198. fields: {
  199. typeAnnotation: (0, _utils.validateType)("FlowType")
  200. }
  201. });
  202. defineType("NumberLiteralTypeAnnotation", {
  203. builder: ["value"],
  204. aliases: ["FlowType"],
  205. fields: {
  206. value: (0, _utils.validate)((0, _utils.assertValueType)("number"))
  207. }
  208. });
  209. defineType("NumberTypeAnnotation", {
  210. aliases: ["FlowType", "FlowBaseAnnotation"]
  211. });
  212. defineType("ObjectTypeAnnotation", {
  213. visitor: ["properties", "indexers", "callProperties", "internalSlots"],
  214. aliases: ["FlowType"],
  215. builder: ["properties", "indexers", "callProperties", "internalSlots", "exact"],
  216. fields: {
  217. properties: (0, _utils.validate)((0, _utils.arrayOfType)("ObjectTypeProperty", "ObjectTypeSpreadProperty")),
  218. indexers: {
  219. validate: (0, _utils.arrayOfType)("ObjectTypeIndexer"),
  220. optional: true,
  221. default: []
  222. },
  223. callProperties: {
  224. validate: (0, _utils.arrayOfType)("ObjectTypeCallProperty"),
  225. optional: true,
  226. default: []
  227. },
  228. internalSlots: {
  229. validate: (0, _utils.arrayOfType)("ObjectTypeInternalSlot"),
  230. optional: true,
  231. default: []
  232. },
  233. exact: {
  234. validate: (0, _utils.assertValueType)("boolean"),
  235. default: false
  236. },
  237. inexact: (0, _utils.validateOptional)((0, _utils.assertValueType)("boolean"))
  238. }
  239. });
  240. defineType("ObjectTypeInternalSlot", {
  241. visitor: ["id", "value"],
  242. builder: ["id", "value", "optional", "static", "method"],
  243. aliases: ["UserWhitespacable"],
  244. fields: {
  245. id: (0, _utils.validateType)("Identifier"),
  246. value: (0, _utils.validateType)("FlowType"),
  247. optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  248. static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  249. method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  250. }
  251. });
  252. defineType("ObjectTypeCallProperty", {
  253. visitor: ["value"],
  254. aliases: ["UserWhitespacable"],
  255. fields: {
  256. value: (0, _utils.validateType)("FlowType"),
  257. static: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  258. }
  259. });
  260. defineType("ObjectTypeIndexer", {
  261. visitor: ["variance", "id", "key", "value"],
  262. builder: ["id", "key", "value", "variance"],
  263. aliases: ["UserWhitespacable"],
  264. fields: {
  265. id: (0, _utils.validateOptionalType)("Identifier"),
  266. key: (0, _utils.validateType)("FlowType"),
  267. value: (0, _utils.validateType)("FlowType"),
  268. static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  269. variance: (0, _utils.validateOptionalType)("Variance")
  270. }
  271. });
  272. defineType("ObjectTypeProperty", {
  273. visitor: ["key", "value", "variance"],
  274. aliases: ["UserWhitespacable"],
  275. fields: {
  276. key: (0, _utils.validateType)("Identifier", "StringLiteral"),
  277. value: (0, _utils.validateType)("FlowType"),
  278. kind: (0, _utils.validate)((0, _utils.assertOneOf)("init", "get", "set")),
  279. static: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  280. proto: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  281. optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  282. variance: (0, _utils.validateOptionalType)("Variance"),
  283. method: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  284. }
  285. });
  286. defineType("ObjectTypeSpreadProperty", {
  287. visitor: ["argument"],
  288. aliases: ["UserWhitespacable"],
  289. fields: {
  290. argument: (0, _utils.validateType)("FlowType")
  291. }
  292. });
  293. defineType("OpaqueType", {
  294. visitor: ["id", "typeParameters", "supertype", "impltype"],
  295. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  296. fields: {
  297. id: (0, _utils.validateType)("Identifier"),
  298. typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
  299. supertype: (0, _utils.validateOptionalType)("FlowType"),
  300. impltype: (0, _utils.validateType)("FlowType")
  301. }
  302. });
  303. defineType("QualifiedTypeIdentifier", {
  304. visitor: ["qualification", "id"],
  305. builder: ["id", "qualification"],
  306. fields: {
  307. id: (0, _utils.validateType)("Identifier"),
  308. qualification: (0, _utils.validateType)("Identifier", "QualifiedTypeIdentifier")
  309. }
  310. });
  311. defineType("StringLiteralTypeAnnotation", {
  312. builder: ["value"],
  313. aliases: ["FlowType"],
  314. fields: {
  315. value: (0, _utils.validate)((0, _utils.assertValueType)("string"))
  316. }
  317. });
  318. defineType("StringTypeAnnotation", {
  319. aliases: ["FlowType", "FlowBaseAnnotation"]
  320. });
  321. defineType("SymbolTypeAnnotation", {
  322. aliases: ["FlowType", "FlowBaseAnnotation"]
  323. });
  324. defineType("ThisTypeAnnotation", {
  325. aliases: ["FlowType", "FlowBaseAnnotation"]
  326. });
  327. defineType("TupleTypeAnnotation", {
  328. visitor: ["types"],
  329. aliases: ["FlowType"],
  330. fields: {
  331. types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
  332. }
  333. });
  334. defineType("TypeofTypeAnnotation", {
  335. visitor: ["argument"],
  336. aliases: ["FlowType"],
  337. fields: {
  338. argument: (0, _utils.validateType)("FlowType")
  339. }
  340. });
  341. defineType("TypeAlias", {
  342. visitor: ["id", "typeParameters", "right"],
  343. aliases: ["FlowDeclaration", "Statement", "Declaration"],
  344. fields: {
  345. id: (0, _utils.validateType)("Identifier"),
  346. typeParameters: (0, _utils.validateOptionalType)("TypeParameterDeclaration"),
  347. right: (0, _utils.validateType)("FlowType")
  348. }
  349. });
  350. defineType("TypeAnnotation", {
  351. visitor: ["typeAnnotation"],
  352. fields: {
  353. typeAnnotation: (0, _utils.validateType)("FlowType")
  354. }
  355. });
  356. defineType("TypeCastExpression", {
  357. visitor: ["expression", "typeAnnotation"],
  358. aliases: ["ExpressionWrapper", "Expression"],
  359. fields: {
  360. expression: (0, _utils.validateType)("Expression"),
  361. typeAnnotation: (0, _utils.validateType)("TypeAnnotation")
  362. }
  363. });
  364. defineType("TypeParameter", {
  365. visitor: ["bound", "default", "variance"],
  366. fields: {
  367. name: (0, _utils.validate)((0, _utils.assertValueType)("string")),
  368. bound: (0, _utils.validateOptionalType)("TypeAnnotation"),
  369. default: (0, _utils.validateOptionalType)("FlowType"),
  370. variance: (0, _utils.validateOptionalType)("Variance")
  371. }
  372. });
  373. defineType("TypeParameterDeclaration", {
  374. visitor: ["params"],
  375. fields: {
  376. params: (0, _utils.validate)((0, _utils.arrayOfType)("TypeParameter"))
  377. }
  378. });
  379. defineType("TypeParameterInstantiation", {
  380. visitor: ["params"],
  381. fields: {
  382. params: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
  383. }
  384. });
  385. defineType("UnionTypeAnnotation", {
  386. visitor: ["types"],
  387. aliases: ["FlowType"],
  388. fields: {
  389. types: (0, _utils.validate)((0, _utils.arrayOfType)("FlowType"))
  390. }
  391. });
  392. defineType("Variance", {
  393. builder: ["kind"],
  394. fields: {
  395. kind: (0, _utils.validate)((0, _utils.assertOneOf)("minus", "plus"))
  396. }
  397. });
  398. defineType("VoidTypeAnnotation", {
  399. aliases: ["FlowType", "FlowBaseAnnotation"]
  400. });
  401. defineType("EnumDeclaration", {
  402. aliases: ["Statement", "Declaration"],
  403. visitor: ["id", "body"],
  404. fields: {
  405. id: (0, _utils.validateType)("Identifier"),
  406. body: (0, _utils.validateType)("EnumBooleanBody", "EnumNumberBody", "EnumStringBody", "EnumSymbolBody")
  407. }
  408. });
  409. defineType("EnumBooleanBody", {
  410. aliases: ["EnumBody"],
  411. visitor: ["members"],
  412. fields: {
  413. explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  414. members: (0, _utils.validateArrayOfType)("EnumBooleanMember"),
  415. hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  416. }
  417. });
  418. defineType("EnumNumberBody", {
  419. aliases: ["EnumBody"],
  420. visitor: ["members"],
  421. fields: {
  422. explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  423. members: (0, _utils.validateArrayOfType)("EnumNumberMember"),
  424. hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  425. }
  426. });
  427. defineType("EnumStringBody", {
  428. aliases: ["EnumBody"],
  429. visitor: ["members"],
  430. fields: {
  431. explicitType: (0, _utils.validate)((0, _utils.assertValueType)("boolean")),
  432. members: (0, _utils.validateArrayOfType)("EnumStringMember", "EnumDefaultedMember"),
  433. hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  434. }
  435. });
  436. defineType("EnumSymbolBody", {
  437. aliases: ["EnumBody"],
  438. visitor: ["members"],
  439. fields: {
  440. members: (0, _utils.validateArrayOfType)("EnumDefaultedMember"),
  441. hasUnknownMembers: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  442. }
  443. });
  444. defineType("EnumBooleanMember", {
  445. aliases: ["EnumMember"],
  446. builder: ["id"],
  447. visitor: ["id", "init"],
  448. fields: {
  449. id: (0, _utils.validateType)("Identifier"),
  450. init: (0, _utils.validateType)("BooleanLiteral")
  451. }
  452. });
  453. defineType("EnumNumberMember", {
  454. aliases: ["EnumMember"],
  455. visitor: ["id", "init"],
  456. fields: {
  457. id: (0, _utils.validateType)("Identifier"),
  458. init: (0, _utils.validateType)("NumericLiteral")
  459. }
  460. });
  461. defineType("EnumStringMember", {
  462. aliases: ["EnumMember"],
  463. visitor: ["id", "init"],
  464. fields: {
  465. id: (0, _utils.validateType)("Identifier"),
  466. init: (0, _utils.validateType)("StringLiteral")
  467. }
  468. });
  469. defineType("EnumDefaultedMember", {
  470. aliases: ["EnumMember"],
  471. visitor: ["id"],
  472. fields: {
  473. id: (0, _utils.validateType)("Identifier")
  474. }
  475. });
  476. defineType("IndexedAccessType", {
  477. visitor: ["objectType", "indexType"],
  478. aliases: ["FlowType"],
  479. fields: {
  480. objectType: (0, _utils.validateType)("FlowType"),
  481. indexType: (0, _utils.validateType)("FlowType")
  482. }
  483. });
  484. defineType("OptionalIndexedAccessType", {
  485. visitor: ["objectType", "indexType"],
  486. aliases: ["FlowType"],
  487. fields: {
  488. objectType: (0, _utils.validateType)("FlowType"),
  489. indexType: (0, _utils.validateType)("FlowType"),
  490. optional: (0, _utils.validate)((0, _utils.assertValueType)("boolean"))
  491. }
  492. });
  493. //# sourceMappingURL=flow.js.map