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,182 @@
1
+ #!/usr/bin/env node
2
+ import { readdirSync, readFileSync, statSync } from 'node:fs';
3
+ import { join } from 'node:path';
4
+ import { loadBlueprint } from './blueprint/load.js';
5
+ import { UnsupportedError } from './expr/errors.js';
6
+ import { EXIT } from './findings.js';
7
+ import { inspectBytes, renderInspect } from './inspect.js';
8
+ import { parseJson } from './json/parse.js';
9
+ import { runCase } from './run/case.js';
10
+ import { FixtureError, FixtureSet } from './run/fixtures.js';
11
+ import { InvalidInputError, LimitExceededError, runScenario } from './run/scheduler.js';
12
+ const USAGE = `blueprint-runtime (bpr): run and test Make.com scenario blueprints offline
13
+
14
+ usage:
15
+ bpr inspect <blueprint.json>... [--json]
16
+ bpr test <case.json | folder>... [--json] [--allow-unsupported]
17
+ bpr run <blueprint.json> --input <payload.json> [--fixtures <fixtures.json>] [--timezone <IANA name>]
18
+
19
+ exit codes:
20
+ 0 success (inspect: eligible; test: every case matched its expected run)
21
+ 1 a test case differs from Make's recorded run
22
+ 2 invalid input (bad JSON, broken structure, unreadable file)
23
+ 3 uses something without recorded Make behavior
24
+ 4 a run failed (bpr run only: the scenario hit an error, as Make would have)
25
+ 5 a fixture is missing, does not match, or was never used (never a network call)
26
+ 6 a local limit was exceeded
27
+ `;
28
+ function flagValue(args, name) {
29
+ const i = args.indexOf(name);
30
+ return i === -1 ? undefined : args[i + 1];
31
+ }
32
+ function inspect(args) {
33
+ const json = args.includes('--json');
34
+ const unknownFlags = args.filter((a) => a.startsWith('-') && a !== '--json');
35
+ if (unknownFlags.length) {
36
+ process.stderr.write(`unknown option ${unknownFlags.join(', ')}\n`);
37
+ return EXIT.invalidInput;
38
+ }
39
+ const files = args.filter((a) => !a.startsWith('-'));
40
+ if (files.length === 0) {
41
+ process.stderr.write(`inspect needs at least one file\n\n${USAGE}`);
42
+ return EXIT.invalidInput;
43
+ }
44
+ const reports = [];
45
+ let exitCode = EXIT.ok;
46
+ for (const file of files) {
47
+ let bytes;
48
+ try {
49
+ bytes = readFileSync(file);
50
+ }
51
+ catch (e) {
52
+ process.stderr.write(`cannot read ${file}: ${e.message}\n`);
53
+ exitCode = EXIT.invalidInput;
54
+ continue;
55
+ }
56
+ const report = inspectBytes(file, bytes);
57
+ reports.push(report);
58
+ if (report.exitCode === EXIT.invalidInput || (report.exitCode === EXIT.unsupported && exitCode === EXIT.ok))
59
+ exitCode = report.exitCode;
60
+ }
61
+ if (json) {
62
+ const payload = reports.length === 1 && files.length === 1 ? reports[0] : { schemaVersion: 1, tool: 'blueprint-runtime', command: 'inspect', reports, exitCode };
63
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
64
+ }
65
+ else {
66
+ process.stdout.write(`${reports.map(renderInspect).join('\n\n')}\n`);
67
+ if (reports.length > 1) {
68
+ const count = (v) => reports.filter((r) => r.verdict === v).length;
69
+ process.stdout.write(`\n${reports.length} files: ${count('eligible')} eligible, ${count('unsupported')} not yet supported, ${count('invalid')} invalid\n`);
70
+ }
71
+ }
72
+ return exitCode;
73
+ }
74
+ function findCases(path) {
75
+ if (!statSync(path, { throwIfNoEntry: false })?.isDirectory())
76
+ return [path];
77
+ return readdirSync(path, { withFileTypes: true })
78
+ .sort((a, b) => a.name.localeCompare(b.name))
79
+ .flatMap((e) => (e.isDirectory() ? findCases(join(path, e.name)) : e.name === 'case.json' ? [join(path, e.name)] : []));
80
+ }
81
+ function test(args) {
82
+ const json = args.includes('--json');
83
+ const allowUnsupported = args.includes('--allow-unsupported');
84
+ const unknownFlags = args.filter((a) => a.startsWith('-') && a !== '--json' && a !== '--allow-unsupported');
85
+ if (unknownFlags.length) {
86
+ process.stderr.write(`unknown option ${unknownFlags.join(', ')}\n`);
87
+ return EXIT.invalidInput;
88
+ }
89
+ const files = args.filter((a) => !a.startsWith('-')).flatMap(findCases);
90
+ if (files.length === 0) {
91
+ process.stderr.write(`test needs at least one case.json or a folder containing them\n\n${USAGE}`);
92
+ return EXIT.invalidInput;
93
+ }
94
+ const results = files.map(runCase);
95
+ const count = (v) => results.filter((r) => r.verdict === v).length;
96
+ const exitCode = count('fail') ? EXIT.assertionFailed : count('invalid') ? EXIT.invalidInput : count('fixture') ? EXIT.fixtureMismatch : count('limit') ? EXIT.limitExceeded : count('unsupported') && !allowUnsupported ? EXIT.unsupported : EXIT.ok;
97
+ if (json) {
98
+ const payload = { schemaVersion: 1, tool: 'blueprint-runtime', command: 'test', results: results.map(({ trace: _trace, ...r }) => r), exitCode };
99
+ process.stdout.write(`${JSON.stringify(payload, null, 2)}\n`);
100
+ return exitCode;
101
+ }
102
+ const label = { pass: 'PASS', fail: 'FAIL', unsupported: 'SKIP', invalid: 'BAD ', limit: 'LIMIT', fixture: 'FIXT' };
103
+ const width = Math.max(...results.map((r) => r.name.length));
104
+ for (const r of results) {
105
+ const why = r.verdict === 'pass' ? '' : r.verdict === 'unsupported' ? ` not supported yet: ${r.message}` : ` ${r.message}`;
106
+ process.stdout.write(`${`${label[r.verdict]} ${r.name.padEnd(width)}${why}`.trimEnd()}\n`);
107
+ }
108
+ const snapshots = results.filter((r) => r.verdict === 'pass' && r.against === 'snapshot').length;
109
+ const matched = snapshots ? `${count('pass')} matched (${count('pass') - snapshots} Make runs, ${snapshots} snapshots)` : `${count('pass')} matched Make`;
110
+ process.stdout.write(`\n${results.length} cases: ${matched}, ${count('fail')} differ, ${count('unsupported')} not supported yet, ${count('invalid')} invalid${count('fixture') ? `, ${count('fixture')} fixture problem${count('fixture') > 1 ? 's' : ''}` : ''}${count('limit') ? `, ${count('limit')} over a limit` : ''}\n`);
111
+ return exitCode;
112
+ }
113
+ function run(args) {
114
+ const [file] = args.filter((a, i) => !a.startsWith('-') && !['--input', '--timezone', '--fixtures'].includes(args[i - 1] ?? ''));
115
+ const inputFile = flagValue(args, '--input');
116
+ if (!file || !inputFile) {
117
+ process.stderr.write(`run needs a blueprint and --input <payload.json>\n\n${USAGE}`);
118
+ return EXIT.invalidInput;
119
+ }
120
+ let loaded;
121
+ let payload;
122
+ let fixtures;
123
+ try {
124
+ loaded = loadBlueprint(readFileSync(file));
125
+ payload = parseJson(readFileSync(inputFile, 'utf8'), 64).value;
126
+ const fixturesFile = flagValue(args, '--fixtures');
127
+ fixtures = fixturesFile ? FixtureSet.fromJson(parseJson(readFileSync(fixturesFile, 'utf8'), 64).value) : new FixtureSet();
128
+ }
129
+ catch (e) {
130
+ process.stderr.write(`${e.message}\n`);
131
+ return EXIT.invalidInput;
132
+ }
133
+ if (!loaded.plan) {
134
+ process.stderr.write(`${file} is not a runnable blueprint:\n${loaded.findings.map((f) => ` ${f.code}: ${f.message}`).join('\n')}\n`);
135
+ return loaded.findings.some((f) => f.severity === 'error') ? EXIT.invalidInput : EXIT.unsupported;
136
+ }
137
+ try {
138
+ const trace = runScenario(loaded.plan, payload, { timezone: flagValue(args, '--timezone') ?? null, fixtures });
139
+ fixtures.assertAllUsed();
140
+ process.stdout.write(`${JSON.stringify(trace, null, 2)}\n`);
141
+ return trace.status === 'error' ? EXIT.runtimeFailure : EXIT.ok;
142
+ }
143
+ catch (e) {
144
+ if (e instanceof FixtureError) {
145
+ process.stderr.write(`fixture: ${e.message}\n`);
146
+ return EXIT.fixtureMismatch;
147
+ }
148
+ if (e instanceof InvalidInputError) {
149
+ process.stderr.write(`${e.message}\n`);
150
+ return EXIT.invalidInput;
151
+ }
152
+ if (e instanceof UnsupportedError) {
153
+ process.stderr.write(`not supported yet: ${e.message}\n`);
154
+ return EXIT.unsupported;
155
+ }
156
+ if (e instanceof LimitExceededError) {
157
+ process.stderr.write(`${e.message}\n`);
158
+ return EXIT.limitExceeded;
159
+ }
160
+ throw e;
161
+ }
162
+ }
163
+ function main(argv) {
164
+ const [command, ...rest] = argv;
165
+ if (!command || command === '-h' || command === '--help' || command === 'help') {
166
+ process.stdout.write(USAGE);
167
+ return command ? EXIT.ok : EXIT.invalidInput;
168
+ }
169
+ switch (command) {
170
+ case 'inspect':
171
+ return inspect(rest);
172
+ case 'test':
173
+ return test(rest);
174
+ case 'run':
175
+ return run(rest);
176
+ default:
177
+ process.stderr.write(`unknown command "${command}"\n\n${USAGE}`);
178
+ return EXIT.invalidInput;
179
+ }
180
+ }
181
+ process.exitCode = main(process.argv.slice(2));
182
+ //# sourceMappingURL=cli.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"cli.js","sourceRoot":"","sources":["../../src/cli.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,152 @@
1
+ import { UnsupportedError } from './errors.js';
2
+ const formatters = new Map();
3
+ function formatter(tz) {
4
+ let f = formatters.get(tz);
5
+ if (!f) {
6
+ try {
7
+ f = new Intl.DateTimeFormat('en-US', { timeZone: tz, hourCycle: 'h23', year: 'numeric', month: 'numeric', day: 'numeric', hour: 'numeric', minute: 'numeric', second: 'numeric' });
8
+ }
9
+ catch {
10
+ throw new UnsupportedError(`unknown timezone ${JSON.stringify(tz)}`);
11
+ }
12
+ formatters.set(tz, f);
13
+ }
14
+ return f;
15
+ }
16
+ export function toLocal(epochMs, tz) {
17
+ const parts = Object.fromEntries(formatter(tz).formatToParts(new Date(epochMs)).map((p) => [p.type, p.value]));
18
+ return {
19
+ year: Number(parts['year']),
20
+ month: Number(parts['month']),
21
+ day: Number(parts['day']),
22
+ hour: Number(parts['hour']),
23
+ minute: Number(parts['minute']),
24
+ second: Number(parts['second']),
25
+ ms: ((epochMs % 1000) + 1000) % 1000,
26
+ };
27
+ }
28
+ /** Offset of tz from UTC at an instant, in ms (Asia/Karachi → +18000000). */
29
+ export function offsetMs(epochMs, tz) {
30
+ const f = toLocal(epochMs, tz);
31
+ return Date.UTC(f.year, f.month - 1, f.day, f.hour, f.minute, f.second, f.ms) - epochMs;
32
+ }
33
+ export function fromLocal(f, tz) {
34
+ const asUtc = Date.UTC(f.year, f.month - 1, f.day, f.hour, f.minute, f.second, f.ms);
35
+ const first = asUtc - offsetMs(asUtc, tz);
36
+ return asUtc - offsetMs(first, tz);
37
+ }
38
+ /** Day of week in tz, 0 = Sunday. */
39
+ export function weekday(epochMs, tz) {
40
+ const f = toLocal(epochMs, tz);
41
+ return new Date(Date.UTC(f.year, f.month - 1, f.day)).getUTCDay();
42
+ }
43
+ const daysIn = (year, month) => new Date(Date.UTC(year, month, 0)).getUTCDate();
44
+ /** Calendar months in tz; the day is clamped (Jan 31 + 1 month = Feb 28/29), as observed. */
45
+ export function addMonths(epochMs, n, tz) {
46
+ const f = toLocal(epochMs, tz);
47
+ const total = f.year * 12 + (f.month - 1) + n;
48
+ const year = Math.floor(total / 12);
49
+ const month = (total % 12) + 1;
50
+ return fromLocal({ ...f, year, month, day: Math.min(f.day, daysIn(year, month)) }, tz);
51
+ }
52
+ /** Calendar days in tz (keeps wall-clock time across DST changes). */
53
+ export function addDays(epochMs, n, tz) {
54
+ const f = toLocal(epochMs, tz);
55
+ const shifted = new Date(Date.UTC(f.year, f.month - 1, f.day + n));
56
+ return fromLocal({ ...f, year: shifted.getUTCFullYear(), month: shifted.getUTCMonth() + 1, day: shifted.getUTCDate() }, tz);
57
+ }
58
+ const pad = (n, w = 2) => String(Math.abs(n)).padStart(w, '0');
59
+ /** Format tokens seen in real Make runs, plus ss. Any other letter is refused rather than guessed. */
60
+ const TOKENS = ['YYYY', 'MM', 'DD', 'HH', 'mm', 'ss', 'X', 'Z'];
61
+ function tokenize(format) {
62
+ const out = [];
63
+ let i = 0;
64
+ while (i < format.length) {
65
+ const t = TOKENS.find((x) => format.startsWith(x, i));
66
+ if (t) {
67
+ out.push({ token: t });
68
+ i += t.length;
69
+ }
70
+ else if (/[A-Za-z[\]]/.test(format[i])) {
71
+ throw new UnsupportedError(`date format ${JSON.stringify(format)}: "${format[i]}" is not a format token observed in Make`);
72
+ }
73
+ else {
74
+ out.push(format[i]);
75
+ i++;
76
+ }
77
+ }
78
+ return out;
79
+ }
80
+ export function formatDate(epochMs, format, tz) {
81
+ const f = toLocal(epochMs, tz);
82
+ return tokenize(format)
83
+ .map((p) => {
84
+ if (typeof p === 'string')
85
+ return p;
86
+ switch (p.token) {
87
+ case 'YYYY': return pad(f.year, 4);
88
+ case 'MM': return pad(f.month);
89
+ case 'DD': return pad(f.day);
90
+ case 'HH': return pad(f.hour);
91
+ case 'mm': return pad(f.minute);
92
+ case 'ss': return pad(f.second);
93
+ case 'X': return String(Math.floor(epochMs / 1000));
94
+ case 'Z': {
95
+ const off = Math.round(offsetMs(epochMs, tz) / 60000);
96
+ return `${off < 0 ? '-' : '+'}${pad(Math.trunc(off / 60))}:${pad(off % 60)}`;
97
+ }
98
+ }
99
+ })
100
+ .join('');
101
+ }
102
+ /** Parse text with a format, in tz. Anything that does not match exactly is refused. */
103
+ export function parseDate(text, format, tz) {
104
+ const f = { year: 1970, month: 1, day: 1, hour: 0, minute: 0, second: 0, ms: 0 };
105
+ let i = 0;
106
+ const fail = () => {
107
+ throw new UnsupportedError(`parseDate(${JSON.stringify(text)}; ${JSON.stringify(format)}): Make's result for text that does not match the format has not been observed`);
108
+ };
109
+ for (const p of tokenize(format)) {
110
+ if (typeof p === 'string') {
111
+ if (text[i] !== p)
112
+ fail();
113
+ i++;
114
+ continue;
115
+ }
116
+ const width = p.token === 'YYYY' ? 4 : 2;
117
+ if (p.token === 'X' || p.token === 'Z')
118
+ throw new UnsupportedError(`parseDate with "${p.token}" has not been observed in Make`);
119
+ const digits = text.slice(i, i + width);
120
+ if (!new RegExp(`^\\d{${width}}$`).test(digits))
121
+ fail();
122
+ i += width;
123
+ const n = Number(digits);
124
+ if (p.token === 'YYYY')
125
+ f.year = n;
126
+ else if (p.token === 'MM')
127
+ f.month = n;
128
+ else if (p.token === 'DD')
129
+ f.day = n;
130
+ else if (p.token === 'HH')
131
+ f.hour = n;
132
+ else if (p.token === 'mm')
133
+ f.minute = n;
134
+ else
135
+ f.second = n;
136
+ }
137
+ if (i !== text.length)
138
+ fail();
139
+ if (f.month < 1 || f.month > 12 || f.day < 1 || f.day > daysIn(f.year, f.month) || f.hour > 23 || f.minute > 59 || f.second > 59)
140
+ fail();
141
+ return fromLocal(f, tz);
142
+ }
143
+ const ISO = /^\d{4}-\d{2}-\d{2}T\d{2}:\d{2}(?::\d{2}(?:\.\d{1,3})?)?(?:Z|[+-]\d{2}:\d{2})$/;
144
+ /** Text Make accepted as a date in a real run: full ISO 8601 with a zone. */
145
+ export function parseIsoInstant(text) {
146
+ if (!ISO.test(text))
147
+ return null;
148
+ const t = Date.parse(text);
149
+ return Number.isNaN(t) ? null : t;
150
+ }
151
+ export const DAY_NAMES = ['sunday', 'monday', 'tuesday', 'wednesday', 'thursday', 'friday', 'saturday'];
152
+ //# sourceMappingURL=dates.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"dates.js","sourceRoot":"","sources":["../../../src/expr/dates.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,66 @@
1
+ /**
2
+ * Exact decimal arithmetic for Make's +, - and * operators.
3
+ *
4
+ * Make printed 0.1 + 0.7 = 0.8, 100.1 - 100 = 0.1 and 1.005 * 1000 = 1005, where
5
+ * JavaScript gives 0.7999999999999999, 0.09999999999999432 and 1004.9999999999999
6
+ * (corpus D2). Every observed result equals exact decimal arithmetic on the numbers
7
+ * as written, rounded back to a double. Functions like sum() do not do this:
8
+ * sum([0.1, 0.2]) was 0.30000000000000004.
9
+ */
10
+ function toDec(x) {
11
+ // String(x) is the shortest decimal that round-trips: "0.1", "1e+21", "1.5e-7".
12
+ const m = /^(-?)(\d+)(?:\.(\d+))?(?:e([+-]\d+))?$/.exec(String(x));
13
+ if (!m)
14
+ throw new Error(`not a finite number: ${x}`);
15
+ const [, sign, whole, frac = '', exp = '0'] = m;
16
+ let int = BigInt(`${sign}${whole}${frac}`);
17
+ let scale = frac.length - Number(exp);
18
+ if (scale < 0) {
19
+ int *= 10n ** BigInt(-scale);
20
+ scale = 0;
21
+ }
22
+ return { int, scale };
23
+ }
24
+ function toNumber(d) {
25
+ return Number(`${d.int}e${-d.scale}`);
26
+ }
27
+ function align(a, b) {
28
+ const scale = Math.max(a.scale, b.scale);
29
+ return [a.int * 10n ** BigInt(scale - a.scale), b.int * 10n ** BigInt(scale - b.scale), scale];
30
+ }
31
+ const finite = (...xs) => xs.every(Number.isFinite);
32
+ export function decAdd(a, b) {
33
+ if (!finite(a, b))
34
+ return a + b;
35
+ const [x, y, scale] = align(toDec(a), toDec(b));
36
+ return toNumber({ int: x + y, scale });
37
+ }
38
+ export function decSub(a, b) {
39
+ if (!finite(a, b))
40
+ return a - b;
41
+ const [x, y, scale] = align(toDec(a), toDec(b));
42
+ return toNumber({ int: x - y, scale });
43
+ }
44
+ export function decMul(a, b) {
45
+ if (!finite(a, b))
46
+ return a * b;
47
+ const x = toDec(a);
48
+ const y = toDec(b);
49
+ return toNumber({ int: x.int * y.int, scale: x.scale + y.scale });
50
+ }
51
+ /** Decimal quotient to 40 significant digits, rounded to a double. Used only to detect disagreement with JavaScript. */
52
+ export function decDiv(a, b) {
53
+ if (!finite(a, b) || b === 0)
54
+ return a / b;
55
+ const [x, y] = align(toDec(a), toDec(b));
56
+ const digits = 40n;
57
+ const q = (x * 10n ** digits) / y;
58
+ return toNumber({ int: q, scale: Number(digits) });
59
+ }
60
+ export function decMod(a, b) {
61
+ if (!finite(a, b) || b === 0)
62
+ return a % b;
63
+ const [x, y, scale] = align(toDec(a), toDec(b));
64
+ return toNumber({ int: x % y, scale });
65
+ }
66
+ //# sourceMappingURL=decimal.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"decimal.js","sourceRoot":"","sources":["../../../src/expr/decimal.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,31 @@
1
+ /**
2
+ * The expression engine can fail in three different ways, and they must never be
3
+ * confused:
4
+ *
5
+ * ExprSyntaxError the expression text cannot be parsed.
6
+ * DataError Make itself fails here. The message copies Make's wording,
7
+ * which was observed in a real run (corpus D-05 and D-05b).
8
+ * UnsupportedError Make's behavior for this case has not been observed, so the
9
+ * runtime refuses instead of guessing (spec 2.1, 19.1).
10
+ */
11
+ export class ExprSyntaxError extends Error {
12
+ offset;
13
+ constructor(message, offset) {
14
+ super(message);
15
+ this.name = 'ExprSyntaxError';
16
+ this.offset = offset;
17
+ }
18
+ }
19
+ export class DataError extends Error {
20
+ constructor(message) {
21
+ super(message);
22
+ this.name = 'DataError';
23
+ }
24
+ }
25
+ export class UnsupportedError extends Error {
26
+ constructor(message) {
27
+ super(message);
28
+ this.name = 'UnsupportedError';
29
+ }
30
+ }
31
+ //# sourceMappingURL=errors.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"errors.js","sourceRoot":"","sources":["../../../src/expr/errors.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,MAAM,OAAO,eAAgB,SAAQ,KAAK;IAC/B,MAAM,CAAS;IACxB,YAAY,OAAe,EAAE,MAAc;QACzC,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,iBAAiB,CAAC;QAC9B,IAAI,CAAC,MAAM,GAAG,MAAM,CAAC;IACvB,CAAC;CACF;AAED,MAAM,OAAO,SAAU,SAAQ,KAAK;IAClC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,WAAW,CAAC;IAC1B,CAAC;CACF;AAED,MAAM,OAAO,gBAAiB,SAAQ,KAAK;IACzC,YAAY,OAAe;QACzB,KAAK,CAAC,OAAO,CAAC,CAAC;QACf,IAAI,CAAC,IAAI,GAAG,kBAAkB,CAAC;IACjC,CAAC;CACF"}