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

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (59) hide show
  1. package/.turbo/turbo-lint.log +1 -1
  2. package/CHANGELOG.md +6 -0
  3. package/README.md +2 -1
  4. package/dist/derive.d.ts +6 -0
  5. package/dist/derive.d.ts.map +1 -1
  6. package/dist/derive.js +29 -5
  7. package/dist/derive.js.map +1 -1
  8. package/dist/draft.d.ts +28 -0
  9. package/dist/draft.d.ts.map +1 -0
  10. package/dist/draft.js +156 -0
  11. package/dist/draft.js.map +1 -0
  12. package/dist/index.d.ts +6 -1
  13. package/dist/index.d.ts.map +1 -1
  14. package/dist/index.js +5 -1
  15. package/dist/index.js.map +1 -1
  16. package/dist/internal/topo-saves.d.ts +47 -0
  17. package/dist/internal/topo-saves.d.ts.map +1 -0
  18. package/dist/internal/topo-saves.js +310 -0
  19. package/dist/internal/topo-saves.js.map +1 -0
  20. package/dist/internal/topo-store-read.d.ts +67 -0
  21. package/dist/internal/topo-store-read.d.ts.map +1 -0
  22. package/dist/internal/topo-store-read.js +222 -0
  23. package/dist/internal/topo-store-read.js.map +1 -0
  24. package/dist/internal/topo-store.d.ts +12 -0
  25. package/dist/internal/topo-store.d.ts.map +1 -0
  26. package/dist/internal/topo-store.js +571 -0
  27. package/dist/internal/topo-store.js.map +1 -0
  28. package/dist/internal/trails-db.d.ts +16 -0
  29. package/dist/internal/trails-db.d.ts.map +1 -0
  30. package/dist/internal/trails-db.js +118 -0
  31. package/dist/internal/trails-db.js.map +1 -0
  32. package/dist/topo-store.d.ts +48 -0
  33. package/dist/topo-store.d.ts.map +1 -0
  34. package/dist/topo-store.js +175 -0
  35. package/dist/topo-store.js.map +1 -0
  36. package/dist/validate-established-topo.d.ts +76 -0
  37. package/dist/validate-established-topo.d.ts.map +1 -0
  38. package/dist/validate-established-topo.js +43 -0
  39. package/dist/validate-established-topo.js.map +1 -0
  40. package/dist/validate-topo.d.ts.map +1 -1
  41. package/dist/validate-topo.js +5 -3
  42. package/dist/validate-topo.js.map +1 -1
  43. package/package.json +4 -1
  44. package/src/__tests__/derive.test.ts +58 -1
  45. package/src/__tests__/topo-store-read.test.ts +251 -0
  46. package/src/__tests__/topo-store.test.ts +469 -0
  47. package/src/__tests__/trails-db.test.ts +191 -0
  48. package/src/__tests__/validate-topo.test.ts +167 -0
  49. package/src/derive.ts +39 -8
  50. package/src/draft.ts +334 -0
  51. package/src/index.ts +30 -1
  52. package/src/internal/topo-saves.ts +429 -0
  53. package/src/internal/topo-store-read.ts +473 -0
  54. package/src/internal/topo-store.ts +1087 -0
  55. package/src/internal/trails-db.ts +189 -0
  56. package/src/topo-store.ts +301 -0
  57. package/src/validate-established-topo.ts +63 -0
  58. package/src/validate-topo.ts +7 -3
  59. package/tsconfig.tsbuildinfo +1 -1
@@ -0,0 +1,118 @@
1
+ import { Database } from 'bun:sqlite';
2
+ import { existsSync, mkdirSync, readFileSync, writeFileSync } from 'node:fs';
3
+ import { dirname, join, resolve } from 'node:path';
4
+ import { NotFoundError } from '../errors.js';
5
+ const TRAILS_DIR = '.trails';
6
+ const TRAILS_DB_FILE = 'trails.db';
7
+ const SCHEMA_VERSION_TABLE = 'meta_schema_versions';
8
+ const WORKSPACE_SUBDIRS = ['config', 'dev', 'generated'];
9
+ const REQUIRED_GITIGNORE_LINES = [
10
+ '# Local config overrides',
11
+ 'config/',
12
+ '',
13
+ '# Development state',
14
+ 'dev/',
15
+ '',
16
+ '# Generated artifacts',
17
+ 'generated/',
18
+ '',
19
+ '# Shared Trails database',
20
+ 'trails.db',
21
+ 'trails.db-shm',
22
+ 'trails.db-wal',
23
+ '',
24
+ ];
25
+ const resolveRootDir = (rootDir) => resolve(rootDir ?? process.cwd());
26
+ export const resolveTrailsDir = (options) => join(resolveRootDir(options?.rootDir), TRAILS_DIR);
27
+ export const resolveTrailsDbPath = (options) => options?.path
28
+ ? resolve(options.path)
29
+ : join(resolveTrailsDir(options), TRAILS_DB_FILE);
30
+ const ensureDbParentDir = (dbPath) => {
31
+ mkdirSync(dirname(dbPath), { recursive: true });
32
+ };
33
+ const GITIGNORE_TEMPLATE = `${REQUIRED_GITIGNORE_LINES.join('\n').trimEnd()}\n`;
34
+ const appendMissingGitignoreLines = (gitignorePath, content) => {
35
+ const existingLines = new Set(content.split('\n').map((l) => l.trim()));
36
+ const missing = REQUIRED_GITIGNORE_LINES.filter((line) => line !== '' && !existingLines.has(line));
37
+ if (missing.length === 0) {
38
+ return;
39
+ }
40
+ const next = `${content.trimEnd()}\n\n${missing.join('\n')}`;
41
+ writeFileSync(gitignorePath, `${next.trimEnd()}\n`);
42
+ };
43
+ const ensureWorkspaceGitignore = (trailsDir) => {
44
+ const gitignorePath = join(trailsDir, '.gitignore');
45
+ if (!existsSync(gitignorePath)) {
46
+ writeFileSync(gitignorePath, GITIGNORE_TEMPLATE);
47
+ return;
48
+ }
49
+ appendMissingGitignoreLines(gitignorePath, readFileSync(gitignorePath, 'utf8'));
50
+ };
51
+ const ensureWorkspaceDir = (rootDir) => {
52
+ const trailsDir = resolveTrailsDir({ rootDir });
53
+ mkdirSync(trailsDir, { recursive: true });
54
+ for (const subdir of WORKSPACE_SUBDIRS) {
55
+ mkdirSync(join(trailsDir, subdir), { recursive: true });
56
+ }
57
+ ensureWorkspaceGitignore(trailsDir);
58
+ };
59
+ const initializeWritePragmas = (db) => {
60
+ db.run('PRAGMA journal_mode = WAL');
61
+ db.run('PRAGMA synchronous = NORMAL');
62
+ db.run('PRAGMA foreign_keys = ON');
63
+ };
64
+ const ensureSchemaVersionTable = (db) => {
65
+ db.run(`CREATE TABLE IF NOT EXISTS ${SCHEMA_VERSION_TABLE} (
66
+ subsystem TEXT PRIMARY KEY,
67
+ version INTEGER NOT NULL,
68
+ updated_at TEXT NOT NULL
69
+ )`);
70
+ };
71
+ const readSubsystemVersion = (db, subsystem) => {
72
+ const row = db
73
+ .query(`SELECT version FROM ${SCHEMA_VERSION_TABLE} WHERE subsystem = ?`)
74
+ .get(subsystem);
75
+ return row?.version ?? 0;
76
+ };
77
+ const writeSubsystemVersion = (db, subsystem, version) => {
78
+ db.run(`INSERT INTO ${SCHEMA_VERSION_TABLE} (subsystem, version, updated_at)
79
+ VALUES (?, ?, ?)
80
+ ON CONFLICT(subsystem) DO UPDATE SET
81
+ version = excluded.version,
82
+ updated_at = excluded.updated_at`, [subsystem, version, new Date().toISOString()]);
83
+ };
84
+ export const openWriteTrailsDb = (options) => {
85
+ const rootDir = resolveRootDir(options?.rootDir);
86
+ const dbPath = resolveTrailsDbPath(options?.path ? { path: options.path, rootDir } : { rootDir });
87
+ if (options?.path === undefined) {
88
+ ensureWorkspaceDir(rootDir);
89
+ }
90
+ else {
91
+ ensureDbParentDir(dbPath);
92
+ }
93
+ const db = new Database(dbPath, { create: true });
94
+ initializeWritePragmas(db);
95
+ ensureSchemaVersionTable(db);
96
+ return db;
97
+ };
98
+ export const openReadTrailsDb = (options) => {
99
+ const dbPath = resolveTrailsDbPath(options);
100
+ if (!existsSync(dbPath)) {
101
+ throw new NotFoundError(`Trails database not found at "${dbPath}". Run a write operation first to initialize it.`);
102
+ }
103
+ const db = new Database(dbPath, { readonly: true });
104
+ db.run('PRAGMA foreign_keys = ON');
105
+ return db;
106
+ };
107
+ export const ensureSubsystemSchema = (db, options) => {
108
+ ensureSchemaVersionTable(db);
109
+ db.transaction(() => {
110
+ const currentVersion = readSubsystemVersion(db, options.subsystem);
111
+ if (currentVersion >= options.version) {
112
+ return;
113
+ }
114
+ options.migrate(currentVersion);
115
+ writeSubsystemVersion(db, options.subsystem, options.version);
116
+ })();
117
+ };
118
+ //# sourceMappingURL=trails-db.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"trails-db.js","sourceRoot":"","sources":["../../src/internal/trails-db.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,48 @@
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';
4
+ import type { TrailsDbLocationOptions } from './internal/trails-db.js';
5
+ export type { TopoStoreExportRecord, TopoStoreProvisionRecord, TopoStoreRef, TopoStoreTrailDetailRecord, TopoStoreTrailRecord, } from './internal/topo-store-read.js';
6
+ export interface ReadOnlyTopoStore {
7
+ readonly exports: {
8
+ get(ref?: TopoStoreRef): TopoStoreExportRecord | undefined;
9
+ };
10
+ readonly pins: {
11
+ get(name: string): TopoPinRecord | undefined;
12
+ list(): readonly TopoPinRecord[];
13
+ };
14
+ query<TRow extends Record<string, unknown>>(sql: string, bindings?: readonly SQLQueryBindings[]): readonly TRow[];
15
+ readonly provisions: {
16
+ get(id: string, options?: {
17
+ readonly save?: TopoStoreRef;
18
+ }): TopoStoreProvisionRecord | undefined;
19
+ list(options?: {
20
+ readonly save?: TopoStoreRef;
21
+ }): readonly TopoStoreProvisionRecord[];
22
+ };
23
+ readonly saves: {
24
+ get(ref?: TopoStoreRef): TopoSaveRecord | undefined;
25
+ latest(): TopoSaveRecord | undefined;
26
+ list(): readonly TopoSaveRecord[];
27
+ };
28
+ readonly trails: {
29
+ get(id: string, options?: {
30
+ readonly save?: TopoStoreRef;
31
+ }): TopoStoreTrailDetailRecord | undefined;
32
+ list(options?: {
33
+ readonly intent?: TopoStoreTrailRecord['intent'];
34
+ readonly save?: TopoStoreRef;
35
+ }): readonly TopoStoreTrailRecord[];
36
+ };
37
+ }
38
+ export interface MockTopoStoreSeed {
39
+ readonly exports?: readonly TopoStoreExportRecord[];
40
+ readonly pins?: readonly TopoPinRecord[];
41
+ readonly provisions?: readonly TopoStoreProvisionRecord[];
42
+ readonly saves?: readonly TopoSaveRecord[];
43
+ readonly trails?: readonly TopoStoreTrailDetailRecord[];
44
+ }
45
+ export declare const createMockTopoStore: (seed?: MockTopoStoreSeed) => ReadOnlyTopoStore;
46
+ export declare const createTopoStore: (options?: TrailsDbLocationOptions) => ReadOnlyTopoStore;
47
+ export declare const topoStore: import("./provision.js").Provision<ReadOnlyTopoStore>;
48
+ //# sourceMappingURL=topo-store.d.ts.map
@@ -0,0 +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"}
@@ -0,0 +1,175 @@
1
+ import { existsSync } from 'node:fs';
2
+ import { NotFoundError } from './errors.js';
3
+ import { provision } from './provision.js';
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';
8
+ const missingStoreMessage = 'No saved topo state found. Populate trails.db first or run a topo-backed surface.';
9
+ const resolveStoreRootDir = (options) => options?.rootDir ?? process.cwd();
10
+ const requireReadDb = (options) => {
11
+ const dbPath = resolveTrailsDbPath(options);
12
+ if (!existsSync(dbPath)) {
13
+ throw new NotFoundError(missingStoreMessage);
14
+ }
15
+ return openReadTrailsDb(options);
16
+ };
17
+ const requireSavedTopoState = (db) => {
18
+ if (resolveTopoStoreSave(db) === undefined) {
19
+ throw new NotFoundError(missingStoreMessage);
20
+ }
21
+ };
22
+ const withStoredTopoState = (options, run) => {
23
+ const db = requireReadDb(options);
24
+ try {
25
+ requireSavedTopoState(db);
26
+ return run(db);
27
+ }
28
+ finally {
29
+ db.close();
30
+ }
31
+ };
32
+ const createSeedResolver = (seed) => {
33
+ const saves = [...(seed?.saves ?? [])];
34
+ const pins = [...(seed?.pins ?? [])];
35
+ const trails = [...(seed?.trails ?? [])];
36
+ const provisions = [...(seed?.provisions ?? [])];
37
+ const exports = [...(seed?.exports ?? [])];
38
+ const resolveSave = (ref) => {
39
+ if (ref?.saveId !== undefined) {
40
+ return saves.find((save) => save.id === ref.saveId);
41
+ }
42
+ 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);
47
+ }
48
+ return saves[0];
49
+ };
50
+ return {
51
+ exports,
52
+ pins,
53
+ provisions,
54
+ resolveSave,
55
+ saves,
56
+ trails,
57
+ };
58
+ };
59
+ export const createMockTopoStore = (seed) => {
60
+ const resolved = createSeedResolver(seed);
61
+ return {
62
+ exports: {
63
+ get(ref) {
64
+ const save = resolved.resolveSave(ref);
65
+ return save === undefined
66
+ ? undefined
67
+ : resolved.exports.find((entry) => entry.save.id === save.id);
68
+ },
69
+ },
70
+ pins: {
71
+ get(name) {
72
+ return resolved.pins.find((pin) => pin.name === name);
73
+ },
74
+ list() {
75
+ return resolved.pins;
76
+ },
77
+ },
78
+ provisions: {
79
+ 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));
82
+ },
83
+ list(options) {
84
+ const save = resolved.resolveSave(options?.save);
85
+ return save === undefined
86
+ ? []
87
+ : resolved.provisions.filter((item) => item.saveId === save.id);
88
+ },
89
+ },
90
+ query() {
91
+ throw new NotFoundError('Mock topoStore.query() is unsupported. Seed typed accessors instead.');
92
+ },
93
+ saves: {
94
+ get(ref) {
95
+ return resolved.resolveSave(ref);
96
+ },
97
+ latest() {
98
+ return resolved.saves[0];
99
+ },
100
+ list() {
101
+ return resolved.saves;
102
+ },
103
+ },
104
+ trails: {
105
+ get(id, options) {
106
+ const save = resolved.resolveSave(options?.save);
107
+ if (save === undefined) {
108
+ return;
109
+ }
110
+ return resolved.trails.find((trail) => trail.id === id && trail.saveId === save.id);
111
+ },
112
+ list(options) {
113
+ const save = resolved.resolveSave(options?.save);
114
+ if (save === undefined) {
115
+ return [];
116
+ }
117
+ return resolved.trails.filter((trail) => trail.saveId === save.id &&
118
+ (options?.intent === undefined || trail.intent === options.intent));
119
+ },
120
+ },
121
+ };
122
+ };
123
+ export const createTopoStore = (options) => ({
124
+ exports: {
125
+ get(ref) {
126
+ return withStoredTopoState(options, (db) => getTopoStoreExport(db, ref));
127
+ },
128
+ },
129
+ pins: {
130
+ get(name) {
131
+ return withStoredTopoState(options, (db) => getTopoPin(db, name));
132
+ },
133
+ list() {
134
+ return withStoredTopoState(options, (db) => listTopoStorePins(db));
135
+ },
136
+ },
137
+ provisions: {
138
+ get(id, queryOptions) {
139
+ return withStoredTopoState(options, (db) => getTopoStoreProvision(db, id, queryOptions));
140
+ },
141
+ list(queryOptions) {
142
+ return withStoredTopoState(options, (db) => listTopoStoreProvisions(db, queryOptions));
143
+ },
144
+ },
145
+ query(sql, bindings) {
146
+ return withStoredTopoState(options, (db) => queryTopoStore(db, sql, bindings));
147
+ },
148
+ saves: {
149
+ get(ref) {
150
+ return withStoredTopoState(options, (db) => resolveTopoStoreSave(db, ref));
151
+ },
152
+ latest() {
153
+ return withStoredTopoState(options, (db) => resolveTopoStoreSave(db));
154
+ },
155
+ list() {
156
+ return withStoredTopoState(options, (db) => listTopoStoreSaves(db));
157
+ },
158
+ },
159
+ trails: {
160
+ get(id, queryOptions) {
161
+ return withStoredTopoState(options, (db) => getTopoStoreTrail(db, id, queryOptions));
162
+ },
163
+ list(queryOptions) {
164
+ return withStoredTopoState(options, (db) => listTopoStoreTrails(db, queryOptions));
165
+ },
166
+ },
167
+ });
168
+ export const topoStore = provision('topo.store', {
169
+ create: (svc) => Result.ok(createTopoStore({
170
+ rootDir: svc.workspaceRoot ?? svc.cwd ?? resolveStoreRootDir(),
171
+ })),
172
+ description: 'Read-only query access to saved topo state in trails.db',
173
+ mock: () => createMockTopoStore(),
174
+ });
175
+ //# sourceMappingURL=topo-store.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"topo-store.js","sourceRoot":"","sources":["../src/topo-store.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,76 @@
1
+ import { ValidationError } from './errors.js';
2
+ import { Result } from './result.js';
3
+ import type { Topo } from './topo.js';
4
+ /**
5
+ * Validate that a topo is ready for established outputs.
6
+ *
7
+ * Established surfaces still require the authored graph to be structurally
8
+ * valid, and they must also reject any remaining draft state.
9
+ */
10
+ export declare const validateEstablishedTopo: (topo: Topo) => {
11
+ readonly error: ValidationError;
12
+ isOk(): this is {
13
+ readonly value: never;
14
+ isOk(): this is /*elided*/ any;
15
+ isErr(): this is /*elided*/ any;
16
+ map<U>(fn: (value: never) => U): Result<U, ValidationError>;
17
+ flatMap<U, F = ValidationError>(fn: (value: never) => Result<U, F>): Result<U, ValidationError | F>;
18
+ mapErr<F>(_fn: (error: ValidationError) => F): Result<never, F>;
19
+ match<U>(handlers: {
20
+ ok: (value: never) => U;
21
+ err: (error: ValidationError) => U;
22
+ }): U;
23
+ unwrap(): never;
24
+ unwrapOr(_fallback: never): never;
25
+ };
26
+ isErr(): this is /*elided*/ any;
27
+ map<U>(_fn: (value: never) => U): Result<U, ValidationError>;
28
+ flatMap<U, F = ValidationError>(_fn: (value: never) => Result<U, F>): Result<U, ValidationError | F>;
29
+ mapErr<F>(fn: (error: ValidationError) => F): Result<never, F>;
30
+ match<U>(handlers: {
31
+ ok: (value: never) => U;
32
+ err: (error: ValidationError) => U;
33
+ }): U;
34
+ unwrap(): never;
35
+ unwrapOr<T>(fallback: T): T;
36
+ } | {
37
+ readonly value: void;
38
+ isOk(): this is /*elided*/ any;
39
+ isErr(): this is {
40
+ readonly error: never;
41
+ isOk(): this is {
42
+ readonly value: never;
43
+ isOk(): this is /*elided*/ any;
44
+ isErr(): this is /*elided*/ any;
45
+ map<U>(fn: (value: never) => U): Result<U, never>;
46
+ flatMap<U, F = never>(fn: (value: never) => Result<U, F>): Result<U, F>;
47
+ mapErr<F>(_fn: (error: never) => F): Result<never, F>;
48
+ match<U>(handlers: {
49
+ ok: (value: never) => U;
50
+ err: (error: never) => U;
51
+ }): U;
52
+ unwrap(): never;
53
+ unwrapOr(_fallback: never): never;
54
+ };
55
+ isErr(): this is /*elided*/ any;
56
+ map<U>(_fn: (value: never) => U): Result<U, never>;
57
+ flatMap<U, F = never>(_fn: (value: never) => Result<U, F>): Result<U, F>;
58
+ mapErr<F>(fn: (error: never) => F): Result<never, F>;
59
+ match<U>(handlers: {
60
+ ok: (value: never) => U;
61
+ err: (error: never) => U;
62
+ }): U;
63
+ unwrap(): never;
64
+ unwrapOr<T>(fallback: T): T;
65
+ };
66
+ map<U>(fn: (value: void) => U): Result<U, never>;
67
+ flatMap<U, F = never>(fn: (value: void) => Result<U, F>): Result<U, F>;
68
+ mapErr<F>(_fn: (error: never) => F): Result<void, F>;
69
+ match<U>(handlers: {
70
+ ok: (value: void) => U;
71
+ err: (error: never) => U;
72
+ }): U;
73
+ unwrap(): void;
74
+ unwrapOr(_fallback: void): void;
75
+ };
76
+ //# sourceMappingURL=validate-established-topo.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-established-topo.d.ts","sourceRoot":"","sources":["../src/validate-established-topo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AA0CtC;;;;;GAKG;AACH,eAAO,MAAM,uBAAuB,GAAI,MAAM,IAAI;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;CAYjD,CAAC"}
@@ -0,0 +1,43 @@
1
+ import { ValidationError } from './errors.js';
2
+ import { Result } from './result.js';
3
+ import { validateEstablishedTopo as validateDraftFreeTopo } from './draft.js';
4
+ import { validateTopo } from './validate-topo.js';
5
+ const PROJECTION_BLOCKING_RULES = new Set([
6
+ 'cross-cycle',
7
+ 'cross-exists',
8
+ 'no-self-cross',
9
+ 'provision-exists',
10
+ 'signal-origin-exists',
11
+ ]);
12
+ const keepProjectionBlockingIssues = (result) => {
13
+ if (result.isOk()) {
14
+ return result;
15
+ }
16
+ const issues = result.error.context?.issues;
17
+ const remainingIssues = issues?.filter((issue) => PROJECTION_BLOCKING_RULES.has(issue.rule));
18
+ if (remainingIssues === undefined || remainingIssues.length === 0) {
19
+ return Result.ok();
20
+ }
21
+ return Result.err(new ValidationError(`Topo validation failed with ${remainingIssues.length} issue(s)`, {
22
+ cause: result.error,
23
+ context: { issues: remainingIssues },
24
+ }));
25
+ };
26
+ /**
27
+ * Validate that a topo is ready for established outputs.
28
+ *
29
+ * Established surfaces still require the authored graph to be structurally
30
+ * valid, and they must also reject any remaining draft state.
31
+ */
32
+ export const validateEstablishedTopo = (topo) => {
33
+ const structural = keepProjectionBlockingIssues(validateTopo(topo));
34
+ if (structural.isErr()) {
35
+ return structural;
36
+ }
37
+ const established = validateDraftFreeTopo(topo);
38
+ if (established.isErr()) {
39
+ return established;
40
+ }
41
+ return Result.ok();
42
+ };
43
+ //# sourceMappingURL=validate-established-topo.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"validate-established-topo.js","sourceRoot":"","sources":["../src/validate-established-topo.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAC9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAErC,OAAO,EAAE,uBAAuB,IAAI,qBAAqB,EAAE,MAAM,YAAY,CAAC;AAE9E,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAC;AAElD,MAAM,yBAAyB,GAAG,IAAI,GAAG,CAAC;IACxC,aAAa;IACb,cAAc;IACd,eAAe;IACf,kBAAkB;IAClB,sBAAsB;CACvB,CAAC,CAAC;AAEH,MAAM,4BAA4B,GAAG,CACnC,MAAuC,EACvC,EAAE;IACF,IAAI,MAAM,CAAC,IAAI,EAAE,EAAE,CAAC;QAClB,OAAO,MAAM,CAAC;IAChB,CAAC;IAED,MAAM,MAAM,GACV,MAAM,CAAC,KAAK,CAAC,OACd,EAAE,MAAM,CAAC;IACV,MAAM,eAAe,GAAG,MAAM,EAAE,MAAM,CAAC,CAAC,KAAK,EAAE,EAAE,CAC/C,yBAAyB,CAAC,GAAG,CAAC,KAAK,CAAC,IAAI,CAAC,CAC1C,CAAC;IAEF,IAAI,eAAe,KAAK,SAAS,IAAI,eAAe,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QAClE,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,+BAA+B,eAAe,CAAC,MAAM,WAAW,EAChE;QACE,KAAK,EAAE,MAAM,CAAC,KAAK;QACnB,OAAO,EAAE,EAAE,MAAM,EAAE,eAAe,EAAE;KACrC,CACF,CACF,CAAC;AACJ,CAAC,CAAC;AAEF;;;;;GAKG;AACH,MAAM,CAAC,MAAM,uBAAuB,GAAG,CAAC,IAAU,EAAE,EAAE;IACpD,MAAM,UAAU,GAAG,4BAA4B,CAAC,YAAY,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,IAAI,UAAU,CAAC,KAAK,EAAE,EAAE,CAAC;QACvB,OAAO,UAAU,CAAC;IACpB,CAAC;IAED,MAAM,WAAW,GAAG,qBAAqB,CAAC,IAAI,CAAC,CAAC;IAChD,IAAI,WAAW,CAAC,KAAK,EAAE,EAAE,CAAC;QACxB,OAAO,WAAW,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;AACrB,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"validate-topo.d.ts","sourceRoot":"","sources":["../src/validate-topo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQtC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAsLD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,KAAG,MAAM,CAAC,IAAI,EAAE,eAAe,CAoBrE,CAAC"}
1
+ {"version":3,"file":"validate-topo.d.ts","sourceRoot":"","sources":["../src/validate-topo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAG9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AACrC,OAAO,KAAK,EAAE,IAAI,EAAE,MAAM,WAAW,CAAC;AAQtC,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;IACzB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IACtB,QAAQ,CAAC,OAAO,EAAE,MAAM,CAAC;CAC1B;AAyLD;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,MAAM,IAAI,KAAG,MAAM,CAAC,IAAI,EAAE,eAAe,CAoBrE,CAAC"}
@@ -6,6 +6,7 @@
6
6
  * issues collected into a single ValidationError.
7
7
  */
8
8
  import { ValidationError } from './errors.js';
9
+ import { isDraftId } from './draft.js';
9
10
  import { Result } from './result.js';
10
11
  import { validateInput } from './validation.js';
11
12
  // ---------------------------------------------------------------------------
@@ -71,7 +72,7 @@ const checkCrosses = (trails, topo) => {
71
72
  trailId: id,
72
73
  });
73
74
  }
74
- else if (!topo.has(crossedId)) {
75
+ else if (!topo.has(crossedId) && !isDraftId(crossedId)) {
75
76
  issues.push({
76
77
  message: `Crosses "${crossedId}" which is not in the topo`,
77
78
  rule: 'cross-exists',
@@ -87,7 +88,8 @@ const checkProvisions = (trails, topo) => {
87
88
  const issues = [];
88
89
  for (const [id, trail] of trails) {
89
90
  for (const declaredProvision of trail.provisions) {
90
- if (!topo.hasProvision(declaredProvision.id)) {
91
+ if (!topo.hasProvision(declaredProvision.id) &&
92
+ !isDraftId(declaredProvision.id)) {
91
93
  issues.push({
92
94
  message: `Provision "${declaredProvision.id}" is not in the topo`,
93
95
  rule: 'provision-exists',
@@ -136,7 +138,7 @@ const checkSignalOrigins = (signals, topo) => {
136
138
  continue;
137
139
  }
138
140
  for (const originId of evt.from) {
139
- if (!topo.has(originId)) {
141
+ if (!topo.has(originId) && !isDraftId(originId)) {
140
142
  issues.push({
141
143
  message: `Signal origin "${originId}" is not in the topo`,
142
144
  rule: 'signal-origin-exists',
@@ -1 +1 @@
1
- {"version":3,"file":"validate-topo.js","sourceRoot":"","sources":["../src/validate-topo.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG;AAEH,OAAO,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AAE9C,OAAO,EAAE,MAAM,EAAE,MAAM,aAAa,CAAC;AAGrC,OAAO,EAAE,aAAa,EAAE,MAAM,iBAAiB,CAAC;AAYhD,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E,MAAM,KAAK,GAAG,CAAC,CAAC;AAChB,MAAM,IAAI,GAAG,CAAC,CAAC;AACf,MAAM,KAAK,GAAG,CAAC,CAAC;AAEhB,gFAAgF;AAChF,MAAM,eAAe,GAAG,CACtB,MAAqC,EAIrC,EAAE;IACF,MAAM,KAAK,GAAG,IAAI,GAAG,EAA6B,CAAC;IACnD,KAAK,MAAM,CAAC,EAAE,EAAE,CAAC,CAAC,IAAI,MAAM,EAAE,CAAC;QAC7B,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YACzB,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,CAAC,CAAC,OAAO,CAAC,CAAC;QAC3B,CAAC;IACH,CAAC;IACD,MAAM,KAAK,GAAG,IAAI,GAAG,EAAkB,CAAC;IACxC,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,KAAK,CAAC,GAAG,CAAC,EAAE,EAAE,KAAK,CAAC,CAAC;IACvB,CAAC;IACD,OAAO,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC;AAC1B,CAAC,CAAC;AAEF,oEAAoE;AACpE,MAAM,iBAAiB,GAAG,CACxB,MAAqC,EACxB,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,EAAE,KAAK,EAAE,KAAK,EAAE,GAAG,eAAe,CAAC,MAAM,CAAC,CAAC;IAEjD,MAAM,GAAG,GAAG,CAAC,IAAY,EAAE,IAAc,EAAQ,EAAE;QACjD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QACtB,KAAK,MAAM,IAAI,IAAI,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC;YACzC,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC;gBACrB,SAAS;YACX,CAAC;YACD,MAAM,CAAC,GAAG,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,KAAK,CAAC;YACnC,IAAI,CAAC,KAAK,IAAI,EAAE,CAAC;gBACf,MAAM,KAAK,GAAG,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC;gBACxD,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,mBAAmB,KAAK,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE;oBAC/C,IAAI,EAAE,aAAa;oBACnB,OAAO,EAAE,IAAI;iBACd,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,KAAK,KAAK,EAAE,CAAC;gBACvB,GAAG,CAAC,IAAI,EAAE,CAAC,GAAG,IAAI,EAAE,IAAI,CAAC,CAAC,CAAC;YAC7B,CAAC;QACH,CAAC;QACD,KAAK,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,CAAC;IACzB,CAAC,CAAC;IAEF,KAAK,MAAM,EAAE,IAAI,KAAK,CAAC,IAAI,EAAE,EAAE,CAAC;QAC9B,IAAI,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC,KAAK,KAAK,EAAE,CAAC;YAC5B,GAAG,CAAC,EAAE,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QAChB,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,YAAY,GAAG,CACnB,MAAqC,EACrC,IAAU,EACG,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,SAAS,IAAI,KAAK,CAAC,OAAO,EAAE,CAAC;YACtC,IAAI,SAAS,KAAK,EAAE,EAAE,CAAC;gBACrB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,sBAAsB;oBAC/B,IAAI,EAAE,eAAe;oBACrB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;iBAAM,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,SAAS,CAAC,EAAE,CAAC;gBAChC,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,YAAY,SAAS,4BAA4B;oBAC1D,IAAI,EAAE,cAAc;oBACpB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,MAAM,CAAC,IAAI,CAAC,GAAG,iBAAiB,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1C,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,MAAqC,EACrC,IAAU,EACG,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAE/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,KAAK,MAAM,iBAAiB,IAAI,KAAK,CAAC,UAAU,EAAE,CAAC;YACjD,IAAI,CAAC,IAAI,CAAC,YAAY,CAAC,iBAAiB,CAAC,EAAE,CAAC,EAAE,CAAC;gBAC7C,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,cAAc,iBAAiB,CAAC,EAAE,sBAAsB;oBACjE,IAAI,EAAE,kBAAkB;oBACxB,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IAED,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,eAAe,GAAG,CACtB,EAAU,EACV,OAKC,EACD,WAAmE,EACnE,SAAkB,EACL,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,MAAM,MAAM,GAAG,aAAa,CAAC,WAAgC,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC;IAC9E,IAAI,MAAM,CAAC,KAAK,EAAE,IAAI,OAAO,CAAC,KAAK,KAAK,iBAAiB,EAAE,CAAC;QAC1D,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,uCAAuC;YACxE,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IACD,IAAI,OAAO,CAAC,QAAQ,KAAK,SAAS,IAAI,CAAC,SAAS,EAAE,CAAC;QACjD,MAAM,CAAC,IAAI,CAAC;YACV,OAAO,EAAE,YAAY,OAAO,CAAC,IAAI,sDAAsD;YACvF,IAAI,EAAE,uBAAuB;YAC7B,OAAO,EAAE,EAAE;SACZ,CAAC,CAAC;IACL,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,aAAa,GAAG,CAAC,MAAqC,EAAe,EAAE;IAC3E,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,KAAK,CAAC,IAAI,MAAM,EAAE,CAAC;QACjC,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,CAAC;YACpB,SAAS;QACX,CAAC;QACD,KAAK,MAAM,OAAO,IAAI,KAAK,CAAC,QAAQ,EAAE,CAAC;YACrC,MAAM,CAAC,IAAI,CAAC,GAAG,eAAe,CAAC,EAAE,EAAE,OAAO,EAAE,KAAK,CAAC,KAAK,EAAE,CAAC,CAAC,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC;QAC5E,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,MAAM,kBAAkB,GAAG,CACzB,OAAuC,EACvC,IAAU,EACG,EAAE;IACf,MAAM,MAAM,GAAgB,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,EAAE,EAAE,GAAG,CAAC,IAAI,OAAO,EAAE,CAAC;QAChC,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,CAAC;YACd,SAAS;QACX,CAAC;QACD,KAAK,MAAM,QAAQ,IAAI,GAAG,CAAC,IAAI,EAAE,CAAC;YAChC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,QAAQ,CAAC,EAAE,CAAC;gBACxB,MAAM,CAAC,IAAI,CAAC;oBACV,OAAO,EAAE,kBAAkB,QAAQ,sBAAsB;oBACzD,IAAI,EAAE,sBAAsB;oBAC5B,OAAO,EAAE,EAAE;iBACZ,CAAC,CAAC;YACL,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,MAAM,CAAC;AAChB,CAAC,CAAC;AAEF,8EAA8E;AAC9E,aAAa;AACb,8EAA8E;AAE9E;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,IAAU,EAAiC,EAAE;IACxE,MAAM,MAAM,GAAG;QACb,GAAG,YAAY,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QAClC,GAAG,eAAe,CAAC,IAAI,CAAC,MAAM,EAAE,IAAI,CAAC;QACrC,GAAG,aAAa,CAAC,IAAI,CAAC,MAAM,CAAC;QAC7B,GAAG,kBAAkB,CAAC,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC;KAC1C,CAAC;IAEF,IAAI,MAAM,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACxB,OAAO,MAAM,CAAC,EAAE,EAAE,CAAC;IACrB,CAAC;IAED,OAAO,MAAM,CAAC,GAAG,CACf,IAAI,eAAe,CACjB,+BAA+B,MAAM,CAAC,MAAM,WAAW,EACvD;QACE,OAAO,EAAE,EAAE,MAAM,EAAE;KACpB,CACF,CACF,CAAC;AACJ,CAAC,CAAC"}
1
+ {"version":3,"file":"validate-topo.js","sourceRoot":"","sources":["../src/validate-topo.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,9 +1,12 @@
1
1
  {
2
2
  "name": "@ontrails/core",
3
- "version": "1.0.0-beta.13",
3
+ "version": "1.0.0-beta.14",
4
4
  "type": "module",
5
5
  "exports": {
6
6
  ".": "./src/index.ts",
7
+ "./internal/topo-saves": "./src/internal/topo-saves.ts",
8
+ "./internal/topo-store": "./src/internal/topo-store.ts",
9
+ "./internal/trails-db": "./src/internal/trails-db.ts",
7
10
  "./patterns": "./src/patterns/index.ts",
8
11
  "./redaction": "./src/redaction/index.ts",
9
12
  "./package.json": "./package.json"