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

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 (280) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +11 -0
  3. package/README.md +17 -13
  4. package/dist/branded.d.ts +1 -1
  5. package/dist/branded.d.ts.map +1 -1
  6. package/dist/branded.js +1 -1
  7. package/dist/branded.js.map +1 -1
  8. package/dist/context.d.ts +13 -1
  9. package/dist/context.d.ts.map +1 -1
  10. package/dist/context.js +19 -3
  11. package/dist/context.js.map +1 -1
  12. package/dist/contour.d.ts +81 -0
  13. package/dist/contour.d.ts.map +1 -0
  14. package/dist/contour.js +176 -0
  15. package/dist/contour.js.map +1 -0
  16. package/dist/cross-schema.d.ts +18 -0
  17. package/dist/cross-schema.d.ts.map +1 -0
  18. package/dist/cross-schema.js +29 -0
  19. package/dist/cross-schema.js.map +1 -0
  20. package/dist/draft.d.ts +5 -5
  21. package/dist/draft.d.ts.map +1 -1
  22. package/dist/draft.js +28 -27
  23. package/dist/draft.js.map +1 -1
  24. package/dist/errors.d.ts +62 -4
  25. package/dist/errors.d.ts.map +1 -1
  26. package/dist/errors.js +44 -1
  27. package/dist/errors.js.map +1 -1
  28. package/dist/execute.d.ts +26 -9
  29. package/dist/execute.d.ts.map +1 -1
  30. package/dist/execute.js +441 -20
  31. package/dist/execute.js.map +1 -1
  32. package/dist/fire.d.ts +43 -0
  33. package/dist/fire.d.ts.map +1 -0
  34. package/dist/fire.js +185 -0
  35. package/dist/fire.js.map +1 -0
  36. package/dist/index.d.ts +31 -20
  37. package/dist/index.d.ts.map +1 -1
  38. package/dist/index.js +23 -13
  39. package/dist/index.js.map +1 -1
  40. package/dist/internal/cross-batch.d.ts +44 -0
  41. package/dist/internal/cross-batch.d.ts.map +1 -0
  42. package/dist/internal/cross-batch.js +58 -0
  43. package/dist/internal/cross-batch.js.map +1 -0
  44. package/dist/internal/fork-ctx.d.ts +41 -0
  45. package/dist/internal/fork-ctx.d.ts.map +1 -0
  46. package/dist/internal/fork-ctx.js +47 -0
  47. package/dist/internal/fork-ctx.js.map +1 -0
  48. package/dist/internal/signal-ref.d.ts +15 -0
  49. package/dist/internal/signal-ref.d.ts.map +1 -0
  50. package/dist/internal/signal-ref.js +41 -0
  51. package/dist/internal/signal-ref.js.map +1 -0
  52. package/dist/internal/topo-saves.d.ts +8 -2
  53. package/dist/internal/topo-saves.d.ts.map +1 -1
  54. package/dist/internal/topo-saves.js +162 -23
  55. package/dist/internal/topo-saves.js.map +1 -1
  56. package/dist/internal/topo-snapshots.d.ts +57 -0
  57. package/dist/internal/topo-snapshots.d.ts.map +1 -0
  58. package/dist/internal/topo-snapshots.js +372 -0
  59. package/dist/internal/topo-snapshots.js.map +1 -0
  60. package/dist/internal/topo-store-read.d.ts +23 -20
  61. package/dist/internal/topo-store-read.d.ts.map +1 -1
  62. package/dist/internal/topo-store-read.js +82 -83
  63. package/dist/internal/topo-store-read.js.map +1 -1
  64. package/dist/internal/topo-store.d.ts +19 -5
  65. package/dist/internal/topo-store.d.ts.map +1 -1
  66. package/dist/internal/topo-store.js +174 -124
  67. package/dist/internal/topo-store.js.map +1 -1
  68. package/dist/internal/tracing.d.ts +98 -0
  69. package/dist/internal/tracing.d.ts.map +1 -0
  70. package/dist/internal/tracing.js +102 -0
  71. package/dist/internal/tracing.js.map +1 -0
  72. package/dist/internal/trails-db.d.ts +2 -2
  73. package/dist/internal/trails-db.d.ts.map +1 -1
  74. package/dist/internal/trails-db.js +8 -8
  75. package/dist/internal/trails-db.js.map +1 -1
  76. package/dist/internal/zod-wrappers.d.ts +40 -0
  77. package/dist/internal/zod-wrappers.d.ts.map +1 -0
  78. package/dist/internal/zod-wrappers.js +59 -0
  79. package/dist/internal/zod-wrappers.js.map +1 -0
  80. package/dist/layer.d.ts +22 -5
  81. package/dist/layer.d.ts.map +1 -1
  82. package/dist/layer.js +20 -3
  83. package/dist/layer.js.map +1 -1
  84. package/dist/path-security.d.ts +1 -1
  85. package/dist/path-security.d.ts.map +1 -1
  86. package/dist/path-security.js +1 -1
  87. package/dist/path-security.js.map +1 -1
  88. package/dist/resilience.d.ts +1 -1
  89. package/dist/resilience.d.ts.map +1 -1
  90. package/dist/resilience.js +3 -3
  91. package/dist/resilience.js.map +1 -1
  92. package/dist/resource-config.d.ts +22 -0
  93. package/dist/resource-config.d.ts.map +1 -0
  94. package/dist/resource-config.js +210 -0
  95. package/dist/resource-config.js.map +1 -0
  96. package/dist/resource.d.ts +74 -0
  97. package/dist/resource.d.ts.map +1 -0
  98. package/dist/resource.js +61 -0
  99. package/dist/resource.js.map +1 -0
  100. package/dist/run.d.ts +4 -3
  101. package/dist/run.d.ts.map +1 -1
  102. package/dist/run.js +5 -4
  103. package/dist/run.js.map +1 -1
  104. package/dist/serialization.d.ts.map +1 -1
  105. package/dist/serialization.js +2 -1
  106. package/dist/serialization.js.map +1 -1
  107. package/dist/store/accessor-protocol.d.ts +51 -0
  108. package/dist/store/accessor-protocol.d.ts.map +1 -0
  109. package/dist/store/accessor-protocol.js +2 -0
  110. package/dist/store/accessor-protocol.js.map +1 -0
  111. package/dist/store/index.d.ts +2 -0
  112. package/dist/store/index.d.ts.map +1 -0
  113. package/dist/store/index.js +2 -0
  114. package/dist/store/index.js.map +1 -0
  115. package/dist/surface-filter.d.ts +13 -0
  116. package/dist/surface-filter.d.ts.map +1 -0
  117. package/dist/surface-filter.js +76 -0
  118. package/dist/surface-filter.js.map +1 -0
  119. package/dist/topo-store.d.ts +36 -22
  120. package/dist/topo-store.d.ts.map +1 -1
  121. package/dist/topo-store.js +215 -71
  122. package/dist/topo-store.js.map +1 -1
  123. package/dist/topo.d.ts +23 -9
  124. package/dist/topo.d.ts.map +1 -1
  125. package/dist/topo.js +175 -46
  126. package/dist/topo.js.map +1 -1
  127. package/dist/trail.d.ts +86 -19
  128. package/dist/trail.d.ts.map +1 -1
  129. package/dist/trail.js +59 -4
  130. package/dist/trail.js.map +1 -1
  131. package/dist/trails/derive-trail.d.ts +66 -0
  132. package/dist/trails/derive-trail.d.ts.map +1 -0
  133. package/dist/trails/derive-trail.js +378 -0
  134. package/dist/trails/derive-trail.js.map +1 -0
  135. package/dist/trails/index.d.ts +5 -0
  136. package/dist/trails/index.d.ts.map +1 -0
  137. package/dist/trails/index.js +3 -0
  138. package/dist/trails/index.js.map +1 -0
  139. package/dist/trails/ingest.d.ts +24 -0
  140. package/dist/trails/ingest.d.ts.map +1 -0
  141. package/dist/trails/ingest.js +63 -0
  142. package/dist/trails/ingest.js.map +1 -0
  143. package/dist/transport-error-map.d.ts +106 -0
  144. package/dist/transport-error-map.d.ts.map +1 -0
  145. package/dist/transport-error-map.js +24 -0
  146. package/dist/transport-error-map.js.map +1 -0
  147. package/dist/type-checks.test-d.d.ts +71 -0
  148. package/dist/type-checks.test-d.d.ts.map +1 -0
  149. package/dist/type-checks.test-d.js +12 -0
  150. package/dist/type-checks.test-d.js.map +1 -0
  151. package/dist/type-utils.d.ts +11 -2
  152. package/dist/type-utils.d.ts.map +1 -1
  153. package/dist/type-utils.js.map +1 -1
  154. package/dist/types.d.ts +113 -7
  155. package/dist/types.d.ts.map +1 -1
  156. package/dist/types.js.map +1 -1
  157. package/dist/validate-established-topo.js +2 -2
  158. package/dist/validate-established-topo.js.map +1 -1
  159. package/dist/validate-topo.d.ts.map +1 -1
  160. package/dist/validate-topo.js +24 -7
  161. package/dist/validate-topo.js.map +1 -1
  162. package/dist/workspace.d.ts +1 -1
  163. package/dist/workspace.d.ts.map +1 -1
  164. package/dist/workspace.js +1 -1
  165. package/dist/workspace.js.map +1 -1
  166. package/package.json +8 -2
  167. package/src/__tests__/branded.test.ts +5 -5
  168. package/src/__tests__/context.test.ts +3 -3
  169. package/src/__tests__/contour.test.ts +263 -0
  170. package/src/__tests__/derive-trail.test.ts +668 -0
  171. package/src/__tests__/errors.test.ts +118 -0
  172. package/src/__tests__/execute.test.ts +1179 -141
  173. package/src/__tests__/fire.test.ts +1056 -0
  174. package/src/__tests__/fork-ctx.test.ts +83 -0
  175. package/src/__tests__/ingest.test.ts +191 -0
  176. package/src/__tests__/{gate.test.ts → layer.test.ts} +21 -21
  177. package/src/__tests__/path-security.test.ts +7 -7
  178. package/src/__tests__/resilience.test.ts +8 -8
  179. package/src/__tests__/resource.test.ts +204 -0
  180. package/src/__tests__/run.test.ts +13 -13
  181. package/src/__tests__/service-config.test.ts +28 -32
  182. package/src/__tests__/surface-filter.test.ts +196 -0
  183. package/src/__tests__/topo-store-read.test.ts +41 -36
  184. package/src/__tests__/topo-store.test.ts +493 -93
  185. package/src/__tests__/topo.test.ts +350 -54
  186. package/src/__tests__/trail.test.ts +189 -24
  187. package/src/__tests__/trails-db.test.ts +32 -25
  188. package/src/__tests__/transport-error-map.test.ts +82 -0
  189. package/src/__tests__/type-utils.test.ts +29 -1
  190. package/src/__tests__/validate-topo.test.ts +147 -25
  191. package/src/__tests__/workspace.test.ts +6 -6
  192. package/src/__tests__/zod-wrappers.test.ts +62 -0
  193. package/src/branded.ts +1 -1
  194. package/src/context.ts +24 -4
  195. package/src/contour.ts +344 -0
  196. package/src/cross-schema.ts +36 -0
  197. package/src/draft.ts +56 -52
  198. package/src/errors.ts +62 -18
  199. package/src/execute.ts +840 -29
  200. package/src/fire.ts +295 -0
  201. package/src/index.ts +116 -29
  202. package/src/internal/cross-batch.ts +77 -0
  203. package/src/internal/fork-ctx.ts +69 -0
  204. package/src/internal/signal-ref.ts +87 -0
  205. package/src/internal/topo-snapshots.ts +517 -0
  206. package/src/internal/topo-store-read.ts +140 -132
  207. package/src/internal/topo-store.ts +291 -186
  208. package/src/internal/tracing.ts +187 -0
  209. package/src/internal/trails-db.ts +9 -11
  210. package/src/internal/zod-wrappers.ts +78 -0
  211. package/src/layer.ts +50 -0
  212. package/src/path-security.ts +1 -1
  213. package/src/resilience.ts +3 -3
  214. package/src/{provision-config.ts → resource-config.ts} +109 -123
  215. package/src/resource.ts +155 -0
  216. package/src/run.ts +5 -4
  217. package/src/serialization.ts +2 -0
  218. package/src/store/accessor-protocol.ts +56 -0
  219. package/src/store/index.ts +4 -0
  220. package/src/surface-filter.ts +182 -0
  221. package/src/topo-store.ts +313 -104
  222. package/src/topo.ts +328 -57
  223. package/src/trail.ts +199 -31
  224. package/src/trails/derive-trail.ts +842 -0
  225. package/src/trails/index.ts +9 -0
  226. package/src/trails/ingest.ts +146 -0
  227. package/src/transport-error-map.ts +56 -0
  228. package/src/type-checks.test-d.ts +106 -0
  229. package/src/type-utils.ts +17 -2
  230. package/src/types.ts +148 -11
  231. package/src/validate-established-topo.ts +2 -2
  232. package/src/validate-topo.ts +32 -8
  233. package/src/workspace.ts +1 -1
  234. package/tsconfig.tests.json +10 -0
  235. package/tsconfig.tsbuildinfo +1 -1
  236. package/dist/adapters.d.ts +0 -39
  237. package/dist/adapters.d.ts.map +0 -1
  238. package/dist/adapters.js +0 -2
  239. package/dist/adapters.js.map +0 -1
  240. package/dist/dispatch.d.ts +0 -27
  241. package/dist/dispatch.d.ts.map +0 -1
  242. package/dist/dispatch.js +0 -34
  243. package/dist/dispatch.js.map +0 -1
  244. package/dist/event.d.ts +0 -8
  245. package/dist/event.d.ts.map +0 -1
  246. package/dist/event.js +0 -7
  247. package/dist/event.js.map +0 -1
  248. package/dist/gate.d.ts +0 -17
  249. package/dist/gate.d.ts.map +0 -1
  250. package/dist/gate.js +0 -21
  251. package/dist/gate.js.map +0 -1
  252. package/dist/health.d.ts +0 -18
  253. package/dist/health.d.ts.map +0 -1
  254. package/dist/health.js +0 -5
  255. package/dist/health.js.map +0 -1
  256. package/dist/job.d.ts +0 -24
  257. package/dist/job.d.ts.map +0 -1
  258. package/dist/job.js +0 -17
  259. package/dist/job.js.map +0 -1
  260. package/dist/provision-config.d.ts +0 -22
  261. package/dist/provision-config.d.ts.map +0 -1
  262. package/dist/provision-config.js +0 -210
  263. package/dist/provision-config.js.map +0 -1
  264. package/dist/provision.d.ts +0 -71
  265. package/dist/provision.d.ts.map +0 -1
  266. package/dist/provision.js +0 -56
  267. package/dist/provision.js.map +0 -1
  268. package/dist/service-config.d.ts +0 -22
  269. package/dist/service-config.d.ts.map +0 -1
  270. package/dist/service-config.js +0 -210
  271. package/dist/service-config.js.map +0 -1
  272. package/dist/service.d.ts +0 -71
  273. package/dist/service.d.ts.map +0 -1
  274. package/dist/service.js +0 -56
  275. package/dist/service.js.map +0 -1
  276. package/src/__tests__/service.test.ts +0 -197
  277. package/src/event.ts +0 -15
  278. package/src/gate.ts +0 -44
  279. package/src/internal/topo-saves.ts +0 -429
  280. package/src/provision.ts +0 -148
@@ -1,9 +1,9 @@
1
1
  import { ValidationError } from '../errors.js';
2
- import { getTopoPin, getTopoSave, listTopoPins, listTopoSaves, } from './topo-saves.js';
2
+ import { listTopoSnapshots, readPinnedTopoSnapshot, readTopoSnapshot, } from './topo-snapshots.js';
3
3
  import { getStoredTopoExport } from './topo-store.js';
4
4
  const ensureSingleRefSelector = (ref) => {
5
- if (ref?.pin !== undefined && ref.saveId !== undefined) {
6
- throw new ValidationError('Topo store references may use pin or saveId, not both');
5
+ if (ref?.pin !== undefined && ref.snapshotId !== undefined) {
6
+ throw new ValidationError('Topo store references may use pin or snapshotId, not both');
7
7
  }
8
8
  };
9
9
  const normalizeIntent = (intent) => {
@@ -25,24 +25,23 @@ const parseMeta = (value) => value === null
25
25
  ? null
26
26
  : JSON.parse(value);
27
27
  const parseJson = (value) => JSON.parse(value);
28
- const resolveRefSave = (db, ref) => {
28
+ const readSnapshotRef = (db, ref) => {
29
29
  ensureSingleRefSelector(ref);
30
- if (ref?.saveId !== undefined) {
31
- return getTopoSave(db, ref.saveId);
30
+ if (ref?.snapshotId !== undefined) {
31
+ return readTopoSnapshot(db, ref.snapshotId);
32
32
  }
33
33
  if (ref?.pin !== undefined) {
34
- const pin = getTopoPin(db, ref.pin);
35
- return pin === undefined ? undefined : getTopoSave(db, pin.saveId);
34
+ return readPinnedTopoSnapshot(db, ref.pin);
36
35
  }
37
- return listTopoSaves(db)[0];
36
+ return listTopoSnapshots(db, { limit: 1 })[0];
38
37
  };
39
- const readStoredEntry = (db, saveId, kind, id) => {
40
- const stored = getStoredTopoExport(db, saveId);
38
+ const readStoredEntry = (db, snapshotId, kind, id) => {
39
+ const stored = getStoredTopoExport(db, snapshotId);
41
40
  if (stored === undefined) {
42
41
  return undefined;
43
42
  }
44
- const map = JSON.parse(stored.trailheadMapJson);
45
- return map.entries.find((entry) => entry.kind === kind && entry.id === id);
43
+ const map = JSON.parse(stored.surfaceMapJson);
44
+ return map.entries.find((entry) => entry.id === id && entry.kind === kind);
46
45
  };
47
46
  const mapTrailRow = (row) => {
48
47
  const intent = normalizeIntent(row.intent);
@@ -56,30 +55,31 @@ const mapTrailRow = (row) => {
56
55
  intent,
57
56
  kind: 'trail',
58
57
  meta: parseMeta(row.meta),
58
+ pattern: row.pattern,
59
59
  safety: safetyForIntent(intent),
60
- saveId: row.save_id,
60
+ snapshotId: row.snapshot_id,
61
61
  };
62
62
  };
63
- const readTrailCrossings = (db, saveId, trailId) => db
63
+ const readTrailCrossings = (db, snapshotId, trailId) => db
64
64
  .query(`SELECT target_id
65
65
  FROM topo_crossings
66
- WHERE save_id = ? AND source_id = ?
66
+ WHERE snapshot_id = ? AND source_id = ?
67
67
  ORDER BY target_id ASC`)
68
- .all(saveId, trailId)
68
+ .all(snapshotId, trailId)
69
69
  .map((row) => row.target_id);
70
- const readTrailProvisionIds = (db, saveId, trailId) => db
71
- .query(`SELECT provision_id
72
- FROM topo_trail_provisions
73
- WHERE save_id = ? AND trail_id = ?
74
- ORDER BY provision_id ASC`)
75
- .all(saveId, trailId)
76
- .map((row) => row.provision_id);
77
- const readTrailExamples = (db, saveId, trailId) => db
70
+ const readTrailResourceIds = (db, snapshotId, trailId) => db
71
+ .query(`SELECT resource_id
72
+ FROM topo_trail_resources
73
+ WHERE snapshot_id = ? AND trail_id = ?
74
+ ORDER BY resource_id ASC`)
75
+ .all(snapshotId, trailId)
76
+ .map((row) => row.resource_id);
77
+ const readTrailExamples = (db, snapshotId, trailId) => db
78
78
  .query(`SELECT ordinal, name, description, input, expected, error
79
79
  FROM topo_examples
80
- WHERE save_id = ? AND trail_id = ?
80
+ WHERE snapshot_id = ? AND trail_id = ?
81
81
  ORDER BY ordinal ASC`)
82
- .all(saveId, trailId)
82
+ .all(snapshotId, trailId)
83
83
  .map((row) => ({
84
84
  description: row.description,
85
85
  error: row.error,
@@ -88,87 +88,86 @@ const readTrailExamples = (db, saveId, trailId) => db
88
88
  name: row.name,
89
89
  ordinal: row.ordinal,
90
90
  }));
91
- const readProvisionUsage = (db, saveId) => {
91
+ const readResourceUsage = (db, snapshotId) => {
92
92
  const rows = db
93
- .query(`SELECT provision_id, trail_id
94
- FROM topo_trail_provisions
95
- WHERE save_id = ?
96
- ORDER BY provision_id ASC, trail_id ASC`)
97
- .all(saveId);
93
+ .query(`SELECT resource_id, trail_id
94
+ FROM topo_trail_resources
95
+ WHERE snapshot_id = ?
96
+ ORDER BY resource_id ASC, trail_id ASC`)
97
+ .all(snapshotId);
98
98
  const usage = new Map();
99
99
  for (const row of rows) {
100
- const trails = usage.get(row.provision_id) ?? [];
100
+ const trails = usage.get(row.resource_id) ?? [];
101
101
  trails.push(row.trail_id);
102
- usage.set(row.provision_id, trails);
102
+ usage.set(row.resource_id, trails);
103
103
  }
104
104
  return new Map([...usage.entries()].map(([id, trails]) => [id, trails]));
105
105
  };
106
- export const resolveTopoStoreSave = (db, ref) => resolveRefSave(db, ref);
107
- export const listTopoStorePins = (db) => listTopoPins(db);
108
- export const listTopoStoreSaves = (db) => listTopoSaves(db);
106
+ export const readTopoStoreSnapshot = (db, ref) => readSnapshotRef(db, ref);
107
+ export const listTopoStoreSnapshots = (db, options) => listTopoSnapshots(db, options);
109
108
  export const getTopoStoreExport = (db, ref) => {
110
- const save = resolveRefSave(db, ref);
111
- if (save === undefined) {
109
+ const snapshot = readSnapshotRef(db, ref);
110
+ if (snapshot === undefined) {
112
111
  return undefined;
113
112
  }
114
- const stored = getStoredTopoExport(db, save.id);
113
+ const stored = getStoredTopoExport(db, snapshot.id);
115
114
  if (stored === undefined) {
116
115
  return undefined;
117
116
  }
118
117
  return {
119
118
  ...stored,
120
- save,
119
+ snapshot,
121
120
  };
122
121
  };
123
122
  export const listTopoStoreTrails = (db, options) => {
124
- const save = resolveRefSave(db, options?.save);
125
- if (save === undefined) {
123
+ const snapshot = readSnapshotRef(db, options?.snapshot);
124
+ if (snapshot === undefined) {
126
125
  return [];
127
126
  }
128
- const baseQuery = `SELECT id, intent, idempotent, has_output, has_examples, example_count, description, meta, save_id
127
+ const baseQuery = `SELECT id, intent, idempotent, has_output, has_examples, example_count, description, pattern, meta, snapshot_id
129
128
  FROM topo_trails`;
130
129
  let rows;
131
130
  if (options?.intent === undefined) {
132
131
  rows = db
133
- .query(`${baseQuery} WHERE save_id = ? ORDER BY id ASC`)
134
- .all(save.id);
132
+ .query(`${baseQuery} WHERE snapshot_id = ? ORDER BY id ASC`)
133
+ .all(snapshot.id);
135
134
  }
136
135
  else if (options.intent === 'write') {
137
136
  rows = db
138
- .query(`${baseQuery} WHERE save_id = ? AND intent = 'write' ORDER BY id ASC`)
139
- .all(save.id);
137
+ .query(`${baseQuery} WHERE snapshot_id = ? AND intent = 'write' ORDER BY id ASC`)
138
+ .all(snapshot.id);
140
139
  }
141
140
  else {
142
141
  rows = db
143
- .query(`${baseQuery} WHERE save_id = ? AND intent = ? ORDER BY id ASC`)
144
- .all(save.id, options.intent);
142
+ .query(`${baseQuery} WHERE snapshot_id = ? AND intent = ? ORDER BY id ASC`)
143
+ .all(snapshot.id, options.intent);
145
144
  }
146
145
  return rows.map(mapTrailRow);
147
146
  };
148
147
  export const getTopoStoreTrail = (db, trailId, options) => {
149
- const save = resolveRefSave(db, options?.save);
150
- if (save === undefined) {
148
+ const snapshot = readSnapshotRef(db, options?.snapshot);
149
+ if (snapshot === undefined) {
151
150
  return undefined;
152
151
  }
153
152
  const row = db
154
- .query(`SELECT id, intent, idempotent, has_output, has_examples, example_count, description, meta, save_id
153
+ .query(`SELECT id, intent, idempotent, has_output, has_examples, example_count, description, pattern, meta, snapshot_id
155
154
  FROM topo_trails
156
- WHERE save_id = ? AND id = ?
155
+ WHERE snapshot_id = ? AND id = ?
157
156
  LIMIT 1`)
158
- .get(save.id, trailId);
157
+ .get(snapshot.id, trailId);
159
158
  if (row === null || row === undefined) {
160
159
  return undefined;
161
160
  }
162
- const storedEntry = readStoredEntry(db, save.id, 'trail', trailId);
161
+ const storedEntry = readStoredEntry(db, snapshot.id, 'trail', trailId);
163
162
  return {
164
163
  ...mapTrailRow(row),
165
- crosses: readTrailCrossings(db, save.id, trailId),
164
+ crosses: readTrailCrossings(db, snapshot.id, trailId),
166
165
  detours: storedEntry?.detours ?? null,
167
- examples: readTrailExamples(db, save.id, trailId),
168
- provisions: readTrailProvisionIds(db, save.id, trailId),
166
+ examples: readTrailExamples(db, snapshot.id, trailId),
167
+ resources: readTrailResourceIds(db, snapshot.id, trailId),
169
168
  };
170
169
  };
171
- const mapProvisionRow = (row, usedBy, storedEntry) => ({
170
+ const mapResourceRow = (row, usedBy, storedEntry) => ({
172
171
  description: storedEntry?.description ?? null,
173
172
  hasHealth: row.has_health === 1,
174
173
  hasMock: row.has_mock === 1,
@@ -176,45 +175,45 @@ const mapProvisionRow = (row, usedBy, storedEntry) => ({
176
175
  ? 'available'
177
176
  : 'none',
178
177
  id: row.id,
179
- kind: 'provision',
178
+ kind: 'resource',
180
179
  lifetime: 'singleton',
181
- saveId: row.save_id,
180
+ snapshotId: row.snapshot_id,
182
181
  usedBy,
183
182
  });
184
- export const listTopoStoreProvisions = (db, options) => {
185
- const save = resolveRefSave(db, options?.save);
186
- if (save === undefined) {
183
+ export const listTopoStoreResources = (db, options) => {
184
+ const snapshot = readSnapshotRef(db, options?.snapshot);
185
+ if (snapshot === undefined) {
187
186
  return [];
188
187
  }
189
- const usage = readProvisionUsage(db, save.id);
188
+ const usage = readResourceUsage(db, snapshot.id);
190
189
  const rows = db
191
- .query(`SELECT id, has_mock, has_health, save_id
192
- FROM topo_provisions
193
- WHERE save_id = ?
190
+ .query(`SELECT id, has_mock, has_health, snapshot_id
191
+ FROM topo_resources
192
+ WHERE snapshot_id = ?
194
193
  ORDER BY id ASC`)
195
- .all(save.id);
196
- const stored = getStoredTopoExport(db, save.id);
194
+ .all(snapshot.id);
195
+ const stored = getStoredTopoExport(db, snapshot.id);
197
196
  const entries = stored
198
- ? JSON.parse(stored.trailheadMapJson).entries
197
+ ? JSON.parse(stored.surfaceMapJson).entries
199
198
  : [];
200
- return rows.map((row) => mapProvisionRow(row, usage.get(row.id) ?? [], entries.find((e) => e.kind === 'provision' && e.id === row.id)));
199
+ return rows.map((row) => mapResourceRow(row, usage.get(row.id) ?? [], entries.find((entry) => entry.id === row.id && entry.kind === 'resource')));
201
200
  };
202
- export const getTopoStoreProvision = (db, provisionId, options) => {
203
- const save = resolveRefSave(db, options?.save);
204
- if (save === undefined) {
201
+ export const getTopoStoreResource = (db, resourceId, options) => {
202
+ const snapshot = readSnapshotRef(db, options?.snapshot);
203
+ if (snapshot === undefined) {
205
204
  return undefined;
206
205
  }
207
206
  const row = db
208
- .query(`SELECT id, has_mock, has_health, save_id
209
- FROM topo_provisions
210
- WHERE save_id = ? AND id = ?
207
+ .query(`SELECT id, has_mock, has_health, snapshot_id
208
+ FROM topo_resources
209
+ WHERE snapshot_id = ? AND id = ?
211
210
  LIMIT 1`)
212
- .get(save.id, provisionId);
211
+ .get(snapshot.id, resourceId);
213
212
  if (row === null || row === undefined) {
214
213
  return undefined;
215
214
  }
216
- const usage = readProvisionUsage(db, save.id);
217
- return mapProvisionRow(row, usage.get(provisionId) ?? [], readStoredEntry(db, save.id, 'provision', provisionId));
215
+ const usage = readResourceUsage(db, snapshot.id);
216
+ return mapResourceRow(row, usage.get(resourceId) ?? [], readStoredEntry(db, snapshot.id, 'resource', resourceId));
218
217
  };
219
218
  export const queryTopoStore = (db, sql, bindings) => db
220
219
  .query(sql)
@@ -1 +1 @@
1
- {"version":3,"file":"topo-store-read.js","sourceRoot":"","sources":["../../src/internal/topo-store-read.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topo-store-read.js","sourceRoot":"","sources":["../../src/internal/topo-store-read.ts"],"names":[],"mappings":"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"}
@@ -1,12 +1,26 @@
1
1
  import type { Database } from 'bun:sqlite';
2
2
  import { Result } from '../result.js';
3
3
  import type { Topo } from '../topo.js';
4
- import type { CreateTopoSaveInput, TopoSaveRecord } from './topo-saves.js';
4
+ import type { AnyTrail } from '../trail.js';
5
+ import type { CreateTopoSnapshotInput, TopoSnapshot } from './topo-snapshots.js';
6
+ interface TopoFiresRow {
7
+ readonly snapshotId: string;
8
+ readonly signalId: string;
9
+ readonly trailId: string;
10
+ }
11
+ interface TopoOnRow {
12
+ readonly snapshotId: string;
13
+ readonly signalId: string;
14
+ readonly trailId: string;
15
+ }
5
16
  export interface StoredTopoExport {
6
17
  readonly lockContent: string;
7
- readonly trailheadHash: string;
8
- readonly trailheadMapJson: string;
18
+ readonly surfaceHash: string;
19
+ readonly surfaceMapJson: string;
9
20
  }
10
- export declare const getStoredTopoExport: (db: Database, saveId: string) => StoredTopoExport | undefined;
11
- export declare const persistEstablishedTopoSave: (db: Database, topo: Topo, input?: CreateTopoSaveInput) => Result<TopoSaveRecord, Error>;
21
+ export declare const normalizeFiresRows: (trails: readonly AnyTrail[], snapshotId: string) => readonly TopoFiresRow[];
22
+ export declare const normalizeOnRows: (trails: readonly AnyTrail[], snapshotId: string) => readonly TopoOnRow[];
23
+ export declare const getStoredTopoExport: (db: Database, snapshotId: string) => StoredTopoExport | undefined;
24
+ export declare const createTopoSnapshot: (db: Database, topo: Topo, input?: CreateTopoSnapshotInput) => Result<TopoSnapshot, Error>;
25
+ export {};
12
26
  //# sourceMappingURL=topo-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topo-store.d.ts","sourceRoot":"","sources":["../../src/internal/topo-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAG7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAGtC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AAIvC,OAAO,KAAK,EAAE,mBAAmB,EAAE,cAAc,EAAE,MAAM,iBAAiB,CAAC;AAsG3E,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAC;IAC/B,QAAQ,CAAC,gBAAgB,EAAE,MAAM,CAAC;CACnC;AAs5BD,eAAO,MAAM,mBAAmB,GAC9B,IAAI,QAAQ,EACZ,QAAQ,MAAM,KACb,gBAAgB,GAAG,SAkBrB,CAAC;AAEF,eAAO,MAAM,0BAA0B,GACrC,IAAI,QAAQ,EACZ,MAAM,IAAI,EACV,QAAQ,mBAAmB,KAC1B,MAAM,CAAC,cAAc,EAAE,KAAK,CAyB9B,CAAC"}
1
+ {"version":3,"file":"topo-store.d.ts","sourceRoot":"","sources":["../../src/internal/topo-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,QAAQ,EAAoB,MAAM,YAAY,CAAC;AAI7D,OAAO,EAAE,MAAM,EAAE,MAAM,cAAc,CAAC;AAItC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,YAAY,CAAC;AACvC,OAAO,KAAK,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAC;AAG5C,OAAO,KAAK,EACV,uBAAuB,EACvB,YAAY,EACb,MAAM,qBAAqB,CAAC;AAuC7B,UAAU,YAAY;IACpB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAED,UAAU,SAAS;IACjB,QAAQ,CAAC,UAAU,EAAE,MAAM,CAAC;IAC5B,QAAQ,CAAC,QAAQ,EAAE,MAAM,CAAC;IAC1B,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAsED,MAAM,WAAW,gBAAgB;IAC/B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,WAAW,EAAE,MAAM,CAAC;IAC7B,QAAQ,CAAC,cAAc,EAAE,MAAM,CAAC;CACjC;AAiLD,eAAO,MAAM,kBAAkB,GAC7B,QAAQ,SAAS,QAAQ,EAAE,EAC3B,YAAY,MAAM,KACjB,SAAS,YAAY,EAOrB,CAAC;AAEJ,eAAO,MAAM,eAAe,GAC1B,QAAQ,SAAS,QAAQ,EAAE,EAC3B,YAAY,MAAM,KACjB,SAAS,SAAS,EAOlB,CAAC;AAkyBJ,eAAO,MAAM,mBAAmB,GAC9B,IAAI,QAAQ,EACZ,YAAY,MAAM,KACjB,gBAAgB,GAAG,SAkBrB,CAAC;AAEF,eAAO,MAAM,kBAAkB,GAC7B,IAAI,QAAQ,EACZ,MAAM,IAAI,EACV,QAAQ,uBAAuB,KAC9B,MAAM,CAAC,YAAY,EAAE,KAAK,CAyB5B,CAAC"}