@cotal-ai/lang 0.23.0 → 0.24.0

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/README.md +57 -0
  2. package/dist/effects.d.ts +19 -0
  3. package/dist/effects.d.ts.map +1 -1
  4. package/dist/effects.js +23 -0
  5. package/dist/effects.js.map +1 -1
  6. package/dist/errors.d.ts +48 -2
  7. package/dist/errors.d.ts.map +1 -1
  8. package/dist/errors.js +90 -2
  9. package/dist/errors.js.map +1 -1
  10. package/dist/grammar.d.ts.map +1 -1
  11. package/dist/grammar.js +561 -128
  12. package/dist/grammar.js.map +1 -1
  13. package/dist/index.d.ts +10 -6
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +10 -6
  16. package/dist/index.js.map +1 -1
  17. package/dist/interpret.d.ts +81 -3
  18. package/dist/interpret.d.ts.map +1 -1
  19. package/dist/interpret.js +1446 -270
  20. package/dist/interpret.js.map +1 -1
  21. package/dist/journal.d.ts +218 -9
  22. package/dist/journal.d.ts.map +1 -1
  23. package/dist/journal.js +232 -12
  24. package/dist/journal.js.map +1 -1
  25. package/dist/keys.d.ts +39 -1
  26. package/dist/keys.d.ts.map +1 -1
  27. package/dist/keys.js +61 -0
  28. package/dist/keys.js.map +1 -1
  29. package/dist/library.d.ts +65 -0
  30. package/dist/library.d.ts.map +1 -0
  31. package/dist/library.js +525 -0
  32. package/dist/library.js.map +1 -0
  33. package/dist/notify-fact.d.ts +8 -0
  34. package/dist/notify-fact.d.ts.map +1 -0
  35. package/dist/notify-fact.js +69 -0
  36. package/dist/notify-fact.js.map +1 -0
  37. package/dist/pins.d.ts +82 -0
  38. package/dist/pins.d.ts.map +1 -0
  39. package/dist/pins.js +87 -0
  40. package/dist/pins.js.map +1 -0
  41. package/dist/primitives.d.ts +14 -0
  42. package/dist/primitives.d.ts.map +1 -1
  43. package/dist/primitives.js +45 -5
  44. package/dist/primitives.js.map +1 -1
  45. package/dist/sim.d.ts +9 -1
  46. package/dist/sim.d.ts.map +1 -1
  47. package/dist/sim.js +9 -1
  48. package/dist/sim.js.map +1 -1
  49. package/dist/syntax.d.ts +34 -0
  50. package/dist/syntax.d.ts.map +1 -0
  51. package/dist/syntax.js +178 -0
  52. package/dist/syntax.js.map +1 -0
  53. package/dist/values.d.ts +20 -1
  54. package/dist/values.d.ts.map +1 -1
  55. package/dist/values.js +0 -0
  56. package/dist/values.js.map +1 -1
  57. package/package.json +2 -2
@@ -0,0 +1,65 @@
1
+ /**
2
+ * The library: the free builtins (design doc §4) and the curated methods on arrays, strings and
3
+ * numbers, as one table each.
4
+ *
5
+ * Nothing here is reached by name resolution on a host object. A member access on a string, an
6
+ * array or a number resolves against these tables and nowhere else, so `xs.map` is the entry in
7
+ * {@link ARRAY_METHODS} and never `Array.prototype.map`, and a name that is not in the table is a
8
+ * refusal (L4014) rather than a host function called with the wrong calling convention. Every
9
+ * method here has the meaning JavaScript gives it; the language adds nothing and takes nothing away
10
+ * inside this table, which is what lets `semantics.smoke` run the same programs on node and here.
11
+ *
12
+ * Callbacks are AWAITED. A method that takes a function (`map`, `filter`, `find`, ...) calls it one
13
+ * element at a time and awaits each call, because a function here may perform an effect. For a pure
14
+ * callback that is exactly JavaScript; for one that performs effects it is the sequential order the
15
+ * source reads in, and a program that wants concurrency says so with `parallel` or `fanOut`.
16
+ *
17
+ * Mutators are in the table too ({@link MUTATING_METHODS}), because a fresh local array is a value
18
+ * the program owns until it shares it: `out.push(x)` inside a loop is the shape every author writes.
19
+ * Each mutator asks the interpreter whether the receiver may be written (frozen values and values
20
+ * born outside a concurrent branch may not), so freeze-on-share holds for method writes exactly as
21
+ * for member writes.
22
+ */
23
+ import type { ScopeFrame } from "./keys.js";
24
+ import { Prng } from "./values.js";
25
+ /** What the library needs of the interpreter's frame. `Frame` in interpret.ts satisfies it. */
26
+ export interface LibFrame {
27
+ readonly depth: number;
28
+ readonly keys: {
29
+ readonly path: readonly ScopeFrame[];
30
+ };
31
+ readonly clock: {
32
+ now(): number;
33
+ };
34
+ }
35
+ /** A function value as the interpreter calls it: user closures and builtins share this shape. */
36
+ export type Callable = (frame: LibFrame, args: unknown[]) => Promise<unknown>;
37
+ /** What the builtins read from the run. */
38
+ export interface LibraryContext {
39
+ readonly runId: string;
40
+ readonly programHash: string;
41
+ readonly startedAt: number;
42
+ readonly prng: Prng;
43
+ readonly onLog?: (line: {
44
+ scope: string;
45
+ values: readonly unknown[];
46
+ }) => void;
47
+ /** Refuse a write to `target` from `frame`, or return normally. Owned by the interpreter. */
48
+ assertWritable(target: object, frame: LibFrame): void;
49
+ }
50
+ export type Method = (frame: LibFrame, receiver: never, args: unknown[]) => unknown;
51
+ /** Methods that write to their receiver. The static L2032 walk and the runtime write check read this. */
52
+ export declare const MUTATING_METHODS: ReadonlySet<string>;
53
+ /** The array methods, JavaScript's meaning, callbacks awaited. */
54
+ export declare function arrayMethods(ctx: LibraryContext): Readonly<Record<string, Method>>;
55
+ /** The string methods, JavaScript's meaning. Patterns are strings: there are no regular expressions. */
56
+ export declare function stringMethods(): Readonly<Record<string, Method>>;
57
+ /** The number methods, JavaScript's meaning. */
58
+ export declare function numberMethods(): Readonly<Record<string, Method>>;
59
+ /**
60
+ * The free builtins, as `[name, callable]` pairs in the order design §4 lists them. The interpreter
61
+ * declares each as an immutable binding; `surface.smoke` holds this list to `BUILTINS` in
62
+ * `primitives.ts` so a name the validator resolves is always a name the interpreter defines.
63
+ */
64
+ export declare function builtins(ctx: LibraryContext): readonly (readonly [string, unknown])[];
65
+ //# sourceMappingURL=library.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.d.ts","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAKH,OAAO,KAAK,EAAE,UAAU,EAAE,MAAM,WAAW,CAAC;AAE5C,OAAO,EAAgB,IAAI,EAAqC,MAAM,aAAa,CAAC;AAEpF,+FAA+F;AAC/F,MAAM,WAAW,QAAQ;IACvB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,IAAI,EAAE;QAAE,QAAQ,CAAC,IAAI,EAAE,SAAS,UAAU,EAAE,CAAA;KAAE,CAAC;IACxD,QAAQ,CAAC,KAAK,EAAE;QAAE,GAAG,IAAI,MAAM,CAAA;KAAE,CAAC;CACnC;AAED,iGAAiG;AACjG,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC,OAAO,CAAC,CAAC;AAE9E,2CAA2C;AAC3C,MAAM,WAAW,cAAc;IAC7B,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC;IACpB,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,IAAI,EAAE;QAAE,KAAK,EAAE,MAAM,CAAC;QAAC,MAAM,EAAE,SAAS,OAAO,EAAE,CAAA;KAAE,KAAK,IAAI,CAAC;IAC/E,6FAA6F;IAC7F,cAAc,CAAC,MAAM,EAAE,MAAM,EAAE,KAAK,EAAE,QAAQ,GAAG,IAAI,CAAC;CACvD;AA+HD,MAAM,MAAM,MAAM,GAAG,CAAC,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,KAAK,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,OAAO,CAAC;AAEpF,yGAAyG;AACzG,eAAO,MAAM,gBAAgB,EAAE,WAAW,CAAC,MAAM,CAA0D,CAAC;AAE5G,kEAAkE;AAClE,wBAAgB,YAAY,CAAC,GAAG,EAAE,cAAc,GAAG,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAsIlF;AAED,wGAAwG;AACxG,wBAAgB,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAkChE;AAED,gDAAgD;AAChD,wBAAgB,aAAa,IAAI,QAAQ,CAAC,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAShE;AAID;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,GAAG,EAAE,cAAc,GAAG,SAAS,CAAC,SAAS,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC,EAAE,CAyKrF"}
@@ -0,0 +1,525 @@
1
+ /**
2
+ * The library: the free builtins (design doc §4) and the curated methods on arrays, strings and
3
+ * numbers, as one table each.
4
+ *
5
+ * Nothing here is reached by name resolution on a host object. A member access on a string, an
6
+ * array or a number resolves against these tables and nowhere else, so `xs.map` is the entry in
7
+ * {@link ARRAY_METHODS} and never `Array.prototype.map`, and a name that is not in the table is a
8
+ * refusal (L4014) rather than a host function called with the wrong calling convention. Every
9
+ * method here has the meaning JavaScript gives it; the language adds nothing and takes nothing away
10
+ * inside this table, which is what lets `semantics.smoke` run the same programs on node and here.
11
+ *
12
+ * Callbacks are AWAITED. A method that takes a function (`map`, `filter`, `find`, ...) calls it one
13
+ * element at a time and awaits each call, because a function here may perform an effect. For a pure
14
+ * callback that is exactly JavaScript; for one that performs effects it is the sequential order the
15
+ * source reads in, and a program that wants concurrency says so with `parallel` or `fanOut`.
16
+ *
17
+ * Mutators are in the table too ({@link MUTATING_METHODS}), because a fresh local array is a value
18
+ * the program owns until it shares it: `out.push(x)` inside a loop is the shape every author writes.
19
+ * Each mutator asks the interpreter whether the receiver may be written (frozen values and values
20
+ * born outside a concurrent branch may not), so freeze-on-share holds for method writes exactly as
21
+ * for member writes.
22
+ */
23
+ import { canonicalize } from "json-canonicalize";
24
+ import { RuntimeFault } from "./errors.js";
25
+ import { parseDuration } from "./duration.js";
26
+ import { scopePathString } from "./keys.js";
27
+ import { NotCrossable, Prng, assertCrossable, born, deepFreeze } from "./values.js";
28
+ // ---- host errors --------------------------------------------------------------------------------
29
+ /**
30
+ * A builtin or a method given inputs the host refuses (`"a".repeat(-1)`, `json.parse("{")`) raises
31
+ * a host error. It leaves as a language fault that names the builtin, never as the host's own
32
+ * class: a program can `catch` a record with a code, and an interpreter fault carrying a host stack
33
+ * would put a frame from this file in front of the author.
34
+ */
35
+ function guarded(name, impl) {
36
+ return async (...args) => {
37
+ try {
38
+ return await impl(...args);
39
+ }
40
+ catch (e) {
41
+ if (e instanceof TypeError || e instanceof RangeError || e instanceof SyntaxError) {
42
+ throw new RuntimeFault("L4016", `${name}: ${e.message}`);
43
+ }
44
+ throw e;
45
+ }
46
+ };
47
+ }
48
+ const asCallable = (v, where) => {
49
+ if (typeof v !== "function")
50
+ throw new RuntimeFault("L4011", `${where} needs a function, and this value is not one`);
51
+ return v;
52
+ };
53
+ /**
54
+ * The operators' no-implicit-conversion law (L4018, reference §4.5) applied at the library
55
+ * boundary: where a primitive is expected, a record, array or function is refused BEFORE the host
56
+ * can coerce it. Host coercion reads `valueOf`/`toString` off the value, and a program closure
57
+ * stored there runs without a Frame (measured before the gate: `parseNumber({ valueOf: () => 99 })`
58
+ * logged null, the run settled ok — a journal could have recorded the wrong value — and the
59
+ * closure's Frame-less rejection killed the process AFTER the run returned; `Math.abs({})` was a
60
+ * silent NaN; `sum([{ valueOf: () => 9 }])` answered the string "0[object Object]").
61
+ */
62
+ const noCoerce = (name, v) => {
63
+ if (v !== null && (typeof v === "object" || typeof v === "function")) {
64
+ const kind = typeof v === "function" ? "a function" : Array.isArray(v) ? "an array" : "a record";
65
+ throw new RuntimeFault("L4018", `${name} cannot take ${kind} in this argument: there is no implicit conversion here, because converting would read \`valueOf\`/\`toString\` off the value — host machinery this language does not have. Convert explicitly: \`json.stringify(value)\` for text, or pass the primitive you mean.`);
66
+ }
67
+ };
68
+ const gateArgs = (name, args, takes) => {
69
+ if (takes === "all")
70
+ return;
71
+ const any = takes?.any ?? [];
72
+ const restFrom = takes?.restFrom ?? Number.POSITIVE_INFINITY;
73
+ args.forEach((v, i) => {
74
+ if (i < restFrom && !any.includes(i))
75
+ noCoerce(name, v);
76
+ });
77
+ };
78
+ /** Wrap a method-shaped impl with the argument gate. */
79
+ const gate = (k, impl, takes) => (frame, r, args) => {
80
+ gateArgs(k, args, takes);
81
+ return impl(frame, r, args);
82
+ };
83
+ // ---- the total order `sort` uses ----------------------------------------------------------------
84
+ /**
85
+ * A TOTAL order over the language's values (design §3.4.3): kinds rank first (undefined, null,
86
+ * false, true, numbers, strings, arrays, records, everything else), numbers by value with NaN
87
+ * after every number, strings by code unit, containers by canonical form. The shipped comparator
88
+ * was not total (measured): NaN answered "equal" to every number because both `<` and `>` are
89
+ * false, so `sort([1, NaN, 0])` returned an unsorted list, and `undefined` — whose canonical form
90
+ * is not a string — compared "equal" to everything too, so `[undefined, null]` kept whatever order
91
+ * it arrived in. What is left equal here is identical (or canonically indistinguishable), and a
92
+ * stable sort keeps its order.
93
+ */
94
+ function rankOf(v) {
95
+ if (v === undefined)
96
+ return 0;
97
+ if (v === null)
98
+ return 1;
99
+ if (typeof v === "boolean")
100
+ return v ? 3 : 2;
101
+ if (typeof v === "number")
102
+ return 4;
103
+ if (typeof v === "string")
104
+ return 5;
105
+ if (Array.isArray(v))
106
+ return 6;
107
+ if (typeof v === "object")
108
+ return 7;
109
+ return 8;
110
+ }
111
+ function compareTotal(a, b) {
112
+ const ra = rankOf(a);
113
+ const rb = rankOf(b);
114
+ if (ra !== rb)
115
+ return ra < rb ? -1 : 1;
116
+ if (typeof a === "number" && typeof b === "number") {
117
+ if (Number.isNaN(a))
118
+ return Number.isNaN(b) ? 0 : 1;
119
+ if (Number.isNaN(b))
120
+ return -1;
121
+ return a < b ? -1 : a > b ? 1 : 0;
122
+ }
123
+ if (typeof a === "string" && typeof b === "string")
124
+ return a < b ? -1 : a > b ? 1 : 0;
125
+ if (ra < 4)
126
+ return 0; // same rank among undefined/null/false/true means identical
127
+ const ca = safeCanonical(a);
128
+ const cb = safeCanonical(b);
129
+ return ca < cb ? -1 : ca > cb ? 1 : 0;
130
+ }
131
+ /** The canonical form where one exists; a stable, deterministic stand-in where it does not. */
132
+ function safeCanonical(v) {
133
+ try {
134
+ const c = canonicalize(v);
135
+ if (typeof c === "string")
136
+ return c;
137
+ }
138
+ catch {
139
+ // fall through
140
+ }
141
+ return `\uFFFF${String(v)}`;
142
+ }
143
+ /** Methods that write to their receiver. The static L2032 walk and the runtime write check read this. */
144
+ export const MUTATING_METHODS = new Set(["push", "pop", "shift", "unshift", "splice"]);
145
+ /** The array methods, JavaScript's meaning, callbacks awaited. */
146
+ export function arrayMethods(ctx) {
147
+ const write = (xs, frame) => ctx.assertWritable(xs, frame);
148
+ const table = {
149
+ // pure, callback-taking (each callback awaited in order)
150
+ // Every callback-taking method captures the length BEFORE the first call, as JavaScript
151
+ // captures it: an element the callback appends is not visited (measured before the fix: a
152
+ // `push` inside `map` grew the walk and the result).
153
+ map: async (frame, xs, a) => {
154
+ const f = asCallable(a[0], "map");
155
+ const out = [];
156
+ const len = xs.length;
157
+ for (let i = 0; i < len; i += 1)
158
+ out.push(await f(frame, [xs[i], i, xs]));
159
+ return born(out, frame.depth);
160
+ },
161
+ filter: async (frame, xs, a) => {
162
+ const f = asCallable(a[0], "filter");
163
+ const out = [];
164
+ const len = xs.length;
165
+ for (let i = 0; i < len; i += 1)
166
+ if (await f(frame, [xs[i], i, xs]))
167
+ out.push(xs[i]);
168
+ return born(out, frame.depth);
169
+ },
170
+ find: async (frame, xs, a) => {
171
+ const f = asCallable(a[0], "find");
172
+ const len = xs.length;
173
+ for (let i = 0; i < len; i += 1)
174
+ if (await f(frame, [xs[i], i, xs]))
175
+ return xs[i];
176
+ return undefined;
177
+ },
178
+ findIndex: async (frame, xs, a) => {
179
+ const f = asCallable(a[0], "findIndex");
180
+ const len = xs.length;
181
+ for (let i = 0; i < len; i += 1)
182
+ if (await f(frame, [xs[i], i, xs]))
183
+ return i;
184
+ return -1;
185
+ },
186
+ findLast: async (frame, xs, a) => {
187
+ const f = asCallable(a[0], "findLast");
188
+ for (let i = xs.length - 1; i >= 0; i -= 1)
189
+ if (await f(frame, [xs[i], i, xs]))
190
+ return xs[i];
191
+ return undefined;
192
+ },
193
+ findLastIndex: async (frame, xs, a) => {
194
+ const f = asCallable(a[0], "findLastIndex");
195
+ for (let i = xs.length - 1; i >= 0; i -= 1)
196
+ if (await f(frame, [xs[i], i, xs]))
197
+ return i;
198
+ return -1;
199
+ },
200
+ some: async (frame, xs, a) => {
201
+ const f = asCallable(a[0], "some");
202
+ const len = xs.length;
203
+ for (let i = 0; i < len; i += 1)
204
+ if (await f(frame, [xs[i], i, xs]))
205
+ return true;
206
+ return false;
207
+ },
208
+ every: async (frame, xs, a) => {
209
+ const f = asCallable(a[0], "every");
210
+ const len = xs.length;
211
+ for (let i = 0; i < len; i += 1)
212
+ if (!(await f(frame, [xs[i], i, xs])))
213
+ return false;
214
+ return true;
215
+ },
216
+ forEach: async (frame, xs, a) => {
217
+ const f = asCallable(a[0], "forEach");
218
+ const len = xs.length;
219
+ for (let i = 0; i < len; i += 1)
220
+ await f(frame, [xs[i], i, xs]);
221
+ return undefined;
222
+ },
223
+ reduce: async (frame, xs, a) => {
224
+ const f = asCallable(a[0], "reduce");
225
+ let i = 0;
226
+ let acc;
227
+ if (a.length >= 2)
228
+ acc = a[1];
229
+ else {
230
+ if (xs.length === 0)
231
+ throw new RuntimeFault("L4016", "reduce: Reduce of empty array with no initial value");
232
+ acc = xs[0];
233
+ i = 1;
234
+ }
235
+ const len = xs.length;
236
+ for (; i < len; i += 1)
237
+ acc = await f(frame, [acc, xs[i], i, xs]);
238
+ return acc;
239
+ },
240
+ flatMap: async (frame, xs, a) => {
241
+ const f = asCallable(a[0], "flatMap");
242
+ const out = [];
243
+ const len = xs.length;
244
+ for (let i = 0; i < len; i += 1) {
245
+ const r = await f(frame, [xs[i], i, xs]);
246
+ if (Array.isArray(r))
247
+ out.push(...r);
248
+ else
249
+ out.push(r);
250
+ }
251
+ return born(out, frame.depth);
252
+ },
253
+ // pure, no callback
254
+ includes: (_f, xs, a) => xs.includes(a[0]),
255
+ indexOf: (_f, xs, a) => xs.indexOf(a[0], a[1]),
256
+ lastIndexOf: (_f, xs, a) => (a.length >= 2 ? xs.lastIndexOf(a[0], a[1]) : xs.lastIndexOf(a[0])),
257
+ slice: (frame, xs, a) => born(xs.slice(a[0], a[1]), frame.depth),
258
+ concat: (frame, xs, a) => born(xs.concat(...a), frame.depth),
259
+ join: (_f, xs, a) => {
260
+ for (const el of xs)
261
+ noCoerce("join", el);
262
+ return xs.join(a[0]);
263
+ },
264
+ flat: (frame, xs, a) => born(xs.flat(a[0]), frame.depth),
265
+ at: (_f, xs, a) => xs.at(a[0]),
266
+ toReversed: (frame, xs) => born([...xs].reverse(), frame.depth),
267
+ // mutators
268
+ push: (frame, xs, a) => {
269
+ write(xs, frame);
270
+ return xs.push(...a);
271
+ },
272
+ pop: (frame, xs) => {
273
+ write(xs, frame);
274
+ return xs.pop();
275
+ },
276
+ shift: (frame, xs) => {
277
+ write(xs, frame);
278
+ return xs.shift();
279
+ },
280
+ unshift: (frame, xs, a) => {
281
+ write(xs, frame);
282
+ return xs.unshift(...a);
283
+ },
284
+ splice: (frame, xs, a) => {
285
+ write(xs, frame);
286
+ const removed = a.length >= 2 ? xs.splice(a[0], a[1], ...a.slice(2)) : xs.splice(a[0]);
287
+ return born(removed, frame.depth);
288
+ },
289
+ };
290
+ const TAKES = {
291
+ map: { any: [0] }, filter: { any: [0] }, find: { any: [0] }, findIndex: { any: [0] },
292
+ findLast: { any: [0] }, findLastIndex: { any: [0] }, some: { any: [0] }, every: { any: [0] },
293
+ forEach: { any: [0] }, flatMap: { any: [0] },
294
+ reduce: { any: [0, 1] },
295
+ includes: { any: [0] }, indexOf: { any: [0] }, lastIndexOf: { any: [0] },
296
+ concat: "all", push: "all", unshift: "all",
297
+ splice: { restFrom: 2 },
298
+ };
299
+ return Object.freeze(Object.fromEntries(Object.entries(table).map(([k, impl]) => [k, guarded(k, gate(k, impl, TAKES[k]))])));
300
+ }
301
+ /** The string methods, JavaScript's meaning. Patterns are strings: there are no regular expressions. */
302
+ export function stringMethods() {
303
+ const str = (name, v) => {
304
+ if (typeof v !== "string")
305
+ throw new RuntimeFault("L4016", `${name}: the pattern must be a string (there are no regular expressions here)`);
306
+ return v;
307
+ };
308
+ const table = {
309
+ trim: (_f, s) => s.trim(),
310
+ trimStart: (_f, s) => s.trimStart(),
311
+ trimEnd: (_f, s) => s.trimEnd(),
312
+ toLowerCase: (_f, s) => s.toLowerCase(),
313
+ toUpperCase: (_f, s) => s.toUpperCase(),
314
+ startsWith: (_f, s, a) => s.startsWith(str("startsWith", a[0]), a[1]),
315
+ endsWith: (_f, s, a) => s.endsWith(str("endsWith", a[0]), a[1]),
316
+ includes: (_f, s, a) => s.includes(str("includes", a[0]), a[1]),
317
+ indexOf: (_f, s, a) => s.indexOf(str("indexOf", a[0]), a[1]),
318
+ lastIndexOf: (_f, s, a) => (a.length >= 2 ? s.lastIndexOf(str("lastIndexOf", a[0]), a[1]) : s.lastIndexOf(str("lastIndexOf", a[0]))),
319
+ slice: (_f, s, a) => s.slice(a[0], a[1]),
320
+ substring: (_f, s, a) => s.substring(a[0], a[1]),
321
+ split: (frame, s, a) => born(a.length === 0 ? [s] : s.split(str("split", a[0]), a[1]), frame.depth),
322
+ // The replacement string means what JavaScript says it means, `$$`/`$&`/`$\``/`$'` included
323
+ // (measured before the fix: the function form made every `$` literal, a meaning JavaScript
324
+ // gives neither method).
325
+ replace: (_f, s, a) => s.replace(str("replace", a[0]), String(a[1])),
326
+ replaceAll: (_f, s, a) => s.replaceAll(str("replaceAll", a[0]), String(a[1])),
327
+ repeat: (_f, s, a) => s.repeat(a[0]),
328
+ padStart: (_f, s, a) => s.padStart(a[0], a[1]),
329
+ padEnd: (_f, s, a) => s.padEnd(a[0], a[1]),
330
+ at: (_f, s, a) => s.at(a[0]),
331
+ charAt: (_f, s, a) => s.charAt(a[0]),
332
+ concat: (_f, s, a) => s.concat(...a.map(String)),
333
+ };
334
+ return Object.freeze(Object.fromEntries(Object.entries(table).map(([k, impl]) => [k, guarded(k, gate(k, impl))])));
335
+ }
336
+ /** The number methods, JavaScript's meaning. */
337
+ export function numberMethods() {
338
+ const table = {
339
+ toFixed: (_f, n, a) => n.toFixed(a[0]),
340
+ toString: (_f, n, a) => n.toString(a[0]),
341
+ toPrecision: (_f, n, a) => n.toPrecision(a[0]),
342
+ };
343
+ return Object.freeze(Object.fromEntries(Object.entries(table).map(([k, impl]) => [k, guarded(k, gate(k, impl))])));
344
+ }
345
+ // ---- builtins ------------------------------------------------------------------------------------------
346
+ /**
347
+ * The free builtins, as `[name, callable]` pairs in the order design §4 lists them. The interpreter
348
+ * declares each as an immutable binding; `surface.smoke` holds this list to `BUILTINS` in
349
+ * `primitives.ts` so a name the validator resolves is always a name the interpreter defines.
350
+ */
351
+ export function builtins(ctx) {
352
+ const fn = (name, impl, takes) => guarded(name, (frame, args) => {
353
+ gateArgs(name, args, takes);
354
+ return impl(frame, args);
355
+ });
356
+ const higher = (name, impl) => guarded(name, async (frame, args) => await impl(frame, args[0], asCallable(args[1], name)));
357
+ const json = deepFreeze({
358
+ parse: fn("json.parse", (frame, a) => {
359
+ // Every container the text describes is born here, in this frame — and checked: JSON can
360
+ // spell an OWN field named `__proto__`, which the literal refuses statically (L1028) and
361
+ // the member write refuses dynamically (L4014), so a parse that minted one was a bypass
362
+ // around both (measured before the check).
363
+ const stamp = (v) => {
364
+ if (v !== null && typeof v === "object") {
365
+ if (!Array.isArray(v) && Object.prototype.hasOwnProperty.call(v, "__proto__")) {
366
+ throw new RuntimeFault("L4016", 'json.parse: the text carries a "__proto__" key, which names an object\'s prototype and cannot be a field here, exactly as it cannot in a literal');
367
+ }
368
+ for (const inner of Object.values(v))
369
+ stamp(inner);
370
+ born(v, frame.depth);
371
+ }
372
+ return v;
373
+ };
374
+ return stamp(JSON.parse(a[0]));
375
+ }),
376
+ // Canonical form (RFC 8785): the same text the journal hashes, so a program that stringifies a
377
+ // value writes what the run record would — and REFUSES what the journal would refuse. The
378
+ // unchecked call silently dropped undefined members, turned undefined elements and NaN into
379
+ // null (measured), which is information loss wearing the canonical name.
380
+ stringify: fn("json.stringify", (_f, a) => {
381
+ try {
382
+ assertCrossable(a[0], "json.stringify: the value");
383
+ }
384
+ catch (e) {
385
+ if (e instanceof NotCrossable)
386
+ throw new RuntimeFault("L4016", e.message);
387
+ throw e;
388
+ }
389
+ return canonicalize(a[0]);
390
+ }, { any: [0] }),
391
+ });
392
+ return [
393
+ // records
394
+ ["keys", fn("keys", (frame, a) => born(Object.keys(a[0]), frame.depth), { any: [0] })],
395
+ ["values", fn("values", (frame, a) => born(Object.values(a[0]), frame.depth), { any: [0] })],
396
+ ["entries", fn("entries", (frame, a) => born(Object.entries(a[0]).map((e) => born(e, frame.depth)), frame.depth), { any: [0] })],
397
+ ["has", fn("has", (_f, a) => Object.prototype.hasOwnProperty.call(a[0], a[1]), { any: [0] })],
398
+ ["merge", fn("merge", (frame, a) => born({ ...a[0], ...a[1] }, frame.depth), { any: [0, 1] })],
399
+ // arrays
400
+ ["len", fn("len", (_f, a) => a[0].length, { any: [0] })],
401
+ [
402
+ "map",
403
+ higher("map", async (frame, list, f) => {
404
+ const out = [];
405
+ for (let i = 0; i < list.length; i += 1)
406
+ out.push(await f(frame, [list[i], i]));
407
+ return born(out, frame.depth);
408
+ }),
409
+ ],
410
+ [
411
+ "filter",
412
+ higher("filter", async (frame, list, f) => {
413
+ const out = [];
414
+ for (let i = 0; i < list.length; i += 1)
415
+ if (await f(frame, [list[i], i]))
416
+ out.push(list[i]);
417
+ return born(out, frame.depth);
418
+ }),
419
+ ],
420
+ [
421
+ "find",
422
+ higher("find", async (frame, list, f) => {
423
+ for (let i = 0; i < list.length; i += 1)
424
+ if (await f(frame, [list[i], i]))
425
+ return list[i];
426
+ return null;
427
+ }),
428
+ ],
429
+ [
430
+ "some",
431
+ higher("some", async (frame, list, f) => {
432
+ for (let i = 0; i < list.length; i += 1)
433
+ if (await f(frame, [list[i], i]))
434
+ return true;
435
+ return false;
436
+ }),
437
+ ],
438
+ [
439
+ "every",
440
+ higher("every", async (frame, list, f) => {
441
+ for (let i = 0; i < list.length; i += 1)
442
+ if (!(await f(frame, [list[i], i])))
443
+ return false;
444
+ return true;
445
+ }),
446
+ ],
447
+ [
448
+ "sort",
449
+ fn("sort", async (frame, a) => {
450
+ const list = a[0];
451
+ const keyFn = a[1] === undefined ? undefined : asCallable(a[1], "sort");
452
+ const keyed = [];
453
+ for (let i = 0; i < list.length; i += 1) {
454
+ keyed.push({ key: keyFn === undefined ? list[i] : await keyFn(frame, [list[i], i]), value: list[i], at: i });
455
+ }
456
+ keyed.sort((x, y) => compareTotal(x.key, y.key) || compareTotal(x.value, y.value) || x.at - y.at);
457
+ return born(keyed.map((k) => k.value), frame.depth);
458
+ }, { any: [0, 1] }),
459
+ ],
460
+ ["slice", fn("slice", (frame, a) => born(a[0].slice(a[1], a[2]), frame.depth), { any: [0] })],
461
+ ["concat", fn("concat", (frame, a) => born(a[0].concat(a[1]), frame.depth), { any: [0, 1] })],
462
+ ["join", fn("join", (_f, a) => {
463
+ for (const el of a[0])
464
+ noCoerce("join", el);
465
+ return a[0].join(a[1]);
466
+ }, { any: [0] })],
467
+ ["reverse", fn("reverse", (frame, a) => born([...a[0]].reverse(), frame.depth), { any: [0] })],
468
+ ["unique", fn("unique", (frame, a) => born([...new Set(a[0])], frame.depth), { any: [0] })],
469
+ ["range", fn("range", (frame, a) => born(Array.from({ length: a[0] }, (_, i) => i), frame.depth))],
470
+ ["sum", fn("sum", (_f, a) => {
471
+ for (const el of a[0])
472
+ noCoerce("sum", el);
473
+ return a[0].reduce((x, y) => x + y, 0);
474
+ }, { any: [0] })],
475
+ // strings
476
+ ["split", fn("split", (frame, a) => born(a[0].split(a[1]), frame.depth))],
477
+ ["trim", fn("trim", (_f, a) => a[0].trim())],
478
+ ["lower", fn("lower", (_f, a) => a[0].toLowerCase())],
479
+ ["upper", fn("upper", (_f, a) => a[0].toUpperCase())],
480
+ ["startsWith", fn("startsWith", (_f, a) => a[0].startsWith(a[1]))],
481
+ ["endsWith", fn("endsWith", (_f, a) => a[0].endsWith(a[1]))],
482
+ ["contains", fn("contains", (_f, a) => a[0].includes(a[1]))],
483
+ ["replace", fn("replace", (_f, a) => a[0].split(a[1]).join(a[2]))],
484
+ // numbers
485
+ ["min", fn("min", (_f, a) => Math.min(...a))],
486
+ ["max", fn("max", (_f, a) => Math.max(...a))],
487
+ ["abs", fn("abs", (_f, a) => Math.abs(a[0]))],
488
+ ["floor", fn("floor", (_f, a) => Math.floor(a[0]))],
489
+ ["ceil", fn("ceil", (_f, a) => Math.ceil(a[0]))],
490
+ ["round", fn("round", (_f, a) => Math.round(a[0]))],
491
+ ["parseNumber", fn("parseNumber", (_f, a) => Number(a[0]))],
492
+ // data and control
493
+ ["json", json],
494
+ [
495
+ "assert",
496
+ fn("assert", (_f, a) => {
497
+ if (!a[0])
498
+ throw new RuntimeFault("L4012", String(a[1] ?? "assertion failed"));
499
+ return null;
500
+ }, { any: [0] }),
501
+ ],
502
+ [
503
+ "log",
504
+ fn("log", (frame, a) => {
505
+ ctx.onLog?.({ scope: scopePathString(frame.keys.path), values: a });
506
+ return null;
507
+ }, "all"),
508
+ ],
509
+ // tamed nondeterminism. `now()` reads the branch's own run clock, which is the maximum endedAt
510
+ // over the effects this point actually awaited: time advances at effect boundaries as a
511
+ // property of the design rather than a rule anyone has to follow.
512
+ ["random", fn("random", (frame) => ctx.prng.next(frame.keys.path))],
513
+ ["randomInt", fn("randomInt", (frame, a) => Math.floor(ctx.prng.next(frame.keys.path) * a[0]))],
514
+ [
515
+ "pick",
516
+ fn("pick", (frame, a) => {
517
+ const list = a[0];
518
+ return list[Math.floor(ctx.prng.next(frame.keys.path) * list.length)];
519
+ }, { any: [0] }),
520
+ ],
521
+ ["now", fn("now", (frame) => frame.clock.now())],
522
+ ["duration", fn("duration", (_f, a) => parseDuration(a[0]))],
523
+ ];
524
+ }
525
+ //# sourceMappingURL=library.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"library.js","sourceRoot":"","sources":["../src/library.ts"],"names":[],"mappings":"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"}