@elaraai/east 1.0.84 → 1.0.85

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 (239) hide show
  1. package/dist/src/analyze.d.ts.map +1 -1
  2. package/dist/src/analyze.js +48 -0
  3. package/dist/src/analyze.js.map +1 -1
  4. package/dist/src/ast_to_ir.coerce_to.spec.js +4 -4
  5. package/dist/src/ast_to_ir.coerce_to.spec.js.map +1 -1
  6. package/dist/src/ast_to_ir.d.ts +6 -1
  7. package/dist/src/ast_to_ir.d.ts.map +1 -1
  8. package/dist/src/ast_to_ir.js +20 -7
  9. package/dist/src/ast_to_ir.js.map +1 -1
  10. package/dist/src/builtins.d.ts +1 -1
  11. package/dist/src/builtins.d.ts.map +1 -1
  12. package/dist/src/builtins.js +52 -0
  13. package/dist/src/builtins.js.map +1 -1
  14. package/dist/src/codegen/canonical.d.ts +37 -0
  15. package/dist/src/codegen/canonical.d.ts.map +1 -0
  16. package/dist/src/codegen/canonical.js +208 -0
  17. package/dist/src/codegen/canonical.js.map +1 -0
  18. package/dist/src/codegen/codegen.spec.js +132 -201
  19. package/dist/src/codegen/codegen.spec.js.map +1 -1
  20. package/dist/src/codegen/printer.d.ts.map +1 -1
  21. package/dist/src/codegen/printer.js +142 -24
  22. package/dist/src/codegen/printer.js.map +1 -1
  23. package/dist/src/codegen/spellings.d.ts +4 -1
  24. package/dist/src/codegen/spellings.d.ts.map +1 -1
  25. package/dist/src/codegen/spellings.js +5 -1
  26. package/dist/src/codegen/spellings.js.map +1 -1
  27. package/dist/src/compile/builtins/index.d.ts.map +1 -1
  28. package/dist/src/compile/builtins/index.js +2 -0
  29. package/dist/src/compile/builtins/index.js.map +1 -1
  30. package/dist/src/compile/builtins/primitives.d.ts.map +1 -1
  31. package/dist/src/compile/builtins/primitives.js +2 -1
  32. package/dist/src/compile/builtins/primitives.js.map +1 -1
  33. package/dist/src/compile/builtins/query.d.ts +10 -0
  34. package/dist/src/compile/builtins/query.d.ts.map +1 -0
  35. package/dist/src/compile/builtins/query.js +5 -0
  36. package/dist/src/compile/builtins/query.js.map +1 -0
  37. package/dist/src/expr/block.d.ts.map +1 -1
  38. package/dist/src/expr/block.js +2 -1
  39. package/dist/src/expr/block.js.map +1 -1
  40. package/dist/src/expr/index.d.ts +75 -47
  41. package/dist/src/expr/index.d.ts.map +1 -1
  42. package/dist/src/expr/index.js +31 -0
  43. package/dist/src/expr/index.js.map +1 -1
  44. package/dist/src/expr/libs/datetime.d.ts +20 -20
  45. package/dist/src/expr/libs/datetime.d.ts.map +1 -1
  46. package/dist/src/expr/libs/datetime.js +208 -167
  47. package/dist/src/expr/libs/datetime.js.map +1 -1
  48. package/dist/src/expr/libs/float.d.ts +15 -15
  49. package/dist/src/expr/libs/float.d.ts.map +1 -1
  50. package/dist/src/expr/libs/float.js +298 -267
  51. package/dist/src/expr/libs/float.js.map +1 -1
  52. package/dist/src/expr/libs/integer.d.ts +12 -12
  53. package/dist/src/expr/libs/integer.d.ts.map +1 -1
  54. package/dist/src/expr/libs/integer.js +219 -194
  55. package/dist/src/expr/libs/integer.js.map +1 -1
  56. package/dist/src/expr/libs/lazy.d.ts +28 -0
  57. package/dist/src/expr/libs/lazy.d.ts.map +1 -0
  58. package/dist/src/expr/libs/lazy.js +55 -0
  59. package/dist/src/expr/libs/lazy.js.map +1 -0
  60. package/dist/src/expr/libs/lazy.spec.d.ts +6 -0
  61. package/dist/src/expr/libs/lazy.spec.d.ts.map +1 -0
  62. package/dist/src/expr/libs/lazy.spec.js +102 -0
  63. package/dist/src/expr/libs/lazy.spec.js.map +1 -0
  64. package/dist/src/expr/query.d.ts +60 -0
  65. package/dist/src/expr/query.d.ts.map +1 -0
  66. package/dist/src/expr/query.js +84 -0
  67. package/dist/src/expr/query.js.map +1 -0
  68. package/dist/src/index.d.ts +3 -0
  69. package/dist/src/index.d.ts.map +1 -1
  70. package/dist/src/index.js +3 -0
  71. package/dist/src/index.js.map +1 -1
  72. package/dist/src/internal.d.ts +4 -0
  73. package/dist/src/internal.d.ts.map +1 -1
  74. package/dist/src/internal.js +9 -0
  75. package/dist/src/internal.js.map +1 -1
  76. package/dist/src/location.d.ts +22 -0
  77. package/dist/src/location.d.ts.map +1 -1
  78. package/dist/src/location.js +31 -0
  79. package/dist/src/location.js.map +1 -1
  80. package/dist/src/naming.d.ts +5 -3
  81. package/dist/src/naming.d.ts.map +1 -1
  82. package/dist/src/naming.js.map +1 -1
  83. package/dist/src/portable.spec.d.ts +6 -0
  84. package/dist/src/portable.spec.d.ts.map +1 -0
  85. package/dist/src/portable.spec.js +181 -0
  86. package/dist/src/portable.spec.js.map +1 -0
  87. package/dist/src/query/evaluate.d.ts +98 -0
  88. package/dist/src/query/evaluate.d.ts.map +1 -0
  89. package/dist/src/query/evaluate.js +193 -0
  90. package/dist/src/query/evaluate.js.map +1 -0
  91. package/dist/src/query/index.d.ts +17 -0
  92. package/dist/src/query/index.d.ts.map +1 -0
  93. package/dist/src/query/index.js +17 -0
  94. package/dist/src/query/index.js.map +1 -0
  95. package/dist/src/query/jq/catalog.d.ts +174 -0
  96. package/dist/src/query/jq/catalog.d.ts.map +1 -0
  97. package/dist/src/query/jq/catalog.js +1740 -0
  98. package/dist/src/query/jq/catalog.js.map +1 -0
  99. package/dist/src/query/jq/check.d.ts +210 -0
  100. package/dist/src/query/jq/check.d.ts.map +1 -0
  101. package/dist/src/query/jq/check.js +2261 -0
  102. package/dist/src/query/jq/check.js.map +1 -0
  103. package/dist/src/query/jq/complete.d.ts +89 -0
  104. package/dist/src/query/jq/complete.d.ts.map +1 -0
  105. package/dist/src/query/jq/complete.js +320 -0
  106. package/dist/src/query/jq/complete.js.map +1 -0
  107. package/dist/src/query/jq/describe.d.ts +53 -0
  108. package/dist/src/query/jq/describe.d.ts.map +1 -0
  109. package/dist/src/query/jq/describe.js +149 -0
  110. package/dist/src/query/jq/describe.js.map +1 -0
  111. package/dist/src/query/jq/lex.d.ts +118 -0
  112. package/dist/src/query/jq/lex.d.ts.map +1 -0
  113. package/dist/src/query/jq/lex.js +371 -0
  114. package/dist/src/query/jq/lex.js.map +1 -0
  115. package/dist/src/query/jq/literals.d.ts +49 -0
  116. package/dist/src/query/jq/literals.d.ts.map +1 -0
  117. package/dist/src/query/jq/literals.js +78 -0
  118. package/dist/src/query/jq/literals.js.map +1 -0
  119. package/dist/src/query/jq/messages.d.ts +126 -0
  120. package/dist/src/query/jq/messages.d.ts.map +1 -0
  121. package/dist/src/query/jq/messages.js +172 -0
  122. package/dist/src/query/jq/messages.js.map +1 -0
  123. package/dist/src/query/jq/parse.d.ts +70 -0
  124. package/dist/src/query/jq/parse.d.ts.map +1 -0
  125. package/dist/src/query/jq/parse.js +1013 -0
  126. package/dist/src/query/jq/parse.js.map +1 -0
  127. package/dist/src/query/jq/print.d.ts +59 -0
  128. package/dist/src/query/jq/print.d.ts.map +1 -0
  129. package/dist/src/query/jq/print.js +587 -0
  130. package/dist/src/query/jq/print.js.map +1 -0
  131. package/dist/src/query/jq/shapes.d.ts +345 -0
  132. package/dist/src/query/jq/shapes.d.ts.map +1 -0
  133. package/dist/src/query/jq/shapes.js +584 -0
  134. package/dist/src/query/jq/shapes.js.map +1 -0
  135. package/dist/src/query/jq/spans.d.ts +133 -0
  136. package/dist/src/query/jq/spans.d.ts.map +1 -0
  137. package/dist/src/query/jq/spans.js +195 -0
  138. package/dist/src/query/jq/spans.js.map +1 -0
  139. package/dist/src/query/jq/split.d.ts +334 -0
  140. package/dist/src/query/jq/split.d.ts.map +1 -0
  141. package/dist/src/query/jq/split.js +2108 -0
  142. package/dist/src/query/jq/split.js.map +1 -0
  143. package/dist/src/query/jq/strftime.d.ts +20 -0
  144. package/dist/src/query/jq/strftime.d.ts.map +1 -0
  145. package/dist/src/query/jq/strftime.js +65 -0
  146. package/dist/src/query/jq/strftime.js.map +1 -0
  147. package/dist/src/query/jq/summary.d.ts +139 -0
  148. package/dist/src/query/jq/summary.d.ts.map +1 -0
  149. package/dist/src/query/jq/summary.js +222 -0
  150. package/dist/src/query/jq/summary.js.map +1 -0
  151. package/dist/src/query/jq/translate-builtins.d.ts +21 -0
  152. package/dist/src/query/jq/translate-builtins.d.ts.map +1 -0
  153. package/dist/src/query/jq/translate-builtins.js +1873 -0
  154. package/dist/src/query/jq/translate-builtins.js.map +1 -0
  155. package/dist/src/query/jq/translate.d.ts +627 -0
  156. package/dist/src/query/jq/translate.d.ts.map +1 -0
  157. package/dist/src/query/jq/translate.js +3364 -0
  158. package/dist/src/query/jq/translate.js.map +1 -0
  159. package/dist/src/query/types.d.ts +505 -0
  160. package/dist/src/query/types.d.ts.map +1 -0
  161. package/dist/src/query/types.js +231 -0
  162. package/dist/src/query/types.js.map +1 -0
  163. package/dist/src/runner_exec.d.ts +134 -0
  164. package/dist/src/runner_exec.d.ts.map +1 -0
  165. package/dist/src/runner_exec.js +371 -0
  166. package/dist/src/runner_exec.js.map +1 -0
  167. package/dist/src/runner_exec.spec.d.ts +6 -0
  168. package/dist/src/runner_exec.spec.d.ts.map +1 -0
  169. package/dist/src/runner_exec.spec.js +198 -0
  170. package/dist/src/runner_exec.spec.js.map +1 -0
  171. package/dist/src/runner_io.d.ts +370 -0
  172. package/dist/src/runner_io.d.ts.map +1 -0
  173. package/dist/src/runner_io.js +563 -0
  174. package/dist/src/runner_io.js.map +1 -0
  175. package/dist/src/runner_io.spec.d.ts +6 -0
  176. package/dist/src/runner_io.spec.d.ts.map +1 -0
  177. package/dist/src/runner_io.spec.js +224 -0
  178. package/dist/src/runner_io.spec.js.map +1 -0
  179. package/dist/src/runner_merge.d.ts +95 -0
  180. package/dist/src/runner_merge.d.ts.map +1 -0
  181. package/dist/src/runner_merge.js +238 -0
  182. package/dist/src/runner_merge.js.map +1 -0
  183. package/dist/src/runner_protocol.d.ts +11 -4
  184. package/dist/src/runner_protocol.d.ts.map +1 -1
  185. package/dist/src/runner_protocol.js +11 -4
  186. package/dist/src/runner_protocol.js.map +1 -1
  187. package/dist/src/serialization/beast2/index.d.ts +1 -1
  188. package/dist/src/serialization/beast2/index.d.ts.map +1 -1
  189. package/dist/src/serialization/beast2/index.js.map +1 -1
  190. package/dist/src/serialization/beast2/v5/frames.d.ts +10 -6
  191. package/dist/src/serialization/beast2/v5/frames.d.ts.map +1 -1
  192. package/dist/src/serialization/beast2/v5/frames.js +10 -6
  193. package/dist/src/serialization/beast2/v5/frames.js.map +1 -1
  194. package/dist/src/serialization/beast2/v5/frames.spec.d.ts +6 -0
  195. package/dist/src/serialization/beast2/v5/frames.spec.d.ts.map +1 -0
  196. package/dist/src/serialization/beast2/v5/frames.spec.js +42 -0
  197. package/dist/src/serialization/beast2/v5/frames.spec.js.map +1 -0
  198. package/dist/src/serialization/beast2/v5/index.spec.js +108 -0
  199. package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
  200. package/dist/src/serialization/beast2/v5/lazy.d.ts +12 -7
  201. package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
  202. package/dist/src/serialization/beast2/v5/lazy.js +16 -6
  203. package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
  204. package/dist/src/serialization/beast2/v5/lazy.spec.js +159 -18
  205. package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
  206. package/dist/src/serialization/beast2/v5/stream.d.ts +110 -21
  207. package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
  208. package/dist/src/serialization/beast2/v5/stream.js +153 -42
  209. package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
  210. package/dist/src/serialization/beast2/v5/weight.d.ts +36 -0
  211. package/dist/src/serialization/beast2/v5/weight.d.ts.map +1 -0
  212. package/dist/src/serialization/beast2/v5/weight.js +238 -0
  213. package/dist/src/serialization/beast2/v5/weight.js.map +1 -0
  214. package/dist/src/serialization/crc32.d.ts +38 -0
  215. package/dist/src/serialization/crc32.d.ts.map +1 -0
  216. package/dist/src/serialization/crc32.js +70 -0
  217. package/dist/src/serialization/crc32.js.map +1 -0
  218. package/dist/src/serialization/crc32.spec.d.ts +6 -0
  219. package/dist/src/serialization/crc32.spec.d.ts.map +1 -0
  220. package/dist/src/serialization/crc32.spec.js +92 -0
  221. package/dist/src/serialization/crc32.spec.js.map +1 -0
  222. package/dist/src/serialization/east-inferred.spec.js +4 -0
  223. package/dist/src/serialization/east-inferred.spec.js.map +1 -1
  224. package/dist/src/serialization/east.d.ts.map +1 -1
  225. package/dist/src/serialization/east.js +134 -110
  226. package/dist/src/serialization/east.js.map +1 -1
  227. package/dist/src/serialization/east.spec.js +185 -4
  228. package/dist/src/serialization/east.spec.js.map +1 -1
  229. package/dist/src/serialization/east_text.d.ts +25 -0
  230. package/dist/src/serialization/east_text.d.ts.map +1 -0
  231. package/dist/src/serialization/east_text.js +29 -0
  232. package/dist/src/serialization/east_text.js.map +1 -0
  233. package/dist/src/serialization/index.d.ts +1 -1
  234. package/dist/src/serialization/index.d.ts.map +1 -1
  235. package/dist/src/types.d.ts +1 -1
  236. package/dist/src/types.d.ts.map +1 -1
  237. package/dist/src/types.js +7 -6
  238. package/dist/src/types.js.map +1 -1
  239. package/package.json +6 -3
@@ -0,0 +1,584 @@
1
+ /**
2
+ * Copyright (c) 2025 Elara AI Pty Ltd
3
+ * Dual-licensed under AGPL-3.0 and commercial license. See LICENSE for details.
4
+ */
5
+ /**
6
+ * The checker's view of a stream: how many outputs a filter gives, and the
7
+ * type each output has, with what narrowing has proved about it.
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import { jsonFlatOptionPayload } from "../../serialization/json.js";
12
+ import { toEastTypeValue } from "../../type_of_type.js";
13
+ import { ArrayType, DictType, FloatType, NeverType, NullType, OptionType, StringType, StructType, VariantType, isTypeEqual, } from "../../types.js";
14
+ /** Exactly one output. @internal */
15
+ export const ONE = { lo: 1, hi: 1 };
16
+ /** None or one output. @internal */
17
+ export const MAYBE = { lo: 0, hi: 1 };
18
+ /** No output: `empty`, `error`, `break`. @internal */
19
+ export const ZERO = { lo: 0, hi: 0 };
20
+ /** Any number of outputs. @internal */
21
+ export const MANY = { lo: 0, hi: 2 };
22
+ /** At least one output, possibly more. @internal */
23
+ export const SOME = { lo: 1, hi: 2 };
24
+ /**
25
+ * The multiplicity of `a | b`: each output of `a` feeds `b`.
26
+ *
27
+ * @remarks
28
+ * Not `then`: a module that exports a `then` is a thenable, and a promise
29
+ * resolved with its namespace calls that `then` and waits on it forever — as
30
+ * vitest's module runner resolves every module it loads.
31
+ *
32
+ * @internal
33
+ */
34
+ export function piped(a, b) {
35
+ const lo = a.lo === 1 && b.lo === 1 ? 1 : 0;
36
+ const hi = a.hi === 0 || b.hi === 0 ? 0 : (a.hi === 2 || b.hi === 2 ? 2 : 1);
37
+ return { lo, hi };
38
+ }
39
+ /**
40
+ * The multiplicity of `a, b`: the outputs of `a`, then those of `b`.
41
+ *
42
+ * @internal
43
+ */
44
+ export function also(a, b) {
45
+ return { lo: a.lo === 1 || b.lo === 1 ? 1 : 0, hi: Math.min(2, a.hi + b.hi) };
46
+ }
47
+ /**
48
+ * The multiplicity of a choice between two filters: `if`, `//`, `try`.
49
+ *
50
+ * @internal
51
+ */
52
+ export function either(a, b) {
53
+ return { lo: a.lo === 1 && b.lo === 1 ? 1 : 0, hi: Math.max(a.hi, b.hi) };
54
+ }
55
+ /**
56
+ * The multiplicity a checked query records.
57
+ *
58
+ * @internal
59
+ */
60
+ export function wireMultiplicity(m) {
61
+ if (m.hi === 2)
62
+ return "many";
63
+ return m.hi === 1 && m.lo === 1 ? "one" : "maybe";
64
+ }
65
+ /** The shape after a reported problem. @internal */
66
+ export const ERROR = { kind: "error" };
67
+ /**
68
+ * The shape of outputs of one type.
69
+ *
70
+ * @internal
71
+ */
72
+ export function typed(type, facts) {
73
+ return { kind: "type", type, facts };
74
+ }
75
+ /**
76
+ * A union of members, flattened, with members of the same type and case
77
+ * merged; a single member is its own shape.
78
+ *
79
+ * @internal
80
+ */
81
+ export function union(members) {
82
+ const merged = [];
83
+ for (const member of members) {
84
+ if (member.shape.type.type === "Never")
85
+ continue;
86
+ if (!merged.some(m => m.case === member.case && isTypeEqual(m.shape.type, member.shape.type)))
87
+ merged.push(member);
88
+ }
89
+ if (merged.length === 0)
90
+ return typed(NeverType);
91
+ if (merged.length === 1)
92
+ return merged[0].shape;
93
+ return { kind: "union", members: merged };
94
+ }
95
+ /**
96
+ * The members of a shape: one for a `type` shape.
97
+ *
98
+ * @internal
99
+ */
100
+ export function membersOf(shape) {
101
+ if (shape.kind === "type")
102
+ return [{ shape, case: undefined }];
103
+ if (shape.kind === "union")
104
+ return shape.members;
105
+ return [];
106
+ }
107
+ /**
108
+ * A type with its recursive wrapper and references read through: what a
109
+ * value of it is made of.
110
+ *
111
+ * @internal
112
+ */
113
+ export function unwrap(type) {
114
+ let t = type;
115
+ for (;;) {
116
+ if (t.type === "Recursive")
117
+ t = t.node;
118
+ else if (t.type === "Ref")
119
+ t = t.value;
120
+ else
121
+ return t;
122
+ }
123
+ }
124
+ /**
125
+ * The payload of an option that jq sees as `null` or the value: East JSON's
126
+ * flat options (`jsonFlatOptionPayload`).
127
+ *
128
+ * @param type - a type
129
+ * @returns the `some` payload's type, or `undefined` when the type is not a
130
+ * flat option (jq then sees it as `{type, value}`)
131
+ *
132
+ * @internal
133
+ */
134
+ export function nullablePayload(type) {
135
+ if (type.type !== "Variant")
136
+ return undefined;
137
+ if (jsonFlatOptionPayload(toEastTypeValue(type)) === null)
138
+ return undefined;
139
+ return type.cases["some"];
140
+ }
141
+ /**
142
+ * Whether jq sees values of a type as `null`: Null, or a flat option.
143
+ *
144
+ * @internal
145
+ */
146
+ export function canBeNull(type) {
147
+ return type.type === "Null" || nullablePayload(type) !== undefined;
148
+ }
149
+ /**
150
+ * The type jq's `T` or `null` becomes: `Option<T>`, or `T` itself when it can
151
+ * already be `null`.
152
+ *
153
+ * @returns the type, or `undefined` when no type holds both: `T` is an option
154
+ * jq sees as `{type, value}`, and wrapping it again would too
155
+ *
156
+ * @internal
157
+ */
158
+ export function orNull(type) {
159
+ if (type.type === "Never")
160
+ return NullType;
161
+ if (canBeNull(type))
162
+ return type;
163
+ const option = OptionType(type);
164
+ return nullablePayload(option) === undefined ? undefined : option;
165
+ }
166
+ /**
167
+ * The one type two outputs can share, as jq's typed outputs unify.
168
+ *
169
+ * @param a - one output's type
170
+ * @param b - another's
171
+ * @returns their common type, or `undefined` when they have none
172
+ *
173
+ * @remarks
174
+ * - Equal types unify to themselves, and `Never` (no value) to the other.
175
+ * - A reference is read through, as jq sees its value: `Ref<T>` and `U`
176
+ * unify as `T` and `U` do.
177
+ * - A recursive type and its node unify to the recursive type; another
178
+ * recursive type only with `null`, or an option of it.
179
+ * - Integer and Float unify to Float.
180
+ * - `null` and `T` unify to `Option<T>`; `Option<T>` and `U` to
181
+ * `Option<T ⊔ U>`.
182
+ * - Arrays, sets, dicts and vectors unify element-wise; `Array<Never>` (an
183
+ * empty `[]`) takes the other's element type.
184
+ * - Structs with the same field names unify field by field, in the first's
185
+ * field order; `Struct{}` (an empty `{}`) unifies with any dict.
186
+ * - Variants unify case by case, taking every case of both.
187
+ *
188
+ * @internal
189
+ */
190
+ export function unify(a, b) {
191
+ if (isTypeEqual(a, b))
192
+ return a;
193
+ if (a.type === "Never")
194
+ return b;
195
+ if (b.type === "Never")
196
+ return a;
197
+ if (a.type === "Ref")
198
+ return unify(a.value, b);
199
+ if (b.type === "Ref")
200
+ return unify(a, b.value);
201
+ if (a.type === "Recursive" && isTypeEqual(a.node, b))
202
+ return a;
203
+ if (b.type === "Recursive" && isTypeEqual(b.node, a))
204
+ return b;
205
+ if ((a.type === "Integer" && b.type === "Float") || (a.type === "Float" && b.type === "Integer"))
206
+ return FloatType;
207
+ // null and T.
208
+ if (a.type === "Null")
209
+ return orNull(b);
210
+ if (b.type === "Null")
211
+ return orNull(a);
212
+ const aPayload = nullablePayload(a);
213
+ const bPayload = nullablePayload(b);
214
+ if (aPayload !== undefined || bPayload !== undefined) {
215
+ const inner = unify(aPayload ?? a, bPayload ?? b);
216
+ return inner === undefined ? undefined : orNull(inner);
217
+ }
218
+ if (a.type === "Recursive" || b.type === "Recursive")
219
+ return undefined;
220
+ switch (a.type) {
221
+ case "Array": {
222
+ if (b.type !== "Array")
223
+ return undefined;
224
+ const element = unify(a.value, b.value);
225
+ return element === undefined ? undefined : ArrayType(element);
226
+ }
227
+ case "Set": {
228
+ if (b.type !== "Set" || !isTypeEqual(a.key, b.key))
229
+ return undefined;
230
+ return a;
231
+ }
232
+ case "Dict": {
233
+ if (b.type === "Struct" && Object.keys(b.fields).length === 0)
234
+ return a;
235
+ if (b.type !== "Dict" || !isTypeEqual(a.key, b.key))
236
+ return undefined;
237
+ const value = unify(a.value, b.value);
238
+ return value === undefined ? undefined : DictType(a.key, value);
239
+ }
240
+ case "Struct": {
241
+ if (b.type === "Dict" && Object.keys(a.fields).length === 0)
242
+ return b;
243
+ if (b.type !== "Struct")
244
+ return undefined;
245
+ const aFields = a.fields;
246
+ const bFields = b.fields;
247
+ const names = Object.keys(aFields);
248
+ if (names.length !== Object.keys(bFields).length || !names.every(name => name in bFields))
249
+ return undefined;
250
+ const fields = {};
251
+ for (const name of names) {
252
+ const field = unify(aFields[name], bFields[name]);
253
+ if (field === undefined)
254
+ return undefined;
255
+ fields[name] = field;
256
+ }
257
+ return StructType(fields);
258
+ }
259
+ case "Variant": {
260
+ if (b.type !== "Variant")
261
+ return undefined;
262
+ const aCases = a.cases;
263
+ const bCases = b.cases;
264
+ const cases = { ...aCases };
265
+ for (const [name, payload] of Object.entries(bCases)) {
266
+ if (name in cases) {
267
+ const merged = unify(cases[name], payload);
268
+ if (merged === undefined)
269
+ return undefined;
270
+ cases[name] = merged;
271
+ }
272
+ else {
273
+ cases[name] = payload;
274
+ }
275
+ }
276
+ return VariantType(cases);
277
+ }
278
+ case "Vector":
279
+ case "Matrix":
280
+ return undefined;
281
+ default:
282
+ return undefined;
283
+ }
284
+ }
285
+ /**
286
+ * The types `..` and `recurse` give on values of some types: each type, then
287
+ * the types of the values inside it, depth first, each once. Inside a value
288
+ * are an option's value, the elements of an array, set or vector, a matrix's
289
+ * rows, a dict's values, a struct's fields, and a variant's case name and
290
+ * payloads (jq's `{type, value}`).
291
+ *
292
+ * @param types - the input's types
293
+ * @returns the types, in the order the walk first meets them
294
+ *
295
+ * @internal
296
+ */
297
+ export function descendTypes(types) {
298
+ const seen = [];
299
+ const visit = (type) => {
300
+ if (seen.some(s => isTypeEqual(s, type)))
301
+ return;
302
+ seen.push(type);
303
+ const t = unwrap(type);
304
+ const payload = nullablePayload(t);
305
+ if (payload !== undefined) {
306
+ visit(payload);
307
+ return;
308
+ }
309
+ switch (t.type) {
310
+ case "Array":
311
+ visit(t.value);
312
+ break;
313
+ case "Set":
314
+ visit(t.key);
315
+ break;
316
+ case "Vector":
317
+ visit(t.element);
318
+ break;
319
+ case "Matrix":
320
+ visit(ArrayType(t.element));
321
+ break;
322
+ case "Dict":
323
+ visit(t.value);
324
+ break;
325
+ case "Struct":
326
+ for (const f of Object.values(t.fields))
327
+ visit(f);
328
+ break;
329
+ case "Variant":
330
+ visit(StringType);
331
+ for (const c of Object.values(t.cases))
332
+ visit(c);
333
+ break;
334
+ default: break;
335
+ }
336
+ };
337
+ types.forEach(visit);
338
+ return seen;
339
+ }
340
+ /**
341
+ * The one type a shape's outputs share.
342
+ *
343
+ * @param shape - a shape
344
+ * @returns the type, `Never` for no outputs, or `undefined` when the members
345
+ * have no common type (or the shape is an error)
346
+ *
347
+ * @internal
348
+ */
349
+ export function unifyShape(shape) {
350
+ if (shape.kind === "error")
351
+ return undefined;
352
+ if (shape.kind === "type")
353
+ return shape.type;
354
+ let type = NeverType;
355
+ for (const member of shape.members) {
356
+ const next = unify(type, member.shape.type);
357
+ if (next === undefined)
358
+ return undefined;
359
+ type = next;
360
+ }
361
+ return type;
362
+ }
363
+ /**
364
+ * Prints a type for a diagnostic, as jq's users read one: `Integer`,
365
+ * `Option<Float>`, `Array<String>`, `Dict<String, Float>`,
366
+ * `Struct{id: Integer, total: Float}`, `Variant{cancelled, pending, shipped}`.
367
+ *
368
+ * @param type - the type
369
+ * @param depth - how many levels of structs to spell out
370
+ * @returns its text
371
+ *
372
+ * @remarks
373
+ * A struct deeper than `depth` prints as `Struct{…}`, and one with more than
374
+ * six fields lists six and `…`. A recursive type prints its node, and a
375
+ * reference back into it as `…`.
376
+ *
377
+ * @internal
378
+ */
379
+ export function describeType(type, depth = 2) {
380
+ const seen = [];
381
+ const print = (t, level) => {
382
+ switch (t.type) {
383
+ case "Never":
384
+ case "Null":
385
+ case "Boolean":
386
+ case "Integer":
387
+ case "Float":
388
+ case "String":
389
+ case "DateTime":
390
+ case "Blob":
391
+ return t.type;
392
+ case "Array": return `Array<${print(t.value, level)}>`;
393
+ case "Set": return `Set<${print(t.key, level)}>`;
394
+ case "Ref": return `Ref<${print(t.value, level)}>`;
395
+ case "Vector": return `Vector<${print(t.element, level)}>`;
396
+ case "Matrix": return `Matrix<${print(t.element, level)}>`;
397
+ case "Dict": return `Dict<${print(t.key, level)}, ${print(t.value, level)}>`;
398
+ case "Variant": {
399
+ const payload = nullablePayload(t);
400
+ if (payload !== undefined)
401
+ return `Option<${print(payload, level)}>`;
402
+ const cases = t.cases;
403
+ if (Object.keys(cases).length === 2 && "none" in cases && "some" in cases)
404
+ return `Option<${print(cases["some"], level)}>`;
405
+ return `Variant{${Object.keys(cases).join(", ")}}`;
406
+ }
407
+ case "Struct": {
408
+ const fields = Object.entries(t.fields);
409
+ if (level >= depth)
410
+ return fields.length === 0 ? "Struct{}" : "Struct{…}";
411
+ const shown = fields.slice(0, 6).map(([name, field]) => `${name}: ${print(field, level + 1)}`);
412
+ return `Struct{${shown.join(", ")}${fields.length > 6 ? ", …" : ""}}`;
413
+ }
414
+ case "Recursive": {
415
+ if (seen.includes(t))
416
+ return "…";
417
+ seen.push(t);
418
+ const text = print(t.node, level);
419
+ seen.pop();
420
+ return text;
421
+ }
422
+ case "Function":
423
+ case "AsyncFunction":
424
+ return `${t.type}([${t.inputs.map(input => print(input, level)).join(", ")}], ${print(t.output, level)})`;
425
+ }
426
+ };
427
+ return print(type, 0);
428
+ }
429
+ /**
430
+ * The names jq's `type` gives, and East's additions for its own types.
431
+ *
432
+ * @internal
433
+ */
434
+ export const JQ_TYPE_NAMES = ["null", "boolean", "number", "string", "array", "object", "datetime", "blob", "function"];
435
+ /**
436
+ * The names `type` can give for values of a type: an option's `null` and its
437
+ * payload's.
438
+ *
439
+ * @internal
440
+ */
441
+ export function jqTypeNames(type) {
442
+ const t = unwrap(type);
443
+ const payload = nullablePayload(t);
444
+ if (payload !== undefined)
445
+ return ["null", ...jqTypeNames(payload)];
446
+ switch (t.type) {
447
+ case "Never": return [];
448
+ case "Null": return ["null"];
449
+ case "Boolean": return ["boolean"];
450
+ case "Integer":
451
+ case "Float": return ["number"];
452
+ case "String": return ["string"];
453
+ case "Array":
454
+ case "Set":
455
+ case "Vector":
456
+ case "Matrix": return ["array"];
457
+ case "Dict":
458
+ case "Struct":
459
+ case "Variant": return ["object"];
460
+ case "DateTime": return ["datetime"];
461
+ case "Blob": return ["blob"];
462
+ case "Function":
463
+ case "AsyncFunction": return ["function"];
464
+ default: return [];
465
+ }
466
+ }
467
+ /**
468
+ * Narrows a shape to the outputs whose jq type is one of some names: what
469
+ * `select(type == "object")` keeps.
470
+ *
471
+ * @internal
472
+ */
473
+ export function narrowTypes(shape, types) {
474
+ if (shape.kind === "error")
475
+ return shape;
476
+ const members = [];
477
+ for (const member of membersOf(shape)) {
478
+ const t = unwrap(member.shape.type);
479
+ const payload = nullablePayload(t);
480
+ if (payload !== undefined) {
481
+ const keepsNull = types.includes("null");
482
+ const keepsValue = jqTypeNames(payload).some(name => types.includes(name));
483
+ if (keepsNull && keepsValue)
484
+ members.push(member);
485
+ else if (keepsValue)
486
+ members.push({ shape: typed(payload), case: member.case });
487
+ else if (keepsNull)
488
+ members.push({ shape: typed(NullType), case: member.case });
489
+ continue;
490
+ }
491
+ if (jqTypeNames(t).some(name => types.includes(name)))
492
+ members.push(member);
493
+ }
494
+ return union(members);
495
+ }
496
+ /**
497
+ * Narrows a shape: the variant at `path` holds only `cases`.
498
+ *
499
+ * @param shape - the shape of `.`
500
+ * @param path - the field names from `.` to the variant
501
+ * @param cases - the cases it holds
502
+ * @returns the shape with the fact added, or the shape unchanged when the
503
+ * path does not lead to a variant
504
+ *
505
+ * @internal
506
+ */
507
+ export function refine(shape, path, cases) {
508
+ if (shape.kind === "error")
509
+ return shape;
510
+ if (shape.kind === "union") {
511
+ return union(shape.members.map(member => ({ shape: refine(member.shape, path, cases), case: member.case })));
512
+ }
513
+ const facts = refineFacts(shape.type, shape.facts, path, cases);
514
+ return facts === undefined ? shape : typed(shape.type, facts);
515
+ }
516
+ function refineFacts(type, facts, path, cases) {
517
+ const t = unwrap(type);
518
+ const payload = nullablePayload(t);
519
+ if (payload !== undefined) {
520
+ const inner = refineFacts(payload, facts?.kind === "present" ? facts.payload : undefined, path, cases);
521
+ return inner === undefined ? undefined : { kind: "present", payload: inner };
522
+ }
523
+ if (path.length === 0) {
524
+ if (t.type !== "Variant")
525
+ return undefined;
526
+ const known = facts?.kind === "cases" ? facts.cases : undefined;
527
+ const kept = cases.filter(c => c in t.cases && (known === undefined || known.has(c)));
528
+ const single = kept.length === 1 && facts?.kind === "cases" && facts.cases.size === 1 ? facts.payload : undefined;
529
+ return { kind: "cases", cases: new Set(kept), payload: single };
530
+ }
531
+ if (t.type !== "Struct")
532
+ return undefined;
533
+ const [name, ...rest] = path;
534
+ const fields = t.fields;
535
+ if (!(name in fields))
536
+ return undefined;
537
+ const known = facts?.kind === "fields" ? facts.fields : new Map();
538
+ const inner = refineFacts(fields[name], known.get(name), rest, cases);
539
+ if (inner === undefined)
540
+ return undefined;
541
+ const next = new Map(known);
542
+ next.set(name, inner);
543
+ return { kind: "fields", fields: next };
544
+ }
545
+ /**
546
+ * The cases a variant can hold, given what is known about it.
547
+ *
548
+ * @internal
549
+ */
550
+ export function casesOf(type, facts) {
551
+ const t = unwrap(type);
552
+ if (t.type !== "Variant")
553
+ return [];
554
+ const all = Object.keys(t.cases);
555
+ return facts?.kind === "cases" ? all.filter(c => facts.cases.has(c)) : all;
556
+ }
557
+ /**
558
+ * Whether values of a type can be sorted and compared by East's total order:
559
+ * every data type (no functions).
560
+ *
561
+ * @internal
562
+ */
563
+ export function isOrdered(type) {
564
+ const seen = new Set();
565
+ const check = (t) => {
566
+ if (seen.has(t))
567
+ return true;
568
+ seen.add(t);
569
+ switch (t.type) {
570
+ case "Function":
571
+ case "AsyncFunction": return false;
572
+ case "Array":
573
+ case "Ref": return check(t.value);
574
+ case "Set": return check(t.key);
575
+ case "Dict": return check(t.key) && check(t.value);
576
+ case "Struct": return Object.values(t.fields).every(check);
577
+ case "Variant": return Object.values(t.cases).every(check);
578
+ case "Recursive": return check(t.node);
579
+ default: return true;
580
+ }
581
+ };
582
+ return check(type);
583
+ }
584
+ //# sourceMappingURL=shapes.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shapes.js","sourceRoot":"","sources":["../../../../src/query/jq/shapes.ts"],"names":[],"mappings":"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"}