@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.
- package/.turbo/turbo-lint.log +1 -1
- package/CHANGELOG.md +11 -0
- package/README.md +17 -13
- package/dist/branded.d.ts +1 -1
- package/dist/branded.d.ts.map +1 -1
- package/dist/branded.js +1 -1
- package/dist/branded.js.map +1 -1
- package/dist/context.d.ts +13 -1
- package/dist/context.d.ts.map +1 -1
- package/dist/context.js +19 -3
- package/dist/context.js.map +1 -1
- package/dist/contour.d.ts +81 -0
- package/dist/contour.d.ts.map +1 -0
- package/dist/contour.js +176 -0
- package/dist/contour.js.map +1 -0
- package/dist/cross-schema.d.ts +18 -0
- package/dist/cross-schema.d.ts.map +1 -0
- package/dist/cross-schema.js +29 -0
- package/dist/cross-schema.js.map +1 -0
- package/dist/draft.d.ts +5 -5
- package/dist/draft.d.ts.map +1 -1
- package/dist/draft.js +28 -27
- package/dist/draft.js.map +1 -1
- package/dist/errors.d.ts +62 -4
- package/dist/errors.d.ts.map +1 -1
- package/dist/errors.js +44 -1
- package/dist/errors.js.map +1 -1
- package/dist/execute.d.ts +26 -9
- package/dist/execute.d.ts.map +1 -1
- package/dist/execute.js +441 -20
- package/dist/execute.js.map +1 -1
- package/dist/fire.d.ts +43 -0
- package/dist/fire.d.ts.map +1 -0
- package/dist/fire.js +185 -0
- package/dist/fire.js.map +1 -0
- package/dist/index.d.ts +31 -20
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +23 -13
- package/dist/index.js.map +1 -1
- package/dist/internal/cross-batch.d.ts +44 -0
- package/dist/internal/cross-batch.d.ts.map +1 -0
- package/dist/internal/cross-batch.js +58 -0
- package/dist/internal/cross-batch.js.map +1 -0
- package/dist/internal/fork-ctx.d.ts +41 -0
- package/dist/internal/fork-ctx.d.ts.map +1 -0
- package/dist/internal/fork-ctx.js +47 -0
- package/dist/internal/fork-ctx.js.map +1 -0
- package/dist/internal/signal-ref.d.ts +15 -0
- package/dist/internal/signal-ref.d.ts.map +1 -0
- package/dist/internal/signal-ref.js +41 -0
- package/dist/internal/signal-ref.js.map +1 -0
- package/dist/internal/topo-saves.d.ts +8 -2
- package/dist/internal/topo-saves.d.ts.map +1 -1
- package/dist/internal/topo-saves.js +162 -23
- package/dist/internal/topo-saves.js.map +1 -1
- package/dist/internal/topo-snapshots.d.ts +57 -0
- package/dist/internal/topo-snapshots.d.ts.map +1 -0
- package/dist/internal/topo-snapshots.js +372 -0
- package/dist/internal/topo-snapshots.js.map +1 -0
- package/dist/internal/topo-store-read.d.ts +23 -20
- package/dist/internal/topo-store-read.d.ts.map +1 -1
- package/dist/internal/topo-store-read.js +82 -83
- package/dist/internal/topo-store-read.js.map +1 -1
- package/dist/internal/topo-store.d.ts +19 -5
- package/dist/internal/topo-store.d.ts.map +1 -1
- package/dist/internal/topo-store.js +174 -124
- package/dist/internal/topo-store.js.map +1 -1
- package/dist/internal/tracing.d.ts +98 -0
- package/dist/internal/tracing.d.ts.map +1 -0
- package/dist/internal/tracing.js +102 -0
- package/dist/internal/tracing.js.map +1 -0
- package/dist/internal/trails-db.d.ts +2 -2
- package/dist/internal/trails-db.d.ts.map +1 -1
- package/dist/internal/trails-db.js +8 -8
- package/dist/internal/trails-db.js.map +1 -1
- package/dist/internal/zod-wrappers.d.ts +40 -0
- package/dist/internal/zod-wrappers.d.ts.map +1 -0
- package/dist/internal/zod-wrappers.js +59 -0
- package/dist/internal/zod-wrappers.js.map +1 -0
- package/dist/layer.d.ts +22 -5
- package/dist/layer.d.ts.map +1 -1
- package/dist/layer.js +20 -3
- package/dist/layer.js.map +1 -1
- package/dist/path-security.d.ts +1 -1
- package/dist/path-security.d.ts.map +1 -1
- package/dist/path-security.js +1 -1
- package/dist/path-security.js.map +1 -1
- package/dist/resilience.d.ts +1 -1
- package/dist/resilience.d.ts.map +1 -1
- package/dist/resilience.js +3 -3
- package/dist/resilience.js.map +1 -1
- package/dist/resource-config.d.ts +22 -0
- package/dist/resource-config.d.ts.map +1 -0
- package/dist/resource-config.js +210 -0
- package/dist/resource-config.js.map +1 -0
- package/dist/resource.d.ts +74 -0
- package/dist/resource.d.ts.map +1 -0
- package/dist/resource.js +61 -0
- package/dist/resource.js.map +1 -0
- package/dist/run.d.ts +4 -3
- package/dist/run.d.ts.map +1 -1
- package/dist/run.js +5 -4
- package/dist/run.js.map +1 -1
- package/dist/serialization.d.ts.map +1 -1
- package/dist/serialization.js +2 -1
- package/dist/serialization.js.map +1 -1
- package/dist/store/accessor-protocol.d.ts +51 -0
- package/dist/store/accessor-protocol.d.ts.map +1 -0
- package/dist/store/accessor-protocol.js +2 -0
- package/dist/store/accessor-protocol.js.map +1 -0
- package/dist/store/index.d.ts +2 -0
- package/dist/store/index.d.ts.map +1 -0
- package/dist/store/index.js +2 -0
- package/dist/store/index.js.map +1 -0
- package/dist/surface-filter.d.ts +13 -0
- package/dist/surface-filter.d.ts.map +1 -0
- package/dist/surface-filter.js +76 -0
- package/dist/surface-filter.js.map +1 -0
- package/dist/topo-store.d.ts +36 -22
- package/dist/topo-store.d.ts.map +1 -1
- package/dist/topo-store.js +215 -71
- package/dist/topo-store.js.map +1 -1
- package/dist/topo.d.ts +23 -9
- package/dist/topo.d.ts.map +1 -1
- package/dist/topo.js +175 -46
- package/dist/topo.js.map +1 -1
- package/dist/trail.d.ts +86 -19
- package/dist/trail.d.ts.map +1 -1
- package/dist/trail.js +59 -4
- package/dist/trail.js.map +1 -1
- package/dist/trails/derive-trail.d.ts +66 -0
- package/dist/trails/derive-trail.d.ts.map +1 -0
- package/dist/trails/derive-trail.js +378 -0
- package/dist/trails/derive-trail.js.map +1 -0
- package/dist/trails/index.d.ts +5 -0
- package/dist/trails/index.d.ts.map +1 -0
- package/dist/trails/index.js +3 -0
- package/dist/trails/index.js.map +1 -0
- package/dist/trails/ingest.d.ts +24 -0
- package/dist/trails/ingest.d.ts.map +1 -0
- package/dist/trails/ingest.js +63 -0
- package/dist/trails/ingest.js.map +1 -0
- package/dist/transport-error-map.d.ts +106 -0
- package/dist/transport-error-map.d.ts.map +1 -0
- package/dist/transport-error-map.js +24 -0
- package/dist/transport-error-map.js.map +1 -0
- package/dist/type-checks.test-d.d.ts +71 -0
- package/dist/type-checks.test-d.d.ts.map +1 -0
- package/dist/type-checks.test-d.js +12 -0
- package/dist/type-checks.test-d.js.map +1 -0
- package/dist/type-utils.d.ts +11 -2
- package/dist/type-utils.d.ts.map +1 -1
- package/dist/type-utils.js.map +1 -1
- package/dist/types.d.ts +113 -7
- package/dist/types.d.ts.map +1 -1
- package/dist/types.js.map +1 -1
- package/dist/validate-established-topo.js +2 -2
- package/dist/validate-established-topo.js.map +1 -1
- package/dist/validate-topo.d.ts.map +1 -1
- package/dist/validate-topo.js +24 -7
- package/dist/validate-topo.js.map +1 -1
- package/dist/workspace.d.ts +1 -1
- package/dist/workspace.d.ts.map +1 -1
- package/dist/workspace.js +1 -1
- package/dist/workspace.js.map +1 -1
- package/package.json +8 -2
- package/src/__tests__/branded.test.ts +5 -5
- package/src/__tests__/context.test.ts +3 -3
- package/src/__tests__/contour.test.ts +263 -0
- package/src/__tests__/derive-trail.test.ts +668 -0
- package/src/__tests__/errors.test.ts +118 -0
- package/src/__tests__/execute.test.ts +1179 -141
- package/src/__tests__/fire.test.ts +1056 -0
- package/src/__tests__/fork-ctx.test.ts +83 -0
- package/src/__tests__/ingest.test.ts +191 -0
- package/src/__tests__/{gate.test.ts → layer.test.ts} +21 -21
- package/src/__tests__/path-security.test.ts +7 -7
- package/src/__tests__/resilience.test.ts +8 -8
- package/src/__tests__/resource.test.ts +204 -0
- package/src/__tests__/run.test.ts +13 -13
- package/src/__tests__/service-config.test.ts +28 -32
- package/src/__tests__/surface-filter.test.ts +196 -0
- package/src/__tests__/topo-store-read.test.ts +41 -36
- package/src/__tests__/topo-store.test.ts +493 -93
- package/src/__tests__/topo.test.ts +350 -54
- package/src/__tests__/trail.test.ts +189 -24
- package/src/__tests__/trails-db.test.ts +32 -25
- package/src/__tests__/transport-error-map.test.ts +82 -0
- package/src/__tests__/type-utils.test.ts +29 -1
- package/src/__tests__/validate-topo.test.ts +147 -25
- package/src/__tests__/workspace.test.ts +6 -6
- package/src/__tests__/zod-wrappers.test.ts +62 -0
- package/src/branded.ts +1 -1
- package/src/context.ts +24 -4
- package/src/contour.ts +344 -0
- package/src/cross-schema.ts +36 -0
- package/src/draft.ts +56 -52
- package/src/errors.ts +62 -18
- package/src/execute.ts +840 -29
- package/src/fire.ts +295 -0
- package/src/index.ts +116 -29
- package/src/internal/cross-batch.ts +77 -0
- package/src/internal/fork-ctx.ts +69 -0
- package/src/internal/signal-ref.ts +87 -0
- package/src/internal/topo-snapshots.ts +517 -0
- package/src/internal/topo-store-read.ts +140 -132
- package/src/internal/topo-store.ts +291 -186
- package/src/internal/tracing.ts +187 -0
- package/src/internal/trails-db.ts +9 -11
- package/src/internal/zod-wrappers.ts +78 -0
- package/src/layer.ts +50 -0
- package/src/path-security.ts +1 -1
- package/src/resilience.ts +3 -3
- package/src/{provision-config.ts → resource-config.ts} +109 -123
- package/src/resource.ts +155 -0
- package/src/run.ts +5 -4
- package/src/serialization.ts +2 -0
- package/src/store/accessor-protocol.ts +56 -0
- package/src/store/index.ts +4 -0
- package/src/surface-filter.ts +182 -0
- package/src/topo-store.ts +313 -104
- package/src/topo.ts +328 -57
- package/src/trail.ts +199 -31
- package/src/trails/derive-trail.ts +842 -0
- package/src/trails/index.ts +9 -0
- package/src/trails/ingest.ts +146 -0
- package/src/transport-error-map.ts +56 -0
- package/src/type-checks.test-d.ts +106 -0
- package/src/type-utils.ts +17 -2
- package/src/types.ts +148 -11
- package/src/validate-established-topo.ts +2 -2
- package/src/validate-topo.ts +32 -8
- package/src/workspace.ts +1 -1
- package/tsconfig.tests.json +10 -0
- package/tsconfig.tsbuildinfo +1 -1
- package/dist/adapters.d.ts +0 -39
- package/dist/adapters.d.ts.map +0 -1
- package/dist/adapters.js +0 -2
- package/dist/adapters.js.map +0 -1
- package/dist/dispatch.d.ts +0 -27
- package/dist/dispatch.d.ts.map +0 -1
- package/dist/dispatch.js +0 -34
- package/dist/dispatch.js.map +0 -1
- package/dist/event.d.ts +0 -8
- package/dist/event.d.ts.map +0 -1
- package/dist/event.js +0 -7
- package/dist/event.js.map +0 -1
- package/dist/gate.d.ts +0 -17
- package/dist/gate.d.ts.map +0 -1
- package/dist/gate.js +0 -21
- package/dist/gate.js.map +0 -1
- package/dist/health.d.ts +0 -18
- package/dist/health.d.ts.map +0 -1
- package/dist/health.js +0 -5
- package/dist/health.js.map +0 -1
- package/dist/job.d.ts +0 -24
- package/dist/job.d.ts.map +0 -1
- package/dist/job.js +0 -17
- package/dist/job.js.map +0 -1
- package/dist/provision-config.d.ts +0 -22
- package/dist/provision-config.d.ts.map +0 -1
- package/dist/provision-config.js +0 -210
- package/dist/provision-config.js.map +0 -1
- package/dist/provision.d.ts +0 -71
- package/dist/provision.d.ts.map +0 -1
- package/dist/provision.js +0 -56
- package/dist/provision.js.map +0 -1
- package/dist/service-config.d.ts +0 -22
- package/dist/service-config.d.ts.map +0 -1
- package/dist/service-config.js +0 -210
- package/dist/service-config.js.map +0 -1
- package/dist/service.d.ts +0 -71
- package/dist/service.d.ts.map +0 -1
- package/dist/service.js +0 -56
- package/dist/service.js.map +0 -1
- package/src/__tests__/service.test.ts +0 -197
- package/src/event.ts +0 -15
- package/src/gate.ts +0 -44
- package/src/internal/topo-saves.ts +0 -429
- package/src/provision.ts +0 -148
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"accessor-protocol.js","sourceRoot":"","sources":["../../src/store/accessor-protocol.ts"],"names":[],"mappings":""}
|
|
@@ -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 @@
|
|
|
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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"}
|
package/dist/topo-store.d.ts
CHANGED
|
@@ -1,48 +1,62 @@
|
|
|
1
1
|
import type { SQLQueryBindings } from 'bun:sqlite';
|
|
2
|
-
import type {
|
|
3
|
-
import
|
|
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
|
-
|
|
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
|
|
26
|
+
readonly resources: {
|
|
16
27
|
get(id: string, options?: {
|
|
17
|
-
readonly
|
|
18
|
-
}):
|
|
28
|
+
readonly snapshot?: TopoStoreRef;
|
|
29
|
+
}): TopoStoreResourceRecord | undefined;
|
|
19
30
|
list(options?: {
|
|
20
|
-
readonly
|
|
21
|
-
}): readonly
|
|
31
|
+
readonly snapshot?: TopoStoreRef;
|
|
32
|
+
}): readonly TopoStoreResourceRecord[];
|
|
22
33
|
};
|
|
23
|
-
readonly
|
|
24
|
-
get(ref?: TopoStoreRef):
|
|
25
|
-
latest():
|
|
26
|
-
list(): readonly
|
|
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
|
|
41
|
+
readonly snapshot?: TopoStoreRef;
|
|
31
42
|
}): TopoStoreTrailDetailRecord | undefined;
|
|
32
43
|
list(options?: {
|
|
33
44
|
readonly intent?: TopoStoreTrailRecord['intent'];
|
|
34
|
-
readonly
|
|
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
|
|
41
|
-
readonly
|
|
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
|
|
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
|
package/dist/topo-store.d.ts.map
CHANGED
|
@@ -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;
|
|
1
|
+
{"version":3,"file":"topo-store.d.ts","sourceRoot":"","sources":["../src/topo-store.ts"],"names":[],"mappings":"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"}
|
package/dist/topo-store.js
CHANGED
|
@@ -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 {
|
|
3
|
+
import { resource } from './resource.js';
|
|
4
4
|
import { Result } from './result.js';
|
|
5
|
-
import {
|
|
6
|
-
import { getTopoStoreExport,
|
|
7
|
-
import {
|
|
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 =
|
|
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 (
|
|
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
|
|
34
|
-
const pins = [...(seed?.pins ?? [])];
|
|
133
|
+
const snapshots = [...(seed?.snapshots ?? [])];
|
|
35
134
|
const trails = [...(seed?.trails ?? [])];
|
|
36
|
-
const
|
|
135
|
+
const resources = [...(seed?.resources ?? [])];
|
|
37
136
|
const exports = [...(seed?.exports ?? [])];
|
|
38
|
-
const
|
|
39
|
-
if (ref?.
|
|
40
|
-
return
|
|
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
|
-
|
|
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
|
|
144
|
+
return snapshots[0];
|
|
49
145
|
};
|
|
50
146
|
return {
|
|
51
147
|
exports,
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
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
|
|
65
|
-
return
|
|
159
|
+
const snapshot = resolved.resolveSnapshot(ref);
|
|
160
|
+
return snapshot === undefined
|
|
66
161
|
? undefined
|
|
67
|
-
: resolved.exports.find((entry) => entry.
|
|
162
|
+
: resolved.exports.find((entry) => entry.snapshot.id === snapshot.id);
|
|
68
163
|
},
|
|
69
164
|
},
|
|
70
|
-
|
|
71
|
-
|
|
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
|
-
|
|
168
|
+
resources: {
|
|
79
169
|
get(id, options) {
|
|
80
|
-
const
|
|
81
|
-
return resolved.
|
|
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
|
|
85
|
-
return
|
|
175
|
+
const snapshot = resolved.resolveSnapshot(options?.snapshot);
|
|
176
|
+
return snapshot === undefined
|
|
86
177
|
? []
|
|
87
|
-
: resolved.
|
|
178
|
+
: resolved.resources.filter((item) => item.snapshotId === snapshot.id);
|
|
88
179
|
},
|
|
89
180
|
},
|
|
90
|
-
|
|
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.
|
|
183
|
+
return resolved.resolveSnapshot(ref);
|
|
96
184
|
},
|
|
97
185
|
latest() {
|
|
98
|
-
return resolved.
|
|
186
|
+
return resolved.snapshots[0];
|
|
99
187
|
},
|
|
100
|
-
list() {
|
|
101
|
-
|
|
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
|
|
107
|
-
if (
|
|
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.
|
|
213
|
+
return resolved.trails.find((trail) => trail.id === id && trail.snapshotId === snapshot.id);
|
|
111
214
|
},
|
|
112
215
|
list(options) {
|
|
113
|
-
const
|
|
114
|
-
if (
|
|
216
|
+
const snapshot = resolved.resolveSnapshot(options?.snapshot);
|
|
217
|
+
if (snapshot === undefined) {
|
|
115
218
|
return [];
|
|
116
219
|
}
|
|
117
|
-
return resolved.trails.filter((trail) => trail.
|
|
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
|
-
|
|
130
|
-
|
|
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
|
-
|
|
235
|
+
resources: {
|
|
138
236
|
get(id, queryOptions) {
|
|
139
|
-
return withStoredTopoState(options, (db) =>
|
|
237
|
+
return withStoredTopoState(options, (db) => getTopoStoreResource(db, id, queryOptions));
|
|
140
238
|
},
|
|
141
239
|
list(queryOptions) {
|
|
142
|
-
return withStoredTopoState(options, (db) =>
|
|
240
|
+
return withStoredTopoState(options, (db) => listTopoStoreResources(db, queryOptions));
|
|
143
241
|
},
|
|
144
242
|
},
|
|
145
|
-
|
|
146
|
-
return withStoredTopoState(options, (db) => queryTopoStore(db, sql, bindings));
|
|
147
|
-
},
|
|
148
|
-
saves: {
|
|
243
|
+
snapshots: {
|
|
149
244
|
get(ref) {
|
|
150
|
-
return withStoredTopoState(options, (db) =>
|
|
245
|
+
return withStoredTopoState(options, (db) => readTopoStoreSnapshot(db, ref));
|
|
151
246
|
},
|
|
152
247
|
latest() {
|
|
153
|
-
return withStoredTopoState(options, (db) =>
|
|
248
|
+
return withStoredTopoState(options, (db) => readTopoStoreSnapshot(db));
|
|
154
249
|
},
|
|
155
|
-
list() {
|
|
156
|
-
return withStoredTopoState(options, (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
|
|
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
|
})),
|
package/dist/topo-store.js.map
CHANGED
|
@@ -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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"}
|