@horizon36596/zenith-schema 0.1.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 (57) hide show
  1. package/LICENSE +21 -0
  2. package/NOTICE +18 -0
  3. package/README.md +24 -0
  4. package/dist/auto.d.ts +1882 -0
  5. package/dist/auto.d.ts.map +1 -0
  6. package/dist/auto.js +236 -0
  7. package/dist/auto.js.map +1 -0
  8. package/dist/common.d.ts +76 -0
  9. package/dist/common.d.ts.map +1 -0
  10. package/dist/common.js +30 -0
  11. package/dist/common.js.map +1 -0
  12. package/dist/expr.d.ts +56 -0
  13. package/dist/expr.d.ts.map +1 -0
  14. package/dist/expr.js +245 -0
  15. package/dist/expr.js.map +1 -0
  16. package/dist/field.d.ts +719 -0
  17. package/dist/field.d.ts.map +1 -0
  18. package/dist/field.js +158 -0
  19. package/dist/field.js.map +1 -0
  20. package/dist/ids.d.ts +62 -0
  21. package/dist/ids.d.ts.map +1 -0
  22. package/dist/ids.js +79 -0
  23. package/dist/ids.js.map +1 -0
  24. package/dist/index.d.ts +17 -0
  25. package/dist/index.d.ts.map +1 -0
  26. package/dist/index.js +17 -0
  27. package/dist/index.js.map +1 -0
  28. package/dist/jsonschema.d.ts +14 -0
  29. package/dist/jsonschema.d.ts.map +1 -0
  30. package/dist/jsonschema.js +31 -0
  31. package/dist/jsonschema.js.map +1 -0
  32. package/dist/link.d.ts +117 -0
  33. package/dist/link.d.ts.map +1 -0
  34. package/dist/link.js +58 -0
  35. package/dist/link.js.map +1 -0
  36. package/dist/migrate.d.ts +2699 -0
  37. package/dist/migrate.d.ts.map +1 -0
  38. package/dist/migrate.js +109 -0
  39. package/dist/migrate.js.map +1 -0
  40. package/dist/parse.d.ts +28 -0
  41. package/dist/parse.d.ts.map +1 -0
  42. package/dist/parse.js +46 -0
  43. package/dist/parse.js.map +1 -0
  44. package/dist/robot.d.ts +2935 -0
  45. package/dist/robot.d.ts.map +1 -0
  46. package/dist/robot.js +231 -0
  47. package/dist/robot.js.map +1 -0
  48. package/dist/waypoints.d.ts +63 -0
  49. package/dist/waypoints.d.ts.map +1 -0
  50. package/dist/waypoints.js +20 -0
  51. package/dist/waypoints.js.map +1 -0
  52. package/json/auto.json +683 -0
  53. package/json/field.json +457 -0
  54. package/json/link.json +110 -0
  55. package/json/robot.json +664 -0
  56. package/json/waypoints.json +50 -0
  57. package/package.json +65 -0
package/dist/expr.js ADDED
@@ -0,0 +1,245 @@
1
+ /**
2
+ * The `estimateS` expression grammar (site/docs/file-format.md, robot.json rules).
3
+ *
4
+ * expr := term (('+' | '-') term)*
5
+ * term := factor (('*' | '/') factor)*
6
+ * factor := '-'? primary
7
+ * primary := number | name | 'max' '(' expr ',' expr ')' | 'min' '(' expr ',' expr ')'
8
+ * | '(' expr ')'
9
+ *
10
+ * Or the whole string is the literal `"unknown"`, which means the timeline shows a hatched block
11
+ * and the total is a lower bound. Parsing and evaluation are pure: no clock, no randomness.
12
+ */
13
+ /** The string that means "this command's duration cannot be predicted". */
14
+ export const UNKNOWN_ESTIMATE = "unknown";
15
+ export class EstimateExprError extends Error {
16
+ source;
17
+ position;
18
+ constructor(message, source, position) {
19
+ super(`${message} in ${JSON.stringify(source)} at ${String(position)}`);
20
+ this.source = source;
21
+ this.position = position;
22
+ this.name = "EstimateExprError";
23
+ }
24
+ }
25
+ const PUNCT = new Set(["+", "-", "*", "/", "(", ")", ","]);
26
+ function tokenize(source) {
27
+ const tokens = [];
28
+ let i = 0;
29
+ while (i < source.length) {
30
+ const ch = source.charAt(i);
31
+ if (ch === " " || ch === "\t" || ch === "\n" || ch === "\r") {
32
+ i += 1;
33
+ continue;
34
+ }
35
+ if (PUNCT.has(ch)) {
36
+ tokens.push({ kind: "punct", value: ch, at: i });
37
+ i += 1;
38
+ continue;
39
+ }
40
+ if (ch >= "0" && ch <= "9") {
41
+ const start = i;
42
+ while (i < source.length && source.charAt(i) >= "0" && source.charAt(i) <= "9")
43
+ i += 1;
44
+ if (source.charAt(i) === ".") {
45
+ i += 1;
46
+ while (i < source.length && source.charAt(i) >= "0" && source.charAt(i) <= "9")
47
+ i += 1;
48
+ }
49
+ const text = source.slice(start, i);
50
+ tokens.push({ kind: "number", value: Number(text), at: start });
51
+ continue;
52
+ }
53
+ if (isNameStart(ch)) {
54
+ const start = i;
55
+ while (i < source.length && isNamePart(source.charAt(i)))
56
+ i += 1;
57
+ tokens.push({ kind: "name", value: source.slice(start, i), at: start });
58
+ continue;
59
+ }
60
+ throw new EstimateExprError(`Unexpected character ${JSON.stringify(ch)}`, source, i);
61
+ }
62
+ return tokens;
63
+ }
64
+ const isNameStart = (ch) => (ch >= "a" && ch <= "z") || (ch >= "A" && ch <= "Z") || ch === "_";
65
+ const isNamePart = (ch) => isNameStart(ch) || (ch >= "0" && ch <= "9");
66
+ /** Parses an `estimateS` string. Throws EstimateExprError on anything outside the grammar. */
67
+ export function parseEstimateExpression(source) {
68
+ if (source.trim() === UNKNOWN_ESTIMATE)
69
+ return { kind: "unknown" };
70
+ const tokens = tokenize(source);
71
+ if (tokens.length === 0)
72
+ throw new EstimateExprError("Empty expression", source, 0);
73
+ let pos = 0;
74
+ const peek = () => tokens[pos];
75
+ const fail = (message) => {
76
+ const token = peek();
77
+ throw new EstimateExprError(message, source, token === undefined ? source.length : token.at);
78
+ };
79
+ const eatPunct = (value) => {
80
+ const token = peek();
81
+ if (token !== undefined && token.kind === "punct" && token.value === value) {
82
+ pos += 1;
83
+ return true;
84
+ }
85
+ return false;
86
+ };
87
+ const expectPunct = (value) => {
88
+ if (!eatPunct(value))
89
+ fail(`Expected ${JSON.stringify(value)}`);
90
+ };
91
+ const parseExpr = () => {
92
+ let left = parseTerm();
93
+ for (;;) {
94
+ const token = peek();
95
+ if (token === undefined || token.kind !== "punct")
96
+ break;
97
+ if (token.value !== "+" && token.value !== "-")
98
+ break;
99
+ pos += 1;
100
+ left = { kind: "binary", op: token.value, left, right: parseTerm() };
101
+ }
102
+ return left;
103
+ };
104
+ const parseTerm = () => {
105
+ let left = parseFactor();
106
+ for (;;) {
107
+ const token = peek();
108
+ if (token === undefined || token.kind !== "punct")
109
+ break;
110
+ if (token.value !== "*" && token.value !== "/")
111
+ break;
112
+ pos += 1;
113
+ left = { kind: "binary", op: token.value, left, right: parseFactor() };
114
+ }
115
+ return left;
116
+ };
117
+ const parseFactor = () => {
118
+ if (eatPunct("-"))
119
+ return { kind: "unary", op: "-", operand: parseFactor() };
120
+ return parsePrimary();
121
+ };
122
+ const parsePrimary = () => {
123
+ const token = peek();
124
+ if (token === undefined)
125
+ return fail("Expected a number, a parameter name or a parenthesis");
126
+ if (token.kind === "number") {
127
+ pos += 1;
128
+ return { kind: "number", value: token.value };
129
+ }
130
+ if (token.kind === "name") {
131
+ pos += 1;
132
+ if (token.value === "max" || token.value === "min") {
133
+ expectPunct("(");
134
+ const first = parseExpr();
135
+ expectPunct(",");
136
+ const second = parseExpr();
137
+ expectPunct(")");
138
+ return { kind: "call", name: token.value, args: [first, second] };
139
+ }
140
+ const next = peek();
141
+ if (next !== undefined && next.kind === "punct" && next.value === "(") {
142
+ return fail(`Unknown function ${JSON.stringify(token.value)}; only max and min exist`);
143
+ }
144
+ return { kind: "name", name: token.value };
145
+ }
146
+ if (token.value === "(") {
147
+ pos += 1;
148
+ const inner = parseExpr();
149
+ expectPunct(")");
150
+ return inner;
151
+ }
152
+ return fail(`Unexpected ${JSON.stringify(token.value)}`);
153
+ };
154
+ const parsed = parseExpr();
155
+ if (pos !== tokens.length)
156
+ fail("Trailing input");
157
+ return parsed;
158
+ }
159
+ /** True when the string is a legal `estimateS` value. Used by the robot schema. */
160
+ export function isEstimateExpression(source) {
161
+ try {
162
+ parseEstimateExpression(source);
163
+ return true;
164
+ }
165
+ catch {
166
+ return false;
167
+ }
168
+ }
169
+ /** The parameter names an expression reads, so the caller can check them against the registry. */
170
+ export function estimateExpressionNames(expr) {
171
+ const names = [];
172
+ const walk = (node) => {
173
+ switch (node.kind) {
174
+ case "name":
175
+ if (!names.includes(node.name))
176
+ names.push(node.name);
177
+ return;
178
+ case "unary":
179
+ walk(node.operand);
180
+ return;
181
+ case "binary":
182
+ walk(node.left);
183
+ walk(node.right);
184
+ return;
185
+ case "call":
186
+ walk(node.args[0]);
187
+ walk(node.args[1]);
188
+ return;
189
+ default:
190
+ return;
191
+ }
192
+ };
193
+ walk(expr);
194
+ return names;
195
+ }
196
+ /**
197
+ * Evaluates an expression against a scope of parameter values. Returns null for `"unknown"`, for a
198
+ * name the scope does not define, and for division by zero: all three mean "no number here", which
199
+ * the timeline draws as a hatched block rather than a wrong answer.
200
+ */
201
+ export function evaluateEstimateExpression(expr, scope = {}) {
202
+ switch (expr.kind) {
203
+ case "unknown":
204
+ return null;
205
+ case "number":
206
+ return expr.value;
207
+ case "name": {
208
+ const value = scope[expr.name];
209
+ return value === undefined ? null : value;
210
+ }
211
+ case "unary": {
212
+ const operand = evaluateEstimateExpression(expr.operand, scope);
213
+ return operand === null ? null : -operand;
214
+ }
215
+ case "binary": {
216
+ const left = evaluateEstimateExpression(expr.left, scope);
217
+ const right = evaluateEstimateExpression(expr.right, scope);
218
+ if (left === null || right === null)
219
+ return null;
220
+ switch (expr.op) {
221
+ case "+":
222
+ return left + right;
223
+ case "-":
224
+ return left - right;
225
+ case "*":
226
+ return left * right;
227
+ case "/":
228
+ return right === 0 ? null : left / right;
229
+ }
230
+ return null;
231
+ }
232
+ case "call": {
233
+ const first = evaluateEstimateExpression(expr.args[0], scope);
234
+ const second = evaluateEstimateExpression(expr.args[1], scope);
235
+ if (first === null || second === null)
236
+ return null;
237
+ return expr.name === "max" ? Math.max(first, second) : Math.min(first, second);
238
+ }
239
+ }
240
+ }
241
+ /** Parse and evaluate in one call. Throws on a syntax error, returns null on an unknown value. */
242
+ export function evaluateEstimate(source, scope = {}) {
243
+ return evaluateEstimateExpression(parseEstimateExpression(source), scope);
244
+ }
245
+ //# sourceMappingURL=expr.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"expr.js","sourceRoot":"","sources":["../src/expr.ts"],"names":[],"mappings":"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"}