@bendyline/docblocks 2.0.0 → 2.1.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/{chunk-J32GU3F3.js → chunk-6IYMTYMQ.js} +249 -221
- package/dist/chunk-6IYMTYMQ.js.map +1 -0
- package/dist/{chunk-75UUF6C4.js → chunk-B56KWCSE.js} +2 -2
- package/dist/{chunk-RVQHY3XU.js → chunk-BNKV7MTO.js} +1 -1
- package/dist/{chunk-RVQHY3XU.js.map → chunk-BNKV7MTO.js.map} +1 -1
- package/dist/chunk-BXMF5YQJ.js +149 -0
- package/dist/chunk-BXMF5YQJ.js.map +1 -0
- package/dist/{chunk-PGR7LK6D.js → chunk-COYQXQK3.js} +14 -5
- package/dist/chunk-COYQXQK3.js.map +1 -0
- package/dist/{chunk-RQJRQF46.js → chunk-DN7A33LL.js} +42 -49
- package/dist/chunk-DN7A33LL.js.map +1 -0
- package/dist/chunk-FA7UNOXK.js +20 -0
- package/dist/chunk-FA7UNOXK.js.map +1 -0
- package/dist/chunk-GM5YXU4L.js +29 -0
- package/dist/chunk-GM5YXU4L.js.map +1 -0
- package/dist/{chunk-SI2LU2RP.js → chunk-JS6XFWQK.js} +2 -1
- package/dist/chunk-JS6XFWQK.js.map +1 -0
- package/dist/{chunk-EGNDADXB.js → chunk-MNSZ7EZN.js} +2 -2
- package/dist/chunk-P3DVZQ6S.js +228 -0
- package/dist/chunk-P3DVZQ6S.js.map +1 -0
- package/dist/chunk-P4WATND4.js +52 -0
- package/dist/chunk-P4WATND4.js.map +1 -0
- package/dist/chunk-RVPGQBWR.js +169 -0
- package/dist/chunk-RVPGQBWR.js.map +1 -0
- package/dist/chunk-U722UUFN.js +9 -0
- package/dist/chunk-U722UUFN.js.map +1 -0
- package/dist/{chunk-GCPBEMMH.js → chunk-VTCSF7VS.js} +11 -21
- package/dist/chunk-VTCSF7VS.js.map +1 -0
- package/dist/{chunk-2D7Y4IR3.js → chunk-WJKYY5QR.js} +123 -66
- package/dist/chunk-WJKYY5QR.js.map +1 -0
- package/dist/{chunk-5MYAICRE.js → chunk-XUML3MKV.js} +44 -56
- package/dist/chunk-XUML3MKV.js.map +1 -0
- package/dist/document/index.d.ts +358 -6
- package/dist/document/index.js +24 -3
- package/dist/document/index.js.map +1 -1
- package/dist/filesystem/electron.d.ts +73 -4
- package/dist/filesystem/electron.js +16 -3
- package/dist/filesystem/electron.js.map +1 -1
- package/dist/filesystem/index.d.ts +228 -22
- package/dist/filesystem/index.js +133 -19
- package/dist/filesystem/index.js.map +1 -1
- package/dist/filesystem/indexeddb.d.ts +284 -5
- package/dist/filesystem/indexeddb.js +22 -4
- package/dist/filesystem/indexeddb.js.map +1 -1
- package/dist/filesystem/memory.d.ts +152 -4
- package/dist/filesystem/memory.js +12 -3
- package/dist/filesystem/memory.js.map +1 -1
- package/dist/filesystem/native.d.ts +136 -4
- package/dist/filesystem/native.js +27 -3
- package/dist/filesystem/native.js.map +1 -1
- package/dist/host/index.d.ts +32 -9
- package/dist/host/index.js +26 -29
- package/dist/host/index.js.map +1 -1
- package/dist/index.d.ts +14 -10
- package/dist/index.js +204 -9
- package/dist/index.js.map +1 -1
- package/dist/mcp/index.d.ts +33 -4
- package/dist/mcp/index.js +31 -3
- package/dist/mcp/index.js.map +1 -1
- package/dist/mcp/zod.d.ts +637 -635
- package/dist/mcp/zod.js +700 -884
- package/dist/mcp/zod.js.map +1 -1
- package/dist/share/index.d.ts +43 -0
- package/dist/share/index.js +13 -0
- package/dist/share/index.js.map +1 -0
- package/dist/{types-CsX6EN2t.d.ts → types-BEg5SQ1_.d.ts} +1 -1
- package/dist/{types-eOlt9J7n.d.ts → types-CueK0tvU.d.ts} +34 -11
- package/dist/vscode/index.d.ts +220 -3
- package/dist/vscode/index.js +382 -2
- package/dist/vscode/index.js.map +1 -1
- package/dist/workspace/index.d.ts +141 -4
- package/dist/workspace/index.js +28 -2
- package/dist/workspace/index.js.map +1 -1
- package/package.json +9 -5
- package/dist/chunk-2D7Y4IR3.js.map +0 -1
- package/dist/chunk-5MYAICRE.js.map +0 -1
- package/dist/chunk-AYZ4HN5M.js +0 -20
- package/dist/chunk-AYZ4HN5M.js.map +0 -1
- package/dist/chunk-GCPBEMMH.js.map +0 -1
- package/dist/chunk-J32GU3F3.js.map +0 -1
- package/dist/chunk-PGR7LK6D.js.map +0 -1
- package/dist/chunk-RQJRQF46.js.map +0 -1
- package/dist/chunk-SI2LU2RP.js.map +0 -1
- package/dist/chunk-W5UUUII5.js +0 -142
- package/dist/chunk-W5UUUII5.js.map +0 -1
- package/dist/document/document-session.d.ts +0 -127
- package/dist/document/document-session.d.ts.map +0 -1
- package/dist/document/document-session.js +0 -749
- package/dist/document/document-session.js.map +0 -1
- package/dist/document/filesystem-target.d.ts +0 -17
- package/dist/document/filesystem-target.d.ts.map +0 -1
- package/dist/document/filesystem-target.js +0 -70
- package/dist/document/filesystem-target.js.map +0 -1
- package/dist/document/index.d.ts.map +0 -1
- package/dist/document/recovery-journal.d.ts +0 -125
- package/dist/document/recovery-journal.d.ts.map +0 -1
- package/dist/document/recovery-journal.js +0 -385
- package/dist/document/recovery-journal.js.map +0 -1
- package/dist/document/types.d.ts +0 -89
- package/dist/document/types.d.ts.map +0 -1
- package/dist/document/types.js +0 -9
- package/dist/document/types.js.map +0 -1
- package/dist/filesystem/commit-lock.d.ts +0 -3
- package/dist/filesystem/commit-lock.d.ts.map +0 -1
- package/dist/filesystem/commit-lock.js +0 -20
- package/dist/filesystem/commit-lock.js.map +0 -1
- package/dist/filesystem/dbk-workspace.d.ts +0 -34
- package/dist/filesystem/dbk-workspace.d.ts.map +0 -1
- package/dist/filesystem/dbk-workspace.js +0 -85
- package/dist/filesystem/dbk-workspace.js.map +0 -1
- package/dist/filesystem/electron-provider-v2.d.ts +0 -36
- package/dist/filesystem/electron-provider-v2.d.ts.map +0 -1
- package/dist/filesystem/electron-provider-v2.js +0 -503
- package/dist/filesystem/electron-provider-v2.js.map +0 -1
- package/dist/filesystem/electron-provider.d.ts +0 -35
- package/dist/filesystem/electron-provider.d.ts.map +0 -1
- package/dist/filesystem/electron-provider.js +0 -69
- package/dist/filesystem/electron-provider.js.map +0 -1
- package/dist/filesystem/electron.d.ts.map +0 -1
- package/dist/filesystem/file-media-provider.d.ts +0 -23
- package/dist/filesystem/file-media-provider.d.ts.map +0 -1
- package/dist/filesystem/file-media-provider.js +0 -85
- package/dist/filesystem/file-media-provider.js.map +0 -1
- package/dist/filesystem/filesystem-content-container.d.ts +0 -24
- package/dist/filesystem/filesystem-content-container.d.ts.map +0 -1
- package/dist/filesystem/filesystem-content-container.js +0 -153
- package/dist/filesystem/filesystem-content-container.js.map +0 -1
- package/dist/filesystem/fs-error.d.ts +0 -46
- package/dist/filesystem/fs-error.d.ts.map +0 -1
- package/dist/filesystem/fs-error.js +0 -170
- package/dist/filesystem/fs-error.js.map +0 -1
- package/dist/filesystem/index.d.ts.map +0 -1
- package/dist/filesystem/indexeddb-content-container.d.ts +0 -22
- package/dist/filesystem/indexeddb-content-container.d.ts.map +0 -1
- package/dist/filesystem/indexeddb-content-container.js +0 -100
- package/dist/filesystem/indexeddb-content-container.js.map +0 -1
- package/dist/filesystem/indexeddb-provider-v2.d.ts +0 -96
- package/dist/filesystem/indexeddb-provider-v2.d.ts.map +0 -1
- package/dist/filesystem/indexeddb-provider-v2.js +0 -1241
- package/dist/filesystem/indexeddb-provider-v2.js.map +0 -1
- package/dist/filesystem/indexeddb-provider.d.ts +0 -39
- package/dist/filesystem/indexeddb-provider.d.ts.map +0 -1
- package/dist/filesystem/indexeddb-provider.js +0 -145
- package/dist/filesystem/indexeddb-provider.js.map +0 -1
- package/dist/filesystem/indexeddb-store.d.ts +0 -34
- package/dist/filesystem/indexeddb-store.d.ts.map +0 -1
- package/dist/filesystem/indexeddb-store.js +0 -165
- package/dist/filesystem/indexeddb-store.js.map +0 -1
- package/dist/filesystem/indexeddb.d.ts.map +0 -1
- package/dist/filesystem/legacy-v2-adapter.d.ts +0 -62
- package/dist/filesystem/legacy-v2-adapter.d.ts.map +0 -1
- package/dist/filesystem/legacy-v2-adapter.js +0 -499
- package/dist/filesystem/legacy-v2-adapter.js.map +0 -1
- package/dist/filesystem/memory-provider-v2.d.ts +0 -92
- package/dist/filesystem/memory-provider-v2.d.ts.map +0 -1
- package/dist/filesystem/memory-provider-v2.js +0 -615
- package/dist/filesystem/memory-provider-v2.js.map +0 -1
- package/dist/filesystem/memory-provider.d.ts +0 -54
- package/dist/filesystem/memory-provider.d.ts.map +0 -1
- package/dist/filesystem/memory-provider.js +0 -132
- package/dist/filesystem/memory-provider.js.map +0 -1
- package/dist/filesystem/memory.d.ts.map +0 -1
- package/dist/filesystem/move-entry.d.ts +0 -9
- package/dist/filesystem/move-entry.d.ts.map +0 -1
- package/dist/filesystem/move-entry.js +0 -103
- package/dist/filesystem/move-entry.js.map +0 -1
- package/dist/filesystem/move-error.d.ts +0 -53
- package/dist/filesystem/move-error.d.ts.map +0 -1
- package/dist/filesystem/move-error.js +0 -99
- package/dist/filesystem/move-error.js.map +0 -1
- package/dist/filesystem/native-provider-v2.d.ts +0 -75
- package/dist/filesystem/native-provider-v2.d.ts.map +0 -1
- package/dist/filesystem/native-provider-v2.js +0 -849
- package/dist/filesystem/native-provider-v2.js.map +0 -1
- package/dist/filesystem/native-provider.d.ts +0 -53
- package/dist/filesystem/native-provider.d.ts.map +0 -1
- package/dist/filesystem/native-provider.js +0 -471
- package/dist/filesystem/native-provider.js.map +0 -1
- package/dist/filesystem/native.d.ts.map +0 -1
- package/dist/filesystem/types.d.ts +0 -83
- package/dist/filesystem/types.d.ts.map +0 -1
- package/dist/filesystem/types.js +0 -16
- package/dist/filesystem/types.js.map +0 -1
- package/dist/filesystem/v2.d.ts +0 -172
- package/dist/filesystem/v2.d.ts.map +0 -1
- package/dist/filesystem/v2.js +0 -16
- package/dist/filesystem/v2.js.map +0 -1
- package/dist/filesystem/workspace-path.d.ts +0 -21
- package/dist/filesystem/workspace-path.d.ts.map +0 -1
- package/dist/filesystem/workspace-path.js +0 -80
- package/dist/filesystem/workspace-path.js.map +0 -1
- package/dist/host/filesystem-v2.d.ts +0 -45
- package/dist/host/filesystem-v2.d.ts.map +0 -1
- package/dist/host/filesystem-v2.js +0 -13
- package/dist/host/filesystem-v2.js.map +0 -1
- package/dist/host/git.d.ts +0 -200
- package/dist/host/git.d.ts.map +0 -1
- package/dist/host/git.js +0 -15
- package/dist/host/git.js.map +0 -1
- package/dist/host/index.d.ts.map +0 -1
- package/dist/host/types.d.ts +0 -232
- package/dist/host/types.d.ts.map +0 -1
- package/dist/host/types.js +0 -10
- package/dist/host/types.js.map +0 -1
- package/dist/host/wire-policy.d.ts +0 -22
- package/dist/host/wire-policy.d.ts.map +0 -1
- package/dist/host/wire-policy.js +0 -92
- package/dist/host/wire-policy.js.map +0 -1
- package/dist/index.d.ts.map +0 -1
- package/dist/mcp/index.d.ts.map +0 -1
- package/dist/mcp/types.d.ts +0 -466
- package/dist/mcp/types.d.ts.map +0 -1
- package/dist/mcp/types.js +0 -25
- package/dist/mcp/types.js.map +0 -1
- package/dist/mcp/wire.d.ts +0 -29
- package/dist/mcp/wire.d.ts.map +0 -1
- package/dist/mcp/wire.js +0 -1046
- package/dist/mcp/wire.js.map +0 -1
- package/dist/mcp/zod.d.ts.map +0 -1
- package/dist/vscode/index.d.ts.map +0 -1
- package/dist/vscode/messages.d.ts +0 -204
- package/dist/vscode/messages.d.ts.map +0 -1
- package/dist/vscode/messages.js +0 -494
- package/dist/vscode/messages.js.map +0 -1
- package/dist/workspace/index.d.ts.map +0 -1
- package/dist/workspace/reconcile-electron.d.ts +0 -19
- package/dist/workspace/reconcile-electron.d.ts.map +0 -1
- package/dist/workspace/reconcile-electron.js +0 -42
- package/dist/workspace/reconcile-electron.js.map +0 -1
- package/dist/workspace/types.d.ts +0 -69
- package/dist/workspace/types.d.ts.map +0 -1
- package/dist/workspace/types.js +0 -2
- package/dist/workspace/types.js.map +0 -1
- package/dist/workspace/workspace-manager.d.ts +0 -47
- package/dist/workspace/workspace-manager.d.ts.map +0 -1
- package/dist/workspace/workspace-manager.js +0 -126
- package/dist/workspace/workspace-manager.js.map +0 -1
- package/src/document/document-session.ts +0 -834
- package/src/document/filesystem-target.ts +0 -109
- package/src/document/index.ts +0 -41
- package/src/document/recovery-journal.ts +0 -536
- package/src/document/types.ts +0 -116
- package/src/filesystem/commit-lock.ts +0 -29
- package/src/filesystem/dbk-workspace.ts +0 -135
- package/src/filesystem/electron-provider-v2.ts +0 -630
- package/src/filesystem/electron-provider.ts +0 -99
- package/src/filesystem/electron.ts +0 -3
- package/src/filesystem/file-media-provider.ts +0 -103
- package/src/filesystem/filesystem-content-container.ts +0 -164
- package/src/filesystem/fs-error.ts +0 -234
- package/src/filesystem/index.ts +0 -143
- package/src/filesystem/indexeddb-content-container.ts +0 -112
- package/src/filesystem/indexeddb-provider-v2.ts +0 -1740
- package/src/filesystem/indexeddb-provider.ts +0 -171
- package/src/filesystem/indexeddb-store.ts +0 -207
- package/src/filesystem/indexeddb.ts +0 -12
- package/src/filesystem/legacy-v2-adapter.ts +0 -779
- package/src/filesystem/memory-provider-v2.ts +0 -896
- package/src/filesystem/memory-provider.ts +0 -180
- package/src/filesystem/memory.ts +0 -15
- package/src/filesystem/move-entry.ts +0 -142
- package/src/filesystem/move-error.ts +0 -159
- package/src/filesystem/native-provider-v2.ts +0 -1165
- package/src/filesystem/native-provider.ts +0 -537
- package/src/filesystem/native.ts +0 -16
- package/src/filesystem/types.ts +0 -114
- package/src/filesystem/v2.ts +0 -231
- package/src/filesystem/workspace-path.ts +0 -92
- package/src/host/filesystem-v2.ts +0 -104
- package/src/host/git.ts +0 -246
- package/src/host/index.ts +0 -93
- package/src/host/types.ts +0 -274
- package/src/host/wire-policy.ts +0 -103
- package/src/index.ts +0 -10
- package/src/mcp/index.ts +0 -3
- package/src/mcp/types.ts +0 -594
- package/src/mcp/wire.ts +0 -1280
- package/src/mcp/zod.ts +0 -1000
- package/src/vscode/index.ts +0 -2
- package/src/vscode/messages.ts +0 -704
- package/src/workspace/index.ts +0 -17
- package/src/workspace/reconcile-electron.ts +0 -65
- package/src/workspace/types.ts +0 -67
- package/src/workspace/workspace-manager.ts +0 -151
- /package/dist/{chunk-75UUF6C4.js.map → chunk-B56KWCSE.js.map} +0 -0
- /package/dist/{chunk-EGNDADXB.js.map → chunk-MNSZ7EZN.js.map} +0 -0
|
@@ -1,385 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Synchronous crash-recovery journal for dirty document snapshots.
|
|
3
|
-
*
|
|
4
|
-
* The journal deliberately depends on a tiny injected Storage-like contract
|
|
5
|
-
* instead of reading `window.localStorage` at module load time. This keeps the
|
|
6
|
-
* document package usable in Node, Electron main, VS Code extension hosts, and
|
|
7
|
-
* tests while allowing browser renderers to use localStorage for a best-effort
|
|
8
|
-
* write that completes before the current JavaScript turn ends.
|
|
9
|
-
*/
|
|
10
|
-
export const DOCUMENT_RECOVERY_JOURNAL_STORAGE_KEY = 'docblocks:document-recovery:v1';
|
|
11
|
-
export const DOCUMENT_RECOVERY_JOURNAL_SCHEMA_VERSION = 1;
|
|
12
|
-
const DEFAULT_MAX_ENTRIES = 20;
|
|
13
|
-
const DEFAULT_MAX_STORAGE_BYTES = 2000000;
|
|
14
|
-
const DEFAULT_MAX_RECORD_BYTES = 1000000;
|
|
15
|
-
const DEFAULT_MAX_AGE_MS = 7 * 24 * 60 * 60 * 1000;
|
|
16
|
-
const DEFAULT_MAX_FUTURE_SKEW_MS = 5 * 60 * 1000;
|
|
17
|
-
const MAX_TARGET_KEY_LENGTH = 4096;
|
|
18
|
-
/**
|
|
19
|
-
* Best-effort, synchronous recovery storage.
|
|
20
|
-
*
|
|
21
|
-
* Normal save acknowledgement is the only automatic path that removes the
|
|
22
|
-
* current record. Explicit discard, age expiry, corruption repair, and bounded
|
|
23
|
-
* eviction are intentional exceptions: callers can discard after the user
|
|
24
|
-
* rejects recovery, and the journal must never grow without limit.
|
|
25
|
-
*/
|
|
26
|
-
export class DocumentRecoveryJournal {
|
|
27
|
-
constructor(storage, options = {}) {
|
|
28
|
-
this.storage = storage;
|
|
29
|
-
this.storageKey = options.storageKey?.trim() || DOCUMENT_RECOVERY_JOURNAL_STORAGE_KEY;
|
|
30
|
-
this.maxEntries = positiveInteger(options.maxEntries, DEFAULT_MAX_ENTRIES);
|
|
31
|
-
this.maxStorageBytes = positiveInteger(options.maxStorageBytes, DEFAULT_MAX_STORAGE_BYTES);
|
|
32
|
-
this.maxRecordBytes = Math.min(positiveInteger(options.maxRecordBytes, DEFAULT_MAX_RECORD_BYTES), this.maxStorageBytes);
|
|
33
|
-
this.maxAgeMs = nonNegativeFinite(options.maxAgeMs, DEFAULT_MAX_AGE_MS);
|
|
34
|
-
this.maxFutureSkewMs = nonNegativeFinite(options.maxFutureSkewMs, DEFAULT_MAX_FUTURE_SKEW_MS);
|
|
35
|
-
this.now = options.now ?? Date.now;
|
|
36
|
-
}
|
|
37
|
-
/**
|
|
38
|
-
* Synchronously persist the latest dirty snapshot for a target.
|
|
39
|
-
* Storage/quota failures are returned, never thrown into an editor onChange.
|
|
40
|
-
*/
|
|
41
|
-
write(input) {
|
|
42
|
-
const timestamp = this.now();
|
|
43
|
-
if (!isValidWrite(input) || !Number.isFinite(timestamp) || timestamp < 0) {
|
|
44
|
-
return { status: 'rejected', reason: 'invalid-record', evicted: 0 };
|
|
45
|
-
}
|
|
46
|
-
if (!this.storage) {
|
|
47
|
-
return { status: 'rejected', reason: 'storage-unavailable', evicted: 0 };
|
|
48
|
-
}
|
|
49
|
-
if (estimatedBytes(input.content) > this.maxRecordBytes ||
|
|
50
|
-
(input.persistedContent !== null &&
|
|
51
|
-
estimatedBytes(input.persistedContent) > this.maxRecordBytes)) {
|
|
52
|
-
return { status: 'rejected', reason: 'record-too-large', evicted: 0 };
|
|
53
|
-
}
|
|
54
|
-
const loaded = this.load(timestamp);
|
|
55
|
-
const existing = loaded.records.find((record) => record.targetKey === input.targetKey);
|
|
56
|
-
if (existing) {
|
|
57
|
-
const ordering = compareGenerationRevision(input, existing);
|
|
58
|
-
if (ordering < 0)
|
|
59
|
-
return { status: 'ignored-stale', evicted: 0 };
|
|
60
|
-
if (ordering === 0) {
|
|
61
|
-
if (existing.content === input.content &&
|
|
62
|
-
existing.persistedContent === input.persistedContent) {
|
|
63
|
-
return { status: 'unchanged', evicted: 0 };
|
|
64
|
-
}
|
|
65
|
-
// A revision is an immutable content snapshot. Reusing it for different
|
|
66
|
-
// content would make acknowledgement and recovery ambiguous.
|
|
67
|
-
return { status: 'rejected', reason: 'invalid-record', evicted: 0 };
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
const candidate = {
|
|
71
|
-
targetKey: input.targetKey,
|
|
72
|
-
generation: input.generation,
|
|
73
|
-
revision: input.revision,
|
|
74
|
-
content: input.content,
|
|
75
|
-
persistedContent: input.persistedContent,
|
|
76
|
-
createdAt: existing?.createdAt ?? timestamp,
|
|
77
|
-
updatedAt: timestamp,
|
|
78
|
-
};
|
|
79
|
-
if (estimatedBytes(JSON.stringify(candidate)) > this.maxRecordBytes) {
|
|
80
|
-
return { status: 'rejected', reason: 'record-too-large', evicted: 0 };
|
|
81
|
-
}
|
|
82
|
-
if (estimatedBytes(serializeEnvelope([candidate])) > this.maxStorageBytes) {
|
|
83
|
-
return { status: 'rejected', reason: 'record-too-large', evicted: 0 };
|
|
84
|
-
}
|
|
85
|
-
const next = loaded.records.filter((record) => record.targetKey !== input.targetKey);
|
|
86
|
-
next.push(candidate);
|
|
87
|
-
const persisted = this.persistBounded(next, input.targetKey);
|
|
88
|
-
if (!persisted.stored) {
|
|
89
|
-
return {
|
|
90
|
-
status: 'rejected',
|
|
91
|
-
reason: persisted.reason ?? 'quota-exceeded',
|
|
92
|
-
evicted: persisted.evicted,
|
|
93
|
-
};
|
|
94
|
-
}
|
|
95
|
-
return { status: 'stored', evicted: persisted.evicted };
|
|
96
|
-
}
|
|
97
|
-
/** Return the recoverable snapshot for one target, if present and valid. */
|
|
98
|
-
lookup(targetKey, generation) {
|
|
99
|
-
if (!isValidTargetKey(targetKey) || !isOptionalGeneration(generation))
|
|
100
|
-
return null;
|
|
101
|
-
const record = this.load(this.now()).records.find((candidate) => candidate.targetKey === targetKey &&
|
|
102
|
-
(generation === undefined || candidate.generation === generation));
|
|
103
|
-
return record ? cloneRecord(record) : null;
|
|
104
|
-
}
|
|
105
|
-
/** List valid records, newest first. Optionally restrict to one target. */
|
|
106
|
-
list(targetKey) {
|
|
107
|
-
if (targetKey !== undefined && !isValidTargetKey(targetKey))
|
|
108
|
-
return [];
|
|
109
|
-
return this.load(this.now())
|
|
110
|
-
.records.filter((record) => targetKey === undefined || record.targetKey === targetKey)
|
|
111
|
-
.sort(compareNewestFirst)
|
|
112
|
-
.map(cloneRecord);
|
|
113
|
-
}
|
|
114
|
-
/**
|
|
115
|
-
* Clear a record only when the same generation has durably acknowledged at
|
|
116
|
-
* least the journaled revision. A stale acknowledgement cannot erase a newer
|
|
117
|
-
* crash-recovery snapshot.
|
|
118
|
-
*/
|
|
119
|
-
acknowledge(input) {
|
|
120
|
-
if (!isValidAcknowledgement(input) || !this.storage)
|
|
121
|
-
return false;
|
|
122
|
-
const records = this.load(this.now()).records;
|
|
123
|
-
const record = records.find((candidate) => candidate.targetKey === input.targetKey);
|
|
124
|
-
if (!record ||
|
|
125
|
-
record.generation !== input.generation ||
|
|
126
|
-
record.revision > input.persistedRevision) {
|
|
127
|
-
return false;
|
|
128
|
-
}
|
|
129
|
-
return this.persistExact(records.filter((candidate) => candidate !== record));
|
|
130
|
-
}
|
|
131
|
-
/** Explicitly discard recovery data after a user or lifecycle decision. */
|
|
132
|
-
discard(targetKey, generation) {
|
|
133
|
-
if (!isValidTargetKey(targetKey) || !isOptionalGeneration(generation) || !this.storage) {
|
|
134
|
-
return false;
|
|
135
|
-
}
|
|
136
|
-
const records = this.load(this.now()).records;
|
|
137
|
-
const next = records.filter((record) => record.targetKey !== targetKey ||
|
|
138
|
-
(generation !== undefined && record.generation !== generation));
|
|
139
|
-
if (next.length === records.length)
|
|
140
|
-
return false;
|
|
141
|
-
return this.persistExact(next);
|
|
142
|
-
}
|
|
143
|
-
load(timestamp) {
|
|
144
|
-
if (!this.storage)
|
|
145
|
-
return { records: [], needsRepair: false };
|
|
146
|
-
let raw;
|
|
147
|
-
try {
|
|
148
|
-
raw = this.storage.getItem(this.storageKey);
|
|
149
|
-
}
|
|
150
|
-
catch {
|
|
151
|
-
return { records: [], needsRepair: false };
|
|
152
|
-
}
|
|
153
|
-
if (raw === null)
|
|
154
|
-
return { records: [], needsRepair: false };
|
|
155
|
-
let parsed;
|
|
156
|
-
try {
|
|
157
|
-
parsed = JSON.parse(raw);
|
|
158
|
-
}
|
|
159
|
-
catch {
|
|
160
|
-
this.tryRemove();
|
|
161
|
-
return { records: [], needsRepair: true };
|
|
162
|
-
}
|
|
163
|
-
if (!isEnvelope(parsed)) {
|
|
164
|
-
this.tryRemove();
|
|
165
|
-
return { records: [], needsRepair: true };
|
|
166
|
-
}
|
|
167
|
-
const byTarget = new Map();
|
|
168
|
-
let needsRepair = estimatedBytes(raw) > this.maxStorageBytes;
|
|
169
|
-
for (const candidate of parsed.records) {
|
|
170
|
-
if (!isValidStoredRecord(candidate, timestamp, this.maxAgeMs, this.maxFutureSkewMs)) {
|
|
171
|
-
needsRepair = true;
|
|
172
|
-
continue;
|
|
173
|
-
}
|
|
174
|
-
if (estimatedBytes(JSON.stringify(candidate)) > this.maxRecordBytes) {
|
|
175
|
-
needsRepair = true;
|
|
176
|
-
continue;
|
|
177
|
-
}
|
|
178
|
-
const current = byTarget.get(candidate.targetKey);
|
|
179
|
-
if (!current || compareStoredRecords(candidate, current) > 0) {
|
|
180
|
-
if (current)
|
|
181
|
-
needsRepair = true;
|
|
182
|
-
byTarget.set(candidate.targetKey, cloneRecord(candidate));
|
|
183
|
-
}
|
|
184
|
-
else {
|
|
185
|
-
needsRepair = true;
|
|
186
|
-
}
|
|
187
|
-
}
|
|
188
|
-
const records = [...byTarget.values()].sort(compareNewestFirst);
|
|
189
|
-
while (records.length > this.maxEntries) {
|
|
190
|
-
records.pop();
|
|
191
|
-
needsRepair = true;
|
|
192
|
-
}
|
|
193
|
-
while (records.length > 0 &&
|
|
194
|
-
estimatedBytes(serializeEnvelope(records)) > this.maxStorageBytes) {
|
|
195
|
-
records.pop();
|
|
196
|
-
needsRepair = true;
|
|
197
|
-
}
|
|
198
|
-
if (needsRepair) {
|
|
199
|
-
// Best effort only. Read APIs must still return the validated in-memory
|
|
200
|
-
// records even when storage is temporarily unavailable.
|
|
201
|
-
this.persistBounded(records);
|
|
202
|
-
}
|
|
203
|
-
return { records, needsRepair };
|
|
204
|
-
}
|
|
205
|
-
persistBounded(records, protectedTarget) {
|
|
206
|
-
if (!this.storage) {
|
|
207
|
-
return { stored: false, evicted: 0, reason: 'storage-unavailable' };
|
|
208
|
-
}
|
|
209
|
-
const next = [...records].sort(compareNewestFirst);
|
|
210
|
-
let evicted = 0;
|
|
211
|
-
while (next.length > this.maxEntries) {
|
|
212
|
-
if (!evictOldest(next, protectedTarget))
|
|
213
|
-
break;
|
|
214
|
-
evicted += 1;
|
|
215
|
-
}
|
|
216
|
-
let serialized = serializeEnvelope(next);
|
|
217
|
-
while (estimatedBytes(serialized) > this.maxStorageBytes) {
|
|
218
|
-
if (!evictOldest(next, protectedTarget)) {
|
|
219
|
-
return { stored: false, evicted, reason: 'quota-exceeded' };
|
|
220
|
-
}
|
|
221
|
-
evicted += 1;
|
|
222
|
-
serialized = serializeEnvelope(next);
|
|
223
|
-
}
|
|
224
|
-
for (;;) {
|
|
225
|
-
try {
|
|
226
|
-
this.storage.setItem(this.storageKey, serialized);
|
|
227
|
-
return { stored: true, evicted };
|
|
228
|
-
}
|
|
229
|
-
catch {
|
|
230
|
-
if (!evictOldest(next, protectedTarget)) {
|
|
231
|
-
return { stored: false, evicted, reason: 'quota-exceeded' };
|
|
232
|
-
}
|
|
233
|
-
evicted += 1;
|
|
234
|
-
serialized = serializeEnvelope(next);
|
|
235
|
-
}
|
|
236
|
-
}
|
|
237
|
-
}
|
|
238
|
-
persistExact(records) {
|
|
239
|
-
if (!this.storage)
|
|
240
|
-
return false;
|
|
241
|
-
if (records.length === 0) {
|
|
242
|
-
try {
|
|
243
|
-
this.storage.removeItem(this.storageKey);
|
|
244
|
-
return true;
|
|
245
|
-
}
|
|
246
|
-
catch {
|
|
247
|
-
return false;
|
|
248
|
-
}
|
|
249
|
-
}
|
|
250
|
-
try {
|
|
251
|
-
this.storage.setItem(this.storageKey, serializeEnvelope(records));
|
|
252
|
-
return true;
|
|
253
|
-
}
|
|
254
|
-
catch {
|
|
255
|
-
return false;
|
|
256
|
-
}
|
|
257
|
-
}
|
|
258
|
-
tryRemove() {
|
|
259
|
-
try {
|
|
260
|
-
this.storage?.removeItem(this.storageKey);
|
|
261
|
-
}
|
|
262
|
-
catch {
|
|
263
|
-
// Recovery is best effort; a denied cleanup must not fail application startup.
|
|
264
|
-
}
|
|
265
|
-
}
|
|
266
|
-
}
|
|
267
|
-
/**
|
|
268
|
-
* Resolve browser localStorage on demand. Importing this module never touches
|
|
269
|
-
* browser globals, and access errors (sandboxing/security settings) yield null.
|
|
270
|
-
*/
|
|
271
|
-
export function getDefaultDocumentRecoveryStorage() {
|
|
272
|
-
try {
|
|
273
|
-
const candidate = Reflect.get(globalThis, 'localStorage');
|
|
274
|
-
if (!isStorage(candidate))
|
|
275
|
-
return null;
|
|
276
|
-
return candidate;
|
|
277
|
-
}
|
|
278
|
-
catch {
|
|
279
|
-
return null;
|
|
280
|
-
}
|
|
281
|
-
}
|
|
282
|
-
function serializeEnvelope(records) {
|
|
283
|
-
const envelope = {
|
|
284
|
-
schemaVersion: DOCUMENT_RECOVERY_JOURNAL_SCHEMA_VERSION,
|
|
285
|
-
records,
|
|
286
|
-
};
|
|
287
|
-
return JSON.stringify(envelope);
|
|
288
|
-
}
|
|
289
|
-
/** localStorage quotas are commonly measured from UTF-16 storage usage. */
|
|
290
|
-
function estimatedBytes(value) {
|
|
291
|
-
return value.length * 2;
|
|
292
|
-
}
|
|
293
|
-
function positiveInteger(value, fallback) {
|
|
294
|
-
return Number.isSafeInteger(value) && (value ?? 0) > 0 ? value : fallback;
|
|
295
|
-
}
|
|
296
|
-
function nonNegativeFinite(value, fallback) {
|
|
297
|
-
return Number.isFinite(value) && (value ?? -1) >= 0 ? value : fallback;
|
|
298
|
-
}
|
|
299
|
-
function isEnvelope(value) {
|
|
300
|
-
if (!isObject(value))
|
|
301
|
-
return false;
|
|
302
|
-
return (value.schemaVersion === DOCUMENT_RECOVERY_JOURNAL_SCHEMA_VERSION && Array.isArray(value.records));
|
|
303
|
-
}
|
|
304
|
-
function isValidStoredRecord(value, timestamp, maxAgeMs, maxFutureSkewMs) {
|
|
305
|
-
if (!isObject(value))
|
|
306
|
-
return false;
|
|
307
|
-
if (!isValidTargetKey(value.targetKey) ||
|
|
308
|
-
!isNonNegativeSafeInteger(value.generation) ||
|
|
309
|
-
!isNonNegativeSafeInteger(value.revision) ||
|
|
310
|
-
typeof value.content !== 'string' ||
|
|
311
|
-
(value.persistedContent !== null && typeof value.persistedContent !== 'string') ||
|
|
312
|
-
!isNonNegativeFiniteNumber(value.createdAt) ||
|
|
313
|
-
!isNonNegativeFiniteNumber(value.updatedAt) ||
|
|
314
|
-
value.createdAt > value.updatedAt) {
|
|
315
|
-
return false;
|
|
316
|
-
}
|
|
317
|
-
if (!Number.isFinite(timestamp) || timestamp < 0)
|
|
318
|
-
return false;
|
|
319
|
-
if (value.updatedAt > timestamp + maxFutureSkewMs)
|
|
320
|
-
return false;
|
|
321
|
-
return timestamp - value.updatedAt <= maxAgeMs;
|
|
322
|
-
}
|
|
323
|
-
function isValidWrite(value) {
|
|
324
|
-
return (isValidTargetKey(value.targetKey) &&
|
|
325
|
-
isNonNegativeSafeInteger(value.generation) &&
|
|
326
|
-
isNonNegativeSafeInteger(value.revision) &&
|
|
327
|
-
typeof value.content === 'string' &&
|
|
328
|
-
(value.persistedContent === null || typeof value.persistedContent === 'string'));
|
|
329
|
-
}
|
|
330
|
-
function isValidAcknowledgement(value) {
|
|
331
|
-
return (isValidTargetKey(value.targetKey) &&
|
|
332
|
-
isNonNegativeSafeInteger(value.generation) &&
|
|
333
|
-
isNonNegativeSafeInteger(value.persistedRevision));
|
|
334
|
-
}
|
|
335
|
-
function isValidTargetKey(value) {
|
|
336
|
-
return typeof value === 'string' && value.length > 0 && value.length <= MAX_TARGET_KEY_LENGTH;
|
|
337
|
-
}
|
|
338
|
-
function isOptionalGeneration(value) {
|
|
339
|
-
return value === undefined || isNonNegativeSafeInteger(value);
|
|
340
|
-
}
|
|
341
|
-
function isNonNegativeSafeInteger(value) {
|
|
342
|
-
return typeof value === 'number' && Number.isSafeInteger(value) && value >= 0;
|
|
343
|
-
}
|
|
344
|
-
function isNonNegativeFiniteNumber(value) {
|
|
345
|
-
return typeof value === 'number' && Number.isFinite(value) && value >= 0;
|
|
346
|
-
}
|
|
347
|
-
function isObject(value) {
|
|
348
|
-
return typeof value === 'object' && value !== null;
|
|
349
|
-
}
|
|
350
|
-
function isStorage(value) {
|
|
351
|
-
if (!isObject(value))
|
|
352
|
-
return false;
|
|
353
|
-
return (typeof value.getItem === 'function' &&
|
|
354
|
-
typeof value.setItem === 'function' &&
|
|
355
|
-
typeof value.removeItem === 'function');
|
|
356
|
-
}
|
|
357
|
-
function compareGenerationRevision(left, right) {
|
|
358
|
-
if (left.generation !== right.generation)
|
|
359
|
-
return left.generation - right.generation;
|
|
360
|
-
return left.revision - right.revision;
|
|
361
|
-
}
|
|
362
|
-
function compareStoredRecords(left, right) {
|
|
363
|
-
return compareGenerationRevision(left, right) || left.updatedAt - right.updatedAt;
|
|
364
|
-
}
|
|
365
|
-
function compareNewestFirst(left, right) {
|
|
366
|
-
return right.updatedAt - left.updatedAt || right.revision - left.revision;
|
|
367
|
-
}
|
|
368
|
-
function cloneRecord(record) {
|
|
369
|
-
return { ...record };
|
|
370
|
-
}
|
|
371
|
-
function evictOldest(records, protectedTarget) {
|
|
372
|
-
let oldestIndex = -1;
|
|
373
|
-
for (let index = 0; index < records.length; index += 1) {
|
|
374
|
-
if (records[index].targetKey === protectedTarget)
|
|
375
|
-
continue;
|
|
376
|
-
if (oldestIndex < 0 || compareNewestFirst(records[index], records[oldestIndex]) > 0) {
|
|
377
|
-
oldestIndex = index;
|
|
378
|
-
}
|
|
379
|
-
}
|
|
380
|
-
if (oldestIndex < 0)
|
|
381
|
-
return false;
|
|
382
|
-
records.splice(oldestIndex, 1);
|
|
383
|
-
return true;
|
|
384
|
-
}
|
|
385
|
-
//# sourceMappingURL=recovery-journal.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recovery-journal.js","sourceRoot":"","sources":["../../src/document/recovery-journal.ts"],"names":[],"mappings":"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"}
|
package/dist/document/types.d.ts
DELETED
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Framework-neutral document persistence contracts.
|
|
3
|
-
*
|
|
4
|
-
* A DocumentSession owns one logical document at a time. Storage-specific
|
|
5
|
-
* adapters implement DocumentCommitTarget; the session owns revisions,
|
|
6
|
-
* serialization, lifecycle transitions, and conflict state.
|
|
7
|
-
*/
|
|
8
|
-
import type { DocumentRecoveryJournal } from './recovery-journal.js';
|
|
9
|
-
export type DocumentSaveReason = 'autosave' | 'manual' | 'transition' | 'close' | 'backup' | 'conflict';
|
|
10
|
-
export type DocumentExternalVersion = string | number | null;
|
|
11
|
-
export interface DocumentCommitRequest {
|
|
12
|
-
/** Stable key for the target this commit was created for. */
|
|
13
|
-
targetKey: string;
|
|
14
|
-
/** Latest complete document snapshot to persist. */
|
|
15
|
-
content: string;
|
|
16
|
-
/** Monotonic session revision represented by content. */
|
|
17
|
-
revision: number;
|
|
18
|
-
/** Most recent revision acknowledged by this target. */
|
|
19
|
-
persistedRevision: number;
|
|
20
|
-
/** Content last acknowledged by the target, or null if it did not exist. */
|
|
21
|
-
persistedContent: string | null;
|
|
22
|
-
reason: DocumentSaveReason;
|
|
23
|
-
}
|
|
24
|
-
export interface DocumentCommitResult {
|
|
25
|
-
/** Optional backend version (mtime, TextDocument.version, etag, and so on). */
|
|
26
|
-
version?: DocumentExternalVersion;
|
|
27
|
-
}
|
|
28
|
-
export interface DocumentCommitTarget {
|
|
29
|
-
readonly key: string;
|
|
30
|
-
commit(request: DocumentCommitRequest): Promise<DocumentCommitResult | void>;
|
|
31
|
-
}
|
|
32
|
-
export type DocumentSessionStatus = 'idle' | 'saved' | 'dirty' | 'saving' | 'error' | 'conflict' | 'closed';
|
|
33
|
-
export type DocumentSessionLifecycle = 'open' | 'transitioning' | 'closing' | 'closed';
|
|
34
|
-
export interface DocumentExternalSnapshot {
|
|
35
|
-
/** Target key captured before the external read began. */
|
|
36
|
-
targetKey: string;
|
|
37
|
-
/** Monotonic observation number assigned by the target watcher. */
|
|
38
|
-
sequence?: number;
|
|
39
|
-
/** Null represents an externally deleted document. */
|
|
40
|
-
content: string | null;
|
|
41
|
-
version?: DocumentExternalVersion;
|
|
42
|
-
}
|
|
43
|
-
export interface DocumentSessionConflict {
|
|
44
|
-
targetKey: string;
|
|
45
|
-
localContent: string;
|
|
46
|
-
localRevision: number;
|
|
47
|
-
externalContent: string | null;
|
|
48
|
-
externalVersion: DocumentExternalVersion;
|
|
49
|
-
}
|
|
50
|
-
export interface DocumentSessionSnapshot {
|
|
51
|
-
targetKey: string | null;
|
|
52
|
-
content: string;
|
|
53
|
-
revision: number;
|
|
54
|
-
persistedRevision: number;
|
|
55
|
-
persistedContent: string | null;
|
|
56
|
-
savingRevision: number | null;
|
|
57
|
-
generation: number;
|
|
58
|
-
status: DocumentSessionStatus;
|
|
59
|
-
lifecycle: DocumentSessionLifecycle;
|
|
60
|
-
frozen: boolean;
|
|
61
|
-
error: Error | null;
|
|
62
|
-
conflict: DocumentSessionConflict | null;
|
|
63
|
-
}
|
|
64
|
-
export interface DocumentSessionOptions {
|
|
65
|
-
autoSaveDelayMs?: number;
|
|
66
|
-
/** Whether edits schedule automatic persistence. Manual and lifecycle flushes remain available. */
|
|
67
|
-
autoSaveEnabled?: boolean;
|
|
68
|
-
/**
|
|
69
|
-
* Bounded delays used after an automatic save fails. Each entry permits
|
|
70
|
-
* one retry; exhausting the list leaves the session in error state until
|
|
71
|
-
* the user edits again or explicitly flushes it. Conflicts never retry.
|
|
72
|
-
*/
|
|
73
|
-
autoSaveRetryDelaysMs?: readonly number[];
|
|
74
|
-
/** Optional synchronous crash-recovery journal owned by this session. */
|
|
75
|
-
recoveryJournal?: DocumentRecoveryJournal | null;
|
|
76
|
-
}
|
|
77
|
-
/** Scope captured by an editor instance when it mounts. */
|
|
78
|
-
export interface DocumentSessionEditScope {
|
|
79
|
-
targetKey: string;
|
|
80
|
-
generation: number;
|
|
81
|
-
}
|
|
82
|
-
/** Result produced while a session transition is frozen. */
|
|
83
|
-
export interface DocumentSessionTransition {
|
|
84
|
-
target: DocumentCommitTarget | null;
|
|
85
|
-
content: string;
|
|
86
|
-
}
|
|
87
|
-
export type DocumentExternalChangeResult = 'applied' | 'conflict' | 'ignored';
|
|
88
|
-
export type DocumentConflictStrategy = 'use-local' | 'use-external';
|
|
89
|
-
//# sourceMappingURL=types.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/document/types.ts"],"names":[],"mappings":"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"}
|
package/dist/document/types.js
DELETED
|
@@ -1,9 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* Framework-neutral document persistence contracts.
|
|
3
|
-
*
|
|
4
|
-
* A DocumentSession owns one logical document at a time. Storage-specific
|
|
5
|
-
* adapters implement DocumentCommitTarget; the session owns revisions,
|
|
6
|
-
* serialization, lifecycle transitions, and conflict state.
|
|
7
|
-
*/
|
|
8
|
-
export {};
|
|
9
|
-
//# sourceMappingURL=types.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"types.js","sourceRoot":"","sources":["../../src/document/types.ts"],"names":[],"mappings":"AAAA;;;;;;GAMG"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commit-lock.d.ts","sourceRoot":"","sources":["../../src/filesystem/commit-lock.ts"],"names":[],"mappings":"AAQA,gFAAgF;AAChF,wBAAsB,kBAAkB,CAAC,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,OAAO,CAAC,CAAC,CAAC,GAAG,OAAO,CAAC,CAAC,CAAC,CAmBhG"}
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
const localTails = new Map();
|
|
2
|
-
/** Serialize conditional commits across providers and, when available, tabs. */
|
|
3
|
-
export async function withFileCommitLock(key, operation) {
|
|
4
|
-
const lockManager = typeof navigator === 'undefined' ? undefined : navigator.locks;
|
|
5
|
-
if (lockManager) {
|
|
6
|
-
return lockManager.request(`docblocks:${key}`, operation);
|
|
7
|
-
}
|
|
8
|
-
const previous = localTails.get(key) ?? Promise.resolve();
|
|
9
|
-
const run = previous.then(operation, operation);
|
|
10
|
-
const tail = run.then(() => undefined, () => undefined);
|
|
11
|
-
localTails.set(key, tail);
|
|
12
|
-
try {
|
|
13
|
-
return await run;
|
|
14
|
-
}
|
|
15
|
-
finally {
|
|
16
|
-
if (localTails.get(key) === tail)
|
|
17
|
-
localTails.delete(key);
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
//# sourceMappingURL=commit-lock.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"commit-lock.js","sourceRoot":"","sources":["../../src/filesystem/commit-lock.ts"],"names":[],"mappings":"AAMA,MAAM,UAAU,GAAG,IAAI,GAAG,EAAyB,CAAC;AAEpD,gFAAgF;AAChF,MAAM,CAAC,KAAK,UAAU,kBAAkB,CAAI,GAAW,EAAE,SAA2B;IAClF,MAAM,WAAW,GACf,OAAO,SAAS,KAAK,WAAW,CAAC,CAAC,CAAC,SAAS,CAAC,CAAC,CAAE,SAA2B,CAAC,KAAK,CAAC;IACpF,IAAI,WAAW,EAAE,CAAC;QAChB,OAAO,WAAW,CAAC,OAAO,CAAC,aAAa,GAAG,EAAE,EAAE,SAAS,CAAC,CAAC;IAC5D,CAAC;IAED,MAAM,QAAQ,GAAG,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,IAAI,OAAO,CAAC,OAAO,EAAE,CAAC;IAC1D,MAAM,GAAG,GAAG,QAAQ,CAAC,IAAI,CAAC,SAAS,EAAE,SAAS,CAAC,CAAC;IAChD,MAAM,IAAI,GAAG,GAAG,CAAC,IAAI,CACnB,GAAG,EAAE,CAAC,SAAS,EACf,GAAG,EAAE,CAAC,SAAS,CAChB,CAAC;IACF,UAAU,CAAC,GAAG,CAAC,GAAG,EAAE,IAAI,CAAC,CAAC;IAC1B,IAAI,CAAC;QACH,OAAO,MAAM,GAAG,CAAC;IACnB,CAAC;YAAS,CAAC;QACT,IAAI,UAAU,CAAC,GAAG,CAAC,GAAG,CAAC,KAAK,IAAI;YAAE,UAAU,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IAC3D,CAAC;AACH,CAAC"}
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
import type { ContentContainer } from '@bendyline/squisq/storage';
|
|
2
|
-
import type { MemoryFileSystemProvider, MemoryFileSystemSnapshot } from './memory-provider.js';
|
|
3
|
-
export type DbkWorkspaceAssetLayout = 'auto' | 'preserve' | 'companion';
|
|
4
|
-
export interface DbkWorkspaceSnapshotOptions {
|
|
5
|
-
/** Provider-relative path of the transient workspace's active markdown file. */
|
|
6
|
-
targetDocumentPath: string;
|
|
7
|
-
/**
|
|
8
|
-
* `preserve` treats the DBK as a serialized workspace tree. `companion`
|
|
9
|
-
* rebases non-document files beneath `<document>_files/`. `auto` preserves
|
|
10
|
-
* a DBK whose primary path already matches the target, otherwise rebasing
|
|
11
|
-
* imported media into the companion directory.
|
|
12
|
-
*/
|
|
13
|
-
assetLayout?: DbkWorkspaceAssetLayout;
|
|
14
|
-
}
|
|
15
|
-
export interface DbkWorkspaceSnapshot extends MemoryFileSystemSnapshot {
|
|
16
|
-
readonly sourceDocumentPath: string;
|
|
17
|
-
readonly targetDocumentPath: string;
|
|
18
|
-
readonly documentContent: string;
|
|
19
|
-
readonly assetLayout: Exclude<DbkWorkspaceAssetLayout, 'auto'>;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* Fully materialize and validate a DBK container before touching its target
|
|
23
|
-
* provider. A missing or unreadable entry fails the snapshot as a whole.
|
|
24
|
-
*/
|
|
25
|
-
export declare function createDbkWorkspaceSnapshot(source: ContentContainer, options: DbkWorkspaceSnapshotOptions): Promise<DbkWorkspaceSnapshot>;
|
|
26
|
-
/**
|
|
27
|
-
* Replace a transient DBK workspace as one logical operation.
|
|
28
|
-
*
|
|
29
|
-
* Container reads and validation happen before provider mutation. The memory
|
|
30
|
-
* provider then stages and swaps the full tree synchronously, which removes
|
|
31
|
-
* stale files and guarantees the old tree survives any failed replacement.
|
|
32
|
-
*/
|
|
33
|
-
export declare function replaceMemoryWorkspaceFromDbk(provider: MemoryFileSystemProvider, source: ContentContainer, options: DbkWorkspaceSnapshotOptions): Promise<DbkWorkspaceSnapshot>;
|
|
34
|
-
//# sourceMappingURL=dbk-workspace.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"dbk-workspace.d.ts","sourceRoot":"","sources":["../../src/filesystem/dbk-workspace.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,gBAAgB,EAAE,MAAM,2BAA2B,CAAC;AAElE,OAAO,KAAK,EACV,wBAAwB,EACxB,wBAAwB,EAEzB,MAAM,sBAAsB,CAAC;AAE9B,MAAM,MAAM,uBAAuB,GAAG,MAAM,GAAG,UAAU,GAAG,WAAW,CAAC;AAExE,MAAM,WAAW,2BAA2B;IAC1C,gFAAgF;IAChF,kBAAkB,EAAE,MAAM,CAAC;IAC3B;;;;;OAKG;IACH,WAAW,CAAC,EAAE,uBAAuB,CAAC;CACvC;AAED,MAAM,WAAW,oBAAqB,SAAQ,wBAAwB;IACpE,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,kBAAkB,EAAE,MAAM,CAAC;IACpC,QAAQ,CAAC,eAAe,EAAE,MAAM,CAAC;IACjC,QAAQ,CAAC,WAAW,EAAE,OAAO,CAAC,uBAAuB,EAAE,MAAM,CAAC,CAAC;CAChE;AAkBD;;;GAGG;AACH,wBAAsB,0BAA0B,CAC9C,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC,CAgE/B;AAED;;;;;;GAMG;AACH,wBAAsB,6BAA6B,CACjD,QAAQ,EAAE,wBAAwB,EAClC,MAAM,EAAE,gBAAgB,EACxB,OAAO,EAAE,2BAA2B,GACnC,OAAO,CAAC,oBAAoB,CAAC,CAK/B"}
|