@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
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=accessor-protocol.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"accessor-protocol.js","sourceRoot":"","sources":["../../src/store/accessor-protocol.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export type { StoreAccessorProtocol, StoreAccessorRecord, } from './accessor-protocol.js';
2
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,qBAAqB,EACrB,mBAAmB,GACpB,MAAM,wBAAwB,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/store/index.ts"],"names":[],"mappings":""}
@@ -0,0 +1,13 @@
1
+ import type { Intent, Trail } from './trail.js';
2
+ export interface SurfaceFilterOptions {
3
+ /** Glob patterns that keep only matching trail IDs when provided. */
4
+ readonly include?: readonly string[] | undefined;
5
+ /** Glob patterns that remove matching trail IDs. */
6
+ readonly exclude?: readonly string[] | undefined;
7
+ /** Allowed intents for exposed trailheads. Empty arrays act as no filter. */
8
+ readonly intent?: readonly Intent[] | undefined;
9
+ }
10
+ export declare const matchesTrailPattern: (trailId: string, pattern: string) => boolean;
11
+ export declare const shouldIncludeTrailForSurface: (trail: Trail<unknown, unknown, unknown>, options?: SurfaceFilterOptions) => boolean;
12
+ export declare const filterSurfaceTrails: (trails: readonly Trail<unknown, unknown, unknown>[], options?: SurfaceFilterOptions) => Trail<unknown, unknown, unknown>[];
13
+ //# sourceMappingURL=surface-filter.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-filter.d.ts","sourceRoot":"","sources":["../src/surface-filter.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,YAAY,CAAC;AAMhD,MAAM,WAAW,oBAAoB;IACnC,qEAAqE;IACrE,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,oDAAoD;IACpD,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;IACjD,6EAA6E;IAC7E,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,MAAM,EAAE,GAAG,SAAS,CAAC;CACjD;AAuED,eAAO,MAAM,mBAAmB,GAC9B,SAAS,MAAM,EACf,SAAS,MAAM,KACd,OAKF,CAAC;AA+DF,eAAO,MAAM,4BAA4B,GACvC,OAAO,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACvC,UAAS,oBAAyB,KACjC,OAiBF,CAAC;AAEF,eAAO,MAAM,mBAAmB,GAC9B,QAAQ,SAAS,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EAAE,EACnD,UAAS,oBAAyB,KACjC,KAAK,CAAC,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,EACqC,CAAC"}
@@ -0,0 +1,76 @@
1
+ // ---------------------------------------------------------------------------
2
+ // Glob matching
3
+ // ---------------------------------------------------------------------------
4
+ const trailIdSegments = (trailId) => trailId.split('.');
5
+ const patternSegments = (pattern) => pattern.split('.');
6
+ const matchesDoubleStar = (trail, pattern, trailIndex, patternIndex, matchSegments) => patternIndex === pattern.length - 1 ||
7
+ Array.from({ length: trail.length - trailIndex + 1 }, (_, offset) => trailIndex + offset).some((index) => matchSegments(trail, pattern, index, patternIndex + 1));
8
+ const matchesSingleSegment = (trail, pattern, trailIndex, patternIndex, current, matchSegments) => trailIndex < trail.length &&
9
+ (current === '*' || current === trail[trailIndex]) &&
10
+ matchSegments(trail, pattern, trailIndex + 1, patternIndex + 1);
11
+ const matchesFrom = function matchesFrom(trail, pattern, trailIndex, patternIndex) {
12
+ if (patternIndex >= pattern.length) {
13
+ return trailIndex >= trail.length;
14
+ }
15
+ const current = pattern[patternIndex];
16
+ if (current === undefined) {
17
+ return false;
18
+ }
19
+ return current === '**'
20
+ ? matchesDoubleStar(trail, pattern, trailIndex, patternIndex, matchesFrom)
21
+ : matchesSingleSegment(trail, pattern, trailIndex, patternIndex, current, matchesFrom);
22
+ };
23
+ export const matchesTrailPattern = (trailId, pattern) => {
24
+ if (pattern === trailId) {
25
+ return true;
26
+ }
27
+ return matchesFrom(trailIdSegments(trailId), patternSegments(pattern), 0, 0);
28
+ };
29
+ // ---------------------------------------------------------------------------
30
+ // Trailhead filtering
31
+ // ---------------------------------------------------------------------------
32
+ const matchesAnyPattern = (trailId, patterns) => patterns !== undefined &&
33
+ patterns.some((pattern) => matchesTrailPattern(trailId, pattern));
34
+ const isExplicitInternalInclude = (trailId, include) => include !== undefined && include.includes(trailId);
35
+ /**
36
+ * Resolve the effective visibility for a trail.
37
+ *
38
+ * Returns `'internal'` when either the explicit `visibility` field is
39
+ * `'internal'` or the legacy `meta.internal === true` convention is set.
40
+ * Honoring the legacy flag keeps trails authored before the visibility
41
+ * field was introduced (e.g. `meta: { internal: true }`) off trailheads.
42
+ *
43
+ * The runtime always fills in `visibility: 'public'` when the spec did not
44
+ * declare it, so we cannot distinguish explicit `'public'` from the default.
45
+ * This means a trail that sets both `meta.internal = true` and
46
+ * `visibility: 'public'` will still be treated as internal — that
47
+ * combination has never been a documented override and, if the author
48
+ * really means "public", they should remove the legacy flag.
49
+ */
50
+ const effectiveVisibility = (trail) => {
51
+ if (trail.visibility === 'internal') {
52
+ return 'internal';
53
+ }
54
+ return trail.meta?.['internal'] === true ? 'internal' : 'public';
55
+ };
56
+ const isVisibleToTrailheads = (trail, include) => effectiveVisibility(trail) !== 'internal' ||
57
+ isExplicitInternalInclude(trail.id, include);
58
+ const passesIncludeFilter = (trailId, include) => include === undefined ||
59
+ include.length === 0 ||
60
+ matchesAnyPattern(trailId, include);
61
+ const passesIntentFilter = (trail, intent) => intent === undefined || intent.length === 0 || intent.includes(trail.intent);
62
+ export const shouldIncludeTrailForSurface = (trail, options = {}) => {
63
+ if (trail.on.length > 0) {
64
+ return false;
65
+ }
66
+ const { exclude, include, intent } = options;
67
+ if (!isVisibleToTrailheads(trail, include)) {
68
+ return false;
69
+ }
70
+ if (matchesAnyPattern(trail.id, exclude)) {
71
+ return false;
72
+ }
73
+ return (passesIncludeFilter(trail.id, include) && passesIntentFilter(trail, intent));
74
+ };
75
+ export const filterSurfaceTrails = (trails, options = {}) => trails.filter((trail) => shouldIncludeTrailForSurface(trail, options));
76
+ //# sourceMappingURL=surface-filter.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"surface-filter.js","sourceRoot":"","sources":["../src/surface-filter.ts"],"names":[],"mappings":"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"}
@@ -1,48 +1,62 @@
1
1
  import type { SQLQueryBindings } from 'bun:sqlite';
2
- import type { TopoPinRecord, TopoSaveRecord } from './internal/topo-saves.js';
3
- import type { TopoStoreExportRecord, TopoStoreProvisionRecord, TopoStoreRef, TopoStoreTrailDetailRecord, TopoStoreTrailRecord } from './internal/topo-store-read.js';
2
+ import type { Topo } from './topo.js';
3
+ import { Result } from './result.js';
4
+ import type { CreateTopoSnapshotInput, ListTopoSnapshotsOptions, TopoSnapshot } from './internal/topo-snapshots.js';
5
+ import type { TopoStoreExportRecord, TopoStoreResourceRecord, TopoStoreRef, TopoStoreTrailDetailRecord, TopoStoreTrailRecord } from './internal/topo-store-read.js';
4
6
  import type { TrailsDbLocationOptions } from './internal/trails-db.js';
5
- export type { TopoStoreExportRecord, TopoStoreProvisionRecord, TopoStoreRef, TopoStoreTrailDetailRecord, TopoStoreTrailRecord, } from './internal/topo-store-read.js';
7
+ /**
8
+ * Test-only instrumentation counters. Incremented by the read-path migration
9
+ * check to let tests assert that a current-schema store does not escalate to
10
+ * a write-mode open, and that cache invalidation re-runs the check when the
11
+ * underlying file is replaced.
12
+ *
13
+ * @internal
14
+ */
15
+ export declare const __topoStoreMigrationStats: {
16
+ peekCalls: number;
17
+ writeEscalations: number;
18
+ };
19
+ export type { TopoStoreExportRecord, TopoStoreResourceRecord, TopoStoreRef, TopoStoreTrailDetailRecord, TopoStoreTrailRecord, } from './internal/topo-store-read.js';
20
+ export type { CreateTopoSnapshotInput, ListTopoSnapshotsOptions, TopoSnapshot, } from './internal/topo-snapshots.js';
6
21
  export interface ReadOnlyTopoStore {
7
22
  readonly exports: {
8
23
  get(ref?: TopoStoreRef): TopoStoreExportRecord | undefined;
9
24
  };
10
- readonly pins: {
11
- get(name: string): TopoPinRecord | undefined;
12
- list(): readonly TopoPinRecord[];
13
- };
14
25
  query<TRow extends Record<string, unknown>>(sql: string, bindings?: readonly SQLQueryBindings[]): readonly TRow[];
15
- readonly provisions: {
26
+ readonly resources: {
16
27
  get(id: string, options?: {
17
- readonly save?: TopoStoreRef;
18
- }): TopoStoreProvisionRecord | undefined;
28
+ readonly snapshot?: TopoStoreRef;
29
+ }): TopoStoreResourceRecord | undefined;
19
30
  list(options?: {
20
- readonly save?: TopoStoreRef;
21
- }): readonly TopoStoreProvisionRecord[];
31
+ readonly snapshot?: TopoStoreRef;
32
+ }): readonly TopoStoreResourceRecord[];
22
33
  };
23
- readonly saves: {
24
- get(ref?: TopoStoreRef): TopoSaveRecord | undefined;
25
- latest(): TopoSaveRecord | undefined;
26
- list(): readonly TopoSaveRecord[];
34
+ readonly snapshots: {
35
+ get(ref?: TopoStoreRef): TopoSnapshot | undefined;
36
+ latest(): TopoSnapshot | undefined;
37
+ list(options?: ListTopoSnapshotsOptions): readonly TopoSnapshot[];
27
38
  };
28
39
  readonly trails: {
29
40
  get(id: string, options?: {
30
- readonly save?: TopoStoreRef;
41
+ readonly snapshot?: TopoStoreRef;
31
42
  }): TopoStoreTrailDetailRecord | undefined;
32
43
  list(options?: {
33
44
  readonly intent?: TopoStoreTrailRecord['intent'];
34
- readonly save?: TopoStoreRef;
45
+ readonly snapshot?: TopoStoreRef;
35
46
  }): readonly TopoStoreTrailRecord[];
36
47
  };
37
48
  }
38
49
  export interface MockTopoStoreSeed {
39
50
  readonly exports?: readonly TopoStoreExportRecord[];
40
- readonly pins?: readonly TopoPinRecord[];
41
- readonly provisions?: readonly TopoStoreProvisionRecord[];
42
- readonly saves?: readonly TopoSaveRecord[];
51
+ readonly resources?: readonly TopoStoreResourceRecord[];
52
+ readonly snapshots?: readonly TopoSnapshot[];
43
53
  readonly trails?: readonly TopoStoreTrailDetailRecord[];
44
54
  }
45
55
  export declare const createMockTopoStore: (seed?: MockTopoStoreSeed) => ReadOnlyTopoStore;
46
56
  export declare const createTopoStore: (options?: TrailsDbLocationOptions) => ReadOnlyTopoStore;
47
- export declare const topoStore: import("./provision.js").Provision<ReadOnlyTopoStore>;
57
+ export declare const createTopoSnapshot: (topo: Topo, options?: TrailsDbLocationOptions & CreateTopoSnapshotInput) => Result<TopoSnapshot, Error>;
58
+ export declare const listTopoSnapshots: (options?: TrailsDbLocationOptions & ListTopoSnapshotsOptions) => readonly TopoSnapshot[];
59
+ export declare const pinTopoSnapshot: (id: string, name: string, options?: TrailsDbLocationOptions) => TopoSnapshot | undefined;
60
+ export declare const unpinTopoSnapshot: (nameOrId: string, options?: TrailsDbLocationOptions) => TopoSnapshot | undefined;
61
+ export declare const topoStore: import("./resource.js").Resource<ReadOnlyTopoStore>;
48
62
  //# sourceMappingURL=topo-store.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"topo-store.d.ts","sourceRoot":"","sources":["../src/topo-store.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,YAAY,CAAC;AAMnD,OAAO,KAAK,EAAE,aAAa,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE9E,OAAO,KAAK,EACV,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,EACrB,MAAM,+BAA+B,CAAC;AAavC,OAAO,KAAK,EAAE,uBAAuB,EAAE,MAAM,yBAAyB,CAAC;AAEvE,YAAY,EACV,qBAAqB,EACrB,wBAAwB,EACxB,YAAY,EACZ,0BAA0B,EAC1B,oBAAoB,GACrB,MAAM,+BAA+B,CAAC;AAEvC,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,EAAE;QAChB,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,qBAAqB,GAAG,SAAS,CAAC;KAC5D,CAAC;IACF,QAAQ,CAAC,IAAI,EAAE;QACb,GAAG,CAAC,IAAI,EAAE,MAAM,GAAG,aAAa,GAAG,SAAS,CAAC;QAC7C,IAAI,IAAI,SAAS,aAAa,EAAE,CAAC;KAClC,CAAC;IACF,KAAK,CAAC,IAAI,SAAS,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,EACxC,GAAG,EAAE,MAAM,EACX,QAAQ,CAAC,EAAE,SAAS,gBAAgB,EAAE,GACrC,SAAS,IAAI,EAAE,CAAC;IACnB,QAAQ,CAAC,UAAU,EAAE;QACnB,GAAG,CACD,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;SAAE,GACzC,wBAAwB,GAAG,SAAS,CAAC;QACxC,IAAI,CAAC,OAAO,CAAC,EAAE;YACb,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;SAC9B,GAAG,SAAS,wBAAwB,EAAE,CAAC;KACzC,CAAC;IACF,QAAQ,CAAC,KAAK,EAAE;QACd,GAAG,CAAC,GAAG,CAAC,EAAE,YAAY,GAAG,cAAc,GAAG,SAAS,CAAC;QACpD,MAAM,IAAI,cAAc,GAAG,SAAS,CAAC;QACrC,IAAI,IAAI,SAAS,cAAc,EAAE,CAAC;KACnC,CAAC;IACF,QAAQ,CAAC,MAAM,EAAE;QACf,GAAG,CACD,EAAE,EAAE,MAAM,EACV,OAAO,CAAC,EAAE;YAAE,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAA;SAAE,GACzC,0BAA0B,GAAG,SAAS,CAAC;QAC1C,IAAI,CAAC,OAAO,CAAC,EAAE;YACb,QAAQ,CAAC,MAAM,CAAC,EAAE,oBAAoB,CAAC,QAAQ,CAAC,CAAC;YACjD,QAAQ,CAAC,IAAI,CAAC,EAAE,YAAY,CAAC;SAC9B,GAAG,SAAS,oBAAoB,EAAE,CAAC;KACrC,CAAC;CACH;AAED,MAAM,WAAW,iBAAiB;IAChC,QAAQ,CAAC,OAAO,CAAC,EAAE,SAAS,qBAAqB,EAAE,CAAC;IACpD,QAAQ,CAAC,IAAI,CAAC,EAAE,SAAS,aAAa,EAAE,CAAC;IACzC,QAAQ,CAAC,UAAU,CAAC,EAAE,SAAS,wBAAwB,EAAE,CAAC;IAC1D,QAAQ,CAAC,KAAK,CAAC,EAAE,SAAS,cAAc,EAAE,CAAC;IAC3C,QAAQ,CAAC,MAAM,CAAC,EAAE,SAAS,0BAA0B,EAAE,CAAC;CACzD;AAqED,eAAO,MAAM,mBAAmB,GAC9B,OAAO,iBAAiB,KACvB,iBA0EF,CAAC;AAEF,eAAO,MAAM,eAAe,GAC1B,UAAU,uBAAuB,KAChC,iBA2DD,CAAC;AAEH,eAAO,MAAM,SAAS,uDASpB,CAAC"}
1
+ {"version":3,"file":"topo-store.d.ts","sourceRoot":"","sources":["../src/topo-store.ts"],"names":[],"mappings":"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"}
@@ -1,21 +1,121 @@
1
- import { existsSync } from 'node:fs';
1
+ import { existsSync, statSync } from 'node:fs';
2
2
  import { NotFoundError } from './errors.js';
3
- import { provision } from './provision.js';
3
+ import { resource } from './resource.js';
4
4
  import { Result } from './result.js';
5
- import { getTopoPin } from './internal/topo-saves.js';
6
- import { getTopoStoreExport, getTopoStoreProvision, getTopoStoreTrail, listTopoStorePins, listTopoStoreProvisions, listTopoStoreSaves, listTopoStoreTrails, queryTopoStore, resolveTopoStoreSave, } from './internal/topo-store-read.js';
7
- import { openReadTrailsDb, resolveTrailsDbPath } from './internal/trails-db.js';
5
+ import { TOPO_SCHEMA_VERSION, ensureTopoSnapshotSchema, listTopoSnapshots as listStoredTopoSnapshots, pinTopoSnapshot as pinStoredTopoSnapshot, unpinTopoSnapshot as unpinStoredTopoSnapshot, } from './internal/topo-snapshots.js';
6
+ import { getTopoStoreExport, getTopoStoreResource, getTopoStoreTrail, listTopoStoreResources, listTopoStoreSnapshots, listTopoStoreTrails, queryTopoStore, readTopoStoreSnapshot, } from './internal/topo-store-read.js';
7
+ import { createTopoSnapshot as storeTopoSnapshot } from './internal/topo-store.js';
8
+ import { openReadTrailsDb, openWriteTrailsDb, deriveTrailsDbPath, } from './internal/trails-db.js';
9
+ const migratedTopoDbPaths = new Map();
10
+ /**
11
+ * Test-only instrumentation counters. Incremented by the read-path migration
12
+ * check to let tests assert that a current-schema store does not escalate to
13
+ * a write-mode open, and that cache invalidation re-runs the check when the
14
+ * underlying file is replaced.
15
+ *
16
+ * @internal
17
+ */
18
+ export const __topoStoreMigrationStats = {
19
+ peekCalls: 0,
20
+ writeEscalations: 0,
21
+ };
22
+ const peekTopoSchemaVersion = (options) => {
23
+ let db;
24
+ try {
25
+ db = openReadTrailsDb(options);
26
+ const row = db
27
+ .query('SELECT version FROM meta_schema_versions WHERE subsystem = ?')
28
+ .get('topo');
29
+ return row?.version ?? 0;
30
+ }
31
+ catch {
32
+ // Table missing or unexpected shape: caller will escalate to a write-mode
33
+ // open and run the migration, which rebuilds the schema.
34
+ return undefined;
35
+ }
36
+ finally {
37
+ db?.close();
38
+ }
39
+ };
40
+ const statIdentity = (dbPath) => {
41
+ try {
42
+ const info = statSync(dbPath);
43
+ return { mtimeMs: info.mtimeMs, size: info.size };
44
+ }
45
+ catch {
46
+ return undefined;
47
+ }
48
+ };
49
+ const identitiesEqual = (a, b) => a.mtimeMs === b.mtimeMs && a.size === b.size;
50
+ const runTopoMigrationEscalation = (options, dbPath, fallbackIdentity) => {
51
+ __topoStoreMigrationStats.writeEscalations += 1;
52
+ const db = openWriteTrailsDb(options);
53
+ try {
54
+ ensureTopoSnapshotSchema(db);
55
+ }
56
+ finally {
57
+ db.close();
58
+ }
59
+ // Re-stat after the migration so the cached identity matches the file we
60
+ // just touched, avoiding a spurious second escalation on the next read.
61
+ const postIdentity = statIdentity(dbPath) ?? fallbackIdentity;
62
+ migratedTopoDbPaths.set(dbPath, postIdentity);
63
+ };
64
+ const resolveIdentityIfFresh = (dbPath) => {
65
+ if (!existsSync(dbPath)) {
66
+ return undefined;
67
+ }
68
+ const identity = statIdentity(dbPath);
69
+ if (identity === undefined) {
70
+ return undefined;
71
+ }
72
+ const cached = migratedTopoDbPaths.get(dbPath);
73
+ if (cached !== undefined && identitiesEqual(cached, identity)) {
74
+ return undefined;
75
+ }
76
+ return identity;
77
+ };
78
+ /**
79
+ * Ensure the topo snapshot schema is at the current version before any
80
+ * read-only access. Peeks the version through a read-only handle first and
81
+ * only escalates to a write-mode open + migration when the store is stale.
82
+ *
83
+ * Memoized per resolved DB path keyed on file identity (mtime + size) so a
84
+ * long-running process that deletes and recreates `trails.db` re-runs the
85
+ * migration check against the fresh file.
86
+ *
87
+ * If the DB file does not yet exist, this is a no-op — the downstream read
88
+ * path will surface its own NotFoundError.
89
+ */
90
+ const ensureTopoMigratedIfExists = (options) => {
91
+ const dbPath = deriveTrailsDbPath(options);
92
+ const identity = resolveIdentityIfFresh(dbPath);
93
+ if (identity === undefined) {
94
+ return;
95
+ }
96
+ __topoStoreMigrationStats.peekCalls += 1;
97
+ const version = peekTopoSchemaVersion(options);
98
+ if (version !== undefined && version >= TOPO_SCHEMA_VERSION) {
99
+ // Already current — record identity and skip the write-mode open entirely,
100
+ // preserving the read-only contract for callers whose filesystem mounts
101
+ // `trails.db` read-only.
102
+ migratedTopoDbPaths.set(dbPath, identity);
103
+ return;
104
+ }
105
+ runTopoMigrationEscalation(options, dbPath, identity);
106
+ };
8
107
  const missingStoreMessage = 'No saved topo state found. Populate trails.db first or run a topo-backed surface.';
9
108
  const resolveStoreRootDir = (options) => options?.rootDir ?? process.cwd();
10
109
  const requireReadDb = (options) => {
11
- const dbPath = resolveTrailsDbPath(options);
110
+ const dbPath = deriveTrailsDbPath(options);
12
111
  if (!existsSync(dbPath)) {
13
112
  throw new NotFoundError(missingStoreMessage);
14
113
  }
114
+ ensureTopoMigratedIfExists(options);
15
115
  return openReadTrailsDb(options);
16
116
  };
17
117
  const requireSavedTopoState = (db) => {
18
- if (resolveTopoStoreSave(db) === undefined) {
118
+ if (readTopoStoreSnapshot(db) === undefined) {
19
119
  throw new NotFoundError(missingStoreMessage);
20
120
  }
21
121
  };
@@ -30,29 +130,24 @@ const withStoredTopoState = (options, run) => {
30
130
  }
31
131
  };
32
132
  const createSeedResolver = (seed) => {
33
- const saves = [...(seed?.saves ?? [])];
34
- const pins = [...(seed?.pins ?? [])];
133
+ const snapshots = [...(seed?.snapshots ?? [])];
35
134
  const trails = [...(seed?.trails ?? [])];
36
- const provisions = [...(seed?.provisions ?? [])];
135
+ const resources = [...(seed?.resources ?? [])];
37
136
  const exports = [...(seed?.exports ?? [])];
38
- const resolveSave = (ref) => {
39
- if (ref?.saveId !== undefined) {
40
- return saves.find((save) => save.id === ref.saveId);
137
+ const resolveSnapshot = (ref) => {
138
+ if (ref?.snapshotId !== undefined) {
139
+ return snapshots.find((snapshot) => snapshot.id === ref.snapshotId);
41
140
  }
42
141
  if (ref?.pin !== undefined) {
43
- const pin = pins.find((candidate) => candidate.name === ref.pin);
44
- return pin === undefined
45
- ? undefined
46
- : saves.find((save) => save.id === pin.saveId);
142
+ return snapshots.find((snapshot) => snapshot.pinnedAs === ref.pin);
47
143
  }
48
- return saves[0];
144
+ return snapshots[0];
49
145
  };
50
146
  return {
51
147
  exports,
52
- pins,
53
- provisions,
54
- resolveSave,
55
- saves,
148
+ resolveSnapshot,
149
+ resources,
150
+ snapshots,
56
151
  trails,
57
152
  };
58
153
  };
@@ -61,60 +156,68 @@ export const createMockTopoStore = (seed) => {
61
156
  return {
62
157
  exports: {
63
158
  get(ref) {
64
- const save = resolved.resolveSave(ref);
65
- return save === undefined
159
+ const snapshot = resolved.resolveSnapshot(ref);
160
+ return snapshot === undefined
66
161
  ? undefined
67
- : resolved.exports.find((entry) => entry.save.id === save.id);
162
+ : resolved.exports.find((entry) => entry.snapshot.id === snapshot.id);
68
163
  },
69
164
  },
70
- pins: {
71
- get(name) {
72
- return resolved.pins.find((pin) => pin.name === name);
73
- },
74
- list() {
75
- return resolved.pins;
76
- },
165
+ query() {
166
+ throw new NotFoundError('Mock topoStore.query() is unsupported. Seed typed accessors instead.');
77
167
  },
78
- provisions: {
168
+ resources: {
79
169
  get(id, options) {
80
- const save = resolved.resolveSave(options?.save);
81
- return resolved.provisions.find((item) => item.id === id && (save === undefined || item.saveId === save.id));
170
+ const snapshot = resolved.resolveSnapshot(options?.snapshot);
171
+ return resolved.resources.find((item) => item.id === id &&
172
+ (snapshot === undefined || item.snapshotId === snapshot.id));
82
173
  },
83
174
  list(options) {
84
- const save = resolved.resolveSave(options?.save);
85
- return save === undefined
175
+ const snapshot = resolved.resolveSnapshot(options?.snapshot);
176
+ return snapshot === undefined
86
177
  ? []
87
- : resolved.provisions.filter((item) => item.saveId === save.id);
178
+ : resolved.resources.filter((item) => item.snapshotId === snapshot.id);
88
179
  },
89
180
  },
90
- query() {
91
- throw new NotFoundError('Mock topoStore.query() is unsupported. Seed typed accessors instead.');
92
- },
93
- saves: {
181
+ snapshots: {
94
182
  get(ref) {
95
- return resolved.resolveSave(ref);
183
+ return resolved.resolveSnapshot(ref);
96
184
  },
97
185
  latest() {
98
- return resolved.saves[0];
186
+ return resolved.snapshots[0];
99
187
  },
100
- list() {
101
- return resolved.saves;
188
+ list(options) {
189
+ let snapshots = options?.pinned === undefined
190
+ ? resolved.snapshots
191
+ : resolved.snapshots.filter((snapshot) => options.pinned
192
+ ? snapshot.pinnedAs !== undefined
193
+ : snapshot.pinnedAs === undefined);
194
+ if (options?.before !== undefined) {
195
+ const target = snapshots.find((s) => s.id === options.before);
196
+ if (target !== undefined) {
197
+ snapshots = snapshots.filter((s) => s.createdAt < target.createdAt ||
198
+ (s.createdAt === target.createdAt && s.id < target.id));
199
+ }
200
+ }
201
+ if (options?.limit !== undefined) {
202
+ snapshots = snapshots.slice(0, options.limit);
203
+ }
204
+ return snapshots;
102
205
  },
103
206
  },
104
207
  trails: {
105
208
  get(id, options) {
106
- const save = resolved.resolveSave(options?.save);
107
- if (save === undefined) {
209
+ const snapshot = resolved.resolveSnapshot(options?.snapshot);
210
+ if (snapshot === undefined) {
108
211
  return;
109
212
  }
110
- return resolved.trails.find((trail) => trail.id === id && trail.saveId === save.id);
213
+ return resolved.trails.find((trail) => trail.id === id && trail.snapshotId === snapshot.id);
111
214
  },
112
215
  list(options) {
113
- const save = resolved.resolveSave(options?.save);
114
- if (save === undefined) {
216
+ const snapshot = resolved.resolveSnapshot(options?.snapshot);
217
+ if (snapshot === undefined) {
115
218
  return [];
116
219
  }
117
- return resolved.trails.filter((trail) => trail.saveId === save.id &&
220
+ return resolved.trails.filter((trail) => trail.snapshotId === snapshot.id &&
118
221
  (options?.intent === undefined || trail.intent === options.intent));
119
222
  },
120
223
  },
@@ -126,34 +229,26 @@ export const createTopoStore = (options) => ({
126
229
  return withStoredTopoState(options, (db) => getTopoStoreExport(db, ref));
127
230
  },
128
231
  },
129
- pins: {
130
- get(name) {
131
- return withStoredTopoState(options, (db) => getTopoPin(db, name));
132
- },
133
- list() {
134
- return withStoredTopoState(options, (db) => listTopoStorePins(db));
135
- },
232
+ query(sql, bindings) {
233
+ return withStoredTopoState(options, (db) => queryTopoStore(db, sql, bindings));
136
234
  },
137
- provisions: {
235
+ resources: {
138
236
  get(id, queryOptions) {
139
- return withStoredTopoState(options, (db) => getTopoStoreProvision(db, id, queryOptions));
237
+ return withStoredTopoState(options, (db) => getTopoStoreResource(db, id, queryOptions));
140
238
  },
141
239
  list(queryOptions) {
142
- return withStoredTopoState(options, (db) => listTopoStoreProvisions(db, queryOptions));
240
+ return withStoredTopoState(options, (db) => listTopoStoreResources(db, queryOptions));
143
241
  },
144
242
  },
145
- query(sql, bindings) {
146
- return withStoredTopoState(options, (db) => queryTopoStore(db, sql, bindings));
147
- },
148
- saves: {
243
+ snapshots: {
149
244
  get(ref) {
150
- return withStoredTopoState(options, (db) => resolveTopoStoreSave(db, ref));
245
+ return withStoredTopoState(options, (db) => readTopoStoreSnapshot(db, ref));
151
246
  },
152
247
  latest() {
153
- return withStoredTopoState(options, (db) => resolveTopoStoreSave(db));
248
+ return withStoredTopoState(options, (db) => readTopoStoreSnapshot(db));
154
249
  },
155
- list() {
156
- return withStoredTopoState(options, (db) => listTopoStoreSaves(db));
250
+ list(snapshotOptions) {
251
+ return withStoredTopoState(options, (db) => listTopoStoreSnapshots(db, snapshotOptions));
157
252
  },
158
253
  },
159
254
  trails: {
@@ -165,7 +260,56 @@ export const createTopoStore = (options) => ({
165
260
  },
166
261
  },
167
262
  });
168
- export const topoStore = provision('topo.store', {
263
+ export const createTopoSnapshot = (topo, options) => {
264
+ const db = openWriteTrailsDb(options);
265
+ try {
266
+ return storeTopoSnapshot(db, topo, options);
267
+ }
268
+ finally {
269
+ db.close();
270
+ }
271
+ };
272
+ export const listTopoSnapshots = (options) => {
273
+ const dbPath = deriveTrailsDbPath(options);
274
+ if (!existsSync(dbPath)) {
275
+ return [];
276
+ }
277
+ ensureTopoMigratedIfExists(options);
278
+ const db = openReadTrailsDb(options);
279
+ try {
280
+ return listStoredTopoSnapshots(db, options);
281
+ }
282
+ finally {
283
+ db.close();
284
+ }
285
+ };
286
+ export const pinTopoSnapshot = (id, name, options) => {
287
+ const dbPath = deriveTrailsDbPath(options);
288
+ if (!existsSync(dbPath)) {
289
+ return undefined;
290
+ }
291
+ const db = openWriteTrailsDb(options);
292
+ try {
293
+ return pinStoredTopoSnapshot(db, { id, name });
294
+ }
295
+ finally {
296
+ db.close();
297
+ }
298
+ };
299
+ export const unpinTopoSnapshot = (nameOrId, options) => {
300
+ const dbPath = deriveTrailsDbPath(options);
301
+ if (!existsSync(dbPath)) {
302
+ return undefined;
303
+ }
304
+ const db = openWriteTrailsDb(options);
305
+ try {
306
+ return unpinStoredTopoSnapshot(db, nameOrId);
307
+ }
308
+ finally {
309
+ db.close();
310
+ }
311
+ };
312
+ export const topoStore = resource('topo.store', {
169
313
  create: (svc) => Result.ok(createTopoStore({
170
314
  rootDir: svc.workspaceRoot ?? svc.cwd ?? resolveStoreRootDir(),
171
315
  })),
@@ -1 +1 @@
1
- {"version":3,"file":"topo-store.js","sourceRoot":"","sources":["../src/topo-store.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"topo-store.js","sourceRoot":"","sources":["../src/topo-store.ts"],"names":[],"mappings":"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"}