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.
- package/LICENSE +21 -0
- package/README.md +224 -3
- package/dist/src/blueprint/load.js +83 -0
- package/dist/src/blueprint/load.js.map +1 -0
- package/dist/src/blueprint/plan.js +202 -0
- package/dist/src/blueprint/plan.js.map +1 -0
- package/dist/src/cli.js +182 -0
- package/dist/src/cli.js.map +1 -0
- package/dist/src/expr/dates.js +152 -0
- package/dist/src/expr/dates.js.map +1 -0
- package/dist/src/expr/decimal.js +66 -0
- package/dist/src/expr/decimal.js.map +1 -0
- package/dist/src/expr/errors.js +31 -0
- package/dist/src/expr/errors.js.map +1 -0
- package/dist/src/expr/evaluate.js +250 -0
- package/dist/src/expr/evaluate.js.map +1 -0
- package/dist/src/expr/functions.js +460 -0
- package/dist/src/expr/functions.js.map +1 -0
- package/dist/src/expr/parser.js +228 -0
- package/dist/src/expr/parser.js.map +1 -0
- package/dist/src/expr/scan.js +101 -0
- package/dist/src/expr/scan.js.map +1 -0
- package/dist/src/expr/values.js +118 -0
- package/dist/src/expr/values.js.map +1 -0
- package/dist/src/findings.js +10 -0
- package/dist/src/findings.js.map +1 -0
- package/dist/src/inspect.js +313 -0
- package/dist/src/inspect.js.map +1 -0
- package/dist/src/json/parse.js +225 -0
- package/dist/src/json/parse.js.map +1 -0
- package/dist/src/registry.js +39 -0
- package/dist/src/registry.js.map +1 -0
- package/dist/src/run/case.js +122 -0
- package/dist/src/run/case.js.map +1 -0
- package/dist/src/run/compare.js +94 -0
- package/dist/src/run/compare.js.map +1 -0
- package/dist/src/run/fixtures.js +122 -0
- package/dist/src/run/fixtures.js.map +1 -0
- package/dist/src/run/modules.js +380 -0
- package/dist/src/run/modules.js.map +1 -0
- package/dist/src/run/operators.js +151 -0
- package/dist/src/run/operators.js.map +1 -0
- package/dist/src/run/scheduler.js +306 -0
- package/dist/src/run/scheduler.js.map +1 -0
- package/dist/src/run/trace.js +2 -0
- package/dist/src/run/trace.js.map +1 -0
- 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('&', '&').replaceAll('<', '<').replaceAll('>', '>');
|
|
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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"}
|