@blade-hq/agent-client 1.1.1 → 1.1.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (583) hide show
  1. package/README.md +48 -25
  2. package/dist/blade-client.d.ts +2 -14
  3. package/dist/index.d.ts +5 -2
  4. package/dist/index.js +212 -106
  5. package/dist/index.js.map +1 -1
  6. package/dist/resources/models.d.ts +15 -0
  7. package/dist/resources/sessions.d.ts +8 -1
  8. package/dist/session/agent-session.d.ts +10 -0
  9. package/dist/session/definition.d.ts +49 -0
  10. package/dist/shared/projection/helpers.d.ts +1 -1
  11. package/dist/types/rest.d.ts +378 -10
  12. package/dist/version.d.ts +4 -42
  13. package/node_modules/@ark/schema/LICENSE +7 -0
  14. package/node_modules/@ark/schema/README.md +18 -0
  15. package/node_modules/@ark/schema/out/config.d.ts +58 -0
  16. package/node_modules/@ark/schema/out/config.js +95 -0
  17. package/node_modules/@ark/schema/out/constraint.d.ts +67 -0
  18. package/node_modules/@ark/schema/out/constraint.js +136 -0
  19. package/node_modules/@ark/schema/out/generic.d.ts +73 -0
  20. package/node_modules/@ark/schema/out/generic.js +76 -0
  21. package/node_modules/@ark/schema/out/index.d.ts +47 -0
  22. package/node_modules/@ark/schema/out/index.js +47 -0
  23. package/node_modules/@ark/schema/out/intrinsic.d.ts +24 -0
  24. package/node_modules/@ark/schema/out/intrinsic.js +56 -0
  25. package/node_modules/@ark/schema/out/kinds.d.ts +73 -0
  26. package/node_modules/@ark/schema/out/kinds.js +71 -0
  27. package/node_modules/@ark/schema/out/module.d.ts +24 -0
  28. package/node_modules/@ark/schema/out/module.js +15 -0
  29. package/node_modules/@ark/schema/out/node.d.ts +154 -0
  30. package/node_modules/@ark/schema/out/node.js +438 -0
  31. package/node_modules/@ark/schema/out/parse.d.ts +52 -0
  32. package/node_modules/@ark/schema/out/parse.js +215 -0
  33. package/node_modules/@ark/schema/out/predicate.d.ts +52 -0
  34. package/node_modules/@ark/schema/out/predicate.js +63 -0
  35. package/node_modules/@ark/schema/out/refinements/after.d.ts +41 -0
  36. package/node_modules/@ark/schema/out/refinements/after.js +35 -0
  37. package/node_modules/@ark/schema/out/refinements/before.d.ts +41 -0
  38. package/node_modules/@ark/schema/out/refinements/before.js +41 -0
  39. package/node_modules/@ark/schema/out/refinements/divisor.d.ts +43 -0
  40. package/node_modules/@ark/schema/out/refinements/divisor.js +58 -0
  41. package/node_modules/@ark/schema/out/refinements/exactLength.d.ts +49 -0
  42. package/node_modules/@ark/schema/out/refinements/exactLength.js +55 -0
  43. package/node_modules/@ark/schema/out/refinements/kinds.d.ts +34 -0
  44. package/node_modules/@ark/schema/out/refinements/kinds.js +25 -0
  45. package/node_modules/@ark/schema/out/refinements/max.d.ts +37 -0
  46. package/node_modules/@ark/schema/out/refinements/max.js +45 -0
  47. package/node_modules/@ark/schema/out/refinements/maxLength.d.ts +40 -0
  48. package/node_modules/@ark/schema/out/refinements/maxLength.js +49 -0
  49. package/node_modules/@ark/schema/out/refinements/min.d.ts +37 -0
  50. package/node_modules/@ark/schema/out/refinements/min.js +39 -0
  51. package/node_modules/@ark/schema/out/refinements/minLength.d.ts +40 -0
  52. package/node_modules/@ark/schema/out/refinements/minLength.js +47 -0
  53. package/node_modules/@ark/schema/out/refinements/pattern.d.ts +43 -0
  54. package/node_modules/@ark/schema/out/refinements/pattern.js +52 -0
  55. package/node_modules/@ark/schema/out/refinements/range.d.ts +106 -0
  56. package/node_modules/@ark/schema/out/refinements/range.js +103 -0
  57. package/node_modules/@ark/schema/out/roots/alias.d.ts +45 -0
  58. package/node_modules/@ark/schema/out/roots/alias.js +115 -0
  59. package/node_modules/@ark/schema/out/roots/basis.d.ts +12 -0
  60. package/node_modules/@ark/schema/out/roots/basis.js +26 -0
  61. package/node_modules/@ark/schema/out/roots/domain.d.ts +45 -0
  62. package/node_modules/@ark/schema/out/roots/domain.js +72 -0
  63. package/node_modules/@ark/schema/out/roots/intersection.d.ts +98 -0
  64. package/node_modules/@ark/schema/out/roots/intersection.js +292 -0
  65. package/node_modules/@ark/schema/out/roots/morph.d.ts +62 -0
  66. package/node_modules/@ark/schema/out/roots/morph.js +159 -0
  67. package/node_modules/@ark/schema/out/roots/proto.d.ts +53 -0
  68. package/node_modules/@ark/schema/out/roots/proto.js +101 -0
  69. package/node_modules/@ark/schema/out/roots/root.d.ts +145 -0
  70. package/node_modules/@ark/schema/out/roots/root.js +455 -0
  71. package/node_modules/@ark/schema/out/roots/union.d.ts +99 -0
  72. package/node_modules/@ark/schema/out/roots/union.js +718 -0
  73. package/node_modules/@ark/schema/out/roots/unit.d.ts +41 -0
  74. package/node_modules/@ark/schema/out/roots/unit.js +86 -0
  75. package/node_modules/@ark/schema/out/roots/utils.d.ts +3 -0
  76. package/node_modules/@ark/schema/out/roots/utils.js +6 -0
  77. package/node_modules/@ark/schema/out/scope.d.ts +158 -0
  78. package/node_modules/@ark/schema/out/scope.js +481 -0
  79. package/node_modules/@ark/schema/out/shared/compile.d.ts +62 -0
  80. package/node_modules/@ark/schema/out/shared/compile.js +145 -0
  81. package/node_modules/@ark/schema/out/shared/declare.d.ts +80 -0
  82. package/node_modules/@ark/schema/out/shared/declare.js +1 -0
  83. package/node_modules/@ark/schema/out/shared/disjoint.d.ts +41 -0
  84. package/node_modules/@ark/schema/out/shared/disjoint.js +65 -0
  85. package/node_modules/@ark/schema/out/shared/errors.d.ts +145 -0
  86. package/node_modules/@ark/schema/out/shared/errors.js +252 -0
  87. package/node_modules/@ark/schema/out/shared/implement.d.ts +151 -0
  88. package/node_modules/@ark/schema/out/shared/implement.js +98 -0
  89. package/node_modules/@ark/schema/out/shared/intersections.d.ts +10 -0
  90. package/node_modules/@ark/schema/out/shared/intersections.js +132 -0
  91. package/node_modules/@ark/schema/out/shared/jsonSchema.d.ts +93 -0
  92. package/node_modules/@ark/schema/out/shared/jsonSchema.js +1 -0
  93. package/node_modules/@ark/schema/out/shared/registry.d.ts +7 -0
  94. package/node_modules/@ark/schema/out/shared/registry.js +10 -0
  95. package/node_modules/@ark/schema/out/shared/standardSchema.d.ts +122 -0
  96. package/node_modules/@ark/schema/out/shared/standardSchema.js +2 -0
  97. package/node_modules/@ark/schema/out/shared/toJsonSchema.d.ts +139 -0
  98. package/node_modules/@ark/schema/out/shared/toJsonSchema.js +40 -0
  99. package/node_modules/@ark/schema/out/shared/traversal.d.ts +117 -0
  100. package/node_modules/@ark/schema/out/shared/traversal.js +226 -0
  101. package/node_modules/@ark/schema/out/shared/utils.d.ts +34 -0
  102. package/node_modules/@ark/schema/out/shared/utils.js +8 -0
  103. package/node_modules/@ark/schema/out/structure/index.d.ts +46 -0
  104. package/node_modules/@ark/schema/out/structure/index.js +89 -0
  105. package/node_modules/@ark/schema/out/structure/optional.d.ts +49 -0
  106. package/node_modules/@ark/schema/out/structure/optional.js +127 -0
  107. package/node_modules/@ark/schema/out/structure/prop.d.ts +45 -0
  108. package/node_modules/@ark/schema/out/structure/prop.js +85 -0
  109. package/node_modules/@ark/schema/out/structure/required.d.ts +39 -0
  110. package/node_modules/@ark/schema/out/structure/required.js +38 -0
  111. package/node_modules/@ark/schema/out/structure/sequence.d.ts +110 -0
  112. package/node_modules/@ark/schema/out/structure/sequence.js +521 -0
  113. package/node_modules/@ark/schema/out/structure/shared.d.ts +4 -0
  114. package/node_modules/@ark/schema/out/structure/shared.js +4 -0
  115. package/node_modules/@ark/schema/out/structure/structure.d.ts +113 -0
  116. package/node_modules/@ark/schema/out/structure/structure.js +747 -0
  117. package/node_modules/@ark/schema/package.json +51 -0
  118. package/node_modules/@ark/util/LICENSE +7 -0
  119. package/node_modules/@ark/util/out/arrays.d.ts +166 -0
  120. package/node_modules/@ark/util/out/arrays.js +147 -0
  121. package/node_modules/@ark/util/out/clone.d.ts +4 -0
  122. package/node_modules/@ark/util/out/clone.js +33 -0
  123. package/node_modules/@ark/util/out/describe.d.ts +25 -0
  124. package/node_modules/@ark/util/out/describe.js +1 -0
  125. package/node_modules/@ark/util/out/domain.d.ts +48 -0
  126. package/node_modules/@ark/util/out/domain.js +25 -0
  127. package/node_modules/@ark/util/out/errors.d.ts +29 -0
  128. package/node_modules/@ark/util/out/errors.js +17 -0
  129. package/node_modules/@ark/util/out/flatMorph.d.ts +41 -0
  130. package/node_modules/@ark/util/out/flatMorph.js +24 -0
  131. package/node_modules/@ark/util/out/functions.d.ts +33 -0
  132. package/node_modules/@ark/util/out/functions.js +53 -0
  133. package/node_modules/@ark/util/out/generics.d.ts +59 -0
  134. package/node_modules/@ark/util/out/generics.js +5 -0
  135. package/node_modules/@ark/util/out/get.d.ts +9 -0
  136. package/node_modules/@ark/util/out/get.js +7 -0
  137. package/node_modules/@ark/util/out/hkt.d.ts +27 -0
  138. package/node_modules/@ark/util/out/hkt.js +5 -0
  139. package/node_modules/@ark/util/out/index.d.ts +24 -0
  140. package/node_modules/@ark/util/out/index.js +24 -0
  141. package/node_modules/@ark/util/out/intersections.d.ts +50 -0
  142. package/node_modules/@ark/util/out/intersections.js +1 -0
  143. package/node_modules/@ark/util/out/isomorphic.d.ts +5 -0
  144. package/node_modules/@ark/util/out/isomorphic.js +19 -0
  145. package/node_modules/@ark/util/out/keys.d.ts +18 -0
  146. package/node_modules/@ark/util/out/keys.js +1 -0
  147. package/node_modules/@ark/util/out/lazily.d.ts +1 -0
  148. package/node_modules/@ark/util/out/lazily.js +16 -0
  149. package/node_modules/@ark/util/out/numbers.d.ts +72 -0
  150. package/node_modules/@ark/util/out/numbers.js +138 -0
  151. package/node_modules/@ark/util/out/objectKinds.d.ts +205 -0
  152. package/node_modules/@ark/util/out/objectKinds.js +150 -0
  153. package/node_modules/@ark/util/out/path.d.ts +22 -0
  154. package/node_modules/@ark/util/out/path.js +65 -0
  155. package/node_modules/@ark/util/out/primitive.d.ts +16 -0
  156. package/node_modules/@ark/util/out/primitive.js +3 -0
  157. package/node_modules/@ark/util/out/records.d.ts +183 -0
  158. package/node_modules/@ark/util/out/records.js +63 -0
  159. package/node_modules/@ark/util/out/registry.d.ts +21 -0
  160. package/node_modules/@ark/util/out/registry.js +49 -0
  161. package/node_modules/@ark/util/out/scanner.d.ts +44 -0
  162. package/node_modules/@ark/util/out/scanner.js +87 -0
  163. package/node_modules/@ark/util/out/serialize.d.ts +34 -0
  164. package/node_modules/@ark/util/out/serialize.js +150 -0
  165. package/node_modules/@ark/util/out/strings.d.ts +33 -0
  166. package/node_modules/@ark/util/out/strings.js +59 -0
  167. package/node_modules/@ark/util/out/traits.d.ts +89 -0
  168. package/node_modules/@ark/util/out/traits.js +75 -0
  169. package/node_modules/@ark/util/out/unionToTuple.d.ts +14 -0
  170. package/node_modules/@ark/util/out/unionToTuple.js +1 -0
  171. package/node_modules/@ark/util/package.json +39 -0
  172. package/node_modules/@ark/util/tsconfig.base.json +18 -0
  173. package/node_modules/@socket.io/component-emitter/LICENSE +24 -0
  174. package/node_modules/@socket.io/component-emitter/Readme.md +79 -0
  175. package/node_modules/@socket.io/component-emitter/lib/cjs/index.d.ts +179 -0
  176. package/node_modules/@socket.io/component-emitter/lib/cjs/index.js +176 -0
  177. package/node_modules/@socket.io/component-emitter/lib/cjs/package.json +4 -0
  178. package/node_modules/@socket.io/component-emitter/lib/esm/index.d.ts +179 -0
  179. package/node_modules/@socket.io/component-emitter/lib/esm/index.js +169 -0
  180. package/node_modules/@socket.io/component-emitter/lib/esm/package.json +4 -0
  181. package/node_modules/@socket.io/component-emitter/package.json +28 -0
  182. package/node_modules/arkregex/LICENSE +7 -0
  183. package/node_modules/arkregex/README.md +61 -0
  184. package/node_modules/arkregex/out/charset.d.ts +15 -0
  185. package/node_modules/arkregex/out/charset.js +1 -0
  186. package/node_modules/arkregex/out/escape.d.ts +29 -0
  187. package/node_modules/arkregex/out/escape.js +10 -0
  188. package/node_modules/arkregex/out/execArray.d.ts +23 -0
  189. package/node_modules/arkregex/out/execArray.js +1 -0
  190. package/node_modules/arkregex/out/group.d.ts +33 -0
  191. package/node_modules/arkregex/out/group.js +6 -0
  192. package/node_modules/arkregex/out/index.d.ts +1 -0
  193. package/node_modules/arkregex/out/index.js +1 -0
  194. package/node_modules/arkregex/out/parse.d.ts +10 -0
  195. package/node_modules/arkregex/out/parse.js +1 -0
  196. package/node_modules/arkregex/out/quantify.d.ts +43 -0
  197. package/node_modules/arkregex/out/quantify.js +2 -0
  198. package/node_modules/arkregex/out/regex.d.ts +38 -0
  199. package/node_modules/arkregex/out/regex.js +2 -0
  200. package/node_modules/arkregex/out/state.d.ts +359 -0
  201. package/node_modules/arkregex/out/state.js +2 -0
  202. package/node_modules/arkregex/package.json +42 -0
  203. package/node_modules/arktype/LICENSE +7 -0
  204. package/node_modules/arktype/README.md +157 -0
  205. package/node_modules/arktype/out/attributes.d.ts +104 -0
  206. package/node_modules/arktype/out/attributes.js +3 -0
  207. package/node_modules/arktype/out/config.d.ts +35 -0
  208. package/node_modules/arktype/out/config.js +3 -0
  209. package/node_modules/arktype/out/declare.d.ts +35 -0
  210. package/node_modules/arktype/out/declare.js +1 -0
  211. package/node_modules/arktype/out/fn.d.ts +61 -0
  212. package/node_modules/arktype/out/fn.js +54 -0
  213. package/node_modules/arktype/out/generic.d.ts +118 -0
  214. package/node_modules/arktype/out/generic.js +37 -0
  215. package/node_modules/arktype/out/index.d.ts +12 -0
  216. package/node_modules/arktype/out/index.js +9 -0
  217. package/node_modules/arktype/out/keywords/Array.d.ts +20 -0
  218. package/node_modules/arktype/out/keywords/Array.js +21 -0
  219. package/node_modules/arktype/out/keywords/FormData.d.ts +15 -0
  220. package/node_modules/arktype/out/keywords/FormData.js +40 -0
  221. package/node_modules/arktype/out/keywords/TypedArray.d.ts +19 -0
  222. package/node_modules/arktype/out/keywords/TypedArray.js +16 -0
  223. package/node_modules/arktype/out/keywords/builtins.d.ts +18 -0
  224. package/node_modules/arktype/out/keywords/builtins.js +11 -0
  225. package/node_modules/arktype/out/keywords/constructors.d.ts +31 -0
  226. package/node_modules/arktype/out/keywords/constructors.js +16 -0
  227. package/node_modules/arktype/out/keywords/keywords.d.ts +70 -0
  228. package/node_modules/arktype/out/keywords/keywords.js +48 -0
  229. package/node_modules/arktype/out/keywords/number.d.ts +23 -0
  230. package/node_modules/arktype/out/keywords/number.js +49 -0
  231. package/node_modules/arktype/out/keywords/string.d.ts +334 -0
  232. package/node_modules/arktype/out/keywords/string.js +463 -0
  233. package/node_modules/arktype/out/keywords/ts.d.ts +108 -0
  234. package/node_modules/arktype/out/keywords/ts.js +82 -0
  235. package/node_modules/arktype/out/match.d.ts +152 -0
  236. package/node_modules/arktype/out/match.js +95 -0
  237. package/node_modules/arktype/out/module.d.ts +22 -0
  238. package/node_modules/arktype/out/module.js +3 -0
  239. package/node_modules/arktype/out/nary.d.ts +473 -0
  240. package/node_modules/arktype/out/nary.js +1 -0
  241. package/node_modules/arktype/out/parser/ast/bounds.d.ts +18 -0
  242. package/node_modules/arktype/out/parser/ast/bounds.js +1 -0
  243. package/node_modules/arktype/out/parser/ast/default.d.ts +8 -0
  244. package/node_modules/arktype/out/parser/ast/default.js +1 -0
  245. package/node_modules/arktype/out/parser/ast/divisor.d.ts +9 -0
  246. package/node_modules/arktype/out/parser/ast/divisor.js +1 -0
  247. package/node_modules/arktype/out/parser/ast/generic.d.ts +17 -0
  248. package/node_modules/arktype/out/parser/ast/generic.js +1 -0
  249. package/node_modules/arktype/out/parser/ast/infer.d.ts +25 -0
  250. package/node_modules/arktype/out/parser/ast/infer.js +1 -0
  251. package/node_modules/arktype/out/parser/ast/keyof.d.ts +7 -0
  252. package/node_modules/arktype/out/parser/ast/keyof.js +1 -0
  253. package/node_modules/arktype/out/parser/ast/utils.d.ts +8 -0
  254. package/node_modules/arktype/out/parser/ast/utils.js +1 -0
  255. package/node_modules/arktype/out/parser/ast/validate.d.ts +30 -0
  256. package/node_modules/arktype/out/parser/ast/validate.js +3 -0
  257. package/node_modules/arktype/out/parser/definition.d.ts +30 -0
  258. package/node_modules/arktype/out/parser/definition.js +74 -0
  259. package/node_modules/arktype/out/parser/objectLiteral.d.ts +70 -0
  260. package/node_modules/arktype/out/parser/objectLiteral.js +113 -0
  261. package/node_modules/arktype/out/parser/property.d.ts +34 -0
  262. package/node_modules/arktype/out/parser/property.js +16 -0
  263. package/node_modules/arktype/out/parser/reduce/dynamic.d.ts +42 -0
  264. package/node_modules/arktype/out/parser/reduce/dynamic.js +153 -0
  265. package/node_modules/arktype/out/parser/reduce/shared.d.ts +39 -0
  266. package/node_modules/arktype/out/parser/reduce/shared.js +25 -0
  267. package/node_modules/arktype/out/parser/reduce/static.d.ts +186 -0
  268. package/node_modules/arktype/out/parser/reduce/static.js +1 -0
  269. package/node_modules/arktype/out/parser/shift/operand/date.d.ts +11 -0
  270. package/node_modules/arktype/out/parser/shift/operand/date.js +23 -0
  271. package/node_modules/arktype/out/parser/shift/operand/enclosed.d.ts +57 -0
  272. package/node_modules/arktype/out/parser/shift/operand/enclosed.js +78 -0
  273. package/node_modules/arktype/out/parser/shift/operand/genericArgs.d.ts +27 -0
  274. package/node_modules/arktype/out/parser/shift/operand/genericArgs.js +16 -0
  275. package/node_modules/arktype/out/parser/shift/operand/operand.d.ts +8 -0
  276. package/node_modules/arktype/out/parser/shift/operand/operand.js +16 -0
  277. package/node_modules/arktype/out/parser/shift/operand/unenclosed.d.ts +43 -0
  278. package/node_modules/arktype/out/parser/shift/operand/unenclosed.js +59 -0
  279. package/node_modules/arktype/out/parser/shift/operator/bounds.d.ts +24 -0
  280. package/node_modules/arktype/out/parser/shift/operator/bounds.js +91 -0
  281. package/node_modules/arktype/out/parser/shift/operator/brand.d.ts +7 -0
  282. package/node_modules/arktype/out/parser/shift/operator/brand.js +6 -0
  283. package/node_modules/arktype/out/parser/shift/operator/default.d.ts +24 -0
  284. package/node_modules/arktype/out/parser/shift/operator/default.js +15 -0
  285. package/node_modules/arktype/out/parser/shift/operator/divisor.d.ts +8 -0
  286. package/node_modules/arktype/out/parser/shift/operator/divisor.js +13 -0
  287. package/node_modules/arktype/out/parser/shift/operator/operator.d.ts +14 -0
  288. package/node_modules/arktype/out/parser/shift/operator/operator.js +28 -0
  289. package/node_modules/arktype/out/parser/shift/tokens.d.ts +33 -0
  290. package/node_modules/arktype/out/parser/shift/tokens.js +37 -0
  291. package/node_modules/arktype/out/parser/string.d.ts +30 -0
  292. package/node_modules/arktype/out/parser/string.js +42 -0
  293. package/node_modules/arktype/out/parser/tupleExpressions.d.ts +79 -0
  294. package/node_modules/arktype/out/parser/tupleExpressions.js +75 -0
  295. package/node_modules/arktype/out/parser/tupleLiteral.d.ts +95 -0
  296. package/node_modules/arktype/out/parser/tupleLiteral.js +128 -0
  297. package/node_modules/arktype/out/scope.d.ts +158 -0
  298. package/node_modules/arktype/out/scope.js +106 -0
  299. package/node_modules/arktype/out/type.d.ts +144 -0
  300. package/node_modules/arktype/out/type.js +55 -0
  301. package/node_modules/arktype/out/variants/array.d.ts +12 -0
  302. package/node_modules/arktype/out/variants/array.js +1 -0
  303. package/node_modules/arktype/out/variants/base.d.ts +542 -0
  304. package/node_modules/arktype/out/variants/base.js +1 -0
  305. package/node_modules/arktype/out/variants/date.d.ts +10 -0
  306. package/node_modules/arktype/out/variants/date.js +1 -0
  307. package/node_modules/arktype/out/variants/instantiate.d.ts +12 -0
  308. package/node_modules/arktype/out/variants/instantiate.js +1 -0
  309. package/node_modules/arktype/out/variants/number.d.ts +11 -0
  310. package/node_modules/arktype/out/variants/number.js +1 -0
  311. package/node_modules/arktype/out/variants/object.d.ts +107 -0
  312. package/node_modules/arktype/out/variants/object.js +1 -0
  313. package/node_modules/arktype/out/variants/string.d.ts +15 -0
  314. package/node_modules/arktype/out/variants/string.js +1 -0
  315. package/node_modules/arktype/package.json +57 -0
  316. package/node_modules/debug/LICENSE +20 -0
  317. package/node_modules/debug/README.md +481 -0
  318. package/node_modules/debug/package.json +64 -0
  319. package/node_modules/debug/src/browser.js +272 -0
  320. package/node_modules/debug/src/common.js +292 -0
  321. package/node_modules/debug/src/index.js +10 -0
  322. package/node_modules/debug/src/node.js +263 -0
  323. package/node_modules/engine.io-client/LICENSE +22 -0
  324. package/node_modules/engine.io-client/README.md +331 -0
  325. package/node_modules/engine.io-client/build/cjs/browser-entrypoint.d.ts +3 -0
  326. package/node_modules/engine.io-client/build/cjs/browser-entrypoint.js +4 -0
  327. package/node_modules/engine.io-client/build/cjs/contrib/has-cors.d.ts +1 -0
  328. package/node_modules/engine.io-client/build/cjs/contrib/has-cors.js +14 -0
  329. package/node_modules/engine.io-client/build/cjs/contrib/parseqs.d.ts +15 -0
  330. package/node_modules/engine.io-client/build/cjs/contrib/parseqs.js +38 -0
  331. package/node_modules/engine.io-client/build/cjs/contrib/parseuri.d.ts +1 -0
  332. package/node_modules/engine.io-client/build/cjs/contrib/parseuri.js +67 -0
  333. package/node_modules/engine.io-client/build/cjs/globals.d.ts +4 -0
  334. package/node_modules/engine.io-client/build/cjs/globals.js +26 -0
  335. package/node_modules/engine.io-client/build/cjs/globals.node.d.ts +21 -0
  336. package/node_modules/engine.io-client/build/cjs/globals.node.js +97 -0
  337. package/node_modules/engine.io-client/build/cjs/index.d.ts +15 -0
  338. package/node_modules/engine.io-client/build/cjs/index.js +32 -0
  339. package/node_modules/engine.io-client/build/cjs/package.json +10 -0
  340. package/node_modules/engine.io-client/build/cjs/socket.d.ts +482 -0
  341. package/node_modules/engine.io-client/build/cjs/socket.js +765 -0
  342. package/node_modules/engine.io-client/build/cjs/transport.d.ts +106 -0
  343. package/node_modules/engine.io-client/build/cjs/transport.js +153 -0
  344. package/node_modules/engine.io-client/build/cjs/transports/index.d.ts +8 -0
  345. package/node_modules/engine.io-client/build/cjs/transports/index.js +11 -0
  346. package/node_modules/engine.io-client/build/cjs/transports/polling-fetch.d.ts +15 -0
  347. package/node_modules/engine.io-client/build/cjs/transports/polling-fetch.js +60 -0
  348. package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.d.ts +108 -0
  349. package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.js +285 -0
  350. package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.d.ts +11 -0
  351. package/node_modules/engine.io-client/build/cjs/transports/polling-xhr.node.js +44 -0
  352. package/node_modules/engine.io-client/build/cjs/transports/polling.d.ts +52 -0
  353. package/node_modules/engine.io-client/build/cjs/transports/polling.js +165 -0
  354. package/node_modules/engine.io-client/build/cjs/transports/websocket.d.ts +36 -0
  355. package/node_modules/engine.io-client/build/cjs/transports/websocket.js +136 -0
  356. package/node_modules/engine.io-client/build/cjs/transports/websocket.node.d.ts +14 -0
  357. package/node_modules/engine.io-client/build/cjs/transports/websocket.node.js +68 -0
  358. package/node_modules/engine.io-client/build/cjs/transports/webtransport.d.ts +18 -0
  359. package/node_modules/engine.io-client/build/cjs/transports/webtransport.js +94 -0
  360. package/node_modules/engine.io-client/build/cjs/util.d.ts +7 -0
  361. package/node_modules/engine.io-client/build/cjs/util.js +65 -0
  362. package/node_modules/engine.io-client/build/esm/browser-entrypoint.d.ts +3 -0
  363. package/node_modules/engine.io-client/build/esm/browser-entrypoint.js +2 -0
  364. package/node_modules/engine.io-client/build/esm/contrib/has-cors.d.ts +1 -0
  365. package/node_modules/engine.io-client/build/esm/contrib/has-cors.js +11 -0
  366. package/node_modules/engine.io-client/build/esm/contrib/parseqs.d.ts +15 -0
  367. package/node_modules/engine.io-client/build/esm/contrib/parseqs.js +34 -0
  368. package/node_modules/engine.io-client/build/esm/contrib/parseuri.d.ts +1 -0
  369. package/node_modules/engine.io-client/build/esm/contrib/parseuri.js +64 -0
  370. package/node_modules/engine.io-client/build/esm/globals.d.ts +4 -0
  371. package/node_modules/engine.io-client/build/esm/globals.js +22 -0
  372. package/node_modules/engine.io-client/build/esm/globals.node.d.ts +21 -0
  373. package/node_modules/engine.io-client/build/esm/globals.node.js +91 -0
  374. package/node_modules/engine.io-client/build/esm/index.d.ts +15 -0
  375. package/node_modules/engine.io-client/build/esm/index.js +15 -0
  376. package/node_modules/engine.io-client/build/esm/package.json +10 -0
  377. package/node_modules/engine.io-client/build/esm/socket.d.ts +482 -0
  378. package/node_modules/engine.io-client/build/esm/socket.js +727 -0
  379. package/node_modules/engine.io-client/build/esm/transport.d.ts +106 -0
  380. package/node_modules/engine.io-client/build/esm/transport.js +142 -0
  381. package/node_modules/engine.io-client/build/esm/transports/index.d.ts +8 -0
  382. package/node_modules/engine.io-client/build/esm/transports/index.js +8 -0
  383. package/node_modules/engine.io-client/build/esm/transports/polling-fetch.d.ts +15 -0
  384. package/node_modules/engine.io-client/build/esm/transports/polling-fetch.js +56 -0
  385. package/node_modules/engine.io-client/build/esm/transports/polling-xhr.d.ts +108 -0
  386. package/node_modules/engine.io-client/build/esm/transports/polling-xhr.js +271 -0
  387. package/node_modules/engine.io-client/build/esm/transports/polling-xhr.node.d.ts +11 -0
  388. package/node_modules/engine.io-client/build/esm/transports/polling-xhr.node.js +17 -0
  389. package/node_modules/engine.io-client/build/esm/transports/polling.d.ts +52 -0
  390. package/node_modules/engine.io-client/build/esm/transports/polling.js +145 -0
  391. package/node_modules/engine.io-client/build/esm/transports/websocket.d.ts +36 -0
  392. package/node_modules/engine.io-client/build/esm/transports/websocket.js +125 -0
  393. package/node_modules/engine.io-client/build/esm/transports/websocket.node.d.ts +14 -0
  394. package/node_modules/engine.io-client/build/esm/transports/websocket.node.js +41 -0
  395. package/node_modules/engine.io-client/build/esm/transports/webtransport.d.ts +18 -0
  396. package/node_modules/engine.io-client/build/esm/transports/webtransport.js +80 -0
  397. package/node_modules/engine.io-client/build/esm/util.d.ts +7 -0
  398. package/node_modules/engine.io-client/build/esm/util.js +59 -0
  399. package/node_modules/engine.io-client/build/esm-debug/browser-entrypoint.d.ts +3 -0
  400. package/node_modules/engine.io-client/build/esm-debug/browser-entrypoint.js +2 -0
  401. package/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.d.ts +1 -0
  402. package/node_modules/engine.io-client/build/esm-debug/contrib/has-cors.js +11 -0
  403. package/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.d.ts +15 -0
  404. package/node_modules/engine.io-client/build/esm-debug/contrib/parseqs.js +34 -0
  405. package/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.d.ts +1 -0
  406. package/node_modules/engine.io-client/build/esm-debug/contrib/parseuri.js +64 -0
  407. package/node_modules/engine.io-client/build/esm-debug/globals.d.ts +4 -0
  408. package/node_modules/engine.io-client/build/esm-debug/globals.js +22 -0
  409. package/node_modules/engine.io-client/build/esm-debug/globals.node.d.ts +21 -0
  410. package/node_modules/engine.io-client/build/esm-debug/globals.node.js +91 -0
  411. package/node_modules/engine.io-client/build/esm-debug/index.d.ts +15 -0
  412. package/node_modules/engine.io-client/build/esm-debug/index.js +15 -0
  413. package/node_modules/engine.io-client/build/esm-debug/package.json +10 -0
  414. package/node_modules/engine.io-client/build/esm-debug/socket.d.ts +482 -0
  415. package/node_modules/engine.io-client/build/esm-debug/socket.js +756 -0
  416. package/node_modules/engine.io-client/build/esm-debug/transport.d.ts +106 -0
  417. package/node_modules/engine.io-client/build/esm-debug/transport.js +145 -0
  418. package/node_modules/engine.io-client/build/esm-debug/transports/index.d.ts +8 -0
  419. package/node_modules/engine.io-client/build/esm-debug/transports/index.js +8 -0
  420. package/node_modules/engine.io-client/build/esm-debug/transports/polling-fetch.d.ts +15 -0
  421. package/node_modules/engine.io-client/build/esm-debug/transports/polling-fetch.js +56 -0
  422. package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.d.ts +108 -0
  423. package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.js +276 -0
  424. package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.d.ts +11 -0
  425. package/node_modules/engine.io-client/build/esm-debug/transports/polling-xhr.node.js +17 -0
  426. package/node_modules/engine.io-client/build/esm-debug/transports/polling.d.ts +52 -0
  427. package/node_modules/engine.io-client/build/esm-debug/transports/polling.js +158 -0
  428. package/node_modules/engine.io-client/build/esm-debug/transports/websocket.d.ts +36 -0
  429. package/node_modules/engine.io-client/build/esm-debug/transports/websocket.js +128 -0
  430. package/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.d.ts +14 -0
  431. package/node_modules/engine.io-client/build/esm-debug/transports/websocket.node.js +41 -0
  432. package/node_modules/engine.io-client/build/esm-debug/transports/webtransport.d.ts +18 -0
  433. package/node_modules/engine.io-client/build/esm-debug/transports/webtransport.js +87 -0
  434. package/node_modules/engine.io-client/build/esm-debug/util.d.ts +7 -0
  435. package/node_modules/engine.io-client/build/esm-debug/util.js +59 -0
  436. package/node_modules/engine.io-client/dist/engine.io.esm.min.js +7 -0
  437. package/node_modules/engine.io-client/dist/engine.io.esm.min.js.map +1 -0
  438. package/node_modules/engine.io-client/dist/engine.io.js +3064 -0
  439. package/node_modules/engine.io-client/dist/engine.io.js.map +1 -0
  440. package/node_modules/engine.io-client/dist/engine.io.min.js +7 -0
  441. package/node_modules/engine.io-client/dist/engine.io.min.js.map +1 -0
  442. package/node_modules/engine.io-client/package.json +95 -0
  443. package/node_modules/engine.io-parser/LICENSE +22 -0
  444. package/node_modules/engine.io-parser/Readme.md +158 -0
  445. package/node_modules/engine.io-parser/build/cjs/commons.d.ts +14 -0
  446. package/node_modules/engine.io-parser/build/cjs/commons.js +19 -0
  447. package/node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.d.ts +2 -0
  448. package/node_modules/engine.io-parser/build/cjs/contrib/base64-arraybuffer.js +48 -0
  449. package/node_modules/engine.io-parser/build/cjs/decodePacket.browser.d.ts +2 -0
  450. package/node_modules/engine.io-parser/build/cjs/decodePacket.browser.js +66 -0
  451. package/node_modules/engine.io-parser/build/cjs/decodePacket.d.ts +2 -0
  452. package/node_modules/engine.io-parser/build/cjs/decodePacket.js +59 -0
  453. package/node_modules/engine.io-parser/build/cjs/encodePacket.browser.d.ts +4 -0
  454. package/node_modules/engine.io-parser/build/cjs/encodePacket.browser.js +72 -0
  455. package/node_modules/engine.io-parser/build/cjs/encodePacket.d.ts +3 -0
  456. package/node_modules/engine.io-parser/build/cjs/encodePacket.js +38 -0
  457. package/node_modules/engine.io-parser/build/cjs/index.d.ts +9 -0
  458. package/node_modules/engine.io-parser/build/cjs/index.js +164 -0
  459. package/node_modules/engine.io-parser/build/cjs/package.json +8 -0
  460. package/node_modules/engine.io-parser/build/esm/commons.d.ts +14 -0
  461. package/node_modules/engine.io-parser/build/esm/commons.js +14 -0
  462. package/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.d.ts +2 -0
  463. package/node_modules/engine.io-parser/build/esm/contrib/base64-arraybuffer.js +43 -0
  464. package/node_modules/engine.io-parser/build/esm/decodePacket.browser.d.ts +2 -0
  465. package/node_modules/engine.io-parser/build/esm/decodePacket.browser.js +62 -0
  466. package/node_modules/engine.io-parser/build/esm/decodePacket.d.ts +2 -0
  467. package/node_modules/engine.io-parser/build/esm/decodePacket.js +55 -0
  468. package/node_modules/engine.io-parser/build/esm/encodePacket.browser.d.ts +4 -0
  469. package/node_modules/engine.io-parser/build/esm/encodePacket.browser.js +68 -0
  470. package/node_modules/engine.io-parser/build/esm/encodePacket.d.ts +3 -0
  471. package/node_modules/engine.io-parser/build/esm/encodePacket.js +33 -0
  472. package/node_modules/engine.io-parser/build/esm/index.d.ts +9 -0
  473. package/node_modules/engine.io-parser/build/esm/index.js +156 -0
  474. package/node_modules/engine.io-parser/build/esm/package.json +8 -0
  475. package/node_modules/engine.io-parser/package.json +46 -0
  476. package/node_modules/ms/index.js +162 -0
  477. package/node_modules/ms/license.md +21 -0
  478. package/node_modules/ms/package.json +38 -0
  479. package/node_modules/ms/readme.md +59 -0
  480. package/node_modules/socket.io-client/LICENSE +21 -0
  481. package/node_modules/socket.io-client/README.md +29 -0
  482. package/node_modules/socket.io-client/build/cjs/browser-entrypoint.d.ts +2 -0
  483. package/node_modules/socket.io-client/build/cjs/browser-entrypoint.js +4 -0
  484. package/node_modules/socket.io-client/build/cjs/contrib/backo2.d.ts +12 -0
  485. package/node_modules/socket.io-client/build/cjs/contrib/backo2.js +69 -0
  486. package/node_modules/socket.io-client/build/cjs/index.d.ts +29 -0
  487. package/node_modules/socket.io-client/build/cjs/index.js +76 -0
  488. package/node_modules/socket.io-client/build/cjs/manager.d.ts +295 -0
  489. package/node_modules/socket.io-client/build/cjs/manager.js +416 -0
  490. package/node_modules/socket.io-client/build/cjs/on.d.ts +2 -0
  491. package/node_modules/socket.io-client/build/cjs/on.js +9 -0
  492. package/node_modules/socket.io-client/build/cjs/socket.d.ts +593 -0
  493. package/node_modules/socket.io-client/build/cjs/socket.js +909 -0
  494. package/node_modules/socket.io-client/build/cjs/url.d.ts +33 -0
  495. package/node_modules/socket.io-client/build/cjs/url.js +69 -0
  496. package/node_modules/socket.io-client/build/esm/browser-entrypoint.d.ts +2 -0
  497. package/node_modules/socket.io-client/build/esm/browser-entrypoint.js +2 -0
  498. package/node_modules/socket.io-client/build/esm/contrib/backo2.d.ts +12 -0
  499. package/node_modules/socket.io-client/build/esm/contrib/backo2.js +66 -0
  500. package/node_modules/socket.io-client/build/esm/index.d.ts +29 -0
  501. package/node_modules/socket.io-client/build/esm/index.js +58 -0
  502. package/node_modules/socket.io-client/build/esm/manager.d.ts +295 -0
  503. package/node_modules/socket.io-client/build/esm/manager.js +367 -0
  504. package/node_modules/socket.io-client/build/esm/on.d.ts +2 -0
  505. package/node_modules/socket.io-client/build/esm/on.js +6 -0
  506. package/node_modules/socket.io-client/build/esm/package.json +5 -0
  507. package/node_modules/socket.io-client/build/esm/socket.d.ts +593 -0
  508. package/node_modules/socket.io-client/build/esm/socket.js +880 -0
  509. package/node_modules/socket.io-client/build/esm/url.d.ts +33 -0
  510. package/node_modules/socket.io-client/build/esm/url.js +59 -0
  511. package/node_modules/socket.io-client/build/esm-debug/browser-entrypoint.d.ts +2 -0
  512. package/node_modules/socket.io-client/build/esm-debug/browser-entrypoint.js +2 -0
  513. package/node_modules/socket.io-client/build/esm-debug/contrib/backo2.d.ts +12 -0
  514. package/node_modules/socket.io-client/build/esm-debug/contrib/backo2.js +66 -0
  515. package/node_modules/socket.io-client/build/esm-debug/index.d.ts +29 -0
  516. package/node_modules/socket.io-client/build/esm-debug/index.js +62 -0
  517. package/node_modules/socket.io-client/build/esm-debug/manager.d.ts +295 -0
  518. package/node_modules/socket.io-client/build/esm-debug/manager.js +386 -0
  519. package/node_modules/socket.io-client/build/esm-debug/on.d.ts +2 -0
  520. package/node_modules/socket.io-client/build/esm-debug/on.js +6 -0
  521. package/node_modules/socket.io-client/build/esm-debug/package.json +5 -0
  522. package/node_modules/socket.io-client/build/esm-debug/socket.d.ts +593 -0
  523. package/node_modules/socket.io-client/build/esm-debug/socket.js +902 -0
  524. package/node_modules/socket.io-client/build/esm-debug/url.d.ts +33 -0
  525. package/node_modules/socket.io-client/build/esm-debug/url.js +63 -0
  526. package/node_modules/socket.io-client/dist/socket.io.esm.min.js +7 -0
  527. package/node_modules/socket.io-client/dist/socket.io.esm.min.js.map +1 -0
  528. package/node_modules/socket.io-client/dist/socket.io.js +4955 -0
  529. package/node_modules/socket.io-client/dist/socket.io.js.map +1 -0
  530. package/node_modules/socket.io-client/dist/socket.io.min.js +7 -0
  531. package/node_modules/socket.io-client/dist/socket.io.min.js.map +1 -0
  532. package/node_modules/socket.io-client/dist/socket.io.msgpack.min.js +7 -0
  533. package/node_modules/socket.io-client/dist/socket.io.msgpack.min.js.map +1 -0
  534. package/node_modules/socket.io-client/package.json +101 -0
  535. package/node_modules/socket.io-parser/LICENSE +20 -0
  536. package/node_modules/socket.io-parser/Readme.md +81 -0
  537. package/node_modules/socket.io-parser/build/cjs/binary.d.ts +20 -0
  538. package/node_modules/socket.io-parser/build/cjs/binary.js +87 -0
  539. package/node_modules/socket.io-parser/build/cjs/index.d.ts +91 -0
  540. package/node_modules/socket.io-parser/build/cjs/index.js +359 -0
  541. package/node_modules/socket.io-parser/build/cjs/is-binary.d.ts +7 -0
  542. package/node_modules/socket.io-parser/build/cjs/is-binary.js +54 -0
  543. package/node_modules/socket.io-parser/build/cjs/package.json +3 -0
  544. package/node_modules/socket.io-parser/build/esm/binary.d.ts +20 -0
  545. package/node_modules/socket.io-parser/build/esm/binary.js +83 -0
  546. package/node_modules/socket.io-parser/build/esm/index.d.ts +91 -0
  547. package/node_modules/socket.io-parser/build/esm/index.js +348 -0
  548. package/node_modules/socket.io-parser/build/esm/is-binary.d.ts +7 -0
  549. package/node_modules/socket.io-parser/build/esm/is-binary.js +50 -0
  550. package/node_modules/socket.io-parser/build/esm/package.json +3 -0
  551. package/node_modules/socket.io-parser/build/esm-debug/binary.d.ts +20 -0
  552. package/node_modules/socket.io-parser/build/esm-debug/binary.js +83 -0
  553. package/node_modules/socket.io-parser/build/esm-debug/index.d.ts +91 -0
  554. package/node_modules/socket.io-parser/build/esm-debug/index.js +353 -0
  555. package/node_modules/socket.io-parser/build/esm-debug/is-binary.d.ts +7 -0
  556. package/node_modules/socket.io-parser/build/esm-debug/is-binary.js +50 -0
  557. package/node_modules/socket.io-parser/build/esm-debug/package.json +3 -0
  558. package/node_modules/socket.io-parser/package.json +44 -0
  559. package/node_modules/ws/LICENSE +20 -0
  560. package/node_modules/ws/README.md +548 -0
  561. package/node_modules/ws/browser.js +8 -0
  562. package/node_modules/ws/index.js +13 -0
  563. package/node_modules/ws/lib/buffer-util.js +131 -0
  564. package/node_modules/ws/lib/constants.js +18 -0
  565. package/node_modules/ws/lib/event-target.js +292 -0
  566. package/node_modules/ws/lib/extension.js +203 -0
  567. package/node_modules/ws/lib/limiter.js +55 -0
  568. package/node_modules/ws/lib/permessage-deflate.js +528 -0
  569. package/node_modules/ws/lib/receiver.js +706 -0
  570. package/node_modules/ws/lib/sender.js +602 -0
  571. package/node_modules/ws/lib/stream.js +161 -0
  572. package/node_modules/ws/lib/subprotocol.js +62 -0
  573. package/node_modules/ws/lib/validation.js +152 -0
  574. package/node_modules/ws/lib/websocket-server.js +550 -0
  575. package/node_modules/ws/lib/websocket.js +1388 -0
  576. package/node_modules/ws/package.json +69 -0
  577. package/node_modules/ws/wrapper.mjs +8 -0
  578. package/node_modules/xmlhttprequest-ssl/LICENSE +22 -0
  579. package/node_modules/xmlhttprequest-ssl/README.md +67 -0
  580. package/node_modules/xmlhttprequest-ssl/lib/XMLHttpRequest.js +689 -0
  581. package/node_modules/xmlhttprequest-ssl/package.json +40 -0
  582. package/package.json +34 -4
  583. package/public-api.md +85 -23
@@ -0,0 +1,718 @@
1
+ import { appendUnique, arrayEquals, domainDescriptions, flatMorph, groupBy, hasKey, isArray, jsTypeOfDescriptions, printable, range, throwParseError, unset } from "@ark/util";
2
+ import { compileLiteralPropAccess, compileSerializedValue } from "../shared/compile.js";
3
+ import { Disjoint } from "../shared/disjoint.js";
4
+ import { implementNode } from "../shared/implement.js";
5
+ import { intersectNodesRoot, intersectOrPipeNodes } from "../shared/intersections.js";
6
+ import { $ark, registeredReference } from "../shared/registry.js";
7
+ import { Traversal } from "../shared/traversal.js";
8
+ import { hasArkKind } from "../shared/utils.js";
9
+ import { BaseRoot } from "./root.js";
10
+ import { defineRightwardIntersections } from "./utils.js";
11
+ const implementation = implementNode({
12
+ kind: "union",
13
+ hasAssociatedError: true,
14
+ collapsibleKey: "branches",
15
+ keys: {
16
+ ordered: {},
17
+ branches: {
18
+ child: true,
19
+ parse: (schema, ctx) => {
20
+ const branches = [];
21
+ for (const branchSchema of schema) {
22
+ const branchNodes = hasArkKind(branchSchema, "root") ?
23
+ branchSchema.branches
24
+ : ctx.$.parseSchema(branchSchema).branches;
25
+ for (const node of branchNodes) {
26
+ if (node.hasKind("morph")) {
27
+ const matchingMorphIndex = branches.findIndex(matching => matching.hasKind("morph") && matching.hasEqualMorphs(node));
28
+ if (matchingMorphIndex === -1)
29
+ branches.push(node);
30
+ else {
31
+ const matchingMorph = branches[matchingMorphIndex];
32
+ branches[matchingMorphIndex] = ctx.$.node("morph", {
33
+ ...matchingMorph.inner,
34
+ in: matchingMorph.rawIn.rawOr(node.rawIn)
35
+ });
36
+ }
37
+ }
38
+ else
39
+ branches.push(node);
40
+ }
41
+ }
42
+ if (!ctx.def.ordered)
43
+ branches.sort((l, r) => (l.hash < r.hash ? -1 : 1));
44
+ return branches;
45
+ }
46
+ }
47
+ },
48
+ normalize: schema => (isArray(schema) ? { branches: schema } : schema),
49
+ reduce: (inner, $) => {
50
+ const reducedBranches = reduceBranches(inner);
51
+ if (reducedBranches.length === 1)
52
+ return reducedBranches[0];
53
+ if (reducedBranches.length === inner.branches.length)
54
+ return;
55
+ return $.node("union", {
56
+ ...inner,
57
+ branches: reducedBranches
58
+ }, { prereduced: true });
59
+ },
60
+ defaults: {
61
+ description: node => node.distribute(branch => branch.description, describeBranches),
62
+ expected: ctx => {
63
+ const byPath = groupBy(ctx.errors, "propString");
64
+ const pathDescriptions = Object.entries(byPath).map(([path, errors]) => {
65
+ const branchesAtPath = [];
66
+ for (const errorAtPath of errors)
67
+ appendUnique(branchesAtPath, errorAtPath.expected);
68
+ const expected = describeBranches(branchesAtPath);
69
+ // if there are multiple actual descriptions that differ,
70
+ // just fall back to printable, which is the most specific
71
+ const actual = errors.every(e => e.actual === errors[0].actual) ?
72
+ errors[0].actual
73
+ : printable(errors[0].data);
74
+ return `${path && `${path} `}must be ${expected}${actual && ` (was ${actual})`}`;
75
+ });
76
+ return describeBranches(pathDescriptions);
77
+ },
78
+ problem: ctx => ctx.expected,
79
+ message: ctx => {
80
+ if (ctx.problem[0] === "[") {
81
+ // clarify paths like [1], [0][1], and ["key!"] that could be confusing
82
+ return `value at ${ctx.problem}`;
83
+ }
84
+ return ctx.problem;
85
+ }
86
+ },
87
+ intersections: {
88
+ union: (l, r, ctx) => {
89
+ if (l.isNever !== r.isNever) {
90
+ // if exactly one operand is never, we can use it to discriminate based on presence
91
+ return Disjoint.init("presence", l, r);
92
+ }
93
+ let resultBranches;
94
+ if (l.ordered) {
95
+ if (r.ordered) {
96
+ throwParseError(writeOrderedIntersectionMessage(l.expression, r.expression));
97
+ }
98
+ resultBranches = intersectBranches(r.branches, l.branches, ctx);
99
+ if (resultBranches instanceof Disjoint)
100
+ resultBranches.invert();
101
+ }
102
+ else
103
+ resultBranches = intersectBranches(l.branches, r.branches, ctx);
104
+ if (resultBranches instanceof Disjoint)
105
+ return resultBranches;
106
+ return ctx.$.parseSchema(l.ordered || r.ordered ?
107
+ {
108
+ branches: resultBranches,
109
+ ordered: true
110
+ }
111
+ : { branches: resultBranches });
112
+ },
113
+ ...defineRightwardIntersections("union", (l, r, ctx) => {
114
+ const branches = intersectBranches(l.branches, [r], ctx);
115
+ if (branches instanceof Disjoint)
116
+ return branches;
117
+ if (branches.length === 1)
118
+ return branches[0];
119
+ return ctx.$.parseSchema(l.ordered ? { branches, ordered: true } : { branches });
120
+ })
121
+ }
122
+ });
123
+ export class UnionNode extends BaseRoot {
124
+ isBoolean = this.branches.length === 2 &&
125
+ this.branches[0].hasUnit(false) &&
126
+ this.branches[1].hasUnit(true);
127
+ get branchGroups() {
128
+ const branchGroups = [];
129
+ let firstBooleanIndex = -1;
130
+ for (const branch of this.branches) {
131
+ if (branch.hasKind("unit") && branch.domain === "boolean") {
132
+ if (firstBooleanIndex === -1) {
133
+ firstBooleanIndex = branchGroups.length;
134
+ branchGroups.push(branch);
135
+ }
136
+ else
137
+ branchGroups[firstBooleanIndex] = $ark.intrinsic.boolean;
138
+ continue;
139
+ }
140
+ branchGroups.push(branch);
141
+ }
142
+ return branchGroups;
143
+ }
144
+ unitBranches = this.branches.filter((n) => n.rawIn.hasKind("unit"));
145
+ discriminant = this.discriminate();
146
+ discriminantJson = this.discriminant ? discriminantToJson(this.discriminant) : null;
147
+ expression = this.distribute(n => n.nestableExpression, expressBranches);
148
+ createBranchedOptimisticRootApply() {
149
+ return (data, onFail) => {
150
+ const optimisticResult = this.traverseOptimistic(data);
151
+ if (optimisticResult !== unset)
152
+ return optimisticResult;
153
+ const ctx = new Traversal(data, this.$.resolvedConfig);
154
+ this.traverseApply(data, ctx);
155
+ return ctx.finalize(onFail);
156
+ };
157
+ }
158
+ get shallowMorphs() {
159
+ return this.branches.reduce((morphs, branch) => appendUnique(morphs, branch.shallowMorphs), []);
160
+ }
161
+ get defaultShortDescription() {
162
+ return this.distribute(branch => branch.defaultShortDescription, describeBranches);
163
+ }
164
+ innerToJsonSchema(ctx) {
165
+ // special case to simplify { const: true } | { const: false }
166
+ // to the canonical JSON Schema representation { type: "boolean" }
167
+ if (this.branchGroups.length === 1 &&
168
+ this.branchGroups[0].equals($ark.intrinsic.boolean))
169
+ return { type: "boolean" };
170
+ const jsonSchemaBranches = this.branchGroups.map(group => group.toJsonSchemaRecurse(ctx));
171
+ if (jsonSchemaBranches.every((branch) =>
172
+ // iff all branches are pure unit values with no metadata,
173
+ // we can simplify the representation to an enum
174
+ Object.keys(branch).length === 1 && hasKey(branch, "const"))) {
175
+ return {
176
+ enum: jsonSchemaBranches.map(branch => branch.const)
177
+ };
178
+ }
179
+ return {
180
+ anyOf: jsonSchemaBranches
181
+ };
182
+ }
183
+ traverseAllows = (data, ctx) => this.branches.some(b => b.traverseAllows(data, ctx));
184
+ traverseApply = (data, ctx) => {
185
+ const errors = [];
186
+ for (let i = 0; i < this.branches.length; i++) {
187
+ ctx.pushBranch();
188
+ this.branches[i].traverseApply(data, ctx);
189
+ if (!ctx.hasError()) {
190
+ if (this.branches[i].includesTransform)
191
+ return ctx.queuedMorphs.push(...ctx.popBranch().queuedMorphs);
192
+ return ctx.popBranch();
193
+ }
194
+ errors.push(ctx.popBranch().error);
195
+ }
196
+ ctx.errorFromNodeContext({ code: "union", errors, meta: this.meta });
197
+ };
198
+ traverseOptimistic = (data) => {
199
+ for (let i = 0; i < this.branches.length; i++) {
200
+ const branch = this.branches[i];
201
+ if (branch.traverseAllows(data)) {
202
+ if (branch.contextFreeMorph)
203
+ return branch.contextFreeMorph(data);
204
+ // if we're calling this function and the matching branch didn't have
205
+ // a context-free morph, it shouldn't have morphs at all
206
+ return data;
207
+ }
208
+ }
209
+ return unset;
210
+ };
211
+ compile(js) {
212
+ if (!this.discriminant ||
213
+ // if we have a union of two units like `boolean`, the
214
+ // undiscriminated compilation will be just as fast
215
+ (this.unitBranches.length === this.branches.length &&
216
+ this.branches.length === 2))
217
+ return this.compileIndiscriminable(js);
218
+ // we need to access the path as optional so we don't throw if it isn't present
219
+ let condition = this.discriminant.optionallyChainedPropString;
220
+ if (this.discriminant.kind === "domain")
221
+ condition = `typeof ${condition} === "object" ? ${condition} === null ? "null" : "object" : typeof ${condition} === "function" ? "object" : typeof ${condition}`;
222
+ const cases = this.discriminant.cases;
223
+ const caseKeys = Object.keys(cases);
224
+ const { optimistic } = js;
225
+ // only the first layer can be optimistic
226
+ js.optimistic = false;
227
+ js.block(`switch(${condition})`, () => {
228
+ for (const k in cases) {
229
+ const v = cases[k];
230
+ const caseCondition = k === "default" ? k : `case ${k}`;
231
+ let caseResult;
232
+ if (v === true)
233
+ caseResult = optimistic ? "data" : "true";
234
+ else if (optimistic) {
235
+ if (v.rootApplyStrategy === "branchedOptimistic")
236
+ caseResult = js.invoke(v, { kind: "Optimistic" });
237
+ else if (v.contextFreeMorph)
238
+ caseResult = `${js.invoke(v)} ? ${registeredReference(v.contextFreeMorph)}(data) : "${unset}"`;
239
+ else
240
+ caseResult = `${js.invoke(v)} ? data : "${unset}"`;
241
+ }
242
+ else
243
+ caseResult = js.invoke(v);
244
+ js.line(`${caseCondition}: return ${caseResult}`);
245
+ }
246
+ return js;
247
+ });
248
+ if (js.traversalKind === "Allows") {
249
+ js.return(optimistic ? `"${unset}"` : false);
250
+ return;
251
+ }
252
+ const expected = describeBranches(this.discriminant.kind === "domain" ?
253
+ caseKeys.map(k => {
254
+ const jsTypeOf = k.slice(1, -1);
255
+ return jsTypeOf === "function" ?
256
+ domainDescriptions.object
257
+ : domainDescriptions[jsTypeOf];
258
+ })
259
+ : caseKeys);
260
+ const serializedPathSegments = this.discriminant.path.map(k => typeof k === "symbol" ? registeredReference(k) : JSON.stringify(k));
261
+ const serializedExpected = JSON.stringify(expected);
262
+ const serializedActual = this.discriminant.kind === "domain" ?
263
+ `${serializedTypeOfDescriptions}[${condition}]`
264
+ : `${serializedPrintable}(${condition})`;
265
+ js.line(`ctx.errorFromNodeContext({
266
+ code: "predicate",
267
+ expected: ${serializedExpected},
268
+ actual: ${serializedActual},
269
+ relativePath: [${serializedPathSegments}],
270
+ meta: ${this.compiledMeta}
271
+ })`);
272
+ }
273
+ compileIndiscriminable(js) {
274
+ if (js.traversalKind === "Apply") {
275
+ js.const("errors", "[]");
276
+ for (const branch of this.branches) {
277
+ js.line("ctx.pushBranch()")
278
+ .line(js.invoke(branch))
279
+ .if("!ctx.hasError()", () => js.return(branch.includesTransform ?
280
+ "ctx.queuedMorphs.push(...ctx.popBranch().queuedMorphs)"
281
+ : "ctx.popBranch()"))
282
+ .line("errors.push(ctx.popBranch().error)");
283
+ }
284
+ js.line(`ctx.errorFromNodeContext({ code: "union", errors, meta: ${this.compiledMeta} })`);
285
+ }
286
+ else {
287
+ const { optimistic } = js;
288
+ // only the first layer can be optimistic
289
+ js.optimistic = false;
290
+ for (const branch of this.branches) {
291
+ js.if(`${js.invoke(branch)}`, () => js.return(optimistic ?
292
+ branch.contextFreeMorph ?
293
+ `${registeredReference(branch.contextFreeMorph)}(data)`
294
+ : "data"
295
+ : true));
296
+ }
297
+ js.return(optimistic ? `"${unset}"` : false);
298
+ }
299
+ }
300
+ get nestableExpression() {
301
+ // avoid adding unnecessary parentheses around boolean since it's
302
+ // already collapsed to a single keyword
303
+ return this.isBoolean ? "boolean" : `(${this.expression})`;
304
+ }
305
+ discriminate() {
306
+ if (this.branches.length < 2 || this.isCyclic)
307
+ return null;
308
+ if (this.unitBranches.length === this.branches.length) {
309
+ const cases = flatMorph(this.unitBranches, (i, n) => [
310
+ `${n.rawIn.serializedValue}`,
311
+ n.hasKind("morph") ? n : true
312
+ ]);
313
+ return {
314
+ kind: "unit",
315
+ path: [],
316
+ optionallyChainedPropString: "data",
317
+ cases
318
+ };
319
+ }
320
+ const candidates = [];
321
+ for (let lIndex = 0; lIndex < this.branches.length - 1; lIndex++) {
322
+ const l = this.branches[lIndex];
323
+ for (let rIndex = lIndex + 1; rIndex < this.branches.length; rIndex++) {
324
+ const r = this.branches[rIndex];
325
+ const result = intersectNodesRoot(l.rawIn, r.rawIn, l.$);
326
+ if (!(result instanceof Disjoint))
327
+ continue;
328
+ for (const entry of result) {
329
+ if (!entry.kind || entry.optional)
330
+ continue;
331
+ let lSerialized;
332
+ let rSerialized;
333
+ if (entry.kind === "domain") {
334
+ const lValue = entry.l;
335
+ const rValue = entry.r;
336
+ lSerialized = `"${typeof lValue === "string" ? lValue : lValue.domain}"`;
337
+ rSerialized = `"${typeof rValue === "string" ? rValue : rValue.domain}"`;
338
+ }
339
+ else if (entry.kind === "unit") {
340
+ lSerialized = entry.l.serializedValue;
341
+ rSerialized = entry.r.serializedValue;
342
+ }
343
+ else
344
+ continue;
345
+ const matching = candidates.find(d => arrayEquals(d.path, entry.path) && d.kind === entry.kind);
346
+ if (!matching) {
347
+ candidates.push({
348
+ kind: entry.kind,
349
+ cases: {
350
+ [lSerialized]: {
351
+ branchIndices: [lIndex],
352
+ condition: entry.l
353
+ },
354
+ [rSerialized]: {
355
+ branchIndices: [rIndex],
356
+ condition: entry.r
357
+ }
358
+ },
359
+ path: entry.path
360
+ });
361
+ }
362
+ else {
363
+ if (matching.cases[lSerialized]) {
364
+ matching.cases[lSerialized].branchIndices = appendUnique(matching.cases[lSerialized].branchIndices, lIndex);
365
+ }
366
+ else {
367
+ matching.cases[lSerialized] ??= {
368
+ branchIndices: [lIndex],
369
+ condition: entry.l
370
+ };
371
+ }
372
+ if (matching.cases[rSerialized]) {
373
+ matching.cases[rSerialized].branchIndices = appendUnique(matching.cases[rSerialized].branchIndices, rIndex);
374
+ }
375
+ else {
376
+ matching.cases[rSerialized] ??= {
377
+ branchIndices: [rIndex],
378
+ condition: entry.r
379
+ };
380
+ }
381
+ }
382
+ }
383
+ }
384
+ }
385
+ const viableCandidates = this.ordered ?
386
+ viableOrderedCandidates(candidates, this.branches)
387
+ : candidates;
388
+ if (!viableCandidates.length)
389
+ return null;
390
+ const ctx = createCaseResolutionContext(viableCandidates, this);
391
+ const cases = {};
392
+ for (const k in ctx.best.cases) {
393
+ const resolution = resolveCase(ctx, k);
394
+ if (resolution === null) {
395
+ cases[k] = true;
396
+ continue;
397
+ }
398
+ // if all the branches ended up back in pruned, we'd loop if we continued
399
+ // so just bail out- nothing left to discriminate
400
+ if (resolution.length === this.branches.length)
401
+ return null;
402
+ if (this.ordered) {
403
+ // ensure the original order of the pruned branches is preserved
404
+ resolution.sort((l, r) => l.originalIndex - r.originalIndex);
405
+ }
406
+ const branches = resolution.map(entry => entry.branch);
407
+ const caseNode = branches.length === 1 ?
408
+ branches[0]
409
+ : this.$.node("union", this.ordered ? { branches, ordered: true } : branches);
410
+ Object.assign(this.referencesById, caseNode.referencesById);
411
+ cases[k] = caseNode;
412
+ }
413
+ if (ctx.defaultEntries.length) {
414
+ // we don't have to worry about order here as it is always preserved
415
+ // within defaultEntries
416
+ const branches = ctx.defaultEntries.map(entry => entry.branch);
417
+ cases.default = this.$.node("union", this.ordered ? { branches, ordered: true } : branches, {
418
+ prereduced: true
419
+ });
420
+ Object.assign(this.referencesById, cases.default.referencesById);
421
+ }
422
+ return Object.assign(ctx.location, {
423
+ cases
424
+ });
425
+ }
426
+ }
427
+ const createCaseResolutionContext = (viableCandidates, node) => {
428
+ const ordered = viableCandidates.sort((l, r) => l.path.length === r.path.length ?
429
+ Object.keys(r.cases).length - Object.keys(l.cases).length
430
+ // prefer shorter paths first
431
+ : l.path.length - r.path.length);
432
+ const best = ordered[0];
433
+ const location = {
434
+ kind: best.kind,
435
+ path: best.path,
436
+ optionallyChainedPropString: optionallyChainPropString(best.path)
437
+ };
438
+ const defaultEntries = node.branches.map((branch, originalIndex) => ({
439
+ originalIndex,
440
+ branch
441
+ }));
442
+ return {
443
+ best,
444
+ location,
445
+ defaultEntries,
446
+ node
447
+ };
448
+ };
449
+ const resolveCase = (ctx, key) => {
450
+ const caseCtx = ctx.best.cases[key];
451
+ const discriminantNode = discriminantCaseToNode(caseCtx.condition, ctx.location.path, ctx.node.$);
452
+ let resolvedEntries = [];
453
+ const nextDefaults = [];
454
+ for (let i = 0; i < ctx.defaultEntries.length; i++) {
455
+ const entry = ctx.defaultEntries[i];
456
+ if (caseCtx.branchIndices.includes(entry.originalIndex)) {
457
+ const pruned = pruneDiscriminant(ctx.node.branches[entry.originalIndex], ctx.location);
458
+ if (pruned === null) {
459
+ // if any branch of the union has no constraints (i.e. is
460
+ // unknown), the others won't affect the resolution type, but could still
461
+ // remove additional cases from defaultEntries
462
+ resolvedEntries = null;
463
+ }
464
+ else {
465
+ resolvedEntries?.push({
466
+ originalIndex: entry.originalIndex,
467
+ branch: pruned
468
+ });
469
+ }
470
+ }
471
+ else if (
472
+ // we shouldn't need a special case for alias to avoid the below
473
+ // once alias resolution issues are improved:
474
+ // https://github.com/arktypeio/arktype/issues/1026
475
+ entry.branch.hasKind("alias") &&
476
+ discriminantNode.hasKind("domain") &&
477
+ discriminantNode.domain === "object")
478
+ resolvedEntries?.push(entry);
479
+ else {
480
+ if (entry.branch.rawIn.overlaps(discriminantNode)) {
481
+ // include cases where an object not including the
482
+ // discriminant path might have that value present as an undeclared key
483
+ const overlapping = pruneDiscriminant(entry.branch, ctx.location);
484
+ resolvedEntries?.push({
485
+ originalIndex: entry.originalIndex,
486
+ branch: overlapping
487
+ });
488
+ }
489
+ nextDefaults.push(entry);
490
+ }
491
+ }
492
+ ctx.defaultEntries = nextDefaults;
493
+ return resolvedEntries;
494
+ };
495
+ const viableOrderedCandidates = (candidates, originalBranches) => {
496
+ const viableCandidates = candidates.filter(candidate => {
497
+ const caseGroups = Object.values(candidate.cases).map(caseCtx => caseCtx.branchIndices);
498
+ // compare each group against all subsequent groups.
499
+ for (let i = 0; i < caseGroups.length - 1; i++) {
500
+ const currentGroup = caseGroups[i];
501
+ for (let j = i + 1; j < caseGroups.length; j++) {
502
+ const nextGroup = caseGroups[j];
503
+ // for each group pair, check for branches whose order was reversed
504
+ for (const currentIndex of currentGroup) {
505
+ for (const nextIndex of nextGroup) {
506
+ if (currentIndex > nextIndex) {
507
+ if (originalBranches[currentIndex].overlaps(originalBranches[nextIndex])) {
508
+ // if the order was not preserved and the branches overlap,
509
+ // this is not a viable discriminant as it cannot guarantee the same behavior
510
+ return false;
511
+ }
512
+ }
513
+ }
514
+ }
515
+ }
516
+ }
517
+ // branch groups preserved order for non-disjoint pairs and is viable
518
+ return true;
519
+ });
520
+ return viableCandidates;
521
+ };
522
+ const discriminantCaseToNode = (caseDiscriminant, path, $) => {
523
+ let node = caseDiscriminant === "undefined" ? $.node("unit", { unit: undefined })
524
+ : caseDiscriminant === "null" ? $.node("unit", { unit: null })
525
+ : caseDiscriminant === "boolean" ? $.units([true, false])
526
+ : caseDiscriminant;
527
+ for (let i = path.length - 1; i >= 0; i--) {
528
+ const key = path[i];
529
+ node = $.node("intersection", typeof key === "number" ?
530
+ {
531
+ proto: "Array",
532
+ // create unknown for preceding elements (could be optimized with safe imports)
533
+ sequence: [...range(key).map(_ => ({})), node]
534
+ }
535
+ : {
536
+ domain: "object",
537
+ required: [{ key, value: node }]
538
+ });
539
+ }
540
+ return node;
541
+ };
542
+ const optionallyChainPropString = (path) => path.reduce((acc, k) => acc + compileLiteralPropAccess(k, true), "data");
543
+ const serializedTypeOfDescriptions = registeredReference(jsTypeOfDescriptions);
544
+ const serializedPrintable = registeredReference(printable);
545
+ export const Union = {
546
+ implementation,
547
+ Node: UnionNode
548
+ };
549
+ const discriminantToJson = (discriminant) => ({
550
+ kind: discriminant.kind,
551
+ path: discriminant.path.map(k => typeof k === "string" ? k : compileSerializedValue(k)),
552
+ cases: flatMorph(discriminant.cases, (k, node) => [
553
+ k,
554
+ node === true ? node
555
+ : node.hasKind("union") && node.discriminantJson ? node.discriminantJson
556
+ : node.json
557
+ ])
558
+ });
559
+ const describeExpressionOptions = {
560
+ delimiter: " | ",
561
+ finalDelimiter: " | "
562
+ };
563
+ const expressBranches = (expressions) => describeBranches(expressions, describeExpressionOptions);
564
+ export const describeBranches = (descriptions, opts) => {
565
+ const delimiter = opts?.delimiter ?? ", ";
566
+ const finalDelimiter = opts?.finalDelimiter ?? " or ";
567
+ if (descriptions.length === 0)
568
+ return "never";
569
+ if (descriptions.length === 1)
570
+ return descriptions[0];
571
+ if ((descriptions.length === 2 &&
572
+ descriptions[0] === "false" &&
573
+ descriptions[1] === "true") ||
574
+ (descriptions[0] === "true" && descriptions[1] === "false"))
575
+ return "boolean";
576
+ // keep track of seen descriptions to avoid duplication
577
+ const seen = {};
578
+ const unique = descriptions.filter(s => (seen[s] ? false : (seen[s] = true)));
579
+ const last = unique.pop();
580
+ return `${unique.join(delimiter)}${unique.length ? finalDelimiter : ""}${last}`;
581
+ };
582
+ export const intersectBranches = (l, r, ctx) => {
583
+ // If the corresponding r branch is identified as a subtype of an l branch, the
584
+ // value at rIndex is set to null so we can avoid including previous/future
585
+ // intersections in the reduced result.
586
+ const batchesByR = r.map(() => []);
587
+ for (let lIndex = 0; lIndex < l.length; lIndex++) {
588
+ let candidatesByR = {};
589
+ for (let rIndex = 0; rIndex < r.length; rIndex++) {
590
+ if (batchesByR[rIndex] === null) {
591
+ // rBranch is a subtype of an lBranch and
592
+ // will not yield any distinct intersection
593
+ continue;
594
+ }
595
+ if (l[lIndex].equals(r[rIndex])) {
596
+ // Combination of subtype and supertype cases
597
+ batchesByR[rIndex] = null;
598
+ candidatesByR = {};
599
+ break;
600
+ }
601
+ const branchIntersection = intersectOrPipeNodes(l[lIndex], r[rIndex], ctx);
602
+ if (branchIntersection instanceof Disjoint) {
603
+ // Doesn't tell us anything useful about their relationships
604
+ // with other branches
605
+ continue;
606
+ }
607
+ if (branchIntersection.equals(l[lIndex])) {
608
+ // If the current l branch is a subtype of r, intersections
609
+ // with previous and remaining branches of r won't lead to
610
+ // distinct intersections.
611
+ batchesByR[rIndex].push(l[lIndex]);
612
+ candidatesByR = {};
613
+ break;
614
+ }
615
+ if (branchIntersection.equals(r[rIndex])) {
616
+ // If the current r branch is a subtype of l, set its batch to
617
+ // null, removing any previous intersections and preventing any
618
+ // of its remaining intersections from being computed.
619
+ batchesByR[rIndex] = null;
620
+ }
621
+ else {
622
+ // If neither l nor r is a subtype of the other, add their
623
+ // intersection as a candidate (could still be removed if it is
624
+ // determined l or r is a subtype of a remaining branch).
625
+ candidatesByR[rIndex] = branchIntersection;
626
+ }
627
+ }
628
+ for (const rIndex in candidatesByR) {
629
+ // batchesByR at rIndex should never be null if it is in candidatesByR
630
+ batchesByR[rIndex][lIndex] = candidatesByR[rIndex];
631
+ }
632
+ }
633
+ // Compile the reduced intersection result, including:
634
+ // 1. Remaining candidates resulting from distinct intersections or strict subtypes of r
635
+ // 2. Original r branches corresponding to indices with a null batch (subtypes of l)
636
+ const resultBranches = batchesByR.flatMap(
637
+ // ensure unions returned from branchable intersections like sequence are flattened
638
+ (batch, i) => batch?.flatMap(branch => branch.branches) ?? r[i]);
639
+ return resultBranches.length === 0 ?
640
+ Disjoint.init("union", l, r)
641
+ : resultBranches;
642
+ };
643
+ export const reduceBranches = ({ branches, ordered }) => {
644
+ if (branches.length < 2)
645
+ return branches;
646
+ const uniquenessByIndex = branches.map(() => true);
647
+ for (let i = 0; i < branches.length; i++) {
648
+ for (let j = i + 1; j < branches.length && uniquenessByIndex[i] && uniquenessByIndex[j]; j++) {
649
+ if (branches[i].equals(branches[j])) {
650
+ // if the two branches are equal, only "j" is marked as
651
+ // redundant so at least one copy could still be included in
652
+ // the final set of branches.
653
+ uniquenessByIndex[j] = false;
654
+ continue;
655
+ }
656
+ const intersection = intersectNodesRoot(branches[i].rawIn, branches[j].rawIn, branches[0].$);
657
+ if (intersection instanceof Disjoint)
658
+ continue;
659
+ if (!ordered)
660
+ assertDeterminateOverlap(branches[i], branches[j]);
661
+ if (intersection.equals(branches[i].rawIn)) {
662
+ // preserve ordered branches that are a subtype of a subsequent branch
663
+ uniquenessByIndex[i] = !!ordered;
664
+ }
665
+ else if (intersection.equals(branches[j].rawIn))
666
+ uniquenessByIndex[j] = false;
667
+ }
668
+ }
669
+ return branches.filter((_, i) => uniquenessByIndex[i]);
670
+ };
671
+ const assertDeterminateOverlap = (l, r) => {
672
+ if (!l.includesTransform && !r.includesTransform)
673
+ return;
674
+ if (!arrayEquals(l.shallowMorphs, r.shallowMorphs)) {
675
+ throwParseError(writeIndiscriminableMorphMessage(l.expression, r.expression));
676
+ }
677
+ if (!arrayEquals(l.flatMorphs, r.flatMorphs, {
678
+ isEqual: (l, r) => l.propString === r.propString &&
679
+ (l.node.hasKind("morph") && r.node.hasKind("morph") ?
680
+ l.node.hasEqualMorphs(r.node)
681
+ : l.node.hasKind("intersection") && r.node.hasKind("intersection") ?
682
+ l.node.structure?.structuralMorphRef ===
683
+ r.node.structure?.structuralMorphRef
684
+ : false)
685
+ })) {
686
+ throwParseError(writeIndiscriminableMorphMessage(l.expression, r.expression));
687
+ }
688
+ };
689
+ export const pruneDiscriminant = (discriminantBranch, discriminantCtx) => discriminantBranch.transform((nodeKind, inner) => {
690
+ if (nodeKind === "domain" || nodeKind === "unit")
691
+ return null;
692
+ return inner;
693
+ }, {
694
+ shouldTransform: (node, ctx) => {
695
+ // safe to cast here as index nodes are never discriminants
696
+ const propString = optionallyChainPropString(ctx.path);
697
+ if (!discriminantCtx.optionallyChainedPropString.startsWith(propString))
698
+ return false;
699
+ if (node.hasKind("domain") && node.domain === "object")
700
+ // if we've already checked a path at least as long as the current one,
701
+ // we don't need to revalidate that we're in an object
702
+ return true;
703
+ if ((node.hasKind("domain") || discriminantCtx.kind === "unit") &&
704
+ propString === discriminantCtx.optionallyChainedPropString)
705
+ // if the discriminant has already checked the domain at the current path
706
+ // (or a unit literal, implying a domain), we don't need to recheck it
707
+ return true;
708
+ // we don't need to recurse into index nodes as they will never
709
+ // have a required path therefore can't be used to discriminate
710
+ return node.children.length !== 0 && node.kind !== "index";
711
+ }
712
+ });
713
+ export const writeIndiscriminableMorphMessage = (lDescription, rDescription) => `An unordered union of a type including a morph and a type with overlapping input is indeterminate:
714
+ Left: ${lDescription}
715
+ Right: ${rDescription}`;
716
+ export const writeOrderedIntersectionMessage = (lDescription, rDescription) => `The intersection of two ordered unions is indeterminate:
717
+ Left: ${lDescription}
718
+ Right: ${rDescription}`;