@cavelang/store 0.34.0 → 0.35.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.
@@ -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;AAMH,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;;;;;;;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,KAiBrH,CAAA;AAED;;;;;;;;;;;;GAYG;AACH,eAAO,MAAM,MAAM,GAAI,MAAM,MAAM,EAAE,UAAS,aAAkB,KAAG,KAkBlE,CAAA"}
@@ -9,6 +9,7 @@
9
9
  * store named `k.cave` and a text file named `notes.txt` both work.
10
10
  */
11
11
  import { closeSync, existsSync, openSync, readFileSync, readSync } from 'node:fs';
12
+ import { resolve } from 'node:path';
12
13
  import { nodeSqliteAdapter } from "./node-adapter.js";
13
14
  import { openWith } from "./runtime.js";
14
15
  /** SQLite database files begin with this NUL-terminated 16-byte header. */
@@ -78,6 +79,7 @@ export const openText = (path, options = {}) => {
78
79
  const detail = result.problems.map(problem => ` ${path} line ${problem.line}: ${problem.message}`);
79
80
  throw new LocateError(`cannot load ${path} as a store — fix these lines (cave parse ${path}):\n${detail.join('\n')}`);
80
81
  }
82
+ options.assemble?.(store, resolve(path));
81
83
  }
82
84
  catch (error) {
83
85
  store.close();
@@ -1 +1 @@
1
- {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"locate.js","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@cavelang/store",
3
- "version": "0.34.0",
3
+ "version": "0.35.0",
4
4
  "type": "module",
5
5
  "description": "CAVE SQLite persistence — explicit runtime adapters, append-only belief series, and lifecycle-aware reads.",
6
6
  "keywords": [
@@ -51,8 +51,8 @@
51
51
  "access": "public"
52
52
  },
53
53
  "dependencies": {
54
- "@cavelang/canonical": "0.34.0",
55
- "@cavelang/core": "0.34.0"
54
+ "@cavelang/core": "0.35.0",
55
+ "@cavelang/canonical": "0.35.0"
56
56
  },
57
57
  "scripts": {
58
58
  "build": "tsc -b",
package/src/index.ts CHANGED
@@ -23,7 +23,7 @@ export { backup, restoreBackup, verifyBackup } from './backup.ts'
23
23
  export type { Snapshot as BackupSnapshot, WriteOptions as BackupWriteOptions } from './backup.ts'
24
24
  export { open } from './open.ts'
25
25
  export { LocateError, isStoreFile, kindOf, openAt, openText } from './locate.ts'
26
- export type { Intent as OpenIntent, Kind as StoreKind, LocateOptions } from './locate.ts'
26
+ export type { Assemble, Intent as OpenIntent, Kind as StoreKind, LocateOptions } from './locate.ts'
27
27
  export type { Store } from './open.ts'
28
28
  export { defaultDbPath } from './store.ts'
29
29
  export type { Access as OpenAccess, AppendOptions, ForwardFact, IngestResult, ReverseFact, TraverseOptions } from './store.ts'
package/src/locate.ts CHANGED
@@ -10,6 +10,7 @@
10
10
  */
11
11
 
12
12
  import { closeSync, existsSync, openSync, readFileSync, readSync } from 'node:fs'
13
+ import { resolve } from 'node:path'
13
14
  import { nodeSqliteAdapter } from './node-adapter.ts'
14
15
  import { openWith } from './runtime.ts'
15
16
  import type { OpenOptions, Store } from './runtime.ts'
@@ -56,8 +57,19 @@ export const kindOf = (path: string): Kind => {
56
57
  */
57
58
  export type Intent = 'read' | 'scratch' | 'write'
58
59
 
60
+ /**
61
+ * Completes a text store after its file is replayed (spec §23.4): the
62
+ * connector follows the `source/<name>` declarations the file carries,
63
+ * resolving their paths against the file's directory (`root` is the file's
64
+ * absolute path). The store package knows nothing about sources; surfaces
65
+ * pass `@cavelang/connect`'s `assemble`. A thrown `LocateError` fails the
66
+ * load like unparsable text.
67
+ */
68
+ export type Assemble = (store: Store, root: string) => void
69
+
59
70
  export type LocateOptions = Omit<OpenOptions, 'access'> & {
60
71
  readonly intent?: Intent
72
+ readonly assemble?: Assemble
61
73
  }
62
74
 
63
75
  const accessOf = (intent: Intent): Access =>
@@ -100,7 +112,7 @@ export const textStoreReadOnlyMessage = (path: string): string =>
100
112
  * line that fails to parse fails the load: the file *is* the database,
101
113
  * and a store silently missing rows is worse than an error.
102
114
  */
103
- export const openText = (path: string, options: Omit<OpenOptions, 'access'> = {}): Store => {
115
+ export const openText = (path: string, options: Omit<OpenOptions, 'access'> & { readonly assemble?: Assemble } = {}): Store => {
104
116
  const text = readFileSync(path, 'utf8')
105
117
  // A fresh in-memory store is always created and initialized: an `access`
106
118
  // mode is meaningless here and must not reach the open.
@@ -111,6 +123,7 @@ export const openText = (path: string, options: Omit<OpenOptions, 'access'> = {}
111
123
  const detail = result.problems.map(problem => ` ${path} line ${problem.line}: ${problem.message}`)
112
124
  throw new LocateError(`cannot load ${path} as a store — fix these lines (cave parse ${path}):\n${detail.join('\n')}`)
113
125
  }
126
+ options.assemble?.(store, resolve(path))
114
127
  } catch (error) {
115
128
  store.close()
116
129
  throw error