@elaraai/east 1.0.84 → 1.0.86

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 (247) 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/functions.crossimport.spec.js +8 -0
  69. package/dist/src/functions.crossimport.spec.js.map +1 -1
  70. package/dist/src/functions.d.ts +45 -8
  71. package/dist/src/functions.d.ts.map +1 -1
  72. package/dist/src/functions.js +138 -28
  73. package/dist/src/functions.js.map +1 -1
  74. package/dist/src/functions.spec.js +60 -2
  75. package/dist/src/functions.spec.js.map +1 -1
  76. package/dist/src/index.d.ts +3 -0
  77. package/dist/src/index.d.ts.map +1 -1
  78. package/dist/src/index.js +3 -0
  79. package/dist/src/index.js.map +1 -1
  80. package/dist/src/internal.d.ts +4 -0
  81. package/dist/src/internal.d.ts.map +1 -1
  82. package/dist/src/internal.js +9 -0
  83. package/dist/src/internal.js.map +1 -1
  84. package/dist/src/location.d.ts +22 -0
  85. package/dist/src/location.d.ts.map +1 -1
  86. package/dist/src/location.js +31 -0
  87. package/dist/src/location.js.map +1 -1
  88. package/dist/src/naming.d.ts +5 -3
  89. package/dist/src/naming.d.ts.map +1 -1
  90. package/dist/src/naming.js.map +1 -1
  91. package/dist/src/portable.spec.d.ts +6 -0
  92. package/dist/src/portable.spec.d.ts.map +1 -0
  93. package/dist/src/portable.spec.js +181 -0
  94. package/dist/src/portable.spec.js.map +1 -0
  95. package/dist/src/query/evaluate.d.ts +98 -0
  96. package/dist/src/query/evaluate.d.ts.map +1 -0
  97. package/dist/src/query/evaluate.js +193 -0
  98. package/dist/src/query/evaluate.js.map +1 -0
  99. package/dist/src/query/index.d.ts +17 -0
  100. package/dist/src/query/index.d.ts.map +1 -0
  101. package/dist/src/query/index.js +17 -0
  102. package/dist/src/query/index.js.map +1 -0
  103. package/dist/src/query/jq/catalog.d.ts +174 -0
  104. package/dist/src/query/jq/catalog.d.ts.map +1 -0
  105. package/dist/src/query/jq/catalog.js +1740 -0
  106. package/dist/src/query/jq/catalog.js.map +1 -0
  107. package/dist/src/query/jq/check.d.ts +210 -0
  108. package/dist/src/query/jq/check.d.ts.map +1 -0
  109. package/dist/src/query/jq/check.js +2261 -0
  110. package/dist/src/query/jq/check.js.map +1 -0
  111. package/dist/src/query/jq/complete.d.ts +89 -0
  112. package/dist/src/query/jq/complete.d.ts.map +1 -0
  113. package/dist/src/query/jq/complete.js +320 -0
  114. package/dist/src/query/jq/complete.js.map +1 -0
  115. package/dist/src/query/jq/describe.d.ts +53 -0
  116. package/dist/src/query/jq/describe.d.ts.map +1 -0
  117. package/dist/src/query/jq/describe.js +149 -0
  118. package/dist/src/query/jq/describe.js.map +1 -0
  119. package/dist/src/query/jq/lex.d.ts +118 -0
  120. package/dist/src/query/jq/lex.d.ts.map +1 -0
  121. package/dist/src/query/jq/lex.js +371 -0
  122. package/dist/src/query/jq/lex.js.map +1 -0
  123. package/dist/src/query/jq/literals.d.ts +49 -0
  124. package/dist/src/query/jq/literals.d.ts.map +1 -0
  125. package/dist/src/query/jq/literals.js +78 -0
  126. package/dist/src/query/jq/literals.js.map +1 -0
  127. package/dist/src/query/jq/messages.d.ts +126 -0
  128. package/dist/src/query/jq/messages.d.ts.map +1 -0
  129. package/dist/src/query/jq/messages.js +172 -0
  130. package/dist/src/query/jq/messages.js.map +1 -0
  131. package/dist/src/query/jq/parse.d.ts +70 -0
  132. package/dist/src/query/jq/parse.d.ts.map +1 -0
  133. package/dist/src/query/jq/parse.js +1013 -0
  134. package/dist/src/query/jq/parse.js.map +1 -0
  135. package/dist/src/query/jq/print.d.ts +59 -0
  136. package/dist/src/query/jq/print.d.ts.map +1 -0
  137. package/dist/src/query/jq/print.js +587 -0
  138. package/dist/src/query/jq/print.js.map +1 -0
  139. package/dist/src/query/jq/shapes.d.ts +345 -0
  140. package/dist/src/query/jq/shapes.d.ts.map +1 -0
  141. package/dist/src/query/jq/shapes.js +584 -0
  142. package/dist/src/query/jq/shapes.js.map +1 -0
  143. package/dist/src/query/jq/spans.d.ts +133 -0
  144. package/dist/src/query/jq/spans.d.ts.map +1 -0
  145. package/dist/src/query/jq/spans.js +195 -0
  146. package/dist/src/query/jq/spans.js.map +1 -0
  147. package/dist/src/query/jq/split.d.ts +334 -0
  148. package/dist/src/query/jq/split.d.ts.map +1 -0
  149. package/dist/src/query/jq/split.js +2108 -0
  150. package/dist/src/query/jq/split.js.map +1 -0
  151. package/dist/src/query/jq/strftime.d.ts +20 -0
  152. package/dist/src/query/jq/strftime.d.ts.map +1 -0
  153. package/dist/src/query/jq/strftime.js +65 -0
  154. package/dist/src/query/jq/strftime.js.map +1 -0
  155. package/dist/src/query/jq/summary.d.ts +139 -0
  156. package/dist/src/query/jq/summary.d.ts.map +1 -0
  157. package/dist/src/query/jq/summary.js +222 -0
  158. package/dist/src/query/jq/summary.js.map +1 -0
  159. package/dist/src/query/jq/translate-builtins.d.ts +21 -0
  160. package/dist/src/query/jq/translate-builtins.d.ts.map +1 -0
  161. package/dist/src/query/jq/translate-builtins.js +1873 -0
  162. package/dist/src/query/jq/translate-builtins.js.map +1 -0
  163. package/dist/src/query/jq/translate.d.ts +627 -0
  164. package/dist/src/query/jq/translate.d.ts.map +1 -0
  165. package/dist/src/query/jq/translate.js +3364 -0
  166. package/dist/src/query/jq/translate.js.map +1 -0
  167. package/dist/src/query/types.d.ts +505 -0
  168. package/dist/src/query/types.d.ts.map +1 -0
  169. package/dist/src/query/types.js +231 -0
  170. package/dist/src/query/types.js.map +1 -0
  171. package/dist/src/runner_exec.d.ts +134 -0
  172. package/dist/src/runner_exec.d.ts.map +1 -0
  173. package/dist/src/runner_exec.js +371 -0
  174. package/dist/src/runner_exec.js.map +1 -0
  175. package/dist/src/runner_exec.spec.d.ts +6 -0
  176. package/dist/src/runner_exec.spec.d.ts.map +1 -0
  177. package/dist/src/runner_exec.spec.js +198 -0
  178. package/dist/src/runner_exec.spec.js.map +1 -0
  179. package/dist/src/runner_io.d.ts +370 -0
  180. package/dist/src/runner_io.d.ts.map +1 -0
  181. package/dist/src/runner_io.js +563 -0
  182. package/dist/src/runner_io.js.map +1 -0
  183. package/dist/src/runner_io.spec.d.ts +6 -0
  184. package/dist/src/runner_io.spec.d.ts.map +1 -0
  185. package/dist/src/runner_io.spec.js +224 -0
  186. package/dist/src/runner_io.spec.js.map +1 -0
  187. package/dist/src/runner_merge.d.ts +95 -0
  188. package/dist/src/runner_merge.d.ts.map +1 -0
  189. package/dist/src/runner_merge.js +238 -0
  190. package/dist/src/runner_merge.js.map +1 -0
  191. package/dist/src/runner_protocol.d.ts +11 -4
  192. package/dist/src/runner_protocol.d.ts.map +1 -1
  193. package/dist/src/runner_protocol.js +11 -4
  194. package/dist/src/runner_protocol.js.map +1 -1
  195. package/dist/src/serialization/beast2/index.d.ts +1 -1
  196. package/dist/src/serialization/beast2/index.d.ts.map +1 -1
  197. package/dist/src/serialization/beast2/index.js.map +1 -1
  198. package/dist/src/serialization/beast2/v5/frames.d.ts +10 -6
  199. package/dist/src/serialization/beast2/v5/frames.d.ts.map +1 -1
  200. package/dist/src/serialization/beast2/v5/frames.js +10 -6
  201. package/dist/src/serialization/beast2/v5/frames.js.map +1 -1
  202. package/dist/src/serialization/beast2/v5/frames.spec.d.ts +6 -0
  203. package/dist/src/serialization/beast2/v5/frames.spec.d.ts.map +1 -0
  204. package/dist/src/serialization/beast2/v5/frames.spec.js +42 -0
  205. package/dist/src/serialization/beast2/v5/frames.spec.js.map +1 -0
  206. package/dist/src/serialization/beast2/v5/index.spec.js +108 -0
  207. package/dist/src/serialization/beast2/v5/index.spec.js.map +1 -1
  208. package/dist/src/serialization/beast2/v5/lazy.d.ts +12 -7
  209. package/dist/src/serialization/beast2/v5/lazy.d.ts.map +1 -1
  210. package/dist/src/serialization/beast2/v5/lazy.js +16 -6
  211. package/dist/src/serialization/beast2/v5/lazy.js.map +1 -1
  212. package/dist/src/serialization/beast2/v5/lazy.spec.js +159 -18
  213. package/dist/src/serialization/beast2/v5/lazy.spec.js.map +1 -1
  214. package/dist/src/serialization/beast2/v5/stream.d.ts +110 -21
  215. package/dist/src/serialization/beast2/v5/stream.d.ts.map +1 -1
  216. package/dist/src/serialization/beast2/v5/stream.js +153 -42
  217. package/dist/src/serialization/beast2/v5/stream.js.map +1 -1
  218. package/dist/src/serialization/beast2/v5/weight.d.ts +36 -0
  219. package/dist/src/serialization/beast2/v5/weight.d.ts.map +1 -0
  220. package/dist/src/serialization/beast2/v5/weight.js +238 -0
  221. package/dist/src/serialization/beast2/v5/weight.js.map +1 -0
  222. package/dist/src/serialization/crc32.d.ts +38 -0
  223. package/dist/src/serialization/crc32.d.ts.map +1 -0
  224. package/dist/src/serialization/crc32.js +70 -0
  225. package/dist/src/serialization/crc32.js.map +1 -0
  226. package/dist/src/serialization/crc32.spec.d.ts +6 -0
  227. package/dist/src/serialization/crc32.spec.d.ts.map +1 -0
  228. package/dist/src/serialization/crc32.spec.js +92 -0
  229. package/dist/src/serialization/crc32.spec.js.map +1 -0
  230. package/dist/src/serialization/east-inferred.spec.js +4 -0
  231. package/dist/src/serialization/east-inferred.spec.js.map +1 -1
  232. package/dist/src/serialization/east.d.ts.map +1 -1
  233. package/dist/src/serialization/east.js +134 -110
  234. package/dist/src/serialization/east.js.map +1 -1
  235. package/dist/src/serialization/east.spec.js +185 -4
  236. package/dist/src/serialization/east.spec.js.map +1 -1
  237. package/dist/src/serialization/east_text.d.ts +25 -0
  238. package/dist/src/serialization/east_text.d.ts.map +1 -0
  239. package/dist/src/serialization/east_text.js +29 -0
  240. package/dist/src/serialization/east_text.js.map +1 -0
  241. package/dist/src/serialization/index.d.ts +1 -1
  242. package/dist/src/serialization/index.d.ts.map +1 -1
  243. package/dist/src/types.d.ts +1 -1
  244. package/dist/src/types.d.ts.map +1 -1
  245. package/dist/src/types.js +7 -6
  246. package/dist/src/types.js.map +1 -1
  247. package/package.json +6 -3
@@ -0,0 +1,320 @@
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
+ * Completions at a cursor in jq text, from the type there
7
+ * (`devdocs/QUERY.md` §19).
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import { isTypeEqual } from "../../types.js";
12
+ import { BUILTINS } from "./catalog.js";
13
+ import { checkJq } from "./check.js";
14
+ import { plainKind } from "./describe.js";
15
+ import { scanJq } from "./lex.js";
16
+ import { jsonString } from "./literals.js";
17
+ import { parseJq } from "./parse.js";
18
+ import { describeType, membersOf, nullablePayload, orNull, unwrap } from "./shapes.js";
19
+ const MAX_ITEMS = 40;
20
+ const NAME = /^[A-Za-z_][A-Za-z0-9_]*$/;
21
+ const PARAMS = ["f", "g", "h", "i", "j", "k", "l", "m"];
22
+ /** A text completed inside a string: escaped as a jq string's text, then the closing quote — `say \"hi\""`. */
23
+ function closeString(text) {
24
+ return jsonString(text).slice(1);
25
+ }
26
+ /** A builtin's signatures: `first, first(f)`. */
27
+ function signature(name, arities) {
28
+ return arities.map(n => n === 0 ? name : `${name}(${PARAMS.slice(0, n).join("; ")})`).join(", ");
29
+ }
30
+ /** The lexemes of a postfix chain ending at `end` (exclusive index), and where it starts. */
31
+ function chainStart(lexemes, end) {
32
+ let i = end - 1;
33
+ let start = end;
34
+ const adjacent = (j) => j + 1 >= end || lexemes[j].to === lexemes[j + 1].from;
35
+ while (i >= 0 && adjacent(i)) {
36
+ const l = lexemes[i];
37
+ if (l.role === "field") {
38
+ start = i;
39
+ i -= 1;
40
+ continue;
41
+ }
42
+ if (l.role === "punct" && (l.value === "]" || l.value === ")")) {
43
+ const open = l.value === "]" ? "[" : "(";
44
+ let depth = 0;
45
+ let j = i;
46
+ for (; j >= 0; j--) {
47
+ const m = lexemes[j];
48
+ if (m.role === "punct" && m.value === l.value)
49
+ depth += 1;
50
+ if (m.role === "punct" && m.value === open)
51
+ depth -= 1;
52
+ if (depth === 0)
53
+ break;
54
+ }
55
+ if (j < 0)
56
+ return start;
57
+ start = j;
58
+ i = j - 1;
59
+ // A call's name before its arguments, or a target before an index.
60
+ if (open === "(") {
61
+ if (i >= 0 && lexemes[i].role === "ident" && lexemes[i].to === lexemes[i + 1].from)
62
+ start = i;
63
+ return start;
64
+ }
65
+ continue;
66
+ }
67
+ if (l.role === "punct" && (l.value === "." || l.value === ".."))
68
+ return i;
69
+ if (l.role === "variable" || l.role === "loc" || l.role === "ident")
70
+ return i;
71
+ return start;
72
+ }
73
+ return start;
74
+ }
75
+ /** What closes the brackets and keywords still open at the end of some text, so a prefix parses. */
76
+ function closers(lexemes) {
77
+ const stack = [];
78
+ for (const l of lexemes) {
79
+ if (l.role === "punct" && (l.value === "(" || l.value === "[" || l.value === "{"))
80
+ stack.push({ open: l.value, last: "" });
81
+ else if (l.role === "punct" && (l.value === ")" || l.value === "]" || l.value === "}"))
82
+ stack.pop();
83
+ else if (l.role === "keyword" && (l.value === "if" || l.value === "def"))
84
+ stack.push({ open: l.value, last: l.value });
85
+ else if (l.role === "keyword" && l.value === "end" && stack[stack.length - 1]?.open === "if")
86
+ stack.pop();
87
+ else if (l.role === "punct" && l.value === ";" && stack[stack.length - 1]?.open === "def")
88
+ stack.pop();
89
+ else if (l.role === "keyword" && stack.length > 0 && stack[stack.length - 1].open === "if")
90
+ stack[stack.length - 1].last = l.value;
91
+ }
92
+ let out = "";
93
+ for (const { open, last } of [...stack].reverse()) {
94
+ if (open === "(")
95
+ out += ")";
96
+ else if (open === "[")
97
+ out += "]";
98
+ else if (open === "{")
99
+ out += "}";
100
+ else if (open === "def")
101
+ out += "; .";
102
+ else
103
+ out += last === "if" || last === "elif" ? " then . end" : " end";
104
+ }
105
+ return out;
106
+ }
107
+ /** Checks a prefix of the text, repaired so it parses, and finds the node that spans a range of it. */
108
+ function typeOfRange(prefix, from, to, input, root) {
109
+ const repaired = prefix + closers(scanJq(prefix).filter(l => l.role !== "ws" && l.role !== "comment"));
110
+ const parsed = parseJq(repaired);
111
+ if (parsed.program.type === "none")
112
+ return undefined;
113
+ let path;
114
+ for (const [p, range] of parsed.spans) {
115
+ if (range.from === from && range.to === to && (path === undefined || p.length > path.length))
116
+ path = p;
117
+ }
118
+ if (path === undefined)
119
+ return undefined;
120
+ return { checked: checkJq(parsed, input, { root }), path };
121
+ }
122
+ /** The items that complete a field after a value of a result's shape. */
123
+ function fieldItems(result, variantText) {
124
+ const items = [];
125
+ const seen = new Set();
126
+ const members = membersOf(result.shape);
127
+ const payloads = members.filter(m => m.case !== undefined).length > 1;
128
+ const add = (item) => {
129
+ if (seen.has(item.label))
130
+ return;
131
+ seen.add(item.label);
132
+ items.push(item);
133
+ };
134
+ for (const member of members) {
135
+ const t = unwrap(member.shape.type);
136
+ const inner = unwrap(nullablePayload(t) ?? t);
137
+ const optional = nullablePayload(t) !== undefined;
138
+ if (inner.type === "Struct") {
139
+ for (const [name, field] of Object.entries(inner.fields)) {
140
+ const read = optional || (payloads && member.case !== undefined) ? orNull(field) ?? field : field;
141
+ const insert = NAME.test(name) ? name : jsonString(name);
142
+ if (payloads && member.case !== undefined) {
143
+ add({ label: name, kind: "field", detail: describeType(read), doc: `only when ${variantText ?? "."}.type == ${jsonString(member.case)}`, insert, warn: true });
144
+ }
145
+ else {
146
+ add({ label: name, kind: "field", detail: describeType(read), doc: plainKind(read), insert });
147
+ }
148
+ }
149
+ }
150
+ else if (inner.type === "Variant" && nullablePayload(inner) === undefined) {
151
+ const cases = Object.keys(inner.cases);
152
+ add({ label: "type", kind: "field", detail: "String", doc: `case name: ${cases.join(", ")}`, insert: "type" });
153
+ add({ label: "value", kind: "field", detail: "the case's payload", doc: "narrow first to read a case's fields exactly", insert: "value" });
154
+ }
155
+ else if (inner.type === "Dict") {
156
+ add({ label: "[", kind: "key", detail: describeType(inner), doc: `look up by ${describeType(inner.key)} key`, insert: "[" });
157
+ }
158
+ }
159
+ return items;
160
+ }
161
+ /** Keeps the items whose label starts with the typed text, most specific first, then by label. */
162
+ function finish(from, to, items, typed, exact) {
163
+ const order = ["case", "value", "key", "dataset", "field", "variable", "builtin"];
164
+ const lower = typed.toLowerCase();
165
+ const kept = items.filter(item => item.label.toLowerCase().startsWith(lower) && (exact || item.label !== typed));
166
+ kept.sort((a, b) => order.indexOf(a.kind) - order.indexOf(b.kind) || (a.label < b.label ? -1 : a.label > b.label ? 1 : 0));
167
+ return { from, to, items: kept.slice(0, MAX_ITEMS) };
168
+ }
169
+ /**
170
+ * The completions at a cursor in jq text, from the type at the cursor.
171
+ *
172
+ * @param text - the program, usually mid-edit
173
+ * @param offset - the cursor, in UTF-16 code units
174
+ * @param input - the type the program runs on
175
+ * @param options - `root` for an e3 root, `tooling`, and the values in the
176
+ * data from a summary
177
+ * @returns the items and the range they replace, or `null` where nothing
178
+ * completes
179
+ *
180
+ * @remarks
181
+ * The text before the cursor is repaired so it parses (brackets closed, an
182
+ * `if` ended) and checked, and the value before the cursor typed:
183
+ * - inside `.F.type == "` — the variant's case names;
184
+ * - inside `== "` after another path — the values in the data, from
185
+ * `options.values`;
186
+ * - inside `$d["` — the dict's keys, from `options.values`;
187
+ * - after `.` or a path — at an e3 root, its data sources; on a struct, its
188
+ * fields; on a variant, `type` and `value`; under an un-narrowed `.F.value`,
189
+ * every case's fields as `Option<T>`, marked `warn` with the case that has
190
+ * each; on a dict, `[`;
191
+ * - after `$` — the variables in scope;
192
+ * - a word — the builtins (and defs) whose names start with it, inserting
193
+ * `name(` for those that take arguments.
194
+ *
195
+ * @example
196
+ * ```ts
197
+ * const done = completeJq(".orders[0].to", 13, FixtureRoot);
198
+ * done!.items.map(i => i.label); // ["total"]
199
+ * ```
200
+ */
201
+ export function completeJq(text, offset, input, options = {}) {
202
+ const before = text.slice(0, offset);
203
+ const lexemes = scanJq(before).filter(l => l.role !== "ws" && l.role !== "comment");
204
+ const last = lexemes[lexemes.length - 1];
205
+ if (last === undefined || last.to !== offset)
206
+ return null;
207
+ const root = options.root === true;
208
+ const at = lexemes.length - 1;
209
+ // Inside a string: a case name, a value in the data, or a dict's key.
210
+ if (last.role === "unterminated") {
211
+ const typed = last.value;
212
+ const from = last.from + 1;
213
+ const previous = lexemes[at - 1];
214
+ if (previous?.role === "op" && (previous.value === "==" || previous.value === "!=")) {
215
+ const start = chainStart(lexemes, at - 1);
216
+ if (start >= at - 1)
217
+ return null;
218
+ const chainFrom = lexemes[start].from;
219
+ const chainTo = lexemes[at - 2].to;
220
+ const tail = lexemes[at - 2];
221
+ if (tail.role === "field" && tail.value === "type") {
222
+ // The variant is the chain without its `.type`.
223
+ const variantTo = tail.from;
224
+ const target = variantTo === chainFrom
225
+ ? typeOfRange(`${before.slice(0, chainFrom)}.`, chainFrom, chainFrom + 1, input, root)
226
+ : typeOfRange(before.slice(0, variantTo), chainFrom, variantTo, input, root);
227
+ const result = target?.checked.resultAt(target.path);
228
+ if (result === null || result === undefined)
229
+ return null;
230
+ const items = [];
231
+ for (const member of membersOf(result.shape)) {
232
+ const t = unwrap(member.shape.type);
233
+ const variant = unwrap(nullablePayload(t) ?? t);
234
+ if (variant.type !== "Variant")
235
+ continue;
236
+ for (const name of Object.keys(variant.cases)) {
237
+ items.push({ label: name, kind: "case", detail: `case of ${describeType(variant)}`, insert: closeString(name) });
238
+ }
239
+ }
240
+ return finish(from, offset, items, typed, true);
241
+ }
242
+ const values = options.values?.(before.slice(chainFrom, chainTo), typed) ?? [];
243
+ return finish(from, offset, values.map(v => ({ label: v.value, kind: "value", detail: `${v.count} in data`, insert: closeString(v.value) })), typed, true);
244
+ }
245
+ if (previous?.role === "punct" && previous.value === "[" && lexemes[at - 2]?.role === "variable") {
246
+ const dict = lexemes[at - 2];
247
+ const values = options.values?.(dict.text, typed) ?? [];
248
+ return finish(from, offset, values.map(v => ({ label: v.value, kind: "key", detail: `${v.count} in data`, insert: closeString(v.value) })), typed, true);
249
+ }
250
+ return null;
251
+ }
252
+ // After `.` or a path: fields, cases' fields, data sources.
253
+ if (last.role === "field" || (last.role === "punct" && last.value === ".")) {
254
+ const typed = last.role === "field" ? last.value : "";
255
+ const from = offset - typed.length;
256
+ const start = chainStart(lexemes, at);
257
+ const chainFrom = start < at ? lexemes[start].from : last.from;
258
+ const target = start < at
259
+ ? typeOfRange(before.slice(0, last.from), chainFrom, last.from, input, root)
260
+ : typeOfRange(`${before.slice(0, last.from)}.`, last.from, last.from + 1, input, root);
261
+ if (target === undefined)
262
+ return null;
263
+ const result = target.checked.resultAt(target.path);
264
+ if (result === null)
265
+ return null;
266
+ if (root && start >= at && result.shape.kind === "type" && isTypeEqual(result.shape.type, input)) {
267
+ const t = unwrap(input);
268
+ if (t.type === "Struct") {
269
+ const items = Object.entries(t.fields).map(([name, field]) => {
270
+ const doc = options.describeRoot?.(name) ?? plainKind(field);
271
+ return { label: name, kind: "dataset", detail: describeType(field), doc, insert: NAME.test(name) ? name : jsonString(name) };
272
+ });
273
+ return finish(from, offset, items, typed, false);
274
+ }
275
+ }
276
+ // Under `.F.value`, the variant's text for a payload field's doc.
277
+ const valueRead = before.slice(chainFrom, last.from);
278
+ const variantText = valueRead.endsWith(".value") ? valueRead.slice(0, -".value".length) || "." : undefined;
279
+ return finish(from, offset, fieldItems(result, variantText), typed, false);
280
+ }
281
+ // After `$`: the variables in scope.
282
+ if (last.role === "variable" || (last.role === "other" && last.text === "$")) {
283
+ const typed = last.role === "variable" ? last.value : "";
284
+ const target = typeOfRange(`${before.slice(0, last.from)}.`, last.from, last.from + 1, input, root);
285
+ const scope = target?.checked.scopeAt(target.path);
286
+ if (scope === null || scope === undefined)
287
+ return null;
288
+ const items = [];
289
+ for (const [name, value] of scope.vars) {
290
+ if (value.shape.kind !== "type")
291
+ continue;
292
+ const type = value.shape.type;
293
+ items.push({ label: `$${name}`, kind: "variable", detail: describeType(type), doc: plainKind(type), insert: name });
294
+ }
295
+ return finish(last.from + 1, offset, items, `$${typed}`, false);
296
+ }
297
+ // A word: the builtins and defs whose names start with it.
298
+ if (last.role === "ident") {
299
+ const typed = last.value;
300
+ const items = [];
301
+ for (const [name, builtin] of BUILTINS) {
302
+ if (name.startsWith("@"))
303
+ continue;
304
+ if (builtin.status !== "supported" && !(builtin.status === "tooling" && options.tooling === true))
305
+ continue;
306
+ const takesArguments = !builtin.arities.includes(0);
307
+ items.push({ label: name, kind: "builtin", detail: signature(name, builtin.arities), doc: builtin.rule ?? "", insert: takesArguments ? `${name}(` : name });
308
+ }
309
+ const target = typeOfRange(`${before.slice(0, last.from)}.`, last.from, last.from + 1, input, root);
310
+ for (const def of target?.checked.scopeAt(target.path)?.defs ?? []) {
311
+ const [name, arity] = def.split("/");
312
+ if (items.some(item => item.label === name))
313
+ continue;
314
+ items.push({ label: name, kind: "builtin", detail: signature(name, [Number(arity)]), doc: "a def of this program", insert: arity === "0" ? name : `${name}(` });
315
+ }
316
+ return finish(last.from, offset, items, typed, false);
317
+ }
318
+ return null;
319
+ }
320
+ //# sourceMappingURL=complete.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"complete.js","sourceRoot":"","sources":["../../../../src/query/jq/complete.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,53 @@
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
+ * An East type as jq sees it, in words: the paths a query can read, and the
7
+ * plain kind of each value (`devdocs/QUERY.md` §19).
8
+ *
9
+ * @packageDocumentation
10
+ */
11
+ import type { EastType } from "../../types.js";
12
+ /**
13
+ * The kind of a value, in plain words: `text`, `number`, `whole number`,
14
+ * `date`, `yes or no`, `one of`, `list`, `lookup table`, `record`,
15
+ * `calculation`, with `, sometimes missing` for an Option.
16
+ *
17
+ * @param type - the type
18
+ * @returns its kind
19
+ *
20
+ * @example
21
+ * ```ts
22
+ * plainKind(OptionType(FloatType)); // "number, sometimes missing"
23
+ * ```
24
+ */
25
+ export declare function plainKind(type: EastType): string;
26
+ /**
27
+ * Describes an East type as jq reads it: one line per path, indented by its
28
+ * depth, with the type at that path.
29
+ *
30
+ * @param type - the type
31
+ * @param options - `maxDepth`, how deep to go (6 by default)
32
+ * @returns the description, lines joined by `\n`
33
+ *
34
+ * @remarks
35
+ * - A struct's fields are `.name`, an array's elements `[]`, a dict's values
36
+ * `[<K>]` for its key type `K`.
37
+ * - A variant's case is `.type`, listed as its case names, and each case's
38
+ * payload is under `.value`, marked `(when case)`.
39
+ * - An option's value is read through it, as jq reads through `null`.
40
+ * - A recursive type is described once; where it recurs the line says
41
+ * `(recursive: <path>)`, the path it was first described at.
42
+ * - The text is stable, so agents and tests can read it.
43
+ *
44
+ * @example
45
+ * ```ts
46
+ * describeJqType(StructType({ id: IntegerType, tags: ArrayType(StringType) }));
47
+ * // ". Struct{id, tags}\n .id Integer\n .tags Array<String>\n .tags[] String"
48
+ * ```
49
+ */
50
+ export declare function describeJqType(type: EastType, options?: {
51
+ maxDepth?: number;
52
+ }): string;
53
+ //# sourceMappingURL=describe.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe.d.ts","sourceRoot":"","sources":["../../../../src/query/jq/describe.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;;;;GAKG;AAEH,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAI/C;;;;;;;;;;;;GAYG;AACH,wBAAgB,SAAS,CAAC,IAAI,EAAE,QAAQ,GAAG,MAAM,CAmBhD;AAeD;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,wBAAgB,cAAc,CAAC,IAAI,EAAE,QAAQ,EAAE,OAAO,GAAE;IAAE,QAAQ,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,MAAM,CAqD1F"}
@@ -0,0 +1,149 @@
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
+ import { jsonString } from "./literals.js";
6
+ import { describeType, nullablePayload, unwrap } from "./shapes.js";
7
+ /**
8
+ * The kind of a value, in plain words: `text`, `number`, `whole number`,
9
+ * `date`, `yes or no`, `one of`, `list`, `lookup table`, `record`,
10
+ * `calculation`, with `, sometimes missing` for an Option.
11
+ *
12
+ * @param type - the type
13
+ * @returns its kind
14
+ *
15
+ * @example
16
+ * ```ts
17
+ * plainKind(OptionType(FloatType)); // "number, sometimes missing"
18
+ * ```
19
+ */
20
+ export function plainKind(type) {
21
+ const t = unwrap(type);
22
+ const payload = nullablePayload(t);
23
+ if (payload !== undefined)
24
+ return `${plainKind(payload)}, sometimes missing`;
25
+ switch (t.type) {
26
+ case "String": return "text";
27
+ case "Integer": return "whole number";
28
+ case "Float": return "number";
29
+ case "Boolean": return "yes or no";
30
+ case "DateTime": return "date";
31
+ case "Array":
32
+ case "Set":
33
+ case "Vector":
34
+ case "Matrix": return "list";
35
+ case "Dict": return "lookup table";
36
+ case "Struct": return "record";
37
+ case "Variant": return "one of";
38
+ case "Function":
39
+ case "AsyncFunction": return "calculation";
40
+ case "Blob": return "bytes";
41
+ case "Null": return "nothing";
42
+ default: return t.type;
43
+ }
44
+ }
45
+ /** A type for one line of a description: its fields' names for a struct, its cases' for a variant. */
46
+ function brief(type) {
47
+ const t = unwrap(type);
48
+ const payload = nullablePayload(t);
49
+ if (payload !== undefined)
50
+ return `Option<${brief(payload)}>`;
51
+ if (t.type === "Struct") {
52
+ const names = Object.keys(t.fields);
53
+ return `Struct{${names.slice(0, 8).join(", ")}${names.length > 8 ? ", …" : ""}}`;
54
+ }
55
+ // A function's inputs are what a call must build, so they are spelt out.
56
+ return describeType(type, t.type === "Function" || t.type === "AsyncFunction" ? 1 : 0);
57
+ }
58
+ /**
59
+ * Describes an East type as jq reads it: one line per path, indented by its
60
+ * depth, with the type at that path.
61
+ *
62
+ * @param type - the type
63
+ * @param options - `maxDepth`, how deep to go (6 by default)
64
+ * @returns the description, lines joined by `\n`
65
+ *
66
+ * @remarks
67
+ * - A struct's fields are `.name`, an array's elements `[]`, a dict's values
68
+ * `[<K>]` for its key type `K`.
69
+ * - A variant's case is `.type`, listed as its case names, and each case's
70
+ * payload is under `.value`, marked `(when case)`.
71
+ * - An option's value is read through it, as jq reads through `null`.
72
+ * - A recursive type is described once; where it recurs the line says
73
+ * `(recursive: <path>)`, the path it was first described at.
74
+ * - The text is stable, so agents and tests can read it.
75
+ *
76
+ * @example
77
+ * ```ts
78
+ * describeJqType(StructType({ id: IntegerType, tags: ArrayType(StringType) }));
79
+ * // ". Struct{id, tags}\n .id Integer\n .tags Array<String>\n .tags[] String"
80
+ * ```
81
+ */
82
+ export function describeJqType(type, options = {}) {
83
+ const maxDepth = options.maxDepth ?? 6;
84
+ const lines = [];
85
+ const recursive = new Map();
86
+ const visit = (t, path, depth, when) => {
87
+ const indent = " ".repeat(depth);
88
+ const shown = path === "" ? "." : path;
89
+ if (t.type === "Recursive") {
90
+ const seen = recursive.get(t);
91
+ if (seen !== undefined) {
92
+ lines.push(`${indent}${shown} (recursive: ${seen === "" ? "." : seen})${when}`);
93
+ return;
94
+ }
95
+ recursive.set(t, path);
96
+ }
97
+ lines.push(`${indent}${shown} ${brief(t)}${when}`);
98
+ if (depth >= maxDepth)
99
+ return;
100
+ const u = unwrap(t);
101
+ const payload = nullablePayload(u);
102
+ if (payload !== undefined) {
103
+ const inner = unwrap(payload);
104
+ if (inner.type === "Struct" || inner.type === "Variant")
105
+ visitChildren(inner, path, depth, when);
106
+ return;
107
+ }
108
+ visitChildren(u, path, depth, when);
109
+ };
110
+ const visitChildren = (u, path, depth, when) => {
111
+ switch (u.type) {
112
+ case "Struct":
113
+ for (const [name, field] of Object.entries(u.fields)) {
114
+ visit(field, `${path}.${/^[A-Za-z_][A-Za-z0-9_]*$/.test(name) ? name : jsonString(name)}`, depth + 1, when);
115
+ }
116
+ return;
117
+ case "Array":
118
+ visit(u.value, `${path}[]`, depth + 1, when);
119
+ return;
120
+ case "Set":
121
+ visit(u.key, `${path}[]`, depth + 1, when);
122
+ return;
123
+ case "Vector":
124
+ visit(u.element, `${path}[]`, depth + 1, when);
125
+ return;
126
+ case "Matrix":
127
+ visit(u.element, `${path}[][]`, depth + 1, when);
128
+ return;
129
+ case "Dict":
130
+ visit(u.value, `${path}[<${describeType(u.key, 1)}>]`, depth + 1, when);
131
+ return;
132
+ case "Variant": {
133
+ const cases = u.cases;
134
+ lines.push(`${" ".repeat(depth + 1)}${path}.type ${Object.keys(cases).map(c => jsonString(c)).join(" | ")}${when}`);
135
+ for (const [name, payload] of Object.entries(cases)) {
136
+ if (unwrap(payload).type === "Null")
137
+ continue;
138
+ visit(payload, `${path}.value`, depth + 1, ` (when ${name})`);
139
+ }
140
+ return;
141
+ }
142
+ default:
143
+ return;
144
+ }
145
+ };
146
+ visit(type, "", 0, "");
147
+ return lines.join("\n");
148
+ }
149
+ //# sourceMappingURL=describe.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"describe.js","sourceRoot":"","sources":["../../../../src/query/jq/describe.ts"],"names":[],"mappings":"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"}