@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.
- package/dist/src/index.d.ts +1 -1
- package/dist/src/index.d.ts.map +1 -1
- package/dist/src/locate.d.ts +13 -1
- package/dist/src/locate.d.ts.map +1 -1
- package/dist/src/locate.js +2 -0
- package/dist/src/locate.js.map +1 -1
- package/package.json +3 -3
- package/src/index.ts +1 -1
- package/src/locate.ts +14 -1
package/dist/src/index.d.ts
CHANGED
|
@@ -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';
|
package/dist/src/index.d.ts.map
CHANGED
|
@@ -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;
|
|
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"}
|
package/dist/src/locate.d.ts
CHANGED
|
@@ -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">
|
|
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
|
*
|
package/dist/src/locate.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"locate.d.ts","sourceRoot":"","sources":["../../src/locate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;GASG;
|
|
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"}
|
package/dist/src/locate.js
CHANGED
|
@@ -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();
|
package/dist/src/locate.js.map
CHANGED
|
@@ -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;
|
|
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.
|
|
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/
|
|
55
|
-
"@cavelang/
|
|
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
|