sietch 0.4.0 → 0.5.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/index.d.ts +2 -0
- package/dist/storage-node.d.ts +58 -0
- package/dist/storage-node.js +202 -0
- package/dist/storage-node.js.map +1 -0
- package/dist/storage.d.ts +5 -4
- package/dist/storage.js +102 -21
- package/dist/storage.js.map +1 -1
- package/dist/store.d.ts +9 -1
- package/dist/store.js +49 -2
- package/dist/store.js.map +1 -1
- package/dist/sync-engine.js +2 -1
- package/dist/sync-engine.js.map +1 -1
- package/dist/types.d.ts +4 -2
- package/dist/yjs-engine.d.ts +8 -1
- package/dist/yjs-engine.js +39 -10
- package/dist/yjs-engine.js.map +1 -1
- package/package.json +13 -20
package/dist/index.d.ts
CHANGED
|
@@ -9,4 +9,6 @@
|
|
|
9
9
|
*/
|
|
10
10
|
export { createStore, Store, Cursor, SubtreeCursor } from './store.js';
|
|
11
11
|
export { ValidationError, SietchError, StorageFullError, SyncError } from './errors.js';
|
|
12
|
+
export type { StorageBackend } from './storage.js';
|
|
13
|
+
export type { StorageType, StorageCapacity } from './types.js';
|
|
12
14
|
export type { CollectionConfig, CrdtValue, MutationEvent, WriteConfirmation, ReadResult, SyncStatus, SubtreeSyncStatus, SyncConfig, AclMap, AclPermissions, StoreOptions, StorageMetrics, SearchQuery, SearchResult, SearchHit, VectorSearchOptions, VectorResult, TraverseOptions, TraverseResult, PublicIdentity, LinkRequest, CypherResult, AclReferenceNode, SubscribeOptions, StorePlugin, WriteContext, } from './store.js';
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Storage Backend — Node.js persistence for Yjs state.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the OpfsBackend directory layout and write-serialization pattern,
|
|
5
|
+
* using node:fs/promises with atomic writes (write-to-tmp + rename).
|
|
6
|
+
*
|
|
7
|
+
* Directory layout:
|
|
8
|
+
* {basePath}/subdocs/{subtreeId}.yjs
|
|
9
|
+
* {basePath}/identity/keypair.enc
|
|
10
|
+
* {basePath}/refs/{safeRefId}.ref
|
|
11
|
+
* {basePath}/metadata.json
|
|
12
|
+
*
|
|
13
|
+
* Architecture: ADR-005 (OPFS-preferred storage with filesystem for Node.js)
|
|
14
|
+
*/
|
|
15
|
+
import type { StorageCapacity } from './types.js';
|
|
16
|
+
import type { StorageBackend } from './storage.js';
|
|
17
|
+
import type { ObservabilityContext } from './observability.js';
|
|
18
|
+
export declare class FilesystemBackend implements StorageBackend {
|
|
19
|
+
private readonly obs;
|
|
20
|
+
readonly type: "filesystem";
|
|
21
|
+
private readonly basePath;
|
|
22
|
+
/** Per-file write locks — serializes writes to prevent corruption. */
|
|
23
|
+
private readonly writeLocks;
|
|
24
|
+
constructor(basePath: string, obs: ObservabilityContext);
|
|
25
|
+
init(): Promise<void>;
|
|
26
|
+
/**
|
|
27
|
+
* Serialize writes to the same file. Chains writes per file key so they
|
|
28
|
+
* execute sequentially — mirrors OpfsBackend.serializedWrite().
|
|
29
|
+
*/
|
|
30
|
+
private serializedWrite;
|
|
31
|
+
/** Atomic write: write to .tmp then rename over target. */
|
|
32
|
+
private atomicWrite;
|
|
33
|
+
persistSubdoc(subtreeId: string, state: Uint8Array): Promise<void>;
|
|
34
|
+
loadSubdoc(subtreeId: string): Promise<Uint8Array | null>;
|
|
35
|
+
deleteSubdoc(subtreeId: string): Promise<void>;
|
|
36
|
+
listSubdocs(): Promise<string[]>;
|
|
37
|
+
capacity(): Promise<StorageCapacity>;
|
|
38
|
+
persistIdentity(encrypted: Uint8Array): Promise<void>;
|
|
39
|
+
loadIdentity(): Promise<Uint8Array | null>;
|
|
40
|
+
persistRef(refId: string, state: Uint8Array): Promise<void>;
|
|
41
|
+
loadRef(refId: string): Promise<Uint8Array | null>;
|
|
42
|
+
getSubdocMetadata(id: string): Promise<{
|
|
43
|
+
lastAccess: number;
|
|
44
|
+
byteSize: number;
|
|
45
|
+
} | null>;
|
|
46
|
+
setSubdocMetadata(id: string, meta: {
|
|
47
|
+
lastAccess: number;
|
|
48
|
+
byteSize: number;
|
|
49
|
+
}): Promise<void>;
|
|
50
|
+
listSubdocMetadata(): Promise<Array<{
|
|
51
|
+
id: string;
|
|
52
|
+
lastAccess: number;
|
|
53
|
+
byteSize: number;
|
|
54
|
+
}>>;
|
|
55
|
+
private readMetadataFile;
|
|
56
|
+
private writeMetadataFile;
|
|
57
|
+
close(): Promise<void>;
|
|
58
|
+
}
|
|
@@ -0,0 +1,202 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Filesystem Storage Backend — Node.js persistence for Yjs state.
|
|
3
|
+
*
|
|
4
|
+
* Mirrors the OpfsBackend directory layout and write-serialization pattern,
|
|
5
|
+
* using node:fs/promises with atomic writes (write-to-tmp + rename).
|
|
6
|
+
*
|
|
7
|
+
* Directory layout:
|
|
8
|
+
* {basePath}/subdocs/{subtreeId}.yjs
|
|
9
|
+
* {basePath}/identity/keypair.enc
|
|
10
|
+
* {basePath}/refs/{safeRefId}.ref
|
|
11
|
+
* {basePath}/metadata.json
|
|
12
|
+
*
|
|
13
|
+
* Architecture: ADR-005 (OPFS-preferred storage with filesystem for Node.js)
|
|
14
|
+
*/
|
|
15
|
+
import * as fs from 'node:fs/promises';
|
|
16
|
+
import * as path from 'node:path';
|
|
17
|
+
/** Check whether an error is an ENOENT (file/dir not found). */
|
|
18
|
+
function isEnoent(err) {
|
|
19
|
+
return (typeof err === 'object' &&
|
|
20
|
+
err !== null &&
|
|
21
|
+
'code' in err &&
|
|
22
|
+
err.code === 'ENOENT');
|
|
23
|
+
}
|
|
24
|
+
// @req FR-02
|
|
25
|
+
// @req FR-03
|
|
26
|
+
export class FilesystemBackend {
|
|
27
|
+
obs;
|
|
28
|
+
type = 'filesystem';
|
|
29
|
+
basePath;
|
|
30
|
+
/** Per-file write locks — serializes writes to prevent corruption. */
|
|
31
|
+
writeLocks = new Map();
|
|
32
|
+
constructor(basePath, obs) {
|
|
33
|
+
this.obs = obs;
|
|
34
|
+
this.basePath = path.resolve(basePath);
|
|
35
|
+
}
|
|
36
|
+
async init() {
|
|
37
|
+
await fs.mkdir(path.join(this.basePath, 'subdocs'), { recursive: true });
|
|
38
|
+
await fs.mkdir(path.join(this.basePath, 'identity'), { recursive: true });
|
|
39
|
+
await fs.mkdir(path.join(this.basePath, 'refs'), { recursive: true });
|
|
40
|
+
this.obs.logger.info({ backend: 'filesystem', path: this.basePath }, 'storage initialized');
|
|
41
|
+
}
|
|
42
|
+
/**
|
|
43
|
+
* Serialize writes to the same file. Chains writes per file key so they
|
|
44
|
+
* execute sequentially — mirrors OpfsBackend.serializedWrite().
|
|
45
|
+
*/
|
|
46
|
+
serializedWrite(fileKey, fn) {
|
|
47
|
+
const prev = this.writeLocks.get(fileKey) ?? Promise.resolve();
|
|
48
|
+
const next = prev.then(fn, fn);
|
|
49
|
+
this.writeLocks.set(fileKey, next);
|
|
50
|
+
next.then(() => { if (this.writeLocks.get(fileKey) === next)
|
|
51
|
+
this.writeLocks.delete(fileKey); }, () => { if (this.writeLocks.get(fileKey) === next)
|
|
52
|
+
this.writeLocks.delete(fileKey); });
|
|
53
|
+
return next;
|
|
54
|
+
}
|
|
55
|
+
/** Atomic write: write to .tmp then rename over target. */
|
|
56
|
+
async atomicWrite(filePath, data) {
|
|
57
|
+
// Ensure parent directory exists (guards against races with parallel inits)
|
|
58
|
+
try {
|
|
59
|
+
await fs.mkdir(path.dirname(filePath), { recursive: true });
|
|
60
|
+
}
|
|
61
|
+
catch (err) {
|
|
62
|
+
if (!isEnoent(err))
|
|
63
|
+
throw err;
|
|
64
|
+
return; // Base directory gone (backend closed / test cleanup) — skip
|
|
65
|
+
}
|
|
66
|
+
const tmp = filePath + '.tmp';
|
|
67
|
+
try {
|
|
68
|
+
await fs.writeFile(tmp, data);
|
|
69
|
+
await fs.rename(tmp, filePath);
|
|
70
|
+
}
|
|
71
|
+
catch (err) {
|
|
72
|
+
if (!isEnoent(err))
|
|
73
|
+
throw err;
|
|
74
|
+
// Directory removed between mkdir and write — skip silently
|
|
75
|
+
}
|
|
76
|
+
}
|
|
77
|
+
async persistSubdoc(subtreeId, state) {
|
|
78
|
+
const filePath = path.join(this.basePath, 'subdocs', `${subtreeId}.yjs`);
|
|
79
|
+
return this.serializedWrite(`subdoc:${subtreeId}`, () => this.atomicWrite(filePath, state));
|
|
80
|
+
}
|
|
81
|
+
async loadSubdoc(subtreeId) {
|
|
82
|
+
try {
|
|
83
|
+
const filePath = path.join(this.basePath, 'subdocs', `${subtreeId}.yjs`);
|
|
84
|
+
const buf = await fs.readFile(filePath);
|
|
85
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
86
|
+
}
|
|
87
|
+
catch (err) {
|
|
88
|
+
if (isEnoent(err))
|
|
89
|
+
return null;
|
|
90
|
+
throw err;
|
|
91
|
+
}
|
|
92
|
+
}
|
|
93
|
+
async deleteSubdoc(subtreeId) {
|
|
94
|
+
try {
|
|
95
|
+
const filePath = path.join(this.basePath, 'subdocs', `${subtreeId}.yjs`);
|
|
96
|
+
await fs.unlink(filePath);
|
|
97
|
+
}
|
|
98
|
+
catch (err) {
|
|
99
|
+
if (!isEnoent(err))
|
|
100
|
+
throw err;
|
|
101
|
+
}
|
|
102
|
+
}
|
|
103
|
+
async listSubdocs() {
|
|
104
|
+
try {
|
|
105
|
+
const dir = path.join(this.basePath, 'subdocs');
|
|
106
|
+
const entries = await fs.readdir(dir);
|
|
107
|
+
return entries
|
|
108
|
+
.filter((name) => name.endsWith('.yjs'))
|
|
109
|
+
.map((name) => name.slice(0, -4));
|
|
110
|
+
}
|
|
111
|
+
catch (err) {
|
|
112
|
+
if (isEnoent(err))
|
|
113
|
+
return [];
|
|
114
|
+
throw err;
|
|
115
|
+
}
|
|
116
|
+
}
|
|
117
|
+
// @req FR-21
|
|
118
|
+
async capacity() {
|
|
119
|
+
try {
|
|
120
|
+
// fs.statfs available since Node 18.15
|
|
121
|
+
const stats = await fs.statfs(this.basePath);
|
|
122
|
+
const total = stats.blocks * stats.bsize;
|
|
123
|
+
const available = stats.bavail * stats.bsize;
|
|
124
|
+
const used = total - available;
|
|
125
|
+
return { used, total, available };
|
|
126
|
+
}
|
|
127
|
+
catch {
|
|
128
|
+
return { used: 0, total: 0, available: 0 };
|
|
129
|
+
}
|
|
130
|
+
}
|
|
131
|
+
// @req FR-30
|
|
132
|
+
async persistIdentity(encrypted) {
|
|
133
|
+
const filePath = path.join(this.basePath, 'identity', 'keypair.enc');
|
|
134
|
+
return this.serializedWrite('identity:keypair', () => this.atomicWrite(filePath, encrypted));
|
|
135
|
+
}
|
|
136
|
+
async loadIdentity() {
|
|
137
|
+
try {
|
|
138
|
+
const filePath = path.join(this.basePath, 'identity', 'keypair.enc');
|
|
139
|
+
const buf = await fs.readFile(filePath);
|
|
140
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
141
|
+
}
|
|
142
|
+
catch (err) {
|
|
143
|
+
if (isEnoent(err))
|
|
144
|
+
return null;
|
|
145
|
+
throw err;
|
|
146
|
+
}
|
|
147
|
+
}
|
|
148
|
+
async persistRef(refId, state) {
|
|
149
|
+
const safeId = refId.replace(/\//g, '__');
|
|
150
|
+
const filePath = path.join(this.basePath, 'refs', `${safeId}.ref`);
|
|
151
|
+
return this.serializedWrite(`ref:${safeId}`, () => this.atomicWrite(filePath, state));
|
|
152
|
+
}
|
|
153
|
+
async loadRef(refId) {
|
|
154
|
+
try {
|
|
155
|
+
const safeId = refId.replace(/\//g, '__');
|
|
156
|
+
const filePath = path.join(this.basePath, 'refs', `${safeId}.ref`);
|
|
157
|
+
const buf = await fs.readFile(filePath);
|
|
158
|
+
return new Uint8Array(buf.buffer, buf.byteOffset, buf.byteLength);
|
|
159
|
+
}
|
|
160
|
+
catch (err) {
|
|
161
|
+
if (isEnoent(err))
|
|
162
|
+
return null;
|
|
163
|
+
throw err;
|
|
164
|
+
}
|
|
165
|
+
}
|
|
166
|
+
async getSubdocMetadata(id) {
|
|
167
|
+
const all = await this.readMetadataFile();
|
|
168
|
+
return all[id] ?? null;
|
|
169
|
+
}
|
|
170
|
+
async setSubdocMetadata(id, meta) {
|
|
171
|
+
const all = await this.readMetadataFile();
|
|
172
|
+
all[id] = meta;
|
|
173
|
+
await this.writeMetadataFile(all);
|
|
174
|
+
}
|
|
175
|
+
async listSubdocMetadata() {
|
|
176
|
+
const all = await this.readMetadataFile();
|
|
177
|
+
return Object.entries(all).map(([id, meta]) => ({ id, ...meta }));
|
|
178
|
+
}
|
|
179
|
+
async readMetadataFile() {
|
|
180
|
+
try {
|
|
181
|
+
const filePath = path.join(this.basePath, 'metadata.json');
|
|
182
|
+
const text = await fs.readFile(filePath, 'utf8');
|
|
183
|
+
return JSON.parse(text);
|
|
184
|
+
}
|
|
185
|
+
catch (err) {
|
|
186
|
+
if (isEnoent(err))
|
|
187
|
+
return {};
|
|
188
|
+
throw err;
|
|
189
|
+
}
|
|
190
|
+
}
|
|
191
|
+
async writeMetadataFile(data) {
|
|
192
|
+
const filePath = path.join(this.basePath, 'metadata.json');
|
|
193
|
+
return this.serializedWrite('meta:all', () => this.atomicWrite(filePath, JSON.stringify(data)));
|
|
194
|
+
}
|
|
195
|
+
async close() {
|
|
196
|
+
if (this.writeLocks.size > 0) {
|
|
197
|
+
await Promise.allSettled([...this.writeLocks.values()]);
|
|
198
|
+
this.writeLocks.clear();
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
//# sourceMappingURL=storage-node.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"storage-node.js","sourceRoot":"","sources":["../src/storage-node.ts"],"names":[],"mappings":"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"}
|
package/dist/storage.d.ts
CHANGED
|
@@ -52,9 +52,9 @@ export interface StorageBackend {
|
|
|
52
52
|
/**
|
|
53
53
|
* Detect the best available storage backend.
|
|
54
54
|
*
|
|
55
|
-
* Priority: OPFS > IndexedDB >
|
|
55
|
+
* Priority: OPFS > IndexedDB > Filesystem (Node.js) > Memory
|
|
56
56
|
*/
|
|
57
|
-
export declare function detectStorageType(preference?:
|
|
57
|
+
export declare function detectStorageType(preference?: StorageType | 'auto'): StorageType;
|
|
58
58
|
/**
|
|
59
59
|
* Initialize a storage backend.
|
|
60
60
|
*
|
|
@@ -63,7 +63,8 @@ export declare function detectStorageType(preference?: 'opfs' | 'indexeddb' | 'a
|
|
|
63
63
|
* not 'auto' (auto falls back to memory).
|
|
64
64
|
*
|
|
65
65
|
* @param obs - Observability context for logging
|
|
66
|
-
* @param preference - Storage preference ('opfs', 'indexeddb', 'auto')
|
|
66
|
+
* @param preference - Storage preference ('opfs', 'indexeddb', 'filesystem', 'auto')
|
|
67
|
+
* @param storagePath - Base directory for filesystem backend (default: '.sietch')
|
|
67
68
|
* @returns Initialized storage backend
|
|
68
69
|
*/
|
|
69
|
-
export declare function createStorageBackend(obs: ObservabilityContext, preference?:
|
|
70
|
+
export declare function createStorageBackend(obs: ObservabilityContext, preference?: StorageType | 'auto', storagePath?: string): Promise<StorageBackend>;
|
package/dist/storage.js
CHANGED
|
@@ -36,18 +36,24 @@ async function wrapQuotaError(fn) {
|
|
|
36
36
|
/**
|
|
37
37
|
* Detect the best available storage backend.
|
|
38
38
|
*
|
|
39
|
-
* Priority: OPFS > IndexedDB >
|
|
39
|
+
* Priority: OPFS > IndexedDB > Filesystem (Node.js) > Memory
|
|
40
40
|
*/
|
|
41
41
|
export function detectStorageType(preference) {
|
|
42
|
+
if (preference === 'memory')
|
|
43
|
+
return 'memory';
|
|
42
44
|
if (preference === 'opfs' && hasOpfs())
|
|
43
45
|
return 'opfs';
|
|
44
46
|
if (preference === 'indexeddb' && hasIndexedDb())
|
|
45
47
|
return 'indexeddb';
|
|
48
|
+
if (preference === 'filesystem' && hasNodeFs())
|
|
49
|
+
return 'filesystem';
|
|
46
50
|
if (preference === undefined || preference === 'auto') {
|
|
47
51
|
if (hasOpfs())
|
|
48
52
|
return 'opfs';
|
|
49
53
|
if (hasIndexedDb())
|
|
50
54
|
return 'indexeddb';
|
|
55
|
+
if (hasNodeFs())
|
|
56
|
+
return 'filesystem';
|
|
51
57
|
return 'memory';
|
|
52
58
|
}
|
|
53
59
|
// Requested backend unavailable — fall through to auto
|
|
@@ -57,10 +63,31 @@ export function detectStorageType(preference) {
|
|
|
57
63
|
return 'indexeddb';
|
|
58
64
|
return 'memory';
|
|
59
65
|
}
|
|
66
|
+
function hasNodeFs() {
|
|
67
|
+
return typeof process !== 'undefined' && typeof process.versions?.node === 'string';
|
|
68
|
+
}
|
|
60
69
|
function hasOpfs() {
|
|
61
70
|
return (typeof globalThis.navigator !== 'undefined' &&
|
|
62
71
|
typeof globalThis.navigator.storage?.getDirectory === 'function');
|
|
63
72
|
}
|
|
73
|
+
/**
|
|
74
|
+
* Probe OPFS by actually calling getDirectory() with a timeout.
|
|
75
|
+
* Some browsers (Firefox) expose the API but hang or reject at runtime.
|
|
76
|
+
*/
|
|
77
|
+
async function probeOpfs(timeoutMs = 2000) {
|
|
78
|
+
if (!hasOpfs())
|
|
79
|
+
return false;
|
|
80
|
+
try {
|
|
81
|
+
await Promise.race([
|
|
82
|
+
navigator.storage.getDirectory(),
|
|
83
|
+
new Promise((_, reject) => setTimeout(() => reject(new Error('OPFS probe timeout')), timeoutMs)),
|
|
84
|
+
]);
|
|
85
|
+
return true;
|
|
86
|
+
}
|
|
87
|
+
catch {
|
|
88
|
+
return false;
|
|
89
|
+
}
|
|
90
|
+
}
|
|
64
91
|
function hasIndexedDb() {
|
|
65
92
|
return typeof globalThis.indexedDB !== 'undefined';
|
|
66
93
|
}
|
|
@@ -71,14 +98,20 @@ class OpfsBackend {
|
|
|
71
98
|
obs;
|
|
72
99
|
type = 'opfs';
|
|
73
100
|
root = null;
|
|
101
|
+
/** Per-file write locks — serializes OPFS writes to prevent NoModificationAllowedError. */
|
|
102
|
+
writeLocks = new Map();
|
|
74
103
|
constructor(obs) {
|
|
75
104
|
this.obs = obs;
|
|
76
105
|
}
|
|
77
106
|
async init() {
|
|
78
107
|
this.root = await navigator.storage.getDirectory();
|
|
79
|
-
// B-1: Request persistent storage to prevent silent eviction by the browser
|
|
108
|
+
// B-1: Request persistent storage to prevent silent eviction by the browser.
|
|
109
|
+
// Some browsers hang on persist() — race against a 3-second timeout.
|
|
80
110
|
try {
|
|
81
|
-
await
|
|
111
|
+
await Promise.race([
|
|
112
|
+
navigator.storage?.persist?.(),
|
|
113
|
+
new Promise((resolve) => setTimeout(resolve, 3000)),
|
|
114
|
+
]);
|
|
82
115
|
}
|
|
83
116
|
catch { /* persist() may not be available in all contexts */ }
|
|
84
117
|
this.obs.logger.info({ backend: 'opfs' }, 'storage initialized');
|
|
@@ -87,14 +120,30 @@ class OpfsBackend {
|
|
|
87
120
|
const sietchDir = await this.root.getDirectoryHandle('sietch', { create: true });
|
|
88
121
|
return sietchDir.getDirectoryHandle(name, { create: true });
|
|
89
122
|
}
|
|
123
|
+
/**
|
|
124
|
+
* Serialize writes to the same OPFS file. OPFS `createWritable()` takes an
|
|
125
|
+
* exclusive lock — concurrent writes to the same file throw
|
|
126
|
+
* NoModificationAllowedError. This chains writes per file key so they execute
|
|
127
|
+
* sequentially.
|
|
128
|
+
*/
|
|
129
|
+
serializedWrite(fileKey, fn) {
|
|
130
|
+
const prev = this.writeLocks.get(fileKey) ?? Promise.resolve();
|
|
131
|
+
const next = prev.then(fn, fn); // run fn even if previous write failed
|
|
132
|
+
this.writeLocks.set(fileKey, next);
|
|
133
|
+
// Clean up entry when chain settles to avoid unbounded map growth
|
|
134
|
+
next.then(() => { if (this.writeLocks.get(fileKey) === next)
|
|
135
|
+
this.writeLocks.delete(fileKey); }, () => { if (this.writeLocks.get(fileKey) === next)
|
|
136
|
+
this.writeLocks.delete(fileKey); });
|
|
137
|
+
return next;
|
|
138
|
+
}
|
|
90
139
|
async persistSubdoc(subtreeId, state) {
|
|
91
|
-
|
|
140
|
+
return this.serializedWrite(`subdoc:${subtreeId}`, () => wrapQuotaError(async () => {
|
|
92
141
|
const dir = await this.getDir('subdocs');
|
|
93
142
|
const file = await dir.getFileHandle(`${subtreeId}.yjs`, { create: true });
|
|
94
143
|
const writable = await file.createWritable();
|
|
95
144
|
await writable.write(toArrayBuffer(state));
|
|
96
145
|
await writable.close();
|
|
97
|
-
});
|
|
146
|
+
}));
|
|
98
147
|
}
|
|
99
148
|
async loadSubdoc(subtreeId) {
|
|
100
149
|
try {
|
|
@@ -139,13 +188,13 @@ class OpfsBackend {
|
|
|
139
188
|
}
|
|
140
189
|
// @req FR-30
|
|
141
190
|
async persistIdentity(encrypted) {
|
|
142
|
-
|
|
191
|
+
return this.serializedWrite('identity:keypair', () => wrapQuotaError(async () => {
|
|
143
192
|
const dir = await this.getDir('identity');
|
|
144
193
|
const file = await dir.getFileHandle('keypair.enc', { create: true });
|
|
145
194
|
const writable = await file.createWritable();
|
|
146
195
|
await writable.write(toArrayBuffer(encrypted));
|
|
147
196
|
await writable.close();
|
|
148
|
-
});
|
|
197
|
+
}));
|
|
149
198
|
}
|
|
150
199
|
async loadIdentity() {
|
|
151
200
|
try {
|
|
@@ -160,14 +209,14 @@ class OpfsBackend {
|
|
|
160
209
|
}
|
|
161
210
|
}
|
|
162
211
|
async persistRef(refId, state) {
|
|
163
|
-
|
|
212
|
+
const safeId = refId.replace(/\//g, '__');
|
|
213
|
+
return this.serializedWrite(`ref:${safeId}`, () => wrapQuotaError(async () => {
|
|
164
214
|
const dir = await this.getDir('refs');
|
|
165
|
-
const safeId = refId.replace(/\//g, '__');
|
|
166
215
|
const file = await dir.getFileHandle(`${safeId}.ref`, { create: true });
|
|
167
216
|
const writable = await file.createWritable();
|
|
168
217
|
await writable.write(toArrayBuffer(state));
|
|
169
218
|
await writable.close();
|
|
170
|
-
});
|
|
219
|
+
}));
|
|
171
220
|
}
|
|
172
221
|
async loadRef(refId) {
|
|
173
222
|
try {
|
|
@@ -201,6 +250,8 @@ class OpfsBackend {
|
|
|
201
250
|
return Object.entries(all).map(([id, meta]) => ({ id, ...meta }));
|
|
202
251
|
}
|
|
203
252
|
async readMetadataFile() {
|
|
253
|
+
if (!this.root)
|
|
254
|
+
return {};
|
|
204
255
|
try {
|
|
205
256
|
const sietchDir = await this.root.getDirectoryHandle('sietch', { create: true });
|
|
206
257
|
const file = await sietchDir.getFileHandle('metadata.json');
|
|
@@ -213,13 +264,24 @@ class OpfsBackend {
|
|
|
213
264
|
}
|
|
214
265
|
}
|
|
215
266
|
async writeMetadataFile(data) {
|
|
216
|
-
|
|
217
|
-
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
267
|
+
if (!this.root)
|
|
268
|
+
return; // Backend closed — skip fire-and-forget writes
|
|
269
|
+
return this.serializedWrite('meta:all', async () => {
|
|
270
|
+
if (!this.root)
|
|
271
|
+
return;
|
|
272
|
+
const sietchDir = await this.root.getDirectoryHandle('sietch', { create: true });
|
|
273
|
+
const file = await sietchDir.getFileHandle('metadata.json', { create: true });
|
|
274
|
+
const writable = await file.createWritable();
|
|
275
|
+
await writable.write(JSON.stringify(data));
|
|
276
|
+
await writable.close();
|
|
277
|
+
});
|
|
221
278
|
}
|
|
222
279
|
async close() {
|
|
280
|
+
// Await all pending writes before releasing the root handle
|
|
281
|
+
if (this.writeLocks.size > 0) {
|
|
282
|
+
await Promise.allSettled([...this.writeLocks.values()]);
|
|
283
|
+
this.writeLocks.clear();
|
|
284
|
+
}
|
|
223
285
|
this.root = null;
|
|
224
286
|
}
|
|
225
287
|
}
|
|
@@ -415,23 +477,42 @@ class MemoryBackend {
|
|
|
415
477
|
* not 'auto' (auto falls back to memory).
|
|
416
478
|
*
|
|
417
479
|
* @param obs - Observability context for logging
|
|
418
|
-
* @param preference - Storage preference ('opfs', 'indexeddb', 'auto')
|
|
480
|
+
* @param preference - Storage preference ('opfs', 'indexeddb', 'filesystem', 'auto')
|
|
481
|
+
* @param storagePath - Base directory for filesystem backend (default: '.sietch')
|
|
419
482
|
* @returns Initialized storage backend
|
|
420
483
|
*/
|
|
421
|
-
export async function createStorageBackend(obs, preference) {
|
|
484
|
+
export async function createStorageBackend(obs, preference, storagePath) {
|
|
422
485
|
const type = detectStorageType(preference);
|
|
423
486
|
if (type === 'opfs') {
|
|
424
|
-
|
|
425
|
-
await
|
|
426
|
-
|
|
487
|
+
// Probe OPFS with timeout — some browsers (Firefox) hang on getDirectory()
|
|
488
|
+
const opfsAvailable = await probeOpfs();
|
|
489
|
+
if (opfsAvailable) {
|
|
490
|
+
const backend = new OpfsBackend(obs);
|
|
491
|
+
await backend.init();
|
|
492
|
+
return backend;
|
|
493
|
+
}
|
|
494
|
+
obs.logger.warn('OPFS detected but probe failed; falling back to IndexedDB');
|
|
495
|
+
// Fall through to IndexedDB
|
|
496
|
+
if (hasIndexedDb()) {
|
|
497
|
+
const backend = new IndexedDbBackend(obs);
|
|
498
|
+
await backend.init();
|
|
499
|
+
return backend;
|
|
500
|
+
}
|
|
427
501
|
}
|
|
428
502
|
if (type === 'indexeddb') {
|
|
429
503
|
const backend = new IndexedDbBackend(obs);
|
|
430
504
|
await backend.init();
|
|
431
505
|
return backend;
|
|
432
506
|
}
|
|
507
|
+
if (type === 'filesystem') {
|
|
508
|
+
// Dynamic import keeps node:fs out of browser bundles
|
|
509
|
+
const { FilesystemBackend } = await import('./storage-node.js');
|
|
510
|
+
const backend = new FilesystemBackend(storagePath ?? '.sietch', obs);
|
|
511
|
+
await backend.init();
|
|
512
|
+
return backend;
|
|
513
|
+
}
|
|
433
514
|
// Memory fallback — always available
|
|
434
|
-
if (preference !== undefined && preference !== 'auto') {
|
|
515
|
+
if (preference !== undefined && preference !== 'auto' && preference !== 'memory') {
|
|
435
516
|
throw new StorageUnavailableError(`Requested storage backend '${preference}' is not available`, [preference]);
|
|
436
517
|
}
|
|
437
518
|
const backend = new MemoryBackend(obs);
|
package/dist/storage.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"storage.js","sourceRoot":"","sources":["../src/storage.ts"],"names":[],"mappings":"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"}
|
package/dist/store.d.ts
CHANGED
|
@@ -50,6 +50,10 @@ export declare class Store {
|
|
|
50
50
|
private readonly syncSubRefCounts;
|
|
51
51
|
/** When non-null, sync updates are collected here instead of pushed immediately. */
|
|
52
52
|
private batchUpdates;
|
|
53
|
+
/** Microtask coalescing buffer — merges updates within the same event loop tick. */
|
|
54
|
+
private microBatch;
|
|
55
|
+
/** Whether a microtask flush is already scheduled. */
|
|
56
|
+
private microBatchScheduled;
|
|
53
57
|
/** Status listeners registered before syncEngine is available. */
|
|
54
58
|
private readonly pendingStatusListeners;
|
|
55
59
|
/** Subtree status listeners registered before syncEngine is available. */
|
|
@@ -349,6 +353,8 @@ export declare class Store {
|
|
|
349
353
|
private waitForSubtreeSync;
|
|
350
354
|
/** Route a sync update through the batch collector or directly to the sync engine. */
|
|
351
355
|
private pushOrBatchUpdate;
|
|
356
|
+
/** Flush coalesced updates — one merged update per subtree per tick. */
|
|
357
|
+
private flushMicroBatch;
|
|
352
358
|
/**
|
|
353
359
|
* Index remotely-written objects so full-text search covers sync data.
|
|
354
360
|
*
|
|
@@ -377,4 +383,6 @@ export declare class Store {
|
|
|
377
383
|
* Zero-config by default (NFR-09):
|
|
378
384
|
* const db = await createStore();
|
|
379
385
|
*/
|
|
380
|
-
export declare function createStore(options?: StoreOptions
|
|
386
|
+
export declare function createStore(options?: StoreOptions & {
|
|
387
|
+
storageBackend?: StorageBackend;
|
|
388
|
+
}): Promise<Store>;
|