@cavelang/store 0.34.0 → 0.36.0

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 (73) hide show
  1. package/README.md +884 -15
  2. package/dist/src/backup.d.ts.map +1 -1
  3. package/dist/src/backup.js +143 -70
  4. package/dist/src/backup.js.map +1 -1
  5. package/dist/src/capture-claim.d.ts +4 -0
  6. package/dist/src/capture-claim.d.ts.map +1 -0
  7. package/dist/src/capture-claim.js +26 -0
  8. package/dist/src/capture-claim.js.map +1 -0
  9. package/dist/src/descriptor.d.ts +3 -0
  10. package/dist/src/descriptor.d.ts.map +1 -0
  11. package/dist/src/descriptor.js +21 -0
  12. package/dist/src/descriptor.js.map +1 -0
  13. package/dist/src/error-message.d.ts +3 -0
  14. package/dist/src/error-message.d.ts.map +1 -0
  15. package/dist/src/error-message.js +10 -0
  16. package/dist/src/error-message.js.map +1 -0
  17. package/dist/src/index.d.ts +1 -1
  18. package/dist/src/index.d.ts.map +1 -1
  19. package/dist/src/locate.d.ts +13 -1
  20. package/dist/src/locate.d.ts.map +1 -1
  21. package/dist/src/locate.js +35 -13
  22. package/dist/src/locate.js.map +1 -1
  23. package/dist/src/node-adapter.d.ts.map +1 -1
  24. package/dist/src/node-adapter.js +29 -1
  25. package/dist/src/node-adapter.js.map +1 -1
  26. package/dist/src/provenance.d.ts +4 -0
  27. package/dist/src/provenance.d.ts.map +1 -1
  28. package/dist/src/provenance.js +36 -1
  29. package/dist/src/provenance.js.map +1 -1
  30. package/dist/src/query-sql.d.ts.map +1 -1
  31. package/dist/src/query-sql.js +4 -2
  32. package/dist/src/query-sql.js.map +1 -1
  33. package/dist/src/read-snapshot.d.ts +4 -0
  34. package/dist/src/read-snapshot.d.ts.map +1 -0
  35. package/dist/src/read-snapshot.js +22 -0
  36. package/dist/src/read-snapshot.js.map +1 -0
  37. package/dist/src/record.d.ts.map +1 -1
  38. package/dist/src/record.js +102 -25
  39. package/dist/src/record.js.map +1 -1
  40. package/dist/src/resolve.d.ts.map +1 -1
  41. package/dist/src/resolve.js +42 -18
  42. package/dist/src/resolve.js.map +1 -1
  43. package/dist/src/row.d.ts.map +1 -1
  44. package/dist/src/row.js +45 -17
  45. package/dist/src/row.js.map +1 -1
  46. package/dist/src/runtime.d.ts.map +1 -1
  47. package/dist/src/runtime.js +8 -4
  48. package/dist/src/runtime.js.map +1 -1
  49. package/dist/src/schema.d.ts +1 -2
  50. package/dist/src/schema.d.ts.map +1 -1
  51. package/dist/src/schema.js +116 -15
  52. package/dist/src/schema.js.map +1 -1
  53. package/dist/src/store.d.ts +17 -5
  54. package/dist/src/store.d.ts.map +1 -1
  55. package/dist/src/store.js +451 -104
  56. package/dist/src/store.js.map +1 -1
  57. package/package.json +4 -4
  58. package/src/backup.ts +141 -65
  59. package/src/capture-claim.ts +30 -0
  60. package/src/descriptor.ts +19 -0
  61. package/src/error-message.ts +8 -0
  62. package/src/index.ts +1 -1
  63. package/src/locate.ts +45 -13
  64. package/src/node-adapter.ts +28 -1
  65. package/src/provenance.ts +33 -1
  66. package/src/query-sql.ts +4 -2
  67. package/src/read-snapshot.ts +21 -0
  68. package/src/record.ts +102 -26
  69. package/src/resolve.ts +43 -20
  70. package/src/row.ts +29 -2
  71. package/src/runtime.ts +8 -4
  72. package/src/schema.ts +117 -18
  73. package/src/store.ts +452 -125
@@ -1 +1 @@
1
- {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/backup.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAQtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIvC,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAwED,uEAAuE;AACvE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,iBAAiB,MAAM,KAAG,QAmCpE,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,aAAa,MAAM,EAAE,UAAS,YAAiB,KAAG,QA2BtF,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,aAAa,GACxB,cAAc,MAAM,EACpB,aAAa,MAAM,EACnB,UAAS,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,KACvD,QA0BF,CAAA"}
1
+ {"version":3,"file":"backup.d.ts","sourceRoot":"","sources":["../../src/backup.ts"],"names":[],"mappings":"AAAA,sEAAsE;AAUtE,OAAO,KAAK,EAAE,KAAK,EAAE,MAAM,YAAY,CAAA;AAIvC,MAAM,MAAM,QAAQ,GAAG;IACrB,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,MAAM,CAAA;IACtB,QAAQ,CAAC,MAAM,EAAE,MAAM,CAAA;IACvB,QAAQ,CAAC,aAAa,EAAE,MAAM,CAAA;IAC9B,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAA;IACrB,QAAQ,CAAC,KAAK,EAAE,IAAI,GAAG,MAAM,CAAA;CAC9B,CAAA;AAED,MAAM,MAAM,YAAY,GAAG;IACzB,sFAAsF;IACtF,QAAQ,CAAC,KAAK,CAAC,EAAE,OAAO,CAAA;CACzB,CAAA;AAiID,uEAAuE;AACvE,eAAO,MAAM,YAAY,GAAI,MAAM,MAAM,EAAE,iBAAiB,MAAM,KAAG,QAmDpE,CAAA;AAED,+EAA+E;AAC/E,eAAO,MAAM,MAAM,GAAI,OAAO,KAAK,EAAE,aAAa,MAAM,EAAE,UAAS,YAAiB,KAAG,QA4BtF,CAAA;AAED,2FAA2F;AAC3F,eAAO,MAAM,aAAa,GACxB,cAAc,MAAM,EACpB,aAAa,MAAM,EACnB,UAAS,YAAY,GAAG;IAAE,cAAc,CAAC,EAAE,MAAM,CAAA;CAAO,KACvD,QA0BF,CAAA"}
@@ -1,86 +1,151 @@
1
1
  /** Exact SQLite snapshot backup, verification, and atomic restore. */
2
2
  import { createHash, randomBytes } from 'node:crypto';
3
- import { closeSync, copyFileSync, existsSync, fsyncSync, linkSync, openSync, readSync, realpathSync, renameSync, rmSync, statSync } from 'node:fs';
3
+ import { copyFileSync, existsSync, fsyncSync, linkSync, openSync, readSync, realpathSync, renameSync, rmSync, statSync } from 'node:fs';
4
4
  import { basename, dirname, resolve } from 'node:path';
5
+ import { withDescriptor } from "./descriptor.js";
6
+ import { errorMessage } from "./error-message.js";
5
7
  import { nodeSqliteAdapter } from "./node-adapter.js";
6
8
  import * as Schema from "./schema.js";
7
9
  const temporaryPath = (destination) => {
8
10
  const target = resolve(destination);
9
11
  return resolve(dirname(target), `.${basename(target)}.${process.pid}.${randomBytes(6).toString('hex')}.tmp`);
10
12
  };
11
- const hashFile = (path) => {
12
- const hash = createHash('sha256');
13
- const fd = openSync(path, 'r');
14
- const buffer = Buffer.allocUnsafe(1024 * 1024);
13
+ class PublishedSnapshotError extends Error {
14
+ }
15
+ /** Retain the operation failure and identify a temporary file whose removal failed. */
16
+ const failWithTemporaryCleanup = (temporary, operation, error) => {
15
17
  try {
16
- for (;;) {
17
- const size = readSync(fd, buffer, 0, buffer.length, null);
18
- if (size === 0)
19
- break;
20
- hash.update(buffer.subarray(0, size));
21
- }
18
+ rmSync(temporary, { force: true });
22
19
  }
23
- finally {
24
- closeSync(fd);
20
+ catch (cleanupError) {
21
+ throw new AggregateError([error, cleanupError], `CAVE ${operation} failed: ${errorMessage(error)}; temporary cleanup also failed: ${temporary}: ${errorMessage(cleanupError)}`, { cause: error });
25
22
  }
26
- return hash.digest('hex');
23
+ throw error;
27
24
  };
28
- const syncFile = (path) => {
29
- const fd = openSync(path, 'r');
30
- try {
31
- try {
32
- fsyncSync(fd);
33
- }
34
- catch (error) {
35
- // Windows can reject a redundant fsync while SQLite's completed
36
- // VACUUM statement still owns the snapshot handle. Verification below
37
- // must still reopen and validate the complete database before publish.
38
- if (process.platform !== 'win32' ||
39
- !(error instanceof Error) || !('code' in error) || error.code !== 'EPERM')
40
- throw error;
41
- }
25
+ const withFile = (path, operation, body) => withDescriptor(openSync(path, 'r'), `snapshot ${operation}`, body);
26
+ const hashFile = (path) => withFile(path, 'hash', fd => {
27
+ const hash = createHash('sha256');
28
+ const buffer = Buffer.allocUnsafe(1024 * 1024);
29
+ for (;;) {
30
+ const size = readSync(fd, buffer, 0, buffer.length, null);
31
+ if (size === 0)
32
+ break;
33
+ hash.update(buffer.subarray(0, size));
42
34
  }
43
- finally {
44
- closeSync(fd);
35
+ return hash.digest('hex');
36
+ });
37
+ const syncFile = (path) => withFile(path, 'sync', fd => {
38
+ try {
39
+ fsyncSync(fd);
45
40
  }
46
- };
41
+ catch (error) {
42
+ // Windows can reject a redundant fsync while SQLite's completed
43
+ // VACUUM statement still owns the snapshot handle. Verification below
44
+ // must still reopen and validate the complete database before publish.
45
+ if (process.platform !== 'win32' ||
46
+ !(error instanceof Error) || !('code' in error) || error.code !== 'EPERM')
47
+ throw error;
48
+ }
49
+ });
50
+ const errorCode = (error) => error instanceof Error && 'code' in error ? error.code : undefined;
47
51
  const syncDirectory = (path) => {
48
52
  let fd;
49
53
  try {
50
54
  fd = openSync(dirname(resolve(path)), 'r');
51
- fsyncSync(fd);
52
- }
53
- catch {
54
- // Some platforms do not permit opening/fsyncing a directory. The fully
55
- // written database itself is still synced before publication.
56
55
  }
57
- finally {
58
- if (fd !== undefined)
59
- closeSync(fd);
56
+ catch (error) {
57
+ // Windows may reject opening a directory through the ordinary file API.
58
+ const code = errorCode(error);
59
+ if (process.platform === 'win32' && (code === 'EPERM' || code === 'EACCES' || code === 'EISDIR'))
60
+ return;
61
+ throw error;
60
62
  }
63
+ withDescriptor(fd, 'snapshot directory sync', descriptor => {
64
+ try {
65
+ fsyncSync(descriptor);
66
+ }
67
+ catch (error) {
68
+ const code = errorCode(error);
69
+ // Unsupported directory synchronization is a portability limitation;
70
+ // I/O, space, interruption, and unexpected errors must remain visible.
71
+ if (code === 'EINVAL' || code === 'ENOTSUP' || code === 'ENOSYS' ||
72
+ (process.platform === 'win32' && code === 'EPERM') ||
73
+ (process.platform === 'aix' && code === 'EBADF'))
74
+ return;
75
+ throw error;
76
+ }
77
+ });
61
78
  };
62
- const publish = (temporary, destination, force) => {
79
+ const publish = (temporary, destination, force, operation) => {
63
80
  const target = resolve(destination);
81
+ requireStoppedDestination(target, operation);
64
82
  if (force) {
65
83
  renameSync(temporary, target);
84
+ }
85
+ else {
86
+ // A hard link publishes the fully written inode atomically and fails if a
87
+ // racing process created the destination after the initial existence check.
88
+ linkSync(temporary, target);
89
+ }
90
+ try {
91
+ if (!force)
92
+ rmSync(temporary);
66
93
  syncDirectory(target);
67
- return;
68
94
  }
69
- // A hard link publishes the fully written inode atomically and fails if a
70
- // racing process created the destination after the initial existence check.
71
- linkSync(temporary, target);
72
- rmSync(temporary);
73
- syncDirectory(target);
95
+ catch (error) {
96
+ throw new PublishedSnapshotError(`CAVE ${operation}: snapshot published to ${target}, but post-publication cleanup or directory sync failed: ${errorMessage(error)}`, { cause: error });
97
+ }
98
+ };
99
+ const canonicalPath = (path) => {
100
+ const absolute = resolve(path);
101
+ if (existsSync(absolute))
102
+ return realpathSync(absolute);
103
+ const parent = dirname(absolute);
104
+ return existsSync(parent) ? resolve(realpathSync(parent), basename(absolute)) : absolute;
105
+ };
106
+ const samePath = (left, right) => {
107
+ if (existsSync(left) && existsSync(right)) {
108
+ const a = statSync(left);
109
+ const b = statSync(right);
110
+ if (a.dev === b.dev && a.ino === b.ino)
111
+ return true;
112
+ }
113
+ return canonicalPath(left) === canonicalPath(right);
114
+ };
115
+ const sourceFile = (source, target) => [source, canonicalPath(source)].some(base => ['', '-wal', '-shm', '-journal'].some(suffix => samePath(`${base}${suffix}`, target)));
116
+ const requireStoppedDestination = (target, operation) => {
117
+ for (const base of new Set([target, canonicalPath(target)])) {
118
+ for (const suffix of ['-wal', '-shm', '-journal']) {
119
+ if (existsSync(`${base}${suffix}`)) {
120
+ throw new Error(`CAVE ${operation}: refusing while ${base}${suffix} exists; stop all users and remove stale sidecars`);
121
+ }
122
+ }
123
+ }
124
+ };
125
+ const expectedDigest = (value) => {
126
+ if (value === undefined)
127
+ return undefined;
128
+ if (typeof value !== 'string' || value.length !== 64 || !/^[0-9a-f]{64}$/i.test(value)) {
129
+ throw new TypeError('CAVE backup: expected SHA-256 must be 64 hexadecimal characters');
130
+ }
131
+ return value.toLowerCase();
74
132
  };
75
- const samePath = (left, right) => existsSync(left) && existsSync(right) ?
76
- realpathSync(left) === realpathSync(right) :
77
- resolve(left) === resolve(right);
78
133
  /** Validate a standalone snapshot without migrating or mutating it. */
79
134
  export const verifyBackup = (path, expectedSha256) => {
135
+ const expected = expectedDigest(expectedSha256);
80
136
  const target = resolve(path);
81
137
  if (!existsSync(target)) {
82
138
  throw new Error(`CAVE backup: ${target}: no such file`);
83
139
  }
140
+ // Metadata and the checksum must describe the same standalone file. Opening
141
+ // a live WAL database would read committed rows absent from the hashed bytes.
142
+ for (const base of new Set([target, canonicalPath(target)])) {
143
+ for (const suffix of ['-wal', '-shm', '-journal']) {
144
+ if (existsSync(`${base}${suffix}`)) {
145
+ throw new Error(`CAVE backup: ${base}${suffix} exists; verification requires a standalone snapshot, create one with backup()`);
146
+ }
147
+ }
148
+ }
84
149
  const db = nodeSqliteAdapter.open(target, { readOnly: true });
85
150
  let schemaVersion = 0;
86
151
  let rows = 0;
@@ -95,37 +160,46 @@ export const verifyBackup = (path, expectedSha256) => {
95
160
  throw new Error(`foreign_key_check failed for ${foreignKeys.length} row(s)`);
96
161
  }
97
162
  schemaVersion = db.prepare('PRAGMA user_version').get().user_version;
98
- if (schemaVersion !== Schema.currentVersion) {
99
- throw new Error(`schema version ${schemaVersion} is not the exact-backup format ${Schema.currentVersion}`);
163
+ if (schemaVersion < 1 || schemaVersion > Schema.currentVersion) {
164
+ throw new Error(`schema version ${schemaVersion} is not a supported exact-backup format (1..${Schema.currentVersion})`);
100
165
  }
101
166
  Schema.validate(db, schemaVersion);
102
167
  const summary = db.prepare('SELECT COUNT(*) AS rows, MAX(tx) AS max_tx FROM cave_claim').get();
103
168
  rows = summary.rows;
104
169
  maxTx = summary.max_tx;
105
170
  }
106
- finally {
107
- db.close();
171
+ catch (error) {
172
+ try {
173
+ db.close();
174
+ }
175
+ catch (closeError) {
176
+ throw new AggregateError([error, closeError], `CAVE backup verification failed: ${errorMessage(error)}; database close also failed: ${errorMessage(closeError)}`, { cause: error });
177
+ }
178
+ throw error;
108
179
  }
180
+ db.close();
109
181
  const sha256 = hashFile(target);
110
- if (expectedSha256 !== undefined && sha256 !== expectedSha256.toLowerCase()) {
111
- throw new Error(`CAVE backup: SHA-256 mismatch: expected ${expectedSha256.toLowerCase()}, got ${sha256}`);
182
+ if (expected !== undefined && sha256 !== expected) {
183
+ throw new Error(`CAVE backup: SHA-256 mismatch: expected ${expected}, got ${sha256}`);
112
184
  }
113
185
  return { path: target, bytes: statSync(target).size, sha256, schemaVersion, rows, maxTx };
114
186
  };
115
187
  /** Create and atomically publish a verified, point-in-time SQLite snapshot. */
116
188
  export const backup = (store, destination, options = {}) => {
189
+ const force = options.force === true;
117
190
  const target = resolve(destination);
118
191
  const capability = store.adapter.capabilities.backup;
119
192
  if (capability === undefined) {
120
193
  throw new Error(`CAVE backup: SQLite adapter ${JSON.stringify(store.adapter.name)} does not support exact snapshots`);
121
194
  }
122
195
  const source = capability.location(store.db);
123
- if (source !== null && samePath(source, target)) {
196
+ if (source !== null && sourceFile(source, target)) {
124
197
  throw new Error('CAVE backup: destination is the source database');
125
198
  }
126
- if (existsSync(target) && options.force !== true) {
199
+ if (existsSync(target) && !force) {
127
200
  throw new Error(`CAVE backup: ${target} already exists; pass force to replace it`);
128
201
  }
202
+ requireStoppedDestination(target, 'backup');
129
203
  if (capability.inTransaction(store.db)) {
130
204
  throw new Error('CAVE backup: cannot snapshot inside an open transaction');
131
205
  }
@@ -134,41 +208,40 @@ export const backup = (store, destination, options = {}) => {
134
208
  capability.write(store.db, temporary);
135
209
  syncFile(temporary);
136
210
  const checked = verifyBackup(temporary);
137
- publish(temporary, target, options.force === true);
211
+ publish(temporary, target, force, 'backup');
138
212
  return { ...checked, path: target };
139
213
  }
140
214
  catch (error) {
141
- rmSync(temporary, { force: true });
142
- throw error;
215
+ return failWithTemporaryCleanup(temporary, 'backup', error);
143
216
  }
144
217
  };
145
218
  /** Verify a snapshot, then atomically restore its exact bytes to a stopped destination. */
146
219
  export const restoreBackup = (snapshotPath, destination, options = {}) => {
220
+ const force = options.force === true;
221
+ const expectedSha256 = expectedDigest(options.expectedSha256);
147
222
  const source = resolve(snapshotPath);
148
223
  const target = resolve(destination);
149
224
  if (samePath(source, target)) {
150
225
  throw new Error('CAVE restore: snapshot and destination are the same file');
151
226
  }
152
- if (existsSync(target) && options.force !== true) {
153
- throw new Error(`CAVE restore: ${target} already exists; pass force to replace it`);
227
+ if (sourceFile(source, target)) {
228
+ throw new Error('CAVE restore: destination is a sidecar of the source snapshot');
154
229
  }
155
- for (const suffix of ['-wal', '-shm', '-journal']) {
156
- if (existsSync(`${target}${suffix}`)) {
157
- throw new Error(`CAVE restore: refusing while ${target}${suffix} exists; stop all users and remove stale sidecars`);
158
- }
230
+ if (existsSync(target) && !force) {
231
+ throw new Error(`CAVE restore: ${target} already exists; pass force to replace it`);
159
232
  }
160
- const checked = verifyBackup(source, options.expectedSha256);
233
+ requireStoppedDestination(target, 'restore');
234
+ const checked = verifyBackup(source, expectedSha256);
161
235
  const temporary = temporaryPath(target);
162
236
  try {
163
237
  copyFileSync(source, temporary);
164
238
  syncFile(temporary);
165
239
  const copied = verifyBackup(temporary, checked.sha256);
166
- publish(temporary, target, options.force === true);
240
+ publish(temporary, target, force, 'restore');
167
241
  return { ...copied, path: target };
168
242
  }
169
243
  catch (error) {
170
- rmSync(temporary, { force: true });
171
- throw error;
244
+ return failWithTemporaryCleanup(temporary, 'restore', error);
172
245
  }
173
246
  };
174
247
  //# sourceMappingURL=backup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/backup.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"backup.js","sourceRoot":"","sources":["../../src/backup.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,4 @@
1
+ import type { Claim } from '@cavelang/core';
2
+ /** Own declared fields before columns, emitted text and identity are derived. */
3
+ export declare const captureClaim: (input: Claim.t) => Claim.t;
4
+ //# sourceMappingURL=capture-claim.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-claim.d.ts","sourceRoot":"","sources":["../../src/capture-claim.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,KAAK,EAAS,MAAM,gBAAgB,CAAA;AAelD,iFAAiF;AACjF,eAAO,MAAM,YAAY,GAAI,OAAO,KAAK,CAAC,CAAC,KAAG,KAAK,CAAC,CAanD,CAAA"}
@@ -0,0 +1,26 @@
1
+ const term = ({ kind, text }) => ({ kind, text });
2
+ const value = ({ raw, kind, approx, num, unit, from, to }) => ({ raw, kind, approx, num, unit, from, to });
3
+ const payload = (input) => {
4
+ switch (input.kind) {
5
+ case 'none': return { kind: 'none' };
6
+ case 'relation': return { kind: 'relation', object: term(input.object) };
7
+ case 'attribute': return { kind: 'attribute', attribute: input.attribute, value: value(input.value) };
8
+ case 'metric': return { kind: 'metric', value: value(input.value) };
9
+ }
10
+ };
11
+ /** Own declared fields before columns, emitted text and identity are derived. */
12
+ export const captureClaim = (input) => {
13
+ const { subject, verb, negated, payload: body, contexts, tags, conf, importance, delta, sigmaLevel, comment, raw } = input;
14
+ for (const [name, collection] of [['contexts', contexts], ['tags', tags]]) {
15
+ if (!Array.isArray(collection))
16
+ throw new TypeError(`claim ${name} must be an array`);
17
+ }
18
+ return {
19
+ subject: term(subject), verb, negated, payload: payload(body),
20
+ contexts: Array.from(contexts),
21
+ tags: Array.from(tags, ({ key, value }) => ({ key, value })),
22
+ conf, importance, delta: delta === undefined ? undefined : value(delta),
23
+ sigmaLevel, comment, raw,
24
+ };
25
+ };
26
+ //# sourceMappingURL=capture-claim.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"capture-claim.js","sourceRoot":"","sources":["../../src/capture-claim.ts"],"names":[],"mappings":"AAEA,MAAM,IAAI,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,EAAc,EAAc,EAAE,CAAC,CAAC,EAAE,IAAI,EAAE,IAAI,EAAE,CAAC,CAAA;AACzE,MAAM,KAAK,GAAG,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAW,EAAW,EAAE,CAC7E,CAAC,EAAE,GAAG,EAAE,IAAI,EAAE,MAAM,EAAE,GAAG,EAAE,IAAI,EAAE,IAAI,EAAE,EAAE,EAAE,CAAC,CAAA;AAE9C,MAAM,OAAO,GAAG,CAAC,KAAoB,EAAiB,EAAE;IACtD,QAAQ,KAAK,CAAC,IAAI,EAAE,CAAC;QACnB,KAAK,MAAM,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,MAAM,EAAE,CAAA;QACpC,KAAK,UAAU,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,UAAU,EAAE,MAAM,EAAE,IAAI,CAAC,KAAK,CAAC,MAAM,CAAC,EAAE,CAAA;QACxE,KAAK,WAAW,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,WAAW,EAAE,SAAS,EAAE,KAAK,CAAC,SAAS,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAA;QACrG,KAAK,QAAQ,CAAC,CAAC,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,KAAK,CAAC,KAAK,CAAC,KAAK,CAAC,EAAE,CAAA;IACrE,CAAC;AACH,CAAC,CAAA;AAED,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAW,EAAE;IACtD,MAAM,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,IAAI,EAAE,UAAU,EAC7E,KAAK,EAAE,UAAU,EAAE,OAAO,EAAE,GAAG,EAAE,GAAG,KAAK,CAAA;IAC3C,KAAK,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,IAAI,CAAC,CAAC,UAAU,EAAE,QAAQ,CAAC,EAAE,CAAC,MAAM,EAAE,IAAI,CAAC,CAAU,EAAE,CAAC;QACnF,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC;YAAE,MAAM,IAAI,SAAS,CAAC,SAAS,IAAI,mBAAmB,CAAC,CAAA;IACvF,CAAC;IACD,OAAO;QACL,OAAO,EAAE,IAAI,CAAC,OAAO,CAAC,EAAE,IAAI,EAAE,OAAO,EAAE,OAAO,EAAE,OAAO,CAAC,IAAI,CAAC;QAC7D,QAAQ,EAAE,KAAK,CAAC,IAAI,CAAC,QAAQ,CAAC;QAC9B,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,KAAK,EAAE,CAAC,CAAC;QAC5D,IAAI,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,KAAK,SAAS,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAC,KAAK,CAAC,KAAK,CAAC;QACvE,UAAU,EAAE,OAAO,EAAE,GAAG;KACzB,CAAA;AACH,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Close once without allowing cleanup to replace the operation's error. */
2
+ export declare const withDescriptor: <T>(fd: number, operation: string, body: (fd: number) => T) => T;
3
+ //# sourceMappingURL=descriptor.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.d.ts","sourceRoot":"","sources":["../../src/descriptor.ts"],"names":[],"mappings":"AAGA,4EAA4E;AAC5E,eAAO,MAAM,cAAc,GAAI,CAAC,EAAE,IAAI,MAAM,EAAE,WAAW,MAAM,EAAE,MAAM,CAAC,EAAE,EAAE,MAAM,KAAK,CAAC,KAAG,CAc1F,CAAA"}
@@ -0,0 +1,21 @@
1
+ import { closeSync } from 'node:fs';
2
+ import { errorMessage } from "./error-message.js";
3
+ /** Close once without allowing cleanup to replace the operation's error. */
4
+ export const withDescriptor = (fd, operation, body) => {
5
+ let result;
6
+ try {
7
+ result = body(fd);
8
+ }
9
+ catch (error) {
10
+ try {
11
+ closeSync(fd);
12
+ }
13
+ catch (closeError) {
14
+ throw new AggregateError([error, closeError], `CAVE ${operation} failed: ${errorMessage(error)}; descriptor close also failed: ${errorMessage(closeError)}`, { cause: error });
15
+ }
16
+ throw error;
17
+ }
18
+ closeSync(fd);
19
+ return result;
20
+ };
21
+ //# sourceMappingURL=descriptor.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"descriptor.js","sourceRoot":"","sources":["../../src/descriptor.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,SAAS,CAAA;AACnC,OAAO,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAEjD,4EAA4E;AAC5E,MAAM,CAAC,MAAM,cAAc,GAAG,CAAI,EAAU,EAAE,SAAiB,EAAE,IAAuB,EAAK,EAAE;IAC7F,IAAI,MAAS,CAAA;IACb,IAAI,CAAC;QACH,MAAM,GAAG,IAAI,CAAC,EAAE,CAAC,CAAA;IACnB,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,CAAC;YAAC,SAAS,CAAC,EAAE,CAAC,CAAA;QAAC,CAAC;QAAC,OAAO,UAAU,EAAE,CAAC;YACxC,MAAM,IAAI,cAAc,CAAC,CAAC,KAAK,EAAE,UAAU,CAAC,EAC1C,QAAQ,SAAS,YAAY,YAAY,CAAC,KAAK,CAAC,mCAAmC,YAAY,CAAC,UAAU,CAAC,EAAE,EAC7G,EAAE,KAAK,EAAE,KAAK,EAAE,CAAC,CAAA;QACrB,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;IACD,SAAS,CAAC,EAAE,CAAC,CAAA;IACb,OAAO,MAAM,CAAA;AACf,CAAC,CAAA"}
@@ -0,0 +1,3 @@
1
+ /** Preserve useful diagnostics when combining operation and cleanup failures. */
2
+ export declare const errorMessage: (value: unknown) => string;
3
+ //# sourceMappingURL=error-message.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-message.d.ts","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,eAAO,MAAM,YAAY,GAAI,OAAO,OAAO,KAAG,MAM7C,CAAA"}
@@ -0,0 +1,10 @@
1
+ /** Preserve useful diagnostics when combining operation and cleanup failures. */
2
+ export const errorMessage = (value) => {
3
+ try {
4
+ return value instanceof Error ? String(value.message) : String(value);
5
+ }
6
+ catch {
7
+ return '[unprintable thrown value]';
8
+ }
9
+ };
10
+ //# sourceMappingURL=error-message.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"error-message.js","sourceRoot":"","sources":["../../src/error-message.ts"],"names":[],"mappings":"AAAA,iFAAiF;AACjF,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,KAAc,EAAU,EAAE;IACrD,IAAI,CAAC;QACH,OAAO,KAAK,YAAY,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,CAAA;IACvE,CAAC;IAAC,MAAM,CAAC;QACP,OAAO,4BAA4B,CAAA;IACrC,CAAC;AACH,CAAC,CAAA"}
@@ -22,7 +22,7 @@ export { backup, restoreBackup, verifyBackup } from './backup.ts';
22
22
  export type { Snapshot as BackupSnapshot, WriteOptions as BackupWriteOptions } from './backup.ts';
23
23
  export { open } from './open.ts';
24
24
  export { LocateError, isStoreFile, kindOf, openAt, openText } from './locate.ts';
25
- export type { Intent as OpenIntent, Kind as StoreKind, LocateOptions } from './locate.ts';
25
+ export type { Assemble, Intent as OpenIntent, Kind as StoreKind, LocateOptions } from './locate.ts';
26
26
  export type { Store } from './open.ts';
27
27
  export { defaultDbPath } from './store.ts';
28
28
  export type { Access as OpenAccess, AppendOptions, ForwardFact, IngestResult, ReverseFact, TraverseOptions } from './store.ts';
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,QAAQ,IAAI,cAAc,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChF,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACzF,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC9H,YAAY,EAAE,SAAS,IAAI,mBAAmB,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACxH,YAAY,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;GAYG;AAEH,OAAO,KAAK,OAAO,MAAM,cAAc,CAAA;AACvC,OAAO,KAAK,GAAG,MAAM,UAAU,CAAA;AAC/B,OAAO,KAAK,QAAQ,MAAM,gBAAgB,CAAA;AAC1C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,UAAU,MAAM,iBAAiB,CAAA;AAC7C,OAAO,KAAK,MAAM,MAAM,aAAa,CAAA;AACrC,OAAO,KAAK,WAAW,MAAM,kBAAkB,CAAA;AAC/C,OAAO,EAAE,MAAM,EAAE,aAAa,EAAE,YAAY,EAAE,MAAM,aAAa,CAAA;AACjE,YAAY,EAAE,QAAQ,IAAI,cAAc,EAAE,YAAY,IAAI,kBAAkB,EAAE,MAAM,aAAa,CAAA;AACjG,OAAO,EAAE,IAAI,EAAE,MAAM,WAAW,CAAA;AAChC,OAAO,EAAE,WAAW,EAAE,WAAW,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,aAAa,CAAA;AAChF,YAAY,EAAE,QAAQ,EAAE,MAAM,IAAI,UAAU,EAAE,IAAI,IAAI,SAAS,EAAE,aAAa,EAAE,MAAM,aAAa,CAAA;AACnG,YAAY,EAAE,KAAK,EAAE,MAAM,WAAW,CAAA;AACtC,OAAO,EAAE,aAAa,EAAE,MAAM,YAAY,CAAA;AAC1C,YAAY,EAAE,MAAM,IAAI,UAAU,EAAE,aAAa,EAAE,WAAW,EAAE,YAAY,EAAE,WAAW,EAAE,eAAe,EAAE,MAAM,YAAY,CAAA;AAC9H,YAAY,EAAE,SAAS,IAAI,mBAAmB,EAAE,KAAK,IAAI,eAAe,EAAE,CAAC,IAAI,gBAAgB,EAAE,MAAM,iBAAiB,CAAA;AACxH,YAAY,EAAE,KAAK,IAAI,gBAAgB,EAAE,MAAM,kBAAkB,CAAA"}
@@ -27,8 +27,18 @@ export declare const kindOf: (path: string) => Kind;
27
27
  * older schema, as `cave add` always has.
28
28
  */
29
29
  export type Intent = 'read' | 'scratch' | 'write';
30
+ /**
31
+ * Completes a text store after its file is replayed (spec §23.4): the
32
+ * connector follows the `source/<name>` declarations the file carries,
33
+ * resolving their paths against the file's directory (`root` is the file's
34
+ * absolute path). The store package knows nothing about sources; surfaces
35
+ * pass `@cavelang/connect`'s `assemble`. A thrown `LocateError` fails the
36
+ * load like unparsable text.
37
+ */
38
+ export type Assemble = (store: Store, root: string) => void;
30
39
  export type LocateOptions = Omit<OpenOptions, 'access'> & {
31
40
  readonly intent?: Intent;
41
+ readonly assemble?: Assemble;
32
42
  };
33
43
  /**
34
44
  * A `--db` path that cannot be opened as asked: nothing there for a read,
@@ -49,7 +59,9 @@ export declare const textStoreReadOnlyMessage: (path: string) => string;
49
59
  * line that fails to parse fails the load: the file *is* the database,
50
60
  * and a store silently missing rows is worse than an error.
51
61
  */
52
- export declare const openText: (path: string, options?: Omit<OpenOptions, "access">) => Store;
62
+ export declare const openText: (path: string, options?: Omit<OpenOptions, "access"> & {
63
+ readonly assemble?: Assemble;
64
+ }) => Store;
53
65
  /**
54
66
  * Opens the store a `--db` path names, by content:
55
67
  *
@@ -1 +1 @@
1
- {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAKH,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGtD,gCAAgC;AAChC,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAK3D,6GAA6G;AAC7G,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,OAQ1C,CAAA;AAED,kDAAkD;AAClD,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,IAQrC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAEjD,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;CACzB,CAAA;AAiBD;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAkB,IAAI,iBAAgB;CACvC;AAED,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAC0C,CAAA;AAE7F,oDAAoD;AACpD,eAAO,MAAM,wBAAwB,GAAI,MAAM,MAAM,KAAG,MAEO,CAAA;AAE/D;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,UAAS,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAM,KAAG,KAgBlF,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,UAAS,aAAkB,KAAG,KAkBlE,CAAA"}
1
+ {"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAQH,OAAO,KAAK,EAAE,WAAW,EAAE,KAAK,EAAE,MAAM,cAAc,CAAA;AAGtD,gCAAgC;AAChC,MAAM,MAAM,IAAI,GAAG,QAAQ,GAAG,QAAQ,GAAG,MAAM,GAAG,SAAS,CAAA;AAK3D,6GAA6G;AAC7G,eAAO,MAAM,WAAW,GAAI,MAAM,MAAM,KAAG,OAUvC,CAAA;AAEJ,kDAAkD;AAClD,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,KAAG,IAQrC,CAAA;AAED;;;;;;;;;;GAUG;AACH,MAAM,MAAM,MAAM,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,CAAA;AAEjD;;;;;;;GAOG;AACH,MAAM,MAAM,QAAQ,GAAG,CAAC,KAAK,EAAE,KAAK,EAAE,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;AAE3D,MAAM,MAAM,aAAa,GAAG,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IACxD,QAAQ,CAAC,MAAM,CAAC,EAAE,MAAM,CAAA;IACxB,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAC7B,CAAA;AAiBD;;;;GAIG;AACH,qBAAa,WAAY,SAAQ,KAAK;IACpC,SAAkB,IAAI,iBAAgB;CACvC;AAED,gEAAgE;AAChE,eAAO,MAAM,mBAAmB,GAAI,MAAM,MAAM,KAAG,MAC0C,CAAA;AAE7F,oDAAoD;AACpD,eAAO,MAAM,wBAAwB,GAAI,MAAM,MAAM,KAAG,MAEO,CAAA;AAE/D;;;;;;GAMG;AACH,eAAO,MAAM,QAAQ,GAAI,MAAM,MAAM,EAAE,UAAS,IAAI,CAAC,WAAW,EAAE,QAAQ,CAAC,GAAG;IAAE,QAAQ,CAAC,QAAQ,CAAC,EAAE,QAAQ,CAAA;CAAO,KAAG,KA2BrH,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,UAAS,aAAkB,KAAG,KAuBlE,CAAA"}
@@ -8,22 +8,26 @@
8
8
  * in-memory store first. Detection is by content, never by extension — a
9
9
  * store named `k.cave` and a text file named `notes.txt` both work.
10
10
  */
11
- import { closeSync, existsSync, openSync, readFileSync, readSync } from 'node:fs';
11
+ import { existsSync, openSync, readFileSync, readSync } from 'node:fs';
12
+ import { resolve } from 'node:path';
13
+ import { withDescriptor } from "./descriptor.js";
14
+ import { errorMessage } from "./error-message.js";
12
15
  import { nodeSqliteAdapter } from "./node-adapter.js";
13
16
  import { openWith } from "./runtime.js";
14
17
  /** SQLite database files begin with this NUL-terminated 16-byte header. */
15
18
  const sqliteHeader = 'SQLite format 3\u0000';
16
19
  /** @returns `true` when the file starts with the SQLite header — a store file rather than canonical text. */
17
- export const isStoreFile = (path) => {
18
- const fd = openSync(path, 'r');
19
- try {
20
- const head = Buffer.alloc(16);
21
- return readSync(fd, head, 0, 16, 0) === 16 && head.toString('latin1') === sqliteHeader;
22
- }
23
- finally {
24
- closeSync(fd);
20
+ export const isStoreFile = (path) => withDescriptor(openSync(path, 'r'), 'store-file detection', fd => {
21
+ const head = Buffer.alloc(16);
22
+ let offset = 0;
23
+ while (offset < head.length) {
24
+ const bytes = readSync(fd, head, offset, head.length - offset, offset);
25
+ if (bytes === 0)
26
+ return false;
27
+ offset += bytes;
25
28
  }
26
- };
29
+ return head.toString('latin1') === sqliteHeader;
30
+ });
27
31
  /** Classifies a store path by what is on disk. */
28
32
  export const kindOf = (path) => {
29
33
  if (path === ':memory:') {
@@ -68,7 +72,14 @@ export const textStoreReadOnlyMessage = (path) => `${path} is CAVE text, not a d
68
72
  * and a store silently missing rows is worse than an error.
69
73
  */
70
74
  export const openText = (path, options = {}) => {
71
- const text = readFileSync(path, 'utf8');
75
+ const bytes = readFileSync(path);
76
+ let text;
77
+ try {
78
+ text = new TextDecoder('utf-8', { fatal: true, ignoreBOM: true }).decode(bytes);
79
+ }
80
+ catch (cause) {
81
+ throw new LocateError(`${path}: invalid UTF-8 text store`, { cause });
82
+ }
72
83
  // A fresh in-memory store is always created and initialized: an `access`
73
84
  // mode is meaningless here and must not reach the open.
74
85
  const store = openWith(nodeSqliteAdapter, ':memory:', { registry: options.registry });
@@ -78,9 +89,15 @@ export const openText = (path, options = {}) => {
78
89
  const detail = result.problems.map(problem => ` ${path} line ${problem.line}: ${problem.message}`);
79
90
  throw new LocateError(`cannot load ${path} as a store — fix these lines (cave parse ${path}):\n${detail.join('\n')}`);
80
91
  }
92
+ options.assemble?.(store, resolve(path));
81
93
  }
82
94
  catch (error) {
83
- store.close();
95
+ try {
96
+ store.close();
97
+ }
98
+ catch (closeError) {
99
+ throw new AggregateError([error, closeError], `CAVE text-store load failed: ${errorMessage(error)}; store cleanup also failed: ${errorMessage(closeError)}`, { cause: error });
100
+ }
84
101
  throw error;
85
102
  }
86
103
  return store;
@@ -99,7 +116,12 @@ export const openText = (path, options = {}) => {
99
116
  * never leaves an empty database behind.
100
117
  */
101
118
  export const openAt = (path, options = {}) => {
102
- const { intent = 'write', ...openOptions } = options;
119
+ const { intent = 'write' } = options;
120
+ if (intent !== 'read' && intent !== 'scratch' && intent !== 'write') {
121
+ throw new TypeError('store intent must be read, scratch or write');
122
+ }
123
+ const { registry, assemble } = options;
124
+ const openOptions = { registry, assemble };
103
125
  switch (kindOf(path)) {
104
126
  case 'memory':
105
127
  return openWith(nodeSqliteAdapter, path, openOptions);
@@ -1 +1 @@
1
- {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;AAEH,OAAO,EAAE,SAAS,EAAE,UAAU,EAAE,QAAQ,EAAE,YAAY,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAA;AACjF,OAAO,EAAE,iBAAiB,EAAE,MAAM,mBAAmB,CAAA;AACrD,OAAO,EAAE,QAAQ,EAAE,MAAM,cAAc,CAAA;AAOvC,2EAA2E;AAC3E,MAAM,YAAY,GAAG,uBAAuB,CAAA;AAE5C,6GAA6G;AAC7G,MAAM,CAAC,MAAM,WAAW,GAAG,CAAC,IAAY,EAAW,EAAE;IACnD,MAAM,EAAE,GAAG,QAAQ,CAAC,IAAI,EAAE,GAAG,CAAC,CAAA;IAC9B,IAAI,CAAC;QACH,MAAM,IAAI,GAAG,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;QAC7B,OAAO,QAAQ,CAAC,EAAE,EAAE,IAAI,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,KAAK,EAAE,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,KAAK,YAAY,CAAA;IACxF,CAAC;YAAS,CAAC;QACT,SAAS,CAAC,EAAE,CAAC,CAAA;IACf,CAAC;AACH,CAAC,CAAA;AAED,kDAAkD;AAClD,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAQ,EAAE;IAC3C,IAAI,IAAI,KAAK,UAAU,EAAE,CAAC;QACxB,OAAO,QAAQ,CAAA;IACjB,CAAC;IACD,IAAI,CAAC,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC;QACtB,OAAO,SAAS,CAAA;IAClB,CAAC;IACD,OAAO,WAAW,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,CAAC,CAAC,MAAM,CAAA;AAC9C,CAAC,CAAA;AAmBD,MAAM,QAAQ,GAAG,CAAC,MAAc,EAAU,EAAE,CAC1C,MAAM,KAAK,MAAM,CAAC,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC,MAAM,KAAK,SAAS,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,SAAS,CAAA;AAEnF,sGAAsG;AACtG,MAAM,UAAU,GAAG,CAAC,IAAY,EAAE,MAAc,EAAE,OAAoB,EAAS,EAAE;IAC/E,IAAI,CAAC;QACH,OAAO,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,EAAE,GAAG,OAAO,EAAE,MAAM,EAAE,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;IACpF,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,IAAI,MAAM,KAAK,OAAO,IAAI,KAAK,YAAY,KAAK,IAAI,KAAK,CAAC,OAAO,CAAC,UAAU,CAAC,cAAc,CAAC,EAAE,CAAC;YAC7F,MAAM,IAAI,WAAW,CAAC,GAAG,IAAI,KAAK,KAAK,CAAC,OAAO,CAAC,KAAK,CAAC,QAAQ,CAAC,MAAM,CAAC,EAAE,CAAC,CAAA;QAC3E,CAAC;QACD,MAAM,KAAK,CAAA;IACb,CAAC;AACH,CAAC,CAAA;AAED;;;;GAIG;AACH,MAAM,OAAO,WAAY,SAAQ,KAAK;IAClB,IAAI,GAAG,aAAa,CAAA;CACvC;AAED,gEAAgE;AAChE,MAAM,CAAC,MAAM,mBAAmB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC1D,eAAe,IAAI,sCAAsC,IAAI,8BAA8B,CAAA;AAE7F,oDAAoD;AACpD,MAAM,CAAC,MAAM,wBAAwB,GAAG,CAAC,IAAY,EAAU,EAAE,CAC/D,GAAG,IAAI,6DAA6D;IACpE,qDAAqD,IAAI,IAAI,CAAA;AAE/D;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,QAAQ,GAAG,CAAC,IAAY,EAAE,UAAuC,EAAE,EAAS,EAAE;IACzF,MAAM,IAAI,GAAG,YAAY,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;IACvC,yEAAyE;IACzE,wDAAwD;IACxD,MAAM,KAAK,GAAG,QAAQ,CAAC,iBAAiB,EAAE,UAAU,EAAE,EAAE,QAAQ,EAAE,OAAO,CAAC,QAAQ,EAAE,CAAC,CAAA;IACrF,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,KAAK,CAAC,MAAM,CAAC,IAAI,CAAC,CAAA;QACjC,IAAI,MAAM,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC,EAAE,CAAC;YAC/B,MAAM,MAAM,GAAG,MAAM,CAAC,QAAQ,CAAC,GAAG,CAAC,OAAO,CAAC,EAAE,CAAC,KAAK,IAAI,SAAS,OAAO,CAAC,IAAI,KAAK,OAAO,CAAC,OAAO,EAAE,CAAC,CAAA;YACnG,MAAM,IAAI,WAAW,CAAC,eAAe,IAAI,6CAA6C,IAAI,OAAO,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE,CAAC,CAAA;QACvH,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,KAAK,CAAC,KAAK,EAAE,CAAA;QACb,MAAM,KAAK,CAAA;IACb,CAAC;IACD,OAAO,KAAK,CAAA;AACd,CAAC,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,MAAM,CAAC,MAAM,MAAM,GAAG,CAAC,IAAY,EAAE,UAAyB,EAAE,EAAS,EAAE;IACzE,MAAM,EAAE,MAAM,GAAG,OAAO,EAAE,GAAG,WAAW,EAAE,GAAG,OAAO,CAAA;IACpD,QAAQ,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC;QACrB,KAAK,QAAQ;YACX,OAAO,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;QACvD,KAAK,QAAQ;YACX,OAAO,UAAU,CAAC,IAAI,EAAE,MAAM,EAAE,WAAW,CAAC,CAAA;QAC9C,KAAK,MAAM;YACT,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,IAAI,WAAW,CAAC,wBAAwB,CAAC,IAAI,CAAC,CAAC,CAAA;YACvD,CAAC;YACD,OAAO,QAAQ,CAAC,IAAI,EAAE,WAAW,CAAC,CAAA;QACpC,KAAK,SAAS;YACZ,IAAI,MAAM,KAAK,OAAO,EAAE,CAAC;gBACvB,MAAM,IAAI,WAAW,CAAC,mBAAmB,CAAC,IAAI,CAAC,CAAC,CAAA;YAClD,CAAC;YACD,OAAO,QAAQ,CAAC,iBAAiB,EAAE,IAAI,EAAE,WAAW,CAAC,CAAA;IACzD,CAAC;AACH,CAAC,CAAA"}
1
+ {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"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"}