@scriptc/compiler 0.0.5 → 0.0.7

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 (58) hide show
  1. package/dist/backend/emission/emit-exprs.js +25 -2
  2. package/dist/backend/emission/emit-exprs.js.map +1 -1
  3. package/dist/backend/emission/emit-walkers.js +47 -0
  4. package/dist/backend/emission/emit-walkers.js.map +1 -1
  5. package/dist/backend/emission/emitter.js +7 -0
  6. package/dist/backend/emission/emitter.js.map +1 -1
  7. package/dist/backend/emission/may-throw.js +12 -0
  8. package/dist/backend/emission/may-throw.js.map +1 -1
  9. package/dist/backend/llvm/dyn.js +23 -1
  10. package/dist/backend/llvm/dyn.js.map +1 -1
  11. package/dist/backend/llvm/emitter.js +28 -4
  12. package/dist/backend/llvm/emitter.js.map +1 -1
  13. package/dist/backend/llvm/walkers.d.ts +5 -0
  14. package/dist/backend/llvm/walkers.js +65 -5
  15. package/dist/backend/llvm/walkers.js.map +1 -1
  16. package/dist/diagnostics/diagnostic.d.ts +6 -0
  17. package/dist/diagnostics/diagnostic.js +16 -0
  18. package/dist/diagnostics/diagnostic.js.map +1 -1
  19. package/dist/frontend/lib-contract.d.ts +96 -0
  20. package/dist/frontend/lib-contract.js +291 -0
  21. package/dist/frontend/lib-contract.js.map +1 -0
  22. package/dist/frontend/lowering/lower-assert.js +41 -1
  23. package/dist/frontend/lowering/lower-assert.js.map +1 -1
  24. package/dist/frontend/lowering/lower-exprs.js +19 -4
  25. package/dist/frontend/lowering/lower-exprs.js.map +1 -1
  26. package/dist/frontend/lowering/lower-inspect.d.ts +7 -0
  27. package/dist/frontend/lowering/lower-inspect.js +130 -28
  28. package/dist/frontend/lowering/lower-inspect.js.map +1 -1
  29. package/dist/frontend/lowering/lower-stmts.js +9 -1
  30. package/dist/frontend/lowering/lower-stmts.js.map +1 -1
  31. package/dist/frontend/lowering/lowerer.d.ts +1 -1
  32. package/dist/frontend/lowering/lowerer.js +16 -6
  33. package/dist/frontend/lowering/lowerer.js.map +1 -1
  34. package/dist/frontend/types.d.ts +68 -6
  35. package/dist/frontend/types.js +285 -57
  36. package/dist/frontend/types.js.map +1 -1
  37. package/dist/index.d.ts +10 -2
  38. package/dist/index.js +60 -1
  39. package/dist/index.js.map +1 -1
  40. package/dist/ir/nodes.d.ts +27 -4
  41. package/dist/ir/nodes.js +105 -13
  42. package/dist/ir/nodes.js.map +1 -1
  43. package/dist/ir/validate.js +10 -0
  44. package/dist/ir/validate.js.map +1 -1
  45. package/dist/library/profile.d.ts +36 -0
  46. package/dist/library/profile.js +105 -3
  47. package/dist/library/profile.js.map +1 -1
  48. package/dist/library/sidecar-validate.d.ts +4 -0
  49. package/dist/library/sidecar-validate.js +506 -0
  50. package/dist/library/sidecar-validate.js.map +1 -0
  51. package/dist/library/sidecar.d.ts +191 -0
  52. package/dist/library/sidecar.js +568 -0
  53. package/dist/library/sidecar.js.map +1 -0
  54. package/dist/library/wyhash.d.ts +12 -0
  55. package/dist/library/wyhash.js +116 -0
  56. package/dist/library/wyhash.js.map +1 -0
  57. package/package.json +2 -2
  58. package/surface-manifest.json +1 -1
@@ -0,0 +1,568 @@
1
+ /* The ask-2 contract sidecar emitter: projects the entry module's typed
2
+ * contract into the profile-supplied schema (format 1) — a single JSON
3
+ * document beside the archive carrying the version/identity spine, the
4
+ * type table, the model/msg designations, helper signatures, shape flags,
5
+ * channels, the ABI attestation, and the determinism attestations.
6
+ *
7
+ * The sidecar is the CONTRACT, not the program: no source spans, no
8
+ * bodies, no IR, no environment or machine data, no absolute paths, no
9
+ * timestamps. Emission is deterministic — top-level keys in the schema's
10
+ * §1 order, every array order semantic (declaration order where the
11
+ * schema says declaration, profile canonical order for abi.exports), so
12
+ * re-running the identical invocation reproduces a byte-identical file.
13
+ *
14
+ * Declaration order is read from the SYNTAX TREE (frontend/lib-contract.ts)
15
+ * — never from checker property enumeration, which hands back internal or
16
+ * sorted order (the ratified record-field-order ruling: the IR's sorted
17
+ * canonicalization is storage; AST order is the contract).
18
+ *
19
+ * Not-yet facts emit the schema's stated absent forms, never invented
20
+ * values: `integer_slots` is `[]` with every numeric slot spelled `f64`
21
+ * (the pre-ask-4 sequencing the schema names valid — the empty list is
22
+ * itself an attestation), and `deterministic` is computed from the module
23
+ * graph (ir/nodes.ts's conservative ambient-surface scan), never
24
+ * defaulted. */
25
+ import { Buffer } from "node:buffer";
26
+ import { readFileSync } from "node:fs";
27
+ import { dirname, isAbsolute, join, relative, sep } from "node:path";
28
+ import { fileURLToPath } from "node:url";
29
+ import { libSidecarDiag } from "../diagnostics/diagnostic.js";
30
+ import { BUILD_ID_SEED, hex16, lengthPrefixedStream, SOURCE_HASH_SEED, wyhash64 } from "./wyhash.js";
31
+ /** The sidecar schema's format this emitter writes. */
32
+ export const SIDECAR_FORMAT = 1;
33
+ /* ── identity hashing (schema §2 + the "module-graph" source contract) ─── */
34
+ let releaseVersion = null;
35
+ /** The compiler's exact release identifier — the published package
36
+ * version, read once from the compiler package's own package.json (this
37
+ * module lives two levels below the package root in src/ and dist/
38
+ * alike). build_id input 1 and the sidecar's `compiler_version`. */
39
+ export function compilerReleaseVersion() {
40
+ if (releaseVersion === null) {
41
+ const pkgPath = join(dirname(fileURLToPath(import.meta.url)), "..", "..", "package.json");
42
+ releaseVersion = JSON.parse(readFileSync(pkgPath, "utf8")).version;
43
+ }
44
+ return releaseVersion;
45
+ }
46
+ /** One path under the sidecar's canonical rules: compilation-root-relative
47
+ * POSIX, or `profile:`-namespaced when the file sits outside the root
48
+ * (never absolute, no `.`/`..` segments). */
49
+ export function canonicalPath(rootDir, file) {
50
+ const rel = relative(rootDir, file);
51
+ if (rel === "" || rel.startsWith("..") || isAbsolute(rel)) {
52
+ return `profile:${file.split(/[\\/]/).pop()}`;
53
+ }
54
+ return sep === "/" ? rel : rel.split(sep).join("/");
55
+ }
56
+ /** Canonicalize + sort the module graph for hashing: root-relative POSIX
57
+ * paths, ascending by plain bytewise comparison of the path strings. A
58
+ * module outside the compilation root (the profile file's directory)
59
+ * cannot spell a canonical relative path, so it rides the `profile:`
60
+ * namespace under its basename — deterministic and absolute-path-free. */
61
+ export function canonicalModuleGraph(rootDir, sources) {
62
+ const enc = new TextEncoder();
63
+ const entries = [];
64
+ for (const [file, text] of sources) {
65
+ entries.push({ canonical: canonicalPath(rootDir, file), bytes: enc.encode(text) });
66
+ }
67
+ entries.sort((a, b) => {
68
+ const c = Buffer.compare(Buffer.from(a.canonical, "utf8"), Buffer.from(b.canonical, "utf8"));
69
+ return c !== 0 ? c : Buffer.compare(a.bytes, b.bytes);
70
+ });
71
+ return entries;
72
+ }
73
+ /** build_id (schema §2: compiler version, profile bytes, sorted module
74
+ * graph — every input length-prefixed) and source_hash (the
75
+ * "module-graph" contract: the sorted module graph alone, so the value is
76
+ * stable across compiler releases). Both 16 lowercase hex digits. */
77
+ export function libraryIdentityHashes(compilerVersion, profileBytes, modules) {
78
+ const enc = new TextEncoder();
79
+ const graphChunks = [];
80
+ for (const m of modules) {
81
+ graphChunks.push(enc.encode(m.canonical), m.bytes);
82
+ }
83
+ const buildChunks = [enc.encode(compilerVersion), profileBytes, ...graphChunks];
84
+ return {
85
+ buildId: hex16(wyhash64(lengthPrefixedStream(buildChunks), BUILD_ID_SEED)),
86
+ sourceHash: hex16(wyhash64(lengthPrefixedStream(graphChunks), SOURCE_HASH_SEED)),
87
+ };
88
+ }
89
+ /** The profile's canonical `abi.exports` suffix order: the identity
90
+ * getters first (abi_version, then build_id), the mode-provided entries
91
+ * (sink registration, init, collect, reset — declared ones only), then
92
+ * the export map in profile order. Suffix = symbol minus prefix. */
93
+ export function abiExportSuffixes(profile) {
94
+ const strip = (sym) => sym.slice(profile.prefix.length);
95
+ const out = [];
96
+ if (profile.sidecar !== null) {
97
+ out.push(strip(profile.sidecar.abiVersionSymbol), strip(profile.sidecar.buildIdSymbol));
98
+ }
99
+ out.push(strip(profile.sinkRegisterSymbol), strip(profile.initSymbol));
100
+ if (profile.collectSymbol !== null)
101
+ out.push(strip(profile.collectSymbol));
102
+ if (profile.resultResetSymbol !== null)
103
+ out.push(strip(profile.resultResetSymbol));
104
+ for (const e of profile.exports)
105
+ out.push(strip(e.symbol));
106
+ return out;
107
+ }
108
+ function classify(decl, index) {
109
+ const s = decl.shape;
110
+ if (s.k === "unsupported")
111
+ return { c: "unsupported", why: s.text, decl, index };
112
+ if (s.k === "object") {
113
+ return { c: "struct", storage: decl.form === "interface" ? "node" : "value", fields: s.fields, decl, index };
114
+ }
115
+ if (decl.form === "alias" && s.k === "stringLit")
116
+ return { c: "enum", members: [s.text], decl, index };
117
+ if (decl.form === "alias" && s.k === "union") {
118
+ if (s.parts.every((p) => p.k === "stringLit")) {
119
+ return { c: "enum", members: s.parts.map((p) => p.text), decl, index };
120
+ }
121
+ const arms = [];
122
+ for (const p of s.parts) {
123
+ if (p.k !== "object") {
124
+ return { c: "unsupported", why: "a union mixing non-object constituents (a tagged union's arms are object literals with a string-literal 'kind')", decl, index };
125
+ }
126
+ const kindField = p.fields.find((f) => f.name === "kind");
127
+ if (kindField === undefined || kindField.shape.k !== "stringLit" || kindField.optional) {
128
+ return { c: "unsupported", why: "a union constituent without a non-optional string-literal 'kind' discriminant", decl, index };
129
+ }
130
+ arms.push({ name: kindField.shape.text, fields: p.fields.filter((f) => f.name !== "kind"), loc: kindField.loc });
131
+ }
132
+ return { c: "tagged", arms, decl, index };
133
+ }
134
+ return { c: "unsupported", why: `a shape outside the sidecar's vocabulary (${s.k})`, decl, index };
135
+ }
136
+ class SidecarError extends Error {
137
+ detail;
138
+ loc;
139
+ constructor(detail, loc) {
140
+ super(detail);
141
+ this.detail = detail;
142
+ this.loc = loc;
143
+ }
144
+ }
145
+ class Projector {
146
+ facts;
147
+ config;
148
+ entryLoc;
149
+ byName = new Map();
150
+ table = new Map();
151
+ inProgress = new Set();
152
+ synthCounter = 0;
153
+ constructor(facts, config, entryLoc) {
154
+ this.facts = facts;
155
+ this.config = config;
156
+ this.entryLoc = entryLoc;
157
+ facts.types.forEach((decl, index) => {
158
+ if (this.byName.has(decl.name)) {
159
+ throw new SidecarError(`the entry module declares '${decl.name}' twice — the type table has one namespace`, decl.loc);
160
+ }
161
+ this.byName.set(decl.name, classify(decl, index));
162
+ });
163
+ }
164
+ lookup(name, loc) {
165
+ const c = this.byName.get(name);
166
+ if (c === undefined) {
167
+ throw new SidecarError(`'${name}' is not an exported type declaration of the entry module`, loc);
168
+ }
169
+ if (c.c === "unsupported") {
170
+ throw new SidecarError(`'${name}' cannot join the type table: it is ${c.why}`, c.decl.loc);
171
+ }
172
+ return c;
173
+ }
174
+ /** Project a syntactic field to a TypeRef, tabling every named type it
175
+ * references. `container`/`member` seed synthesized names. */
176
+ fieldRef(field, container) {
177
+ const inner = this.shapeRef(field.shape, container, field.name, field.loc);
178
+ if (field.optional) {
179
+ if (inner.kind === "optional")
180
+ return inner;
181
+ return { kind: "optional", inner };
182
+ }
183
+ return inner;
184
+ }
185
+ shapeRef(shape, container, member, loc) {
186
+ switch (shape.k) {
187
+ case "bool":
188
+ return { kind: "bool" };
189
+ case "number":
190
+ // Every numeric slot spells f64 until ask-4 integer inference
191
+ // lands (the schema's stated pre-inference sequencing).
192
+ return { kind: "f64" };
193
+ case "text":
194
+ case "bytes":
195
+ return { kind: "bytes" };
196
+ case "array":
197
+ return { kind: "slice", elem: this.shapeRef(shape.elem, container, member, loc) };
198
+ case "union": {
199
+ const present = shape.parts.filter((p) => p.k !== "absent");
200
+ const absents = shape.parts.length - present.length;
201
+ if (absents > 0 && present.length === 1) {
202
+ const inner = this.shapeRef(present[0], container, member, loc);
203
+ return inner.kind === "optional" ? inner : { kind: "optional", inner };
204
+ }
205
+ throw new SidecarError(`'${container}.${member}' is an inline union — declare it as a named kind-tagged union (or a string-literal-union enum) and reference it by name`, loc);
206
+ }
207
+ case "ref": {
208
+ const c = this.lookup(shape.name, loc);
209
+ if (c.c === "struct") {
210
+ this.tableNamed(shape.name, loc);
211
+ return { kind: c.storage, name: shape.name };
212
+ }
213
+ if (c.c === "enum") {
214
+ this.tableNamed(shape.name, loc);
215
+ return { kind: "enum", name: shape.name };
216
+ }
217
+ if (shape.name === this.config.msg) {
218
+ throw new SidecarError(`'${container}.${member}' references the designated msg union '${shape.name}' — the msg union is the dispatch surface, not a table type`, loc);
219
+ }
220
+ this.tableNamed(shape.name, loc);
221
+ return { kind: "union", name: shape.name };
222
+ }
223
+ case "object":
224
+ return { kind: "value", name: this.tableSynthesized(container, member, shape.fields, loc) };
225
+ case "stringLit":
226
+ throw new SidecarError(`'${container}.${member}' is a bare string-literal type — declare a named string-literal union and reference it as an enum`, loc);
227
+ case "void":
228
+ throw new SidecarError(`'${container}.${member}' is void — void exists only as a bare union arm's payload`, loc);
229
+ case "absent":
230
+ throw new SidecarError(`'${container}.${member}' is null/undefined alone — pair it with a value type for an optional slot`, loc);
231
+ case "tuple":
232
+ throw new SidecarError(`'${container}.${member}' is a tuple — the sidecar vocabulary has slices and named records, not positional tuples`, loc);
233
+ case "unsupported":
234
+ throw new SidecarError(`'${container}.${member}' has no sidecar projection: ${shape.text}`, loc);
235
+ }
236
+ }
237
+ /** Ensure a declared type's table entry exists (recursively projecting
238
+ * what it references). Cycles refuse: recursive contract types cannot
239
+ * encode (schema rule V5). */
240
+ tableNamed(name, loc) {
241
+ if (this.table.has(name))
242
+ return;
243
+ if (name === this.config.msg) {
244
+ throw new SidecarError(`the designated msg union '${name}' cannot join the type table`, loc);
245
+ }
246
+ if (this.inProgress.has(name)) {
247
+ throw new SidecarError(`the contract type graph is cyclic through '${name}' — recursive contract types cannot encode`, loc);
248
+ }
249
+ const c = this.lookup(name, loc);
250
+ this.inProgress.add(name);
251
+ try {
252
+ if (c.c === "enum") {
253
+ const seen = new Set();
254
+ for (const m of c.members) {
255
+ if (seen.has(m))
256
+ throw new SidecarError(`enum '${name}' repeats member '${m}'`, c.decl.loc);
257
+ seen.add(m);
258
+ }
259
+ this.table.set(name, { kind: "enum", entry: { name, members: c.members }, anchor: c.index, sub: -1 });
260
+ return;
261
+ }
262
+ if (c.c === "struct") {
263
+ const entry = { name, fields: [] };
264
+ // Insert before projecting fields? No: cycle detection rides
265
+ // inProgress; the entry lands complete.
266
+ const seen = new Set();
267
+ for (const f of c.fields) {
268
+ if (seen.has(f.name))
269
+ throw new SidecarError(`record '${name}' repeats field '${f.name}'`, f.loc);
270
+ seen.add(f.name);
271
+ entry.fields.push({ name: f.name, type: this.fieldRef(f, name) });
272
+ }
273
+ this.table.set(name, { kind: "struct", entry, anchor: c.index, sub: -1 });
274
+ return;
275
+ }
276
+ // A named tagged union (never the msg union — fenced above).
277
+ const entry = { name, arms: [] };
278
+ const seen = new Set();
279
+ for (const arm of c.arms) {
280
+ if (seen.has(arm.name))
281
+ throw new SidecarError(`union '${name}' repeats arm '${arm.name}'`, arm.loc);
282
+ seen.add(arm.name);
283
+ entry.arms.push({ name: arm.name, payload: this.armPayloadRef(name, arm) });
284
+ }
285
+ this.table.set(name, { kind: "union", entry, anchor: c.index, sub: -1 });
286
+ }
287
+ finally {
288
+ this.inProgress.delete(name);
289
+ }
290
+ }
291
+ /** A named union arm's payload TypeRef: void for bare arms, the single
292
+ * payload field's type, or a synthesized by-value record for
293
+ * multi-field inline payloads. */
294
+ armPayloadRef(unionName, arm) {
295
+ if (arm.fields.length === 0)
296
+ return { kind: "void" };
297
+ if (arm.fields.length === 1)
298
+ return this.fieldRef(arm.fields[0], unionName);
299
+ return { kind: "value", name: this.tableSynthesized(unionName, arm.name, arm.fields, arm.loc) };
300
+ }
301
+ /** Table an anonymous inline record under the schema's synthesized-name
302
+ * contract: `<Container>_<member>`, deterministic and stable across
303
+ * identical re-compiles, unique in the one namespace. */
304
+ tableSynthesized(container, member, fields, loc) {
305
+ const name = `${container}_${member}`;
306
+ const existing = this.table.get(name);
307
+ if (existing !== undefined)
308
+ return name; // the same inline decl, revisited
309
+ if (this.byName.has(name)) {
310
+ throw new SidecarError(`the inline record at '${container}.${member}' needs the synthesized name '${name}', which a declared type already uses — rename one`, loc);
311
+ }
312
+ const entry = { name, synthesized: true, fields: [] };
313
+ const anchor = this.byName.get(container)?.index ?? this.facts.types.length;
314
+ const sub = this.synthCounter++;
315
+ this.table.set(name, { kind: "struct", entry, anchor, sub });
316
+ const seen = new Set();
317
+ for (const f of fields) {
318
+ if (seen.has(f.name))
319
+ throw new SidecarError(`the inline record at '${container}.${member}' repeats field '${f.name}'`, f.loc);
320
+ seen.add(f.name);
321
+ entry.fields.push({ name: f.name, type: this.fieldRef(f, name) });
322
+ }
323
+ return name;
324
+ }
325
+ /** A msg arm's payload descriptor (§5's five families). */
326
+ msgDescriptor(msgName, arm) {
327
+ const fields = arm.fields;
328
+ if (fields.length === 0)
329
+ return { kind: "void" };
330
+ if (fields.length === 2) {
331
+ const [first, second] = [fields[0], fields[1]];
332
+ // Family 4 covers exactly the number-first two-field record; a
333
+ // bytes-first spelling takes the record family instead
334
+ // (declaration order is semantic everywhere — the clarified rule).
335
+ if (!first.optional &&
336
+ !second.optional &&
337
+ first.shape.k === "number" &&
338
+ (second.shape.k === "text" || second.shape.k === "bytes")) {
339
+ return { kind: "number_bytes", number_field: first.name, number_class: "f64", bytes_field: second.name };
340
+ }
341
+ }
342
+ if (fields.length === 1 && !fields[0].optional) {
343
+ const ref = this.fieldRef(fields[0], msgName);
344
+ switch (ref.kind) {
345
+ case "bytes":
346
+ return { kind: "bytes" };
347
+ case "f64":
348
+ case "i64":
349
+ return { kind: "number", class: ref.kind };
350
+ case "node":
351
+ case "value":
352
+ return { kind: "record", name: ref.name };
353
+ case "union":
354
+ return { kind: "union", name: ref.name };
355
+ case "enum":
356
+ return { kind: "enum", name: ref.name };
357
+ case "void":
358
+ return { kind: "void" };
359
+ default:
360
+ return { kind: "scalar", type: ref };
361
+ }
362
+ }
363
+ // Everything else — bytes-first pairs, three-plus fields, optional
364
+ // payload fields — tables a synthesized record (family 5).
365
+ return { kind: "record", name: this.tableSynthesized(msgName, arm.name, fields, arm.loc) };
366
+ }
367
+ /** The finished type table, each array in declaration order (synthesized
368
+ * entries anchor at their containing declaration). */
369
+ finishedTable() {
370
+ const ordered = [...this.table.values()].sort((a, b) => a.anchor - b.anchor || a.sub - b.sub);
371
+ return {
372
+ structs: ordered.filter((e) => e.kind === "struct").map((e) => e.entry),
373
+ enums: ordered.filter((e) => e.kind === "enum").map((e) => e.entry),
374
+ unions: ordered.filter((e) => e.kind === "union").map((e) => e.entry),
375
+ };
376
+ }
377
+ }
378
+ /** Whether a helper's result rides the transient result arena (anything
379
+ * materialized: buffers, slices, records, optionals) rather than a plain
380
+ * scalar return. */
381
+ function helperArena(returns) {
382
+ return returns.kind !== "bool" && returns.kind !== "f64" && returns.kind !== "i64" && returns.kind !== "enum";
383
+ }
384
+ export function buildSidecar(input) {
385
+ const { profile, facts } = input;
386
+ const config = profile.sidecar;
387
+ const entryLoc = { file: profile.entry, start: 0, end: 0 };
388
+ const diagnostics = [];
389
+ for (const m of facts.malformedConsts) {
390
+ diagnostics.push(libSidecarDiag(`exported const '${m.name}' ${m.detail}`, m.loc));
391
+ }
392
+ if (diagnostics.length > 0)
393
+ return { ok: false, diagnostics };
394
+ try {
395
+ const projector = new Projector(facts, config, entryLoc);
396
+ // The model: the designated root state type, a record in the table.
397
+ const modelClass = projector.lookup(config.model, entryLoc);
398
+ if (modelClass.c !== "struct") {
399
+ throw new SidecarError(`the profile designates model '${config.model}', which is not a record type`, modelClass.decl.loc);
400
+ }
401
+ projector.tableNamed(config.model, entryLoc);
402
+ const modelFieldNames = new Set(modelClass.fields.map((f) => f.name));
403
+ // The msg union: declaration-order arms, positional wire tags, at
404
+ // most 256 arms (tags ride a u8).
405
+ const msgClass = projector.lookup(config.msg, entryLoc);
406
+ if (msgClass.c !== "tagged") {
407
+ throw new SidecarError(`the profile designates msg '${config.msg}', which is not a kind-tagged union of object literals`, msgClass.decl.loc);
408
+ }
409
+ if (msgClass.arms.length > 256) {
410
+ throw new SidecarError(`msg union '${config.msg}' declares ${msgClass.arms.length} arms — wire tags ride a u8, so at most 256 are permitted`, msgClass.decl.loc);
411
+ }
412
+ const seenArms = new Set();
413
+ const msgArms = [];
414
+ for (const arm of msgClass.arms) {
415
+ if (seenArms.has(arm.name))
416
+ throw new SidecarError(`msg union '${config.msg}' repeats arm '${arm.name}'`, arm.loc);
417
+ seenArms.add(arm.name);
418
+ msgArms.push({ name: arm.name, payload: projector.msgDescriptor(config.msg, arm) });
419
+ }
420
+ const armByName = new Map(msgArms.map((a) => [a.name, a.payload]));
421
+ // Helpers: exported functions taking the model first, in declaration
422
+ // order (the array index is the ABI call index), minus the designated
423
+ // init/update/subscriptions entries.
424
+ const designated = new Set([config.initExport, config.updateExport, config.subscriptionsExport]);
425
+ const helpers = [];
426
+ for (const fn of facts.functions) {
427
+ if (designated.has(fn.name))
428
+ continue;
429
+ const first = fn.params[0];
430
+ if (first === undefined || first.shape === null || first.shape.k !== "ref" || first.shape.name !== config.model)
431
+ continue;
432
+ if (fn.generic) {
433
+ throw new SidecarError(`helper '${fn.name}' is generic — a contract helper needs one concrete signature`, fn.loc);
434
+ }
435
+ const params = [];
436
+ fn.params.slice(1).forEach((p, i) => {
437
+ if (p.shape === null) {
438
+ throw new SidecarError(`helper '${fn.name}' parameter ${i + 2} ('${p.name}') has no type annotation`, fn.loc);
439
+ }
440
+ params.push(projector.shapeRef(p.shape, `helpers_${fn.name}`, p.name, fn.loc));
441
+ });
442
+ if (fn.returns === null) {
443
+ throw new SidecarError(`helper '${fn.name}' has no return type annotation`, fn.loc);
444
+ }
445
+ if (fn.returns.k === "void") {
446
+ throw new SidecarError(`helper '${fn.name}' returns void — a contract helper returns a value the host can read`, fn.loc);
447
+ }
448
+ // Helper-return synthesized names are two-part like everything else:
449
+ // container 'helpers', member the helper's name — `helpers_<name>`,
450
+ // never a '_return' suffix (the ratified spelling).
451
+ const returns = projector.shapeRef(fn.returns, "helpers", fn.name, fn.loc);
452
+ if (helpers.some((h) => h.name === fn.name)) {
453
+ throw new SidecarError(`helper '${fn.name}' is declared twice`, fn.loc);
454
+ }
455
+ helpers.push({ name: fn.name, params, returns, arena: helperArena(returns) });
456
+ }
457
+ const helperNames = new Set(helpers.map((h) => h.name));
458
+ // Shape flags from the designated entries' declared signatures.
459
+ const returnsCmd = (which, exportName) => {
460
+ const fn = facts.functions.find((f) => f.name === exportName);
461
+ if (fn === undefined) {
462
+ throw new SidecarError(`the profile designates ${which} export '${exportName}', but the entry module exports no function by that name`, entryLoc);
463
+ }
464
+ const r = fn.returns;
465
+ if (r !== null && r.k === "ref" && r.name === config.model)
466
+ return false;
467
+ if (r !== null && r.k === "tuple" && r.elems.length === 2 && r.elems[0].k === "ref" && r.elems[0].name === config.model) {
468
+ return true;
469
+ }
470
+ throw new SidecarError(`${which} export '${exportName}' must declare its return as '${config.model}' (bare state) or a two-element tuple '[${config.model}, ...]' (state plus an effect value)`, fn.loc);
471
+ };
472
+ const initReturnsCmd = returnsCmd("init", config.initExport);
473
+ const updateReturnsCmd = returnsCmd("update", config.updateExport);
474
+ const hasSubscriptions = facts.functions.some((f) => f.name === config.subscriptionsExport);
475
+ // Unbound lists: model fields or helper entries (helpers are bindable
476
+ // surface — the clarified rule) on the model side, arm names on the
477
+ // msg side. Absent consts mean "the program declares none".
478
+ const modelUnbound = facts.modelUnbound?.value ?? [];
479
+ for (const name of modelUnbound) {
480
+ if (!modelFieldNames.has(name) && !helperNames.has(name)) {
481
+ throw new SidecarError(`modelUnbound names '${name}', which is neither a field of '${config.model}' nor a helper entry`, facts.modelUnbound.loc);
482
+ }
483
+ }
484
+ const msgUnbound = facts.msgUnbound?.value ?? [];
485
+ for (const name of msgUnbound) {
486
+ if (!armByName.has(name)) {
487
+ throw new SidecarError(`msgUnbound names '${name}', which is not an arm of '${config.msg}'`, facts.msgUnbound.loc);
488
+ }
489
+ }
490
+ // Channels: the four function channels answer export presence by
491
+ // suffix; the two host-constructed channels and the env map ride the
492
+ // exported-const conventions and must target conforming arms.
493
+ const exports = abiExportSuffixes(profile);
494
+ const exportSet = new Set(exports);
495
+ const namedChannel = (constName) => {
496
+ const c = facts[constName];
497
+ if (c === null)
498
+ return null;
499
+ const payload = armByName.get(c.value);
500
+ if (payload === undefined) {
501
+ throw new SidecarError(`${constName} names '${c.value}', which is not an arm of '${config.msg}'`, c.loc);
502
+ }
503
+ if (payload.kind !== "record" && payload.kind !== "union" && payload.kind !== "enum" && payload.kind !== "scalar") {
504
+ throw new SidecarError(`${constName} names arm '${c.value}', whose payload descriptor is '${payload.kind}' — a host-constructed channel arm needs a named-type-family payload`, c.loc);
505
+ }
506
+ return c.value;
507
+ };
508
+ const envMsgs = facts.envMsgs?.value ?? [];
509
+ const seenEnv = new Set();
510
+ for (const e of envMsgs) {
511
+ if (seenEnv.has(e.env)) {
512
+ throw new SidecarError(`envMsgs repeats environment variable '${e.env}'`, facts.envMsgs.loc);
513
+ }
514
+ seenEnv.add(e.env);
515
+ const payload = armByName.get(e.msg);
516
+ if (payload === undefined) {
517
+ throw new SidecarError(`envMsgs targets '${e.msg}', which is not an arm of '${config.msg}'`, facts.envMsgs.loc);
518
+ }
519
+ if (payload.kind !== "bytes") {
520
+ throw new SidecarError(`envMsgs targets arm '${e.msg}', whose payload descriptor is '${payload.kind}' — the host delivers an environment value as bytes`, facts.envMsgs.loc);
521
+ }
522
+ }
523
+ const doc = {
524
+ format: SIDECAR_FORMAT,
525
+ wire_version: config.wireVersion,
526
+ abi_version: config.abiVersion,
527
+ compiler_version: input.compilerVersion,
528
+ entry: input.entry,
529
+ source_hash: input.sourceHash,
530
+ build_id: input.buildId,
531
+ types: projector.finishedTable(),
532
+ model: config.model,
533
+ model_helpers: helpers,
534
+ model_unbound: modelUnbound,
535
+ msg: { name: config.msg, arms: msgArms, unbound: msgUnbound },
536
+ init_returns_cmd: initReturnsCmd,
537
+ update_returns_cmd: updateReturnsCmd,
538
+ has_subscriptions: hasSubscriptions,
539
+ channels: {
540
+ command_msg: exportSet.has("command_msg"),
541
+ frame_msg: exportSet.has("frame_msg"),
542
+ key_msg: exportSet.has("key_msg"),
543
+ pinch_msg: exportSet.has("pinch_msg"),
544
+ appearance_msg: namedChannel("appearanceMsg"),
545
+ chrome_msg: namedChannel("chromeMsg"),
546
+ env_msgs: envMsgs,
547
+ },
548
+ abi: { prefix: profile.prefix, exports, snapshot_format: config.snapshotFormat },
549
+ // The pre-ask-4 absent form the schema names valid: every numeric
550
+ // slot above spelled f64, and the empty list is itself the
551
+ // attestation that no slot was integer-classed.
552
+ integer_slots: [],
553
+ deterministic: input.deterministic,
554
+ // Structural in library mode: the SC4005 gate refused any graph
555
+ // reaching async/timer/event-loop surface before emission, so a
556
+ // sidecar exists only for async_free graphs.
557
+ async_free: true,
558
+ };
559
+ return { ok: true, doc, json: JSON.stringify(doc, null, 2) + "\n" };
560
+ }
561
+ catch (e) {
562
+ if (e instanceof SidecarError) {
563
+ return { ok: false, diagnostics: [libSidecarDiag(e.detail, e.loc)] };
564
+ }
565
+ throw e;
566
+ }
567
+ }
568
+ //# sourceMappingURL=sidecar.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sidecar.js","sourceRoot":"","sources":["../../src/library/sidecar.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,12 @@
1
+ /** wyhash final_version_3 of `data` under `seed` — a u64. */
2
+ export declare function wyhash64(data: Uint8Array, seed: bigint): bigint;
3
+ /** Frame variable-length inputs unambiguously: each chunk is prefixed by
4
+ * its u64 little-endian byte count. */
5
+ export declare function lengthPrefixedStream(chunks: readonly Uint8Array[]): Uint8Array;
6
+ /** A u64 as the schema's hash encoding: exactly 16 lowercase hex digits. */
7
+ export declare function hex16(v: bigint): string;
8
+ /** The `build_id` seed of the schema's worked definition. */
9
+ export declare const BUILD_ID_SEED = 2971475200n;
10
+ /** The "module-graph" source-hash contract's seed (profile-selectable
11
+ * contract; scriptc v1 implements exactly this one). */
12
+ export declare const SOURCE_HASH_SEED = 3235798765n;