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,250 @@
|
|
|
1
|
+
import { isObject } from '../json/parse.js';
|
|
2
|
+
import { DataError, UnsupportedError } from './errors.js';
|
|
3
|
+
import { decAdd, decDiv, decMod, decMul, decSub } from './decimal.js';
|
|
4
|
+
import { FnFailure, FUNCTIONS, truthy } from './functions.js';
|
|
5
|
+
import { parseTemplate } from './parser.js';
|
|
6
|
+
import { arr, bool, date, describe, fromJson, MISSING, num, obj, str, toText } from './values.js';
|
|
7
|
+
/** Keywords whose values were observed in Make (corpus D). Other known keywords are refused. */
|
|
8
|
+
const KEYWORDS = {
|
|
9
|
+
true: bool(true),
|
|
10
|
+
false: bool(false),
|
|
11
|
+
emptystring: str(''),
|
|
12
|
+
space: str(' '),
|
|
13
|
+
};
|
|
14
|
+
const UNOBSERVED_KEYWORDS = new Set(['null', 'timestamp', 'random', 'uuid', 'pi', 'nbsp', 'tab', 'newline', 'carriagereturn', 'emptyarray']);
|
|
15
|
+
export function evaluate(node, ctx) {
|
|
16
|
+
switch (node.type) {
|
|
17
|
+
case 'number':
|
|
18
|
+
return num(node.value);
|
|
19
|
+
case 'string':
|
|
20
|
+
return str(node.value);
|
|
21
|
+
case 'word': {
|
|
22
|
+
if (node.name === 'now') {
|
|
23
|
+
if (!ctx.now)
|
|
24
|
+
throw new UnsupportedError('`now` needs a clock: give the case environment a "now" (Make uses the time each module starts, corpus N-01)');
|
|
25
|
+
return date(ctx.now());
|
|
26
|
+
}
|
|
27
|
+
const k = KEYWORDS[node.name];
|
|
28
|
+
if (k)
|
|
29
|
+
return k;
|
|
30
|
+
if (UNOBSERVED_KEYWORDS.has(node.name))
|
|
31
|
+
throw new UnsupportedError(`the keyword "${node.name}" has not been observed in Make`);
|
|
32
|
+
// A bare word is not text in Make: indexOf("hello world"; o) = -1 (corpus D-01).
|
|
33
|
+
return MISSING;
|
|
34
|
+
}
|
|
35
|
+
case 'ref': {
|
|
36
|
+
let cur = ctx.output(node.moduleId);
|
|
37
|
+
let afterFirst = false;
|
|
38
|
+
for (const [i, seg] of node.path.entries()) {
|
|
39
|
+
// [] reads the FIRST element, wherever it is used: 1.people[].name gave "Ann" as text,
|
|
40
|
+
// as a function argument (first() then failed: 'Ann' is not a valid array) and in an
|
|
41
|
+
// iterator's array field (corpus D3, N-02, N-03). Make's map() is what reads them all.
|
|
42
|
+
// On an object it reads as missing, on text it is the text itself (D3 a_obj, a_notarr).
|
|
43
|
+
if ('all' in seg) {
|
|
44
|
+
if (cur.kind === 'missing' || cur.kind === 'null' || cur.kind === 'object')
|
|
45
|
+
return MISSING;
|
|
46
|
+
if (cur.kind === 'array')
|
|
47
|
+
cur = cur.value[0] ?? MISSING;
|
|
48
|
+
else if (cur.kind !== 'string')
|
|
49
|
+
throw new UnsupportedError(`[] on ${describe(cur)} has not been observed in Make`);
|
|
50
|
+
afterFirst = true;
|
|
51
|
+
continue;
|
|
52
|
+
}
|
|
53
|
+
if (cur.kind === 'missing' || cur.kind === 'null')
|
|
54
|
+
return MISSING;
|
|
55
|
+
// After [], a field of a plain value is the value itself: 1.nums[].x gave 1 and
|
|
56
|
+
// 1.notarr[].name gave "str" (D3). For 0 or false, see the bare-bundle quirk below.
|
|
57
|
+
if (afterFirst && 'key' in seg && (cur.kind === 'string' || cur.kind === 'number' || cur.kind === 'boolean')) {
|
|
58
|
+
if (cur.value === 0 || cur.value === false || cur.value === '')
|
|
59
|
+
throw new UnsupportedError(`reading a field of ${JSON.stringify(cur.value)} after [] has not been observed in Make`);
|
|
60
|
+
continue;
|
|
61
|
+
}
|
|
62
|
+
// An iterator over plain values emits bare bundles. Any field of a bare text, number
|
|
63
|
+
// or boolean reads as the value itself: 2.value and 2.__IMTINDEX__ gave "a" (C2-nl-01,
|
|
64
|
+
// C2-noagg-01), and 2.qty on "hello" failed qty > 0 (C-13). A field of a bare array
|
|
65
|
+
// reads as missing (C2-nl-05), and so does one of empty text (C2-nl-06, only bundle).
|
|
66
|
+
// For 0, Make returned the previous bundle's value (C2-nl-02), so 0 and false are refused.
|
|
67
|
+
if (i === 0 && 'key' in seg && (cur.kind === 'string' || cur.kind === 'number' || cur.kind === 'boolean' || cur.kind === 'array')) {
|
|
68
|
+
if (cur.kind === 'array' || (cur.kind === 'string' && cur.value === ''))
|
|
69
|
+
return MISSING;
|
|
70
|
+
if (cur.value === 0 || cur.value === false)
|
|
71
|
+
throw new UnsupportedError(`reading a field of the bare bundle ${String(cur.value)}: Make returned the previous bundle's value (corpus C2-nl-02), which is not modeled`);
|
|
72
|
+
return cur;
|
|
73
|
+
}
|
|
74
|
+
if ('key' in seg) {
|
|
75
|
+
if (cur.kind !== 'object')
|
|
76
|
+
throw new UnsupportedError(`reading the field "${seg.key}" of ${describe(cur)} has not been observed in Make`);
|
|
77
|
+
cur = cur.value.get(seg.key) ?? MISSING;
|
|
78
|
+
}
|
|
79
|
+
else {
|
|
80
|
+
if (cur.kind !== 'array')
|
|
81
|
+
throw new UnsupportedError(`indexing ${describe(cur)} with [${seg.index}] has not been observed in Make`);
|
|
82
|
+
cur = cur.value[seg.index - 1] ?? MISSING; // 1-based: 1.arr[2] is the second element (corpus D-01)
|
|
83
|
+
}
|
|
84
|
+
}
|
|
85
|
+
return cur;
|
|
86
|
+
}
|
|
87
|
+
case 'call': {
|
|
88
|
+
const def = FUNCTIONS[node.name];
|
|
89
|
+
if (!def)
|
|
90
|
+
throw new UnsupportedError(`the function ${node.name}() has no recorded Make behavior yet`);
|
|
91
|
+
if (node.args.length < def.min || node.args.length > def.max) {
|
|
92
|
+
throw new UnsupportedError(`${node.name}() with ${node.args.length} argument(s) has not been observed in Make`);
|
|
93
|
+
}
|
|
94
|
+
// if() evaluates only the branch it picks: if(true; "picked"; first(bad)) gave "picked" (corpus D2).
|
|
95
|
+
if (node.name === 'if') {
|
|
96
|
+
let condition;
|
|
97
|
+
try {
|
|
98
|
+
condition = evaluate(node.args[0], ctx);
|
|
99
|
+
}
|
|
100
|
+
catch (e) {
|
|
101
|
+
if (e instanceof DataError)
|
|
102
|
+
throw new UnsupportedError(`an error inside an if() condition has not been observed in Make (${e.message})`);
|
|
103
|
+
throw e;
|
|
104
|
+
}
|
|
105
|
+
// An error in the branch if() picked is wrapped once more, as Make reported it:
|
|
106
|
+
// "Function 'if' finished with error! Function 'first' finished with error! …" (corpus T-07).
|
|
107
|
+
try {
|
|
108
|
+
return evaluate(truthy(condition) ? node.args[1] : node.args[2], ctx);
|
|
109
|
+
}
|
|
110
|
+
catch (e) {
|
|
111
|
+
if (e instanceof DataError)
|
|
112
|
+
throw new DataError(`Function 'if' finished with error! ${e.message}`);
|
|
113
|
+
throw e;
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
// Every other function gets all arguments evaluated first. Whether Make skips
|
|
117
|
+
// unused arguments elsewhere (ifempty, switch) has not been observed.
|
|
118
|
+
const args = node.args.map((a) => evaluate(a, ctx));
|
|
119
|
+
try {
|
|
120
|
+
return def.impl(args, ctx);
|
|
121
|
+
}
|
|
122
|
+
catch (e) {
|
|
123
|
+
if (e instanceof FnFailure)
|
|
124
|
+
throw new DataError(`Function '${node.name}' finished with error! ${e.message}`);
|
|
125
|
+
throw e;
|
|
126
|
+
}
|
|
127
|
+
}
|
|
128
|
+
case 'binary':
|
|
129
|
+
return binary(node.op, evaluate(node.left, ctx), evaluate(node.right, ctx));
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
/**
|
|
133
|
+
* Number coercion for -, *, / and %: JavaScript's, except that a missing value counts
|
|
134
|
+
* as 0. Observed: "007" * 1 = 7, "abc" * 2 = NaN, 1.nope * 2 = 0 (corpus D-03, D2).
|
|
135
|
+
*/
|
|
136
|
+
function toNum(op, v) {
|
|
137
|
+
switch (v.kind) {
|
|
138
|
+
case 'number':
|
|
139
|
+
return v.value;
|
|
140
|
+
case 'string':
|
|
141
|
+
return Number(v.value);
|
|
142
|
+
case 'missing':
|
|
143
|
+
case 'null':
|
|
144
|
+
return 0;
|
|
145
|
+
case 'boolean':
|
|
146
|
+
return v.value ? 1 : 0;
|
|
147
|
+
default:
|
|
148
|
+
throw new UnsupportedError(`"${op}" with ${describe(v)} has not been observed in Make`);
|
|
149
|
+
}
|
|
150
|
+
}
|
|
151
|
+
/** A primitive as JavaScript sees it, for equality and ordering. */
|
|
152
|
+
function primitive(op, v) {
|
|
153
|
+
switch (v.kind) {
|
|
154
|
+
case 'missing':
|
|
155
|
+
return undefined;
|
|
156
|
+
case 'null':
|
|
157
|
+
return null;
|
|
158
|
+
case 'boolean':
|
|
159
|
+
case 'number':
|
|
160
|
+
case 'string':
|
|
161
|
+
return v.value;
|
|
162
|
+
default:
|
|
163
|
+
throw new UnsupportedError(`"${op}" with ${describe(v)} has not been observed in Make`);
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
/**
|
|
167
|
+
* / and % are only trusted where exact decimal and JavaScript double arithmetic agree.
|
|
168
|
+
* Observed results (1 / 3, -7 / 3, -7 % 3) fit both, so Make's choice is still unknown.
|
|
169
|
+
*/
|
|
170
|
+
function agreed(op, x, y, js, dec) {
|
|
171
|
+
if (Object.is(js, dec) || (Number.isNaN(js) && Number.isNaN(dec)))
|
|
172
|
+
return js;
|
|
173
|
+
throw new UnsupportedError(`${x} ${op} ${y}: decimal and floating-point results differ (${dec} vs ${js}); Make's rule for "${op}" has not been observed`);
|
|
174
|
+
}
|
|
175
|
+
function binary(op, a, b) {
|
|
176
|
+
switch (op) {
|
|
177
|
+
case '+':
|
|
178
|
+
// Two numbers add exactly in decimal: 0.1 + 0.2 = 0.3 (corpus D-01, D2).
|
|
179
|
+
if (a.kind === 'number' && b.kind === 'number')
|
|
180
|
+
return num(decAdd(a.value, b.value));
|
|
181
|
+
// Anything else joins as text: "42" + 1 = "421", true + 1 = "true1", 1.nope + 1 = "1" (corpus D-01, D2).
|
|
182
|
+
return str(toText(a) + toText(b));
|
|
183
|
+
case '-':
|
|
184
|
+
return num(decSub(toNum(op, a), toNum(op, b)));
|
|
185
|
+
case '*':
|
|
186
|
+
return num(decMul(toNum(op, a), toNum(op, b)));
|
|
187
|
+
case '/': {
|
|
188
|
+
const x = toNum(op, a);
|
|
189
|
+
const y = toNum(op, b);
|
|
190
|
+
return num(agreed(op, x, y, x / y, decDiv(x, y)));
|
|
191
|
+
}
|
|
192
|
+
case '%': {
|
|
193
|
+
const x = toNum(op, a);
|
|
194
|
+
const y = toNum(op, b);
|
|
195
|
+
return num(agreed(op, x, y, x % y, decMod(x, y)));
|
|
196
|
+
}
|
|
197
|
+
case '=':
|
|
198
|
+
case '!=': {
|
|
199
|
+
// Two dates are two objects to Make: now = now gave false (corpus D3 n_eq).
|
|
200
|
+
if (a.kind === 'date' && b.kind === 'date') {
|
|
201
|
+
if (op === '=')
|
|
202
|
+
return bool(false);
|
|
203
|
+
throw new UnsupportedError('"!=" between two dates has not been observed in Make');
|
|
204
|
+
}
|
|
205
|
+
// JavaScript's loose equality: 0 = false, null = missing and "42.0" = 42 are true,
|
|
206
|
+
// true = "true" and null = "" are false (corpus D-01, D-03, D2).
|
|
207
|
+
const eq = primitive(op, a) == primitive(op, b);
|
|
208
|
+
return bool(op === '=' ? eq : !eq);
|
|
209
|
+
}
|
|
210
|
+
case '<':
|
|
211
|
+
case '>':
|
|
212
|
+
case '<=':
|
|
213
|
+
case '>=': {
|
|
214
|
+
// Text against text compares as text; otherwise numerically ("42" > 9, corpus D-01).
|
|
215
|
+
// Missing and null have not been observed here: JavaScript would compare them as NaN and 0.
|
|
216
|
+
if (a.kind === 'missing' || a.kind === 'null' || b.kind === 'missing' || b.kind === 'null') {
|
|
217
|
+
throw new UnsupportedError(`"${op}" with ${a.kind === 'missing' || a.kind === 'null' ? a.kind : b.kind} has not been observed in Make`);
|
|
218
|
+
}
|
|
219
|
+
const x = primitive(op, a);
|
|
220
|
+
const y = primitive(op, b);
|
|
221
|
+
return bool(op === '<' ? x < y : op === '>' ? x > y : op === '<=' ? x <= y : x >= y);
|
|
222
|
+
}
|
|
223
|
+
case '&':
|
|
224
|
+
case '|':
|
|
225
|
+
if (a.kind === 'boolean' && b.kind === 'boolean')
|
|
226
|
+
return bool(op === '&' ? a.value && b.value : a.value || b.value);
|
|
227
|
+
throw new UnsupportedError(`"${op}" with ${describe(a)} and ${describe(b)} has not been observed in Make`);
|
|
228
|
+
}
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* A mapped field. One expression and nothing else keeps its type ({{1.items}} gave the
|
|
232
|
+
* iterator a real array, corpus C); anything with surrounding text becomes text.
|
|
233
|
+
*/
|
|
234
|
+
export function evaluateTemplate(parts, ctx) {
|
|
235
|
+
const only = parts.length === 1 ? parts[0] : undefined;
|
|
236
|
+
if (only && 'expr' in only)
|
|
237
|
+
return evaluate(only.expr, ctx);
|
|
238
|
+
return str(parts.map((p) => ('text' in p ? p.text : toText(evaluate(p.expr, ctx)))).join(''));
|
|
239
|
+
}
|
|
240
|
+
/** Evaluate a module's mapper: every string is a template; arrays and objects map through. */
|
|
241
|
+
export function evaluateMapper(v, ctx) {
|
|
242
|
+
if (typeof v === 'string')
|
|
243
|
+
return v.includes('{{') ? evaluateTemplate(parseTemplate(v), ctx) : str(v);
|
|
244
|
+
if (Array.isArray(v))
|
|
245
|
+
return arr(v.map((x) => evaluateMapper(x, ctx)));
|
|
246
|
+
if (isObject(v))
|
|
247
|
+
return obj(new Map(Object.keys(v).map((k) => [k, evaluateMapper(v[k], ctx)])));
|
|
248
|
+
return fromJson(v);
|
|
249
|
+
}
|
|
250
|
+
//# sourceMappingURL=evaluate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"evaluate.js","sourceRoot":"","sources":["../../../src/expr/evaluate.ts"],"names":[],"mappings":"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"}
|