@ontrails/core 1.0.0-beta.13 → 1.0.0-beta.14

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 (59) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/README.md +2 -1
  4. package/dist/derive.d.ts +6 -0
  5. package/dist/derive.d.ts.map +1 -1
  6. package/dist/derive.js +29 -5
  7. package/dist/derive.js.map +1 -1
  8. package/dist/draft.d.ts +28 -0
  9. package/dist/draft.d.ts.map +1 -0
  10. package/dist/draft.js +156 -0
  11. package/dist/draft.js.map +1 -0
  12. package/dist/index.d.ts +6 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +5 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/internal/topo-saves.d.ts +47 -0
  17. package/dist/internal/topo-saves.d.ts.map +1 -0
  18. package/dist/internal/topo-saves.js +310 -0
  19. package/dist/internal/topo-saves.js.map +1 -0
  20. package/dist/internal/topo-store-read.d.ts +67 -0
  21. package/dist/internal/topo-store-read.d.ts.map +1 -0
  22. package/dist/internal/topo-store-read.js +222 -0
  23. package/dist/internal/topo-store-read.js.map +1 -0
  24. package/dist/internal/topo-store.d.ts +12 -0
  25. package/dist/internal/topo-store.d.ts.map +1 -0
  26. package/dist/internal/topo-store.js +571 -0
  27. package/dist/internal/topo-store.js.map +1 -0
  28. package/dist/internal/trails-db.d.ts +16 -0
  29. package/dist/internal/trails-db.d.ts.map +1 -0
  30. package/dist/internal/trails-db.js +118 -0
  31. package/dist/internal/trails-db.js.map +1 -0
  32. package/dist/topo-store.d.ts +48 -0
  33. package/dist/topo-store.d.ts.map +1 -0
  34. package/dist/topo-store.js +175 -0
  35. package/dist/topo-store.js.map +1 -0
  36. package/dist/validate-established-topo.d.ts +76 -0
  37. package/dist/validate-established-topo.d.ts.map +1 -0
  38. package/dist/validate-established-topo.js +43 -0
  39. package/dist/validate-established-topo.js.map +1 -0
  40. package/dist/validate-topo.d.ts.map +1 -1
  41. package/dist/validate-topo.js +5 -3
  42. package/dist/validate-topo.js.map +1 -1
  43. package/package.json +4 -1
  44. package/src/__tests__/derive.test.ts +58 -1
  45. package/src/__tests__/topo-store-read.test.ts +251 -0
  46. package/src/__tests__/topo-store.test.ts +469 -0
  47. package/src/__tests__/trails-db.test.ts +191 -0
  48. package/src/__tests__/validate-topo.test.ts +167 -0
  49. package/src/derive.ts +39 -8
  50. package/src/draft.ts +334 -0
  51. package/src/index.ts +30 -1
  52. package/src/internal/topo-saves.ts +429 -0
  53. package/src/internal/topo-store-read.ts +473 -0
  54. package/src/internal/topo-store.ts +1087 -0
  55. package/src/internal/trails-db.ts +189 -0
  56. package/src/topo-store.ts +301 -0
  57. package/src/validate-established-topo.ts +63 -0
  58. package/src/validate-topo.ts +7 -3
  59. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,571 @@
1
+ import { deriveCliPath } from '../derive.js';
2
+ import { Result } from '../result.js';
3
+ import { validateEstablishedTopo } from '../validate-established-topo.js';
4
+ import { zodToJsonSchema } from '../validation.js';
5
+ import { ensureTopoHistorySchema, insertTopoSaveRecord } from './topo-saves.js';
6
+ const canonicalLeaf = (value) => {
7
+ switch (typeof value) {
8
+ case 'bigint': {
9
+ return value.toString();
10
+ }
11
+ case 'function': {
12
+ return `[Function:${value.name || 'anonymous'}]`;
13
+ }
14
+ case 'symbol': {
15
+ return `[Symbol:${value.description ?? ''}]`;
16
+ }
17
+ case 'undefined': {
18
+ return '[Undefined]';
19
+ }
20
+ default: {
21
+ return value;
22
+ }
23
+ }
24
+ };
25
+ const canonicalObject = (value, visit) => {
26
+ const sorted = {};
27
+ for (const key of Object.keys(value).toSorted()) {
28
+ const next = value[key];
29
+ sorted[key] = next === undefined ? '[Undefined]' : visit(next);
30
+ }
31
+ return sorted;
32
+ };
33
+ const canonicalize = (value) => {
34
+ if (Array.isArray(value)) {
35
+ return value.map(canonicalize);
36
+ }
37
+ if (value instanceof Date) {
38
+ return value.toISOString();
39
+ }
40
+ if (value instanceof RegExp) {
41
+ return value.toString();
42
+ }
43
+ if (value !== null && typeof value === 'object') {
44
+ return canonicalObject(value, canonicalize);
45
+ }
46
+ return canonicalLeaf(value);
47
+ };
48
+ /**
49
+ * Canonicalize a value for schema definition hashing.
50
+ *
51
+ * Matches the canonicalization logic used in `@ontrails/schema` so that
52
+ * schema hashes are consistent regardless of which code path computes them.
53
+ * Unlike the general `canonicalize`, this does not convert `Date`, `RegExp`,
54
+ * or `undefined` to sentinel strings — Zod `_zod.def` objects are plain
55
+ * JSON-serializable structures and both paths must agree on the same encoding.
56
+ */
57
+ const schemaCanonical = (value) => {
58
+ if (Array.isArray(value)) {
59
+ return value.map(schemaCanonical);
60
+ }
61
+ if (value !== null && typeof value === 'object') {
62
+ const sorted = {};
63
+ for (const key of Object.keys(value).toSorted()) {
64
+ sorted[key] = schemaCanonical(value[key]);
65
+ }
66
+ return sorted;
67
+ }
68
+ return value;
69
+ };
70
+ const stableJson = (value) => JSON.stringify(canonicalize(value));
71
+ const hashText = (text) => {
72
+ const hasher = new Bun.CryptoHasher('sha256');
73
+ hasher.update(text);
74
+ return hasher.digest('hex');
75
+ };
76
+ const hashValue = (value) => hashText(stableJson(value));
77
+ const parseJsonRecord = (value) => JSON.parse(value);
78
+ const schemaDefinitionHash = (schema) => {
79
+ const def = typeof schema === 'object' &&
80
+ schema !== null &&
81
+ '_zod' in schema &&
82
+ typeof schema._zod === 'object' &&
83
+ schema._zod !== null &&
84
+ 'def' in schema._zod
85
+ ? schema._zod.def
86
+ : schema;
87
+ return hashText(JSON.stringify(schemaCanonical(def)));
88
+ };
89
+ const sortedJsonSchema = (schema) => {
90
+ const json = stableJson(zodToJsonSchema(schema));
91
+ return {
92
+ json,
93
+ value: parseJsonRecord(json),
94
+ };
95
+ };
96
+ const sortKeys = (value) => {
97
+ const sorted = {};
98
+ for (const key of Object.keys(value).toSorted()) {
99
+ sorted[key] = value[key];
100
+ }
101
+ return sorted;
102
+ };
103
+ const normalizeTrailRows = (trails, saveId) => trails.map((trail) => ({
104
+ description: trail.description ?? null,
105
+ exampleCount: trail.examples?.length ?? 0,
106
+ hasExamples: (trail.examples?.length ?? 0) > 0 ? 1 : 0,
107
+ hasOutput: trail.output === undefined ? 0 : 1,
108
+ id: trail.id,
109
+ idempotent: trail.idempotent === true ? 1 : 0,
110
+ intent: trail.intent,
111
+ meta: trail.meta === undefined ? null : stableJson(trail.meta),
112
+ saveId,
113
+ }));
114
+ const normalizeCrossingRows = (trails, saveId) => trails.flatMap((trail) => [...new Set(trail.crosses)].toSorted().map((targetId) => ({
115
+ saveId,
116
+ sourceId: trail.id,
117
+ targetId,
118
+ })));
119
+ const normalizeTrailProvisionRows = (trails, saveId) => trails.flatMap((trail) => [...new Set(trail.provisions.map((provision) => provision.id))]
120
+ .toSorted()
121
+ .map((provisionId) => ({
122
+ provisionId,
123
+ saveId,
124
+ trailId: trail.id,
125
+ })));
126
+ const normalizeProvisionRows = (provisions, saveId) => provisions.map((provision) => ({
127
+ hasHealth: provision.health === undefined ? 0 : 1,
128
+ hasMock: provision.mock === undefined ? 0 : 1,
129
+ id: provision.id,
130
+ saveId,
131
+ }));
132
+ const normalizeSignalRows = (signals, saveId) => signals.map((signal) => ({
133
+ description: signal.description ?? null,
134
+ id: signal.id,
135
+ saveId,
136
+ }));
137
+ const normalizeTrailSignalRows = (signals, saveId) => signals.flatMap((signal) => [...new Set(signal.from)].toSorted().map((trailId) => ({
138
+ saveId,
139
+ signalId: signal.id,
140
+ trailId,
141
+ })));
142
+ /**
143
+ * Project trailhead rows for stored topo.
144
+ *
145
+ * Currently records only CLI-derived rows. MCP, HTTP, and other trailhead
146
+ * projections are intentionally deferred until the topo-store schema supports
147
+ * multi-trailhead representation. The JSON export (`trailhead_map` in
148
+ * `topo_exports`) is more faithful for now. See ADR-0015 for the target shape.
149
+ */
150
+ const normalizeTrailheadRows = (trails, saveId) => trails.map((trail) => ({
151
+ derivedName: deriveCliPath(trail.id).join(' '),
152
+ method: null,
153
+ saveId,
154
+ trailId: trail.id,
155
+ trailhead: 'cli',
156
+ }));
157
+ const buildExampleId = (saveId, trailId, ordinal) => `${saveId}:${trailId}:${ordinal.toString().padStart(4, '0')}`;
158
+ const normalizeExampleRows = (trails, saveId) => trails.flatMap((trail) => (trail.examples ?? []).map((example, index) => ({
159
+ description: example.description ?? null,
160
+ error: example.error ?? null,
161
+ expected: example.expected === undefined ? null : stableJson(example.expected),
162
+ id: buildExampleId(saveId, trail.id, index),
163
+ input: stableJson(example.input),
164
+ name: example.name,
165
+ ordinal: index,
166
+ saveId,
167
+ trailId: trail.id,
168
+ })));
169
+ const normalizeTopoProjection = (topo, saveId) => {
170
+ const trails = topo.list().toSorted((a, b) => a.id.localeCompare(b.id));
171
+ const provisions = topo
172
+ .listProvisions()
173
+ .toSorted((a, b) => a.id.localeCompare(b.id));
174
+ const signals = topo
175
+ .listSignals()
176
+ .toSorted((a, b) => a.id.localeCompare(b.id));
177
+ return {
178
+ crossings: normalizeCrossingRows(trails, saveId),
179
+ examples: normalizeExampleRows(trails, saveId),
180
+ provisions: normalizeProvisionRows(provisions, saveId),
181
+ signals: normalizeSignalRows(signals, saveId),
182
+ trailProvisions: normalizeTrailProvisionRows(trails, saveId),
183
+ trailSignals: normalizeTrailSignalRows(signals, saveId),
184
+ trailheads: normalizeTrailheadRows(trails, saveId),
185
+ trails: normalizeTrailRows(trails, saveId),
186
+ };
187
+ };
188
+ /**
189
+ * Look up a cached JSON schema by content hash.
190
+ *
191
+ * The query matches on `zod_hash` without filtering by `save_id` because the
192
+ * cache is intentionally cross-save: if the Zod schema definition has not
193
+ * changed (same hash), the serialized JSON Schema is reused regardless of
194
+ * which save produced it. This is safe as long as `zodToJsonSchema` is
195
+ * deterministic for a given `_def` hash — the `schemaDefinitionHash` pipeline
196
+ * guarantees that structurally identical schemas produce the same hash.
197
+ */
198
+ const readCachedJsonSchema = (db, ownerId, ownerKind, schemaKind, zodHash) => {
199
+ const row = db
200
+ .query(`SELECT json_schema
201
+ FROM topo_schemas
202
+ WHERE owner_id = ?
203
+ AND owner_kind = ?
204
+ AND schema_kind = ?
205
+ AND zod_hash = ?
206
+ LIMIT 1`)
207
+ .get(ownerId, ownerKind, schemaKind, zodHash);
208
+ return row?.json_schema;
209
+ };
210
+ const resolveSchemaRow = (db, ownerId, ownerKind, saveId, schemaKind, schema) => {
211
+ const zodHash = schemaDefinitionHash(schema);
212
+ const cachedJson = readCachedJsonSchema(db, ownerId, ownerKind, schemaKind, zodHash);
213
+ if (cachedJson !== undefined) {
214
+ return {
215
+ row: {
216
+ jsonSchema: cachedJson,
217
+ ownerId,
218
+ ownerKind,
219
+ saveId,
220
+ schemaKind,
221
+ zodHash,
222
+ },
223
+ value: parseJsonRecord(cachedJson),
224
+ };
225
+ }
226
+ const generated = sortedJsonSchema(schema);
227
+ return {
228
+ row: {
229
+ jsonSchema: generated.json,
230
+ ownerId,
231
+ ownerKind,
232
+ saveId,
233
+ schemaKind,
234
+ zodHash,
235
+ },
236
+ value: generated.value,
237
+ };
238
+ };
239
+ const materializeTrailSchema = (db, saveId, trail) => {
240
+ const inputSchema = resolveSchemaRow(db, trail.id, 'trail', saveId, 'input', trail.input);
241
+ if (trail.output === undefined) {
242
+ return {
243
+ rows: [inputSchema.row],
244
+ value: {
245
+ input: inputSchema.value,
246
+ },
247
+ };
248
+ }
249
+ const outputSchema = resolveSchemaRow(db, trail.id, 'trail', saveId, 'output', trail.output);
250
+ return {
251
+ rows: [inputSchema.row, outputSchema.row],
252
+ value: {
253
+ input: inputSchema.value,
254
+ output: outputSchema.value,
255
+ },
256
+ };
257
+ };
258
+ const materializeTrailSchemas = (db, saveId, trails) => {
259
+ const rows = [];
260
+ const trailSchemas = new Map();
261
+ for (const trail of trails) {
262
+ const materialized = materializeTrailSchema(db, saveId, trail);
263
+ rows.push(...materialized.rows);
264
+ trailSchemas.set(trail.id, materialized.value);
265
+ }
266
+ return {
267
+ rows,
268
+ trailSchemas,
269
+ };
270
+ };
271
+ const materializeSignalSchemas = (db, saveId, signals) => {
272
+ const rows = [];
273
+ const signalPayloads = new Map();
274
+ for (const signal of signals) {
275
+ const payloadSchema = resolveSchemaRow(db, signal.id, 'signal', saveId, 'payload', signal.payload);
276
+ rows.push(payloadSchema.row);
277
+ signalPayloads.set(signal.id, payloadSchema.value);
278
+ }
279
+ return {
280
+ rows,
281
+ signalPayloads,
282
+ };
283
+ };
284
+ const materializeSchemas = (db, saveId, signals, trails) => {
285
+ const trailMaterial = materializeTrailSchemas(db, saveId, trails);
286
+ const signalMaterial = materializeSignalSchemas(db, saveId, signals);
287
+ return {
288
+ rows: [...trailMaterial.rows, ...signalMaterial.rows],
289
+ signalPayloads: signalMaterial.signalPayloads,
290
+ trailSchemas: trailMaterial.trailSchemas,
291
+ };
292
+ };
293
+ const extractTrailheads = (raw) => Array.isArray(raw['trailheads'])
294
+ ? raw['trailheads'].toSorted()
295
+ : [];
296
+ const addSafetyMarkers = (entry, trail) => {
297
+ if (trail.intent !== 'write') {
298
+ entry['intent'] = trail.intent;
299
+ }
300
+ if (trail.idempotent === true) {
301
+ entry['idempotent'] = true;
302
+ }
303
+ };
304
+ const addExtendedMetadata = (entry, raw, trail) => {
305
+ if (raw['deprecated'] === true) {
306
+ entry['deprecated'] = true;
307
+ }
308
+ if (typeof raw['replacedBy'] === 'string') {
309
+ entry['replacedBy'] = raw['replacedBy'];
310
+ }
311
+ if (trail.detours !== undefined) {
312
+ const detours = {};
313
+ for (const key of Object.keys(trail.detours).toSorted()) {
314
+ detours[key] = (trail.detours[key] ?? []).toSorted();
315
+ }
316
+ entry['detours'] = detours;
317
+ }
318
+ };
319
+ const addTrailRelations = (entry, trail) => {
320
+ if (trail.crosses.length > 0) {
321
+ entry['crosses'] = trail.crosses.toSorted();
322
+ }
323
+ if (trail.provisions.length > 0) {
324
+ entry['provisions'] = trail.provisions
325
+ .map((provision) => provision.id)
326
+ .toSorted();
327
+ }
328
+ };
329
+ const buildTrailEntryBase = (trail, trailSchema) => {
330
+ const raw = trail;
331
+ const entry = {
332
+ cli: { path: deriveCliPath(trail.id) },
333
+ exampleCount: trail.examples?.length ?? 0,
334
+ id: trail.id,
335
+ input: trailSchema.input,
336
+ kind: trail.kind,
337
+ trailheads: extractTrailheads(raw),
338
+ };
339
+ if (trailSchema.output !== undefined) {
340
+ entry['output'] = trailSchema.output;
341
+ }
342
+ if (trail.description !== undefined) {
343
+ entry['description'] = trail.description;
344
+ }
345
+ return {
346
+ entry,
347
+ raw,
348
+ };
349
+ };
350
+ const trailToEntryRecord = (trail, trailSchema) => {
351
+ const { entry, raw } = buildTrailEntryBase(trail, trailSchema);
352
+ addSafetyMarkers(entry, trail);
353
+ addExtendedMetadata(entry, raw, trail);
354
+ addTrailRelations(entry, trail);
355
+ return sortKeys(entry);
356
+ };
357
+ const signalToEntryRecord = (signal, payloadSchema) => {
358
+ const raw = signal;
359
+ const entry = {
360
+ exampleCount: 0,
361
+ id: signal.id,
362
+ input: payloadSchema,
363
+ kind: 'signal',
364
+ trailheads: extractTrailheads(raw),
365
+ };
366
+ if (signal.description !== undefined) {
367
+ entry['description'] = signal.description;
368
+ }
369
+ if (raw['deprecated'] === true) {
370
+ entry['deprecated'] = true;
371
+ }
372
+ if (typeof raw['replacedBy'] === 'string') {
373
+ entry['replacedBy'] = raw['replacedBy'];
374
+ }
375
+ return sortKeys(entry);
376
+ };
377
+ const provisionToEntryRecord = (provision) => {
378
+ const entry = {
379
+ exampleCount: 0,
380
+ id: provision.id,
381
+ kind: 'provision',
382
+ trailheads: [],
383
+ };
384
+ if (provision.description !== undefined) {
385
+ entry['description'] = provision.description;
386
+ }
387
+ if (provision.health !== undefined) {
388
+ entry['healthcheck'] = true;
389
+ }
390
+ return sortKeys(entry);
391
+ };
392
+ const requireTrailSchema = (trailSchemas, trailId) => {
393
+ const schema = trailSchemas.get(trailId);
394
+ if (schema === undefined) {
395
+ throw new Error(`Missing cached trail schema for "${trailId}"`);
396
+ }
397
+ return schema;
398
+ };
399
+ const requireSignalPayload = (signalPayloads, signalId) => {
400
+ const payload = signalPayloads.get(signalId);
401
+ if (payload === undefined) {
402
+ throw new Error(`Missing cached signal schema for "${signalId}"`);
403
+ }
404
+ return payload;
405
+ };
406
+ const buildTrailheadMap = (generatedAt, provisions, signalPayloads, signals, trailSchemas, trails) => {
407
+ const entries = [
408
+ ...trails.map((trail) => trailToEntryRecord(trail, requireTrailSchema(trailSchemas, trail.id))),
409
+ ...signals.map((signal) => signalToEntryRecord(signal, requireSignalPayload(signalPayloads, signal.id))),
410
+ ...provisions.map((provision) => provisionToEntryRecord(provision)),
411
+ ].toSorted((a, b) => a.id.localeCompare(b.id));
412
+ return {
413
+ entries,
414
+ generatedAt,
415
+ version: '1.0',
416
+ };
417
+ };
418
+ const hashTrailheadMapRecord = (trailheadMap) => {
419
+ const { generatedAt: _unused, ...rest } = trailheadMap;
420
+ return hashValue(rest);
421
+ };
422
+ const entryPayload = (entry) => {
423
+ const { id: _unusedId, kind: _unusedKind, ...rest } = entry;
424
+ return sortKeys(rest);
425
+ };
426
+ const entriesForKind = (entries, kind) => Object.fromEntries(entries
427
+ .filter((entry) => entry.kind === kind)
428
+ .map((entry) => [entry.id, entryPayload(entry)]));
429
+ const buildSerializedLock = (hash, topo, trailheadMap) => sortKeys({
430
+ apps: sortKeys({
431
+ [topo.name]: sortKeys({
432
+ provisions: entriesForKind(trailheadMap.entries, 'provision'),
433
+ signals: entriesForKind(trailheadMap.entries, 'signal'),
434
+ trails: entriesForKind(trailheadMap.entries, 'trail'),
435
+ }),
436
+ }),
437
+ generatedAt: trailheadMap.generatedAt,
438
+ hash,
439
+ version: 1,
440
+ });
441
+ const buildStoredTopoExport = (db, save, topo) => {
442
+ const trails = topo.list().toSorted((a, b) => a.id.localeCompare(b.id));
443
+ const provisions = topo
444
+ .listProvisions()
445
+ .toSorted((a, b) => a.id.localeCompare(b.id));
446
+ const signals = topo
447
+ .listSignals()
448
+ .toSorted((a, b) => a.id.localeCompare(b.id));
449
+ const schemas = materializeSchemas(db, save.id, signals, trails);
450
+ const trailheadMap = buildTrailheadMap(save.createdAt, provisions, schemas.signalPayloads, signals, schemas.trailSchemas, trails);
451
+ const trailheadHash = hashTrailheadMapRecord(trailheadMap);
452
+ const serializedLock = `${JSON.stringify(buildSerializedLock(trailheadHash, topo, trailheadMap), null, 2)}\n`;
453
+ return {
454
+ exportRow: {
455
+ saveId: save.id,
456
+ serializedLock,
457
+ trailheadHash,
458
+ trailheadMap: `${JSON.stringify(trailheadMap, null, 2)}\n`,
459
+ },
460
+ schemaRows: schemas.rows,
461
+ };
462
+ };
463
+ const insertRows = (db, rows, statement, toParams) => {
464
+ for (const row of rows) {
465
+ db.run(statement, toParams(row));
466
+ }
467
+ };
468
+ const insertProjectedRows = (db, projection) => {
469
+ insertRows(db, projection.trails, `INSERT INTO topo_trails (
470
+ id, intent, idempotent, has_output, has_examples, example_count, description, meta, save_id
471
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, (row) => [
472
+ row.id,
473
+ row.intent,
474
+ row.idempotent,
475
+ row.hasOutput,
476
+ row.hasExamples,
477
+ row.exampleCount,
478
+ row.description,
479
+ row.meta,
480
+ row.saveId,
481
+ ]);
482
+ insertRows(db, projection.crossings, 'INSERT INTO topo_crossings (source_id, target_id, save_id) VALUES (?, ?, ?)', (row) => [row.sourceId, row.targetId, row.saveId]);
483
+ insertRows(db, projection.trailProvisions, `INSERT INTO topo_trail_provisions (trail_id, provision_id, save_id)
484
+ VALUES (?, ?, ?)`, (row) => [row.trailId, row.provisionId, row.saveId]);
485
+ insertRows(db, projection.provisions, `INSERT INTO topo_provisions (id, has_mock, has_health, save_id)
486
+ VALUES (?, ?, ?, ?)`, (row) => [row.id, row.hasMock, row.hasHealth, row.saveId]);
487
+ insertRows(db, projection.signals, 'INSERT INTO topo_signals (id, description, save_id) VALUES (?, ?, ?)', (row) => [row.id, row.description, row.saveId]);
488
+ insertRows(db, projection.trailSignals, `INSERT INTO topo_trail_signals (trail_id, signal_id, save_id)
489
+ VALUES (?, ?, ?)`, (row) => [row.trailId, row.signalId, row.saveId]);
490
+ insertRows(db, projection.trailheads, `INSERT INTO topo_trailheads (trail_id, trailhead, derived_name, method, save_id)
491
+ VALUES (?, ?, ?, ?, ?)`, (row) => [
492
+ row.trailId,
493
+ row.trailhead,
494
+ row.derivedName,
495
+ row.method,
496
+ row.saveId,
497
+ ]);
498
+ insertRows(db, projection.examples, `INSERT INTO topo_examples (
499
+ id, trail_id, ordinal, name, description, input, expected, error, save_id
500
+ ) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?)`, (row) => [
501
+ row.id,
502
+ row.trailId,
503
+ row.ordinal,
504
+ row.name,
505
+ row.description,
506
+ row.input,
507
+ row.expected,
508
+ row.error,
509
+ row.saveId,
510
+ ]);
511
+ };
512
+ const insertSchemaRows = (db, rows) => {
513
+ insertRows(db, rows, `INSERT INTO topo_schemas (
514
+ owner_id, owner_kind, schema_kind, zod_hash, json_schema, save_id
515
+ ) VALUES (?, ?, ?, ?, ?, ?)`, (row) => [
516
+ row.ownerId,
517
+ row.ownerKind,
518
+ row.schemaKind,
519
+ row.zodHash,
520
+ row.jsonSchema,
521
+ row.saveId,
522
+ ]);
523
+ };
524
+ const insertStoredExport = (db, exportRow) => {
525
+ db.run(`INSERT INTO topo_exports (
526
+ save_id, trailhead_map, trailhead_hash, serialized_lock
527
+ ) VALUES (?, ?, ?, ?)`, [
528
+ exportRow.saveId,
529
+ exportRow.trailheadMap,
530
+ exportRow.trailheadHash,
531
+ exportRow.serializedLock,
532
+ ]);
533
+ };
534
+ export const getStoredTopoExport = (db, saveId) => {
535
+ const row = db
536
+ .query(`SELECT trailhead_map, trailhead_hash, serialized_lock
537
+ FROM topo_exports
538
+ WHERE save_id = ?`)
539
+ .get(saveId);
540
+ if (row === undefined || row === null) {
541
+ return undefined;
542
+ }
543
+ return {
544
+ lockContent: row.serialized_lock,
545
+ trailheadHash: row.trailhead_hash,
546
+ trailheadMapJson: row.trailhead_map,
547
+ };
548
+ };
549
+ export const persistEstablishedTopoSave = (db, topo, input) => {
550
+ const validated = validateEstablishedTopo(topo);
551
+ if (validated.isErr()) {
552
+ return Result.err(validated.error);
553
+ }
554
+ ensureTopoHistorySchema(db);
555
+ const saveInput = {
556
+ ...input,
557
+ provisionCount: input?.provisionCount ?? topo.provisions.size,
558
+ signalCount: input?.signalCount ?? topo.signals.size,
559
+ trailCount: input?.trailCount ?? topo.trails.size,
560
+ };
561
+ const save = db.transaction(() => {
562
+ const record = insertTopoSaveRecord(db, saveInput);
563
+ const artifacts = buildStoredTopoExport(db, record, topo);
564
+ insertProjectedRows(db, normalizeTopoProjection(topo, record.id));
565
+ insertSchemaRows(db, artifacts.schemaRows);
566
+ insertStoredExport(db, artifacts.exportRow);
567
+ return record;
568
+ })();
569
+ return Result.ok(save);
570
+ };
571
+ //# sourceMappingURL=topo-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-store.js","sourceRoot":"","sources":["../../src/internal/topo-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,16 @@
1
+ import { Database } from 'bun:sqlite';
2
+ export interface TrailsDbLocationOptions {
3
+ readonly path?: string;
4
+ readonly rootDir?: string;
5
+ }
6
+ export interface EnsureSubsystemSchemaOptions {
7
+ readonly migrate: (currentVersion: number) => void;
8
+ readonly subsystem: string;
9
+ readonly version: number;
10
+ }
11
+ export declare const resolveTrailsDir: (options?: TrailsDbLocationOptions) => string;
12
+ export declare const resolveTrailsDbPath: (options?: TrailsDbLocationOptions) => string;
13
+ export declare const openWriteTrailsDb: (options?: TrailsDbLocationOptions) => Database;
14
+ export declare const openReadTrailsDb: (options?: TrailsDbLocationOptions) => Database;
15
+ export declare const ensureSubsystemSchema: (db: Database, options: EnsureSubsystemSchemaOptions) => void;
16
+ //# sourceMappingURL=trails-db.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trails-db.d.ts","sourceRoot":"","sources":["../../src/internal/trails-db.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,YAAY,CAAC;AA2BtC,MAAM,WAAW,uBAAuB;IACtC,QAAQ,CAAC,IAAI,CAAC,EAAE,MAAM,CAAC;IACvB,QAAQ,CAAC,OAAO,CAAC,EAAE,MAAM,CAAC;CAC3B;AAED,MAAM,WAAW,4BAA4B;IAC3C,QAAQ,CAAC,OAAO,EAAE,CAAC,cAAc,EAAE,MAAM,KAAK,IAAI,CAAC;IACnD,QAAQ,CAAC,SAAS,EAAE,MAAM,CAAC;IAC3B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AASD,eAAO,MAAM,gBAAgB,GAAI,UAAU,uBAAuB,KAAG,MACjB,CAAC;AAErD,eAAO,MAAM,mBAAmB,GAC9B,UAAU,uBAAuB,KAChC,MAGkD,CAAC;AAsFtD,eAAO,MAAM,iBAAiB,GAC5B,UAAU,uBAAuB,KAChC,QAgBF,CAAC;AAEF,eAAO,MAAM,gBAAgB,GAC3B,UAAU,uBAAuB,KAChC,QAUF,CAAC;AAEF,eAAO,MAAM,qBAAqB,GAChC,IAAI,QAAQ,EACZ,SAAS,4BAA4B,KACpC,IAYF,CAAC"}