blueprint-runtime 0.0.0-stage → 0.3.1

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 (47) hide show
  1. package/LICENSE +21 -0
  2. package/README.md +224 -3
  3. package/dist/src/blueprint/load.js +83 -0
  4. package/dist/src/blueprint/load.js.map +1 -0
  5. package/dist/src/blueprint/plan.js +202 -0
  6. package/dist/src/blueprint/plan.js.map +1 -0
  7. package/dist/src/cli.js +182 -0
  8. package/dist/src/cli.js.map +1 -0
  9. package/dist/src/expr/dates.js +152 -0
  10. package/dist/src/expr/dates.js.map +1 -0
  11. package/dist/src/expr/decimal.js +66 -0
  12. package/dist/src/expr/decimal.js.map +1 -0
  13. package/dist/src/expr/errors.js +31 -0
  14. package/dist/src/expr/errors.js.map +1 -0
  15. package/dist/src/expr/evaluate.js +250 -0
  16. package/dist/src/expr/evaluate.js.map +1 -0
  17. package/dist/src/expr/functions.js +460 -0
  18. package/dist/src/expr/functions.js.map +1 -0
  19. package/dist/src/expr/parser.js +228 -0
  20. package/dist/src/expr/parser.js.map +1 -0
  21. package/dist/src/expr/scan.js +101 -0
  22. package/dist/src/expr/scan.js.map +1 -0
  23. package/dist/src/expr/values.js +118 -0
  24. package/dist/src/expr/values.js.map +1 -0
  25. package/dist/src/findings.js +10 -0
  26. package/dist/src/findings.js.map +1 -0
  27. package/dist/src/inspect.js +313 -0
  28. package/dist/src/inspect.js.map +1 -0
  29. package/dist/src/json/parse.js +225 -0
  30. package/dist/src/json/parse.js.map +1 -0
  31. package/dist/src/registry.js +39 -0
  32. package/dist/src/registry.js.map +1 -0
  33. package/dist/src/run/case.js +122 -0
  34. package/dist/src/run/case.js.map +1 -0
  35. package/dist/src/run/compare.js +94 -0
  36. package/dist/src/run/compare.js.map +1 -0
  37. package/dist/src/run/fixtures.js +122 -0
  38. package/dist/src/run/fixtures.js.map +1 -0
  39. package/dist/src/run/modules.js +380 -0
  40. package/dist/src/run/modules.js.map +1 -0
  41. package/dist/src/run/operators.js +151 -0
  42. package/dist/src/run/operators.js.map +1 -0
  43. package/dist/src/run/scheduler.js +306 -0
  44. package/dist/src/run/scheduler.js.map +1 -0
  45. package/dist/src/run/trace.js +2 -0
  46. package/dist/src/run/trace.js.map +1 -0
  47. package/package.json +60 -6
@@ -0,0 +1,460 @@
1
+ import { createHash } from 'node:crypto';
2
+ import * as dates from './dates.js';
3
+ import { UnsupportedError } from './errors.js';
4
+ import { arr, bool, date, describe, MISSING, num, numberText, obj, str, toText } from './values.js';
5
+ /** JavaScript's Date.prototype.toString() on a server running in UTC. */
6
+ export function utcDateString(ms) {
7
+ const d = new Date(ms);
8
+ const p = (n) => String(n).padStart(2, '0');
9
+ const day = ['Sun', 'Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat'][d.getUTCDay()];
10
+ const month = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'][d.getUTCMonth()];
11
+ return `${day} ${month} ${p(d.getUTCDate())} ${String(d.getUTCFullYear()).padStart(4, '0')} ${p(d.getUTCHours())}:${p(d.getUTCMinutes())}:${p(d.getUTCSeconds())} GMT+0000 (Coordinated Universal Time)`;
12
+ }
13
+ /** A failure Make itself reports. The evaluator wraps it as "Function 'x' finished with error! ...". */
14
+ export class FnFailure extends Error {
15
+ }
16
+ const unsupported = (fn, why) => {
17
+ throw new UnsupportedError(`${fn}(): ${why} has not been observed in Make`);
18
+ };
19
+ function text(fn, v, i) {
20
+ if (v?.kind === 'string')
21
+ return v.value;
22
+ return unsupported(fn, `${describe(v ?? MISSING)} as argument ${i + 1}`);
23
+ }
24
+ function number(fn, v, i) {
25
+ if (v?.kind === 'number')
26
+ return v.value;
27
+ return unsupported(fn, `${describe(v ?? MISSING)} as argument ${i + 1}`);
28
+ }
29
+ function array(fn, v, i) {
30
+ if (v?.kind === 'array')
31
+ return v.value;
32
+ return unsupported(fn, `${describe(v ?? MISSING)} as argument ${i + 1}`);
33
+ }
34
+ function object(fn, v, i) {
35
+ if (v?.kind === 'object')
36
+ return v.value;
37
+ return unsupported(fn, `${describe(v ?? MISSING)} as argument ${i + 1}`);
38
+ }
39
+ function tz(fn, ctx) {
40
+ if (!ctx.timezone)
41
+ throw new UnsupportedError(`${fn}() depends on the scenario timezone, and none is configured`);
42
+ return ctx.timezone;
43
+ }
44
+ function instant(fn, v, i) {
45
+ if (v?.kind === 'date')
46
+ return v.value;
47
+ if (v?.kind === 'string') {
48
+ const t = dates.parseIsoInstant(v.value);
49
+ if (t !== null)
50
+ return t;
51
+ }
52
+ return unsupported(fn, `${describe(v ?? MISSING)} as a date (argument ${i + 1})`);
53
+ }
54
+ /** Equality used by contains/remove/switch/map filters: same kind only (strings and numbers observed). */
55
+ function sameValue(fn, a, b) {
56
+ if (a.kind !== b.kind) {
57
+ if ((a.kind === 'string' || a.kind === 'number') && (b.kind === 'string' || b.kind === 'number')) {
58
+ return unsupported(fn, `comparing ${a.kind} with ${b.kind}`);
59
+ }
60
+ return false;
61
+ }
62
+ if (a.kind === 'string' || a.kind === 'number' || a.kind === 'boolean')
63
+ return a.value === b.value;
64
+ return unsupported(fn, `comparing ${a.kind} values`);
65
+ }
66
+ const primitiveText = (fn, v) => {
67
+ if (v.kind === 'string' || v.kind === 'number' || v.kind === 'boolean')
68
+ return toText(v);
69
+ return unsupported(fn, `${v.kind} elements`);
70
+ };
71
+ const utf8 = (s) => Buffer.from(s, 'utf8');
72
+ const hash = (alg) => (fn) => ({ min: 1, max: 1, impl: ([s]) => str(createHash(alg).update(utf8(text(fn, s, 0))).digest('hex')) });
73
+ const textFn = (fn, f) => ({ min: 1, max: 1, impl: ([s]) => str(f(text(fn, s, 0))) });
74
+ /** Like textFn, but missing and null count as "": upper(1.nope) = "" and lower(null) = "" (corpus D2). */
75
+ const emptyTextFn = (fn, f) => ({
76
+ min: 1,
77
+ max: 1,
78
+ impl: ([s]) => str(f(s?.kind === 'missing' || s?.kind === 'null' ? '' : text(fn, s, 0))),
79
+ });
80
+ function numbersOf(fn, args) {
81
+ if (args.length === 1 && args[0]?.kind === 'array')
82
+ return args[0].value.map((v, i) => number(fn, v, i));
83
+ return args.map((v, i) => number(fn, v, i));
84
+ }
85
+ const DEFS = {
86
+ // text
87
+ // Numbers and arrays become text first, the JavaScript way: upper(123) = "123",
88
+ // upper(["a", "b"]) = "A,B" with a plain comma (corpus A-007, A-009).
89
+ upper: (fn) => ({
90
+ min: 1,
91
+ max: 1,
92
+ impl: ([s]) => {
93
+ if (s?.kind === 'number')
94
+ return str(toText(s).toUpperCase());
95
+ if (s?.kind === 'array')
96
+ return str(s.value.map((v) => (v.kind === 'missing' || v.kind === 'null' ? '' : primitiveText(fn, v))).join(',').toUpperCase());
97
+ if (s?.kind === 'missing' || s?.kind === 'null')
98
+ return str('');
99
+ return str(text(fn, s, 0).toUpperCase());
100
+ },
101
+ }),
102
+ lower: (fn) => emptyTextFn(fn, (s) => s.toLowerCase()),
103
+ capitalize: (fn) => textFn(fn, (s) => s.charAt(0).toUpperCase() + s.slice(1)),
104
+ // "ÜBER" → "Über": the rest of each word is lowercased (corpus D-02). Only space-separated words observed.
105
+ startcase: (fn) => textFn(fn, (s) => s.replace(/\S+/g, (w) => w.charAt(0).toUpperCase() + w.slice(1).toLowerCase())),
106
+ trim: (fn) => emptyTextFn(fn, (s) => s.trim()),
107
+ // Removes every non-ASCII character: "café ÜBER" → "caf BER" (corpus D-02).
108
+ ascii: (fn) => textFn(fn, (s) => s.replace(/[^\x00-\x7F]/g, '')),
109
+ encodeURL: (fn) => textFn(fn, (s) => encodeURIComponent(s)),
110
+ decodeURL: (fn) => textFn(fn, (s) => {
111
+ try {
112
+ return decodeURIComponent(s);
113
+ }
114
+ catch {
115
+ return unsupported(fn, 'malformed percent-encoding');
116
+ }
117
+ }),
118
+ escapeHTML: (fn) => textFn(fn, (s) => {
119
+ if (/["']/.test(s))
120
+ unsupported(fn, 'text containing quotes');
121
+ return s.replaceAll('&', '&amp;').replaceAll('<', '&lt;').replaceAll('>', '&gt;');
122
+ }),
123
+ stripHTML: (fn) => textFn(fn, (s) => s.replace(/<[^>]*>/g, '')),
124
+ escapeMarkdown: (fn) => textFn(fn, (s) => {
125
+ if (/[\\`*_{}[\]()#+\-.!|>~<]/.test(s))
126
+ unsupported(fn, 'text containing Markdown characters');
127
+ return s;
128
+ }),
129
+ base64: (fn) => textFn(fn, (s) => utf8(s).toString('base64')),
130
+ md5: hash('md5'),
131
+ sha1: hash('sha1'),
132
+ sha256: hash('sha256'),
133
+ length: (fn) => ({
134
+ min: 1,
135
+ max: 1,
136
+ impl: ([v]) => {
137
+ if (v?.kind === 'string' || v?.kind === 'array')
138
+ return num(v.value.length); // UTF-16 units: an emoji counts 2 (corpus D-02)
139
+ if (v?.kind === 'missing' || v?.kind === 'null')
140
+ return num(0); // length(1.nope) = 0 (corpus D2)
141
+ // JavaScript's String() of the value: a collection is "[object Object]" (15, D3 a_whole_len),
142
+ // a date "Sat Oct 10 2026 12:30:28 GMT+0000 (Coordinated Universal Time)" (62, D3 n_length).
143
+ if (v?.kind === 'object')
144
+ return num('[object Object]'.length);
145
+ if (v?.kind === 'number')
146
+ return num(numberText(v.value).length); // length(1) = 1 (corpus D3)
147
+ if (v?.kind === 'date')
148
+ return num(utcDateString(v.value).length);
149
+ return unsupported(fn, describe(v ?? MISSING));
150
+ },
151
+ }),
152
+ substring: (fn) => ({ min: 3, max: 3, impl: ([s, a, b]) => str(text(fn, s, 0).substring(number(fn, a, 1), number(fn, b, 2))) }),
153
+ indexOf: (fn) => ({
154
+ min: 2,
155
+ max: 2,
156
+ impl: ([s, q]) => {
157
+ const hay = text(fn, s, 0);
158
+ // A bare word is missing; Make returned -1 for indexOf("hello world"; o) (corpus D-01).
159
+ if (q?.kind === 'missing')
160
+ return num(hay.indexOf('undefined'));
161
+ return num(hay.indexOf(text(fn, q, 1)));
162
+ },
163
+ }),
164
+ // Plain text replaces every occurrence: "o" in "hello world" → "hell0 w0rld" (corpus D-01).
165
+ // Text shaped like a regex is one: "/o/g" replaces all, "/o/" and "/l+/" the first match.
166
+ // "/O/gi" changed nothing, so other flags are refused (corpus D2).
167
+ replace: (fn) => ({
168
+ min: 3,
169
+ max: 3,
170
+ impl: ([s, q, r]) => {
171
+ const hay = text(fn, s, 0);
172
+ const needle = q?.kind === 'missing' ? 'undefined' : text(fn, q, 1);
173
+ const rep = r?.kind === 'string' || r?.kind === 'number' ? toText(r) : unsupported(fn, `${describe(r ?? MISSING)} as the replacement`);
174
+ const re = /^\/(.+)\/([a-z]*)$/s.exec(needle);
175
+ if (!re)
176
+ return str(hay.split(needle).join(rep));
177
+ if (re[2] !== '' && re[2] !== 'g')
178
+ return unsupported(fn, `the regex flags "${re[2]}"`);
179
+ if (rep.includes('$'))
180
+ return unsupported(fn, 'a "$" in the replacement of a regex');
181
+ let pattern;
182
+ try {
183
+ pattern = new RegExp(re[1], re[2]);
184
+ }
185
+ catch {
186
+ return unsupported(fn, `the pattern ${JSON.stringify(re[1])}`);
187
+ }
188
+ return str(hay.replace(pattern, rep));
189
+ },
190
+ }),
191
+ contains: (fn) => ({
192
+ min: 2,
193
+ max: 2,
194
+ impl: ([h, n]) => {
195
+ if (h?.kind === 'string')
196
+ return bool(h.value.includes(text(fn, n, 1)));
197
+ if (h?.kind === 'array')
198
+ return bool(h.value.some((x) => sameValue(fn, x, n ?? MISSING)));
199
+ if (h?.kind === 'number')
200
+ throw new FnFailure('array.indexOf is not a function'); // corpus D-05
201
+ return unsupported(fn, describe(h ?? MISSING));
202
+ },
203
+ }),
204
+ // split("") is an empty array in Make, not [""] (corpus D-04).
205
+ split: (fn) => ({ min: 2, max: 2, impl: ([s, sep]) => {
206
+ const t = text(fn, s, 0);
207
+ return arr(t === '' ? [] : t.split(text(fn, sep, 1)).map(str));
208
+ } }),
209
+ toString: (fn) => ({
210
+ min: 1,
211
+ max: 2,
212
+ impl: ([v, enc]) => {
213
+ if (v?.kind === 'binary') {
214
+ if (enc?.kind === 'string' && enc.value === 'hex')
215
+ return str(Buffer.from(v.value).toString('hex'));
216
+ return unsupported(fn, `binary with encoding ${describe(enc ?? MISSING)}`);
217
+ }
218
+ if (enc !== undefined)
219
+ return unsupported(fn, 'an encoding for non-binary input');
220
+ if (v?.kind === 'number' || v?.kind === 'string')
221
+ return str(toText(v));
222
+ return unsupported(fn, describe(v ?? MISSING));
223
+ },
224
+ }),
225
+ toBinary: (fn) => ({ min: 1, max: 1, impl: ([s]) => ({ kind: 'binary', value: new Uint8Array(utf8(text(fn, s, 0))) }) }),
226
+ // math
227
+ round: (fn) => ({ min: 1, max: 1, impl: ([n]) => num(Math.round(number(fn, n, 0))) }), // round(-2.5) = -2 (corpus D-01)
228
+ ceil: (fn) => ({ min: 1, max: 1, impl: ([n]) => num(Math.ceil(number(fn, n, 0))) }),
229
+ floor: (fn) => ({ min: 1, max: 1, impl: ([n]) => num(Math.floor(number(fn, n, 0))) }),
230
+ max: (fn) => ({ min: 1, max: Infinity, impl: (a) => num(Math.max(...numbersOf(fn, a))) }), // max([]) = -Infinity (corpus D-03)
231
+ min: (fn) => ({ min: 1, max: Infinity, impl: (a) => num(Math.min(...numbersOf(fn, a))) }),
232
+ sum: (fn) => ({
233
+ min: 1,
234
+ max: 1,
235
+ impl: ([a]) => {
236
+ if (a?.kind === 'number')
237
+ return a; // sum(30) = 30 (corpus D3 a_ages_sum)
238
+ return num(array(fn, a, 0).reduce((t, v, i) => t + number(fn, v, i), 0));
239
+ },
240
+ }),
241
+ average: (fn) => ({
242
+ min: 1,
243
+ max: 1,
244
+ impl: ([a]) => {
245
+ const xs = array(fn, a, 0).map((v, i) => number(fn, v, i));
246
+ return num(xs.reduce((t, x) => t + x, 0) / xs.length); // average([]) = NaN (corpus D-03)
247
+ },
248
+ }),
249
+ // parseNumber("1.234,56"; ",") = 1234.56 and parseNumber("abc"; ",") = 0 (corpus D-01, D-03).
250
+ parseNumber: (fn) => ({
251
+ min: 2,
252
+ max: 2,
253
+ impl: ([t, sep]) => {
254
+ const s = text(fn, t, 0);
255
+ const d = text(fn, sep, 1);
256
+ if (d.length !== 1)
257
+ unsupported(fn, `decimal separator ${JSON.stringify(d)}`);
258
+ const kept = [...s].filter((c) => /[0-9-]/.test(c) || c === d).join('').replaceAll(d, '.');
259
+ return num(Number(kept));
260
+ },
261
+ }),
262
+ formatNumber: (fn) => ({
263
+ min: 4,
264
+ max: 4,
265
+ impl: ([n, dec, dsep, tsep]) => {
266
+ const x = number(fn, n, 0);
267
+ const digits = number(fn, dec, 1);
268
+ const fixed = Math.abs(x).toFixed(digits);
269
+ const [int, frac] = fixed.split('.');
270
+ const grouped = int.replace(/\B(?=(\d{3})+(?!\d))/g, text(fn, tsep, 3));
271
+ return str(`${x < 0 ? '-' : ''}${grouped}${frac === undefined ? '' : text(fn, dsep, 2) + frac}`);
272
+ },
273
+ }),
274
+ // logic
275
+ // The evaluator handles if() itself so that only the chosen branch is evaluated.
276
+ if: () => ({ min: 3, max: 3, impl: ([c, a, b]) => (truthy(c ?? MISSING) ? a : b) }),
277
+ ifempty: (fn) => ({
278
+ min: 2,
279
+ max: 2,
280
+ impl: ([v, fb]) => {
281
+ const x = v ?? MISSING;
282
+ // Only "", null and missing are empty. [], {}, 0 and false come back unchanged (corpus D2).
283
+ if (x.kind === 'missing' || x.kind === 'null' || (x.kind === 'string' && x.value === ''))
284
+ return fb;
285
+ return x;
286
+ },
287
+ }),
288
+ switch: (fn) => ({
289
+ min: 3,
290
+ max: Infinity,
291
+ impl: ([v, ...rest]) => {
292
+ for (let i = 0; i + 1 < rest.length; i += 2)
293
+ if (sameValue(fn, v ?? MISSING, rest[i]))
294
+ return rest[i + 1];
295
+ return rest.length % 2 === 1 ? rest[rest.length - 1] : MISSING;
296
+ },
297
+ }),
298
+ // arrays and collections
299
+ // Nested arrays are flattened first: join([[1, 2], [3, [4]]]; "|") = "1|2|3|4"; join(1.nope; ",") = "" (corpus D2).
300
+ join: (fn) => ({
301
+ min: 2,
302
+ max: 2,
303
+ impl: ([a, sep]) => {
304
+ if (a?.kind === 'missing' || a?.kind === 'null')
305
+ return str('');
306
+ if (a?.kind === 'string')
307
+ return str(''); // join("Ann"; "|") = "" (corpus D3, what [] passes it)
308
+ return str(deepFlatten(array(fn, a, 0)).map((v) => (v.kind === 'missing' || v.kind === 'null' ? '' : primitiveText(fn, v))).join(text(fn, sep, 1)));
309
+ },
310
+ }),
311
+ first: (fn) => ({
312
+ min: 1,
313
+ max: 1,
314
+ impl: ([a]) => {
315
+ if (a?.kind === 'string')
316
+ throw new FnFailure(`'${a.value}' is not a valid array.`); // corpus D-05b
317
+ return array(fn, a, 0)[0] ?? MISSING;
318
+ },
319
+ }),
320
+ last: (fn) => ({
321
+ min: 1,
322
+ max: 1,
323
+ impl: ([a]) => {
324
+ if (a?.kind === 'string')
325
+ throw new FnFailure(`'${a.value}' is not a valid array.`); // corpus D3 a_names_last
326
+ return array(fn, a, 0).at(-1) ?? MISSING;
327
+ },
328
+ }),
329
+ reverse: (fn) => ({ min: 1, max: 1, impl: ([a]) => arr([...array(fn, a, 0)].reverse()) }),
330
+ // Text sorts by UTF-16 code units: [é, e, z, É] → e, z, É, é (corpus D-02).
331
+ // Numbers sort numerically: [1, 2, 3, 10] stays 1, 2, 3, 10 (corpus D2). Mixed arrays are refused.
332
+ sort: (fn) => ({
333
+ min: 1,
334
+ max: 2,
335
+ impl: ([a, order]) => {
336
+ const xs = [...array(fn, a, 0)];
337
+ if (xs.every((v) => v.kind === 'string'))
338
+ xs.sort((x, y) => (x.value < y.value ? -1 : x.value > y.value ? 1 : 0));
339
+ else if (xs.every((v) => v.kind === 'number'))
340
+ xs.sort((x, y) => x.value - y.value);
341
+ else
342
+ return unsupported(fn, 'an array mixing types');
343
+ if (order === undefined)
344
+ return arr(xs);
345
+ if (order.kind === 'string' && order.value === 'desc')
346
+ return arr(xs.reverse());
347
+ return unsupported(fn, `sort order ${describe(order)}`);
348
+ },
349
+ }),
350
+ slice: (fn) => ({ min: 3, max: 3, impl: ([a, s, e]) => arr(array(fn, a, 0).slice(number(fn, s, 1), number(fn, e, 2))) }), // 0-based (corpus D-01)
351
+ // 1 and "1" count as the same value (corpus D-01).
352
+ deduplicate: (fn) => ({
353
+ min: 1,
354
+ max: 1,
355
+ impl: ([a]) => {
356
+ const seen = new Set();
357
+ return arr(array(fn, a, 0).filter((v) => {
358
+ const k = primitiveText(fn, v);
359
+ if (seen.has(k))
360
+ return false;
361
+ seen.add(k);
362
+ return true;
363
+ }));
364
+ },
365
+ }),
366
+ add: (fn) => ({ min: 2, max: Infinity, impl: ([a, ...vs]) => arr([...array(fn, a, 0), ...vs]) }),
367
+ remove: (fn) => ({ min: 2, max: Infinity, impl: ([a, ...vs]) => arr(array(fn, a, 0).filter((x) => !vs.some((v) => sameValue(fn, x, v)))) }),
368
+ merge: (fn) => ({ min: 1, max: Infinity, impl: (as) => arr(as.flatMap((a, i) => array(fn, a, i))) }),
369
+ // All levels: length(flatten([[1, 2], [3, [4]]])) = 4 (corpus D2).
370
+ flatten: (fn) => ({ min: 1, max: 1, impl: ([a]) => arr(deepFlatten(array(fn, a, 0))) }),
371
+ map: (fn) => ({
372
+ min: 2,
373
+ max: Infinity,
374
+ impl: ([a, key, fkey, ...fvals]) => {
375
+ const k = text(fn, key, 1);
376
+ let items = array(fn, a, 0).map((v, i) => object(fn, v, i));
377
+ if (fkey !== undefined) {
378
+ const fk = text(fn, fkey, 2);
379
+ items = items.filter((m) => fvals.some((fv) => sameValue(fn, m.get(fk) ?? MISSING, fv)));
380
+ }
381
+ // An item without the key stays in the result as an empty entry: join(map(people; "name"); "|")
382
+ // gave "Ann|Bob||" and length() 4 for [Ann, Bob, {age}, {name: null}] (corpus D3).
383
+ return arr(items.map((m) => m.get(k) ?? MISSING));
384
+ },
385
+ }),
386
+ keys: (fn) => ({ min: 1, max: 1, impl: ([o]) => arr([...object(fn, o, 0).keys()].map(str)) }),
387
+ // get(people; "1.name"): numeric path segments index arrays from 1 (corpus D-01).
388
+ get: (fn) => ({
389
+ min: 2,
390
+ max: 2,
391
+ impl: ([c, path]) => {
392
+ let cur = c ?? MISSING;
393
+ for (const seg of text(fn, path, 1).split('.')) {
394
+ if (cur.kind === 'object')
395
+ cur = cur.value.get(seg) ?? MISSING;
396
+ else if (cur.kind === 'array' && /^\d+$/.test(seg))
397
+ cur = cur.value[Number(seg) - 1] ?? MISSING;
398
+ else if (cur.kind === 'missing' || cur.kind === 'null')
399
+ return MISSING;
400
+ else
401
+ return unsupported(fn, `the path segment ${JSON.stringify(seg)} on ${cur.kind}`);
402
+ }
403
+ return cur;
404
+ },
405
+ }),
406
+ toArray: (fn) => ({ min: 1, max: 1, impl: ([o]) => arr([...object(fn, o, 0)].map(([k, v]) => obj(new Map([['key', str(k)], ['value', v]])))) }),
407
+ pick: (fn) => ({ min: 2, max: Infinity, impl: ([o, ...ks]) => {
408
+ const m = object(fn, o, 0);
409
+ const want = ks.map((k, i) => text(fn, k, i + 1));
410
+ return obj(new Map([...m].filter(([k]) => want.includes(k))));
411
+ } }),
412
+ omit: (fn) => ({ min: 2, max: Infinity, impl: ([o, ...ks]) => {
413
+ const m = object(fn, o, 0);
414
+ const drop = ks.map((k, i) => text(fn, k, i + 1));
415
+ return obj(new Map([...m].filter(([k]) => !drop.includes(k))));
416
+ } }),
417
+ // dates (scenario timezone)
418
+ parseDate: (fn) => ({ min: 2, max: 3, impl: ([t, f, zone], ctx) => date(dates.parseDate(text(fn, t, 0), text(fn, f, 1), zone === undefined ? tz(fn, ctx) : text(fn, zone, 2))) }),
419
+ formatDate: (fn) => ({ min: 2, max: 3, impl: ([d, f, zone], ctx) => str(dates.formatDate(instant(fn, d, 0), text(fn, f, 1), zone === undefined ? tz(fn, ctx) : text(fn, zone, 2))) }),
420
+ addDays: (fn) => ({ min: 2, max: 2, impl: ([d, n], ctx) => date(dates.addDays(instant(fn, d, 0), number(fn, n, 1), tz(fn, ctx))) }),
421
+ addMonths: (fn) => ({ min: 2, max: 2, impl: ([d, n], ctx) => date(dates.addMonths(instant(fn, d, 0), number(fn, n, 1), tz(fn, ctx))) }),
422
+ addHours: (fn) => ({ min: 2, max: 2, impl: ([d, n]) => date(instant(fn, d, 0) + number(fn, n, 1) * 3_600_000) }),
423
+ // Moves within the Sunday-first week: Saturday 2026-01-31 → Monday 2026-01-26 (corpus D-01).
424
+ setDay: (fn) => ({
425
+ min: 2,
426
+ max: 2,
427
+ impl: ([d, day], ctx) => {
428
+ const zone = tz(fn, ctx);
429
+ const t = instant(fn, d, 0);
430
+ const target = dates.DAY_NAMES.indexOf(text(fn, day, 1).toLowerCase());
431
+ if (target === -1)
432
+ unsupported(fn, `day ${describe(day)}`);
433
+ return date(dates.addDays(t, target - dates.weekday(t, zone), zone));
434
+ },
435
+ }),
436
+ };
437
+ export const FUNCTIONS = Object.fromEntries(Object.entries(DEFS).map(([name, make]) => [name, make(name)]));
438
+ /**
439
+ * if() truthiness is JavaScript's: "false", "0", "abc", -1, [] and {} are true; false,
440
+ * 0, "", null and missing are false (corpus D-01, D2).
441
+ */
442
+ export function truthy(v) {
443
+ switch (v.kind) {
444
+ case 'boolean':
445
+ return v.value;
446
+ case 'number':
447
+ return v.value !== 0 && !Number.isNaN(v.value);
448
+ case 'string':
449
+ return v.value !== '';
450
+ case 'missing':
451
+ case 'null':
452
+ return false;
453
+ default:
454
+ return true;
455
+ }
456
+ }
457
+ function deepFlatten(xs) {
458
+ return xs.flatMap((v) => (v.kind === 'array' ? deepFlatten(v.value) : [v]));
459
+ }
460
+ //# sourceMappingURL=functions.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"functions.js","sourceRoot":"","sources":["../../../src/expr/functions.ts"],"names":[],"mappings":"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"}