@minnowdb/core 0.1.1 → 0.2.1
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/README.md +12 -9
- package/dist/engine/client.d.ts +10 -1
- package/dist/engine/client.d.ts.map +1 -1
- package/dist/engine/client.js +30 -5
- package/dist/engine/client.js.map +1 -1
- package/dist/engine/database.d.ts +55 -6
- package/dist/engine/database.d.ts.map +1 -1
- package/dist/engine/database.js +2689 -898
- package/dist/engine/database.js.map +1 -1
- package/dist/engine/live.d.ts +6 -2
- package/dist/engine/live.d.ts.map +1 -1
- package/dist/engine/live.js +35 -11
- package/dist/engine/live.js.map +1 -1
- package/dist/engine/query-cache.d.ts +13 -1
- package/dist/engine/query-cache.d.ts.map +1 -1
- package/dist/engine/query-cache.js +34 -5
- package/dist/engine/query-cache.js.map +1 -1
- package/dist/engine/query.d.ts +13 -1
- package/dist/engine/query.d.ts.map +1 -1
- package/dist/engine/query.js +73 -46
- package/dist/engine/query.js.map +1 -1
- package/dist/engine/result-wire.d.ts +68 -0
- package/dist/engine/result-wire.d.ts.map +1 -0
- package/dist/engine/result-wire.js +264 -0
- package/dist/engine/result-wire.js.map +1 -0
- package/dist/engine/sort-keys.d.ts +50 -12
- package/dist/engine/sort-keys.d.ts.map +1 -1
- package/dist/engine/sort-keys.js +371 -25
- package/dist/engine/sort-keys.js.map +1 -1
- package/dist/engine/vector.d.ts +11 -0
- package/dist/engine/vector.d.ts.map +1 -1
- package/dist/engine/vector.js +99 -203
- package/dist/engine/vector.js.map +1 -1
- package/dist/engine/worker-host.d.ts +17 -1
- package/dist/engine/worker-host.d.ts.map +1 -1
- package/dist/engine/worker-host.js +87 -13
- package/dist/engine/worker-host.js.map +1 -1
- package/dist/storage/index.d.ts +13 -0
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +13 -0
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/indexeddb.d.ts +5 -1
- package/dist/storage/indexeddb.d.ts.map +1 -1
- package/dist/storage/indexeddb.js +484 -402
- package/dist/storage/indexeddb.js.map +1 -1
- package/dist/storage/memory.d.ts +24 -21
- package/dist/storage/memory.d.ts.map +1 -1
- package/dist/storage/memory.js +124 -1199
- package/dist/storage/memory.js.map +1 -1
- package/dist/storage/opfs/files.d.ts +64 -0
- package/dist/storage/opfs/files.d.ts.map +1 -0
- package/dist/storage/opfs/files.js +243 -0
- package/dist/storage/opfs/files.js.map +1 -0
- package/dist/storage/opfs/index.d.ts +3 -0
- package/dist/storage/opfs/index.d.ts.map +1 -0
- package/dist/storage/opfs/index.js +3 -0
- package/dist/storage/opfs/index.js.map +1 -0
- package/dist/storage/opfs/leader.d.ts +130 -0
- package/dist/storage/opfs/leader.d.ts.map +1 -0
- package/dist/storage/opfs/leader.js +1104 -0
- package/dist/storage/opfs/leader.js.map +1 -0
- package/dist/storage/opfs/rpc.d.ts +70 -0
- package/dist/storage/opfs/rpc.d.ts.map +1 -0
- package/dist/storage/opfs/rpc.js +58 -0
- package/dist/storage/opfs/rpc.js.map +1 -0
- package/dist/storage/opfs/store.d.ts +154 -0
- package/dist/storage/opfs/store.d.ts.map +1 -0
- package/dist/storage/opfs/store.js +958 -0
- package/dist/storage/opfs/store.js.map +1 -0
- package/dist/storage/toolkit/extents.d.ts +69 -0
- package/dist/storage/toolkit/extents.d.ts.map +1 -0
- package/dist/storage/toolkit/extents.js +175 -0
- package/dist/storage/toolkit/extents.js.map +1 -0
- package/dist/storage/toolkit/index.d.ts +30 -0
- package/dist/storage/toolkit/index.d.ts.map +1 -0
- package/dist/storage/toolkit/index.js +5 -0
- package/dist/storage/toolkit/index.js.map +1 -0
- package/dist/storage/toolkit/record-core.d.ts +252 -0
- package/dist/storage/toolkit/record-core.d.ts.map +1 -0
- package/dist/storage/toolkit/record-core.js +1670 -0
- package/dist/storage/toolkit/record-core.js.map +1 -0
- package/dist/storage/toolkit/sync-file.d.ts +29 -0
- package/dist/storage/toolkit/sync-file.d.ts.map +1 -0
- package/dist/storage/toolkit/sync-file.js +2 -0
- package/dist/storage/toolkit/sync-file.js.map +1 -0
- package/dist/storage/toolkit/wal.d.ts +22 -0
- package/dist/storage/toolkit/wal.d.ts.map +1 -0
- package/dist/storage/toolkit/wal.js +79 -0
- package/dist/storage/toolkit/wal.js.map +1 -0
- package/dist/storage/toolkit/wire.d.ts +25 -0
- package/dist/storage/toolkit/wire.d.ts.map +1 -0
- package/dist/storage/toolkit/wire.js +100 -0
- package/dist/storage/toolkit/wire.js.map +1 -0
- package/dist/storage/types.d.ts +343 -59
- package/dist/storage/types.d.ts.map +1 -1
- package/dist/storage/types.js +112 -11
- package/dist/storage/types.js.map +1 -1
- package/dist/testing/block-store-conformance.d.ts +51 -0
- package/dist/testing/block-store-conformance.d.ts.map +1 -0
- package/dist/testing/block-store-conformance.js +745 -0
- package/dist/testing/block-store-conformance.js.map +1 -0
- package/dist/testing/index.d.ts +3 -0
- package/dist/testing/index.d.ts.map +1 -1
- package/dist/testing/index.js +5 -0
- package/dist/testing/index.js.map +1 -1
- package/dist/testing/opfs-shim.d.ts +35 -0
- package/dist/testing/opfs-shim.d.ts.map +1 -0
- package/dist/testing/opfs-shim.js +295 -0
- package/dist/testing/opfs-shim.js.map +1 -0
- package/dist/transactions/index.d.ts +42 -1
- package/dist/transactions/index.d.ts.map +1 -1
- package/dist/transactions/index.js +219 -13
- package/dist/transactions/index.js.map +1 -1
- package/dist/worker-protocol/index.d.ts +2 -2
- package/dist/worker-protocol/index.d.ts.map +1 -1
- package/dist/worker-protocol/index.js +2 -1
- package/dist/worker-protocol/index.js.map +1 -1
- package/package.json +10 -2
- package/sql-feature-matrix.json +8 -0
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"store.js","sourceRoot":"","sources":["../../../src/storage/opfs/store.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
import type { SyncFileHandle } from "./sync-file.js";
|
|
2
|
+
/**
|
|
3
|
+
* Packed, append-only extent files for bulk bytes — blocks and full-text base chunks.
|
|
4
|
+
*
|
|
5
|
+
* The leader appends into one tail extent through a handle it keeps open (microseconds per
|
|
6
|
+
* write) and seals it at a size threshold; sealed extents are immutable. Every payload's home
|
|
7
|
+
* is a placement — extent id, offset, length — recorded by the WAL entry that publishes it,
|
|
8
|
+
* so recovery re-derives the tail position from the replayed placements and any bytes beyond
|
|
9
|
+
* it (a crash between an extent write and its WAL frame) are dead space, overwritten by the
|
|
10
|
+
* next append.
|
|
11
|
+
*
|
|
12
|
+
* Extents assume a single writer (the OPFS adapter's leader), so holding handles — the tail's
|
|
13
|
+
* permanently, sealed ones' in a small read cache — never contends with anyone.
|
|
14
|
+
*/
|
|
15
|
+
/**
|
|
16
|
+
* How the pool opens and deletes its extent files. The OPFS adapter's `OpfsTree` satisfies it
|
|
17
|
+
* as-is; any substrate that can hand out `SyncFileHandle`s by path can host extents.
|
|
18
|
+
*/
|
|
19
|
+
export interface ExtentFiles {
|
|
20
|
+
openHandle(path: readonly string[], options: {
|
|
21
|
+
create: boolean;
|
|
22
|
+
}): Promise<SyncFileHandle>;
|
|
23
|
+
deleteFile(path: readonly string[]): Promise<boolean>;
|
|
24
|
+
}
|
|
25
|
+
export interface Placement {
|
|
26
|
+
extent: number;
|
|
27
|
+
offset: number;
|
|
28
|
+
length: number;
|
|
29
|
+
}
|
|
30
|
+
/** Persisted in checkpoints; placements in replayed WAL entries refine `tailOffset`. */
|
|
31
|
+
export interface ExtentMeta {
|
|
32
|
+
nextExtentId: number;
|
|
33
|
+
tailExtentId: number;
|
|
34
|
+
tailOffset: number;
|
|
35
|
+
/** Live payload bytes per extent id; an extent at zero that is not the tail is deletable. */
|
|
36
|
+
liveBytes: Array<readonly [number, number]>;
|
|
37
|
+
}
|
|
38
|
+
export declare class ExtentPool {
|
|
39
|
+
#private;
|
|
40
|
+
private constructor();
|
|
41
|
+
/** Opens (or creates) the tail extent. `meta` comes from the checkpoint, if any. */
|
|
42
|
+
static open(tree: ExtentFiles, meta: ExtentMeta | undefined): Promise<ExtentPool>;
|
|
43
|
+
/**
|
|
44
|
+
* Replay hook: a WAL entry recorded this placement after the checkpoint was taken. Advances
|
|
45
|
+
* the tail position and live-byte accounting to match what the writer had done.
|
|
46
|
+
*/
|
|
47
|
+
restorePlacement(placement: Placement): void;
|
|
48
|
+
/** Replay hook: the tail recorded by placements may belong to a newer extent than ours. */
|
|
49
|
+
adoptTail(extentId: number, offset: number): Promise<void>;
|
|
50
|
+
get tailExtentId(): number;
|
|
51
|
+
/** Appends synchronously; seals and rolls the tail first when it is full (the async part). */
|
|
52
|
+
append(bytes: Uint8Array, flush: boolean): Promise<Placement>;
|
|
53
|
+
read(placement: Placement): Promise<Uint8Array>;
|
|
54
|
+
/**
|
|
55
|
+
* Returns the sealed extent with the most dead space once less than half its physical bytes
|
|
56
|
+
* remain live. Relocating that extent keeps sealed-file bytes below twice live payload bytes;
|
|
57
|
+
* the append tail contributes only one bounded extent beyond that ratio.
|
|
58
|
+
*/
|
|
59
|
+
fragmentedExtentId(): Promise<number | undefined>;
|
|
60
|
+
/** Live-byte accounting for reclaimed payloads; reports extents now safe to delete. */
|
|
61
|
+
release(placements: Iterable<Placement>): number[];
|
|
62
|
+
/** Removes a drained extent's file and forgets it. Idempotent. */
|
|
63
|
+
deleteExtent(id: number): Promise<void>;
|
|
64
|
+
meta(): ExtentMeta;
|
|
65
|
+
flush(): void;
|
|
66
|
+
close(): void;
|
|
67
|
+
}
|
|
68
|
+
export declare function extentPath(id: number): string[];
|
|
69
|
+
//# sourceMappingURL=extents.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extents.d.ts","sourceRoot":"","sources":["../../../src/storage/toolkit/extents.ts"],"names":[],"mappings":"AAAA,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AAErD;;;;;;;;;;;;GAYG;AAEH;;;GAGG;AACH,MAAM,WAAW,WAAW;IAC1B,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,EAAE,OAAO,EAAE;QAAE,MAAM,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IAC3F,UAAU,CAAC,IAAI,EAAE,SAAS,MAAM,EAAE,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;CACvD;AAED,MAAM,WAAW,SAAS;IACxB,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;IACf,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,wFAAwF;AACxF,MAAM,WAAW,UAAU;IACzB,YAAY,EAAE,MAAM,CAAC;IACrB,YAAY,EAAE,MAAM,CAAC;IACrB,UAAU,EAAE,MAAM,CAAC;IACnB,6FAA6F;IAC7F,SAAS,EAAE,KAAK,CAAC,SAAS,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC;CAC7C;AAKD,qBAAa,UAAU;;IAUrB,OAAO;IAYP,oFAAoF;WACvE,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,EAAE,UAAU,GAAG,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAavF;;;OAGG;IACH,gBAAgB,CAAC,SAAS,EAAE,SAAS,GAAG,IAAI;IAc5C,2FAA2F;IACrF,SAAS,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAYhE,IAAI,YAAY,IAAI,MAAM,CAEzB;IAED,8FAA8F;IACxF,MAAM,CAAC,KAAK,EAAE,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAAC,SAAS,CAAC;IAyB7D,IAAI,CAAC,SAAS,EAAE,SAAS,GAAG,OAAO,CAAC,UAAU,CAAC;IAWrD;;;;OAIG;IACG,kBAAkB,IAAI,OAAO,CAAC,MAAM,GAAG,SAAS,CAAC;IAkCvD,uFAAuF;IACvF,OAAO,CAAC,UAAU,EAAE,QAAQ,CAAC,SAAS,CAAC,GAAG,MAAM,EAAE;IAYlD,kEAAkE;IAC5D,YAAY,CAAC,EAAE,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC;IAQ7C,IAAI,IAAI,UAAU;IASlB,KAAK,IAAI,IAAI;IAIb,KAAK,IAAI,IAAI;CAKd;AAED,wBAAgB,UAAU,CAAC,EAAE,EAAE,MAAM,GAAG,MAAM,EAAE,CAE/C"}
|
|
@@ -0,0 +1,175 @@
|
|
|
1
|
+
const SEAL_BYTES = 8 * 1024 * 1024;
|
|
2
|
+
const READ_HANDLE_CACHE = 12;
|
|
3
|
+
export class ExtentPool {
|
|
4
|
+
#tree;
|
|
5
|
+
#tailId;
|
|
6
|
+
#nextId;
|
|
7
|
+
#tailOffset;
|
|
8
|
+
#tailHandle;
|
|
9
|
+
#liveBytes = new Map();
|
|
10
|
+
/** Sealed-extent read handles, LRU by insertion order. The tail is never in here. */
|
|
11
|
+
#readHandles = new Map();
|
|
12
|
+
constructor(tree, meta, tailHandle) {
|
|
13
|
+
this.#tree = tree;
|
|
14
|
+
this.#tailId = meta.tailId;
|
|
15
|
+
this.#nextId = meta.nextId;
|
|
16
|
+
this.#tailOffset = meta.tailOffset;
|
|
17
|
+
this.#tailHandle = tailHandle;
|
|
18
|
+
}
|
|
19
|
+
/** Opens (or creates) the tail extent. `meta` comes from the checkpoint, if any. */
|
|
20
|
+
static async open(tree, meta) {
|
|
21
|
+
const tailId = meta?.tailExtentId ?? 0;
|
|
22
|
+
const nextId = meta?.nextExtentId ?? 1;
|
|
23
|
+
const tailHandle = await tree.openHandle(extentPath(tailId), { create: true });
|
|
24
|
+
const pool = new ExtentPool(tree, { tailId, nextId, tailOffset: meta?.tailOffset ?? 0 }, tailHandle);
|
|
25
|
+
for (const [id, bytes] of meta?.liveBytes ?? [])
|
|
26
|
+
pool.#liveBytes.set(id, bytes);
|
|
27
|
+
return pool;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Replay hook: a WAL entry recorded this placement after the checkpoint was taken. Advances
|
|
31
|
+
* the tail position and live-byte accounting to match what the writer had done.
|
|
32
|
+
*/
|
|
33
|
+
restorePlacement(placement) {
|
|
34
|
+
this.#liveBytes.set(placement.extent, (this.#liveBytes.get(placement.extent) ?? 0) + placement.length);
|
|
35
|
+
if (placement.extent === this.#tailId) {
|
|
36
|
+
this.#tailOffset = Math.max(this.#tailOffset, placement.offset + placement.length);
|
|
37
|
+
}
|
|
38
|
+
if (placement.extent >= this.#nextId) {
|
|
39
|
+
// The writer sealed past the checkpointed tail; adopt its numbering.
|
|
40
|
+
this.#nextId = placement.extent + 1;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
43
|
+
/** Replay hook: the tail recorded by placements may belong to a newer extent than ours. */
|
|
44
|
+
async adoptTail(extentId, offset) {
|
|
45
|
+
if (extentId === this.#tailId) {
|
|
46
|
+
this.#tailOffset = Math.max(this.#tailOffset, offset);
|
|
47
|
+
return;
|
|
48
|
+
}
|
|
49
|
+
this.#tailHandle.close();
|
|
50
|
+
this.#tailHandle = await this.#tree.openHandle(extentPath(extentId), { create: true });
|
|
51
|
+
this.#tailId = extentId;
|
|
52
|
+
this.#tailOffset = offset;
|
|
53
|
+
this.#nextId = Math.max(this.#nextId, extentId + 1);
|
|
54
|
+
}
|
|
55
|
+
get tailExtentId() {
|
|
56
|
+
return this.#tailId;
|
|
57
|
+
}
|
|
58
|
+
/** Appends synchronously; seals and rolls the tail first when it is full (the async part). */
|
|
59
|
+
async append(bytes, flush) {
|
|
60
|
+
if (this.#tailOffset > 0 && this.#tailOffset + bytes.byteLength > SEAL_BYTES) {
|
|
61
|
+
await this.#seal();
|
|
62
|
+
}
|
|
63
|
+
const placement = {
|
|
64
|
+
extent: this.#tailId,
|
|
65
|
+
offset: this.#tailOffset,
|
|
66
|
+
length: bytes.byteLength,
|
|
67
|
+
};
|
|
68
|
+
this.#tailHandle.write(bytes, { at: placement.offset });
|
|
69
|
+
if (flush)
|
|
70
|
+
this.#tailHandle.flush();
|
|
71
|
+
this.#tailOffset += bytes.byteLength;
|
|
72
|
+
this.#liveBytes.set(this.#tailId, (this.#liveBytes.get(this.#tailId) ?? 0) + bytes.byteLength);
|
|
73
|
+
return placement;
|
|
74
|
+
}
|
|
75
|
+
async #seal() {
|
|
76
|
+
this.#tailHandle.close();
|
|
77
|
+
// The now-sealed extent may still be read; it re-opens on demand through the cache.
|
|
78
|
+
this.#tailId = this.#nextId;
|
|
79
|
+
this.#nextId += 1;
|
|
80
|
+
this.#tailOffset = 0;
|
|
81
|
+
this.#tailHandle = await this.#tree.openHandle(extentPath(this.#tailId), { create: true });
|
|
82
|
+
}
|
|
83
|
+
async read(placement) {
|
|
84
|
+
const bytes = new Uint8Array(placement.length);
|
|
85
|
+
if (placement.extent === this.#tailId) {
|
|
86
|
+
this.#tailHandle.read(bytes, { at: placement.offset });
|
|
87
|
+
return bytes;
|
|
88
|
+
}
|
|
89
|
+
const handle = await this.#readHandle(placement.extent);
|
|
90
|
+
handle.read(bytes, { at: placement.offset });
|
|
91
|
+
return bytes;
|
|
92
|
+
}
|
|
93
|
+
/**
|
|
94
|
+
* Returns the sealed extent with the most dead space once less than half its physical bytes
|
|
95
|
+
* remain live. Relocating that extent keeps sealed-file bytes below twice live payload bytes;
|
|
96
|
+
* the append tail contributes only one bounded extent beyond that ratio.
|
|
97
|
+
*/
|
|
98
|
+
async fragmentedExtentId() {
|
|
99
|
+
let candidate;
|
|
100
|
+
for (const [id, liveBytes] of this.#liveBytes) {
|
|
101
|
+
if (id === this.#tailId || liveBytes === 0)
|
|
102
|
+
continue;
|
|
103
|
+
const size = (await this.#readHandle(id)).getSize();
|
|
104
|
+
if (size === 0 || liveBytes * 2 >= size)
|
|
105
|
+
continue;
|
|
106
|
+
const wasteRatio = (size - liveBytes) / size;
|
|
107
|
+
if (candidate === undefined || wasteRatio > candidate.wasteRatio) {
|
|
108
|
+
candidate = { id, wasteRatio };
|
|
109
|
+
}
|
|
110
|
+
}
|
|
111
|
+
return candidate?.id;
|
|
112
|
+
}
|
|
113
|
+
async #readHandle(extent) {
|
|
114
|
+
const cached = this.#readHandles.get(extent);
|
|
115
|
+
if (cached !== undefined) {
|
|
116
|
+
// Refresh recency.
|
|
117
|
+
this.#readHandles.delete(extent);
|
|
118
|
+
this.#readHandles.set(extent, cached);
|
|
119
|
+
return cached;
|
|
120
|
+
}
|
|
121
|
+
const handle = await this.#tree.openHandle(extentPath(extent), { create: false });
|
|
122
|
+
this.#readHandles.set(extent, handle);
|
|
123
|
+
if (this.#readHandles.size > READ_HANDLE_CACHE) {
|
|
124
|
+
const [oldest] = this.#readHandles.keys();
|
|
125
|
+
if (oldest !== undefined) {
|
|
126
|
+
this.#readHandles.get(oldest)?.close();
|
|
127
|
+
this.#readHandles.delete(oldest);
|
|
128
|
+
}
|
|
129
|
+
}
|
|
130
|
+
return handle;
|
|
131
|
+
}
|
|
132
|
+
/** Live-byte accounting for reclaimed payloads; reports extents now safe to delete. */
|
|
133
|
+
release(placements) {
|
|
134
|
+
for (const placement of placements) {
|
|
135
|
+
const remaining = (this.#liveBytes.get(placement.extent) ?? 0) - placement.length;
|
|
136
|
+
this.#liveBytes.set(placement.extent, Math.max(0, remaining));
|
|
137
|
+
}
|
|
138
|
+
const deletable = [];
|
|
139
|
+
for (const [id, bytes] of this.#liveBytes) {
|
|
140
|
+
if (bytes === 0 && id !== this.#tailId)
|
|
141
|
+
deletable.push(id);
|
|
142
|
+
}
|
|
143
|
+
return deletable;
|
|
144
|
+
}
|
|
145
|
+
/** Removes a drained extent's file and forgets it. Idempotent. */
|
|
146
|
+
async deleteExtent(id) {
|
|
147
|
+
if (id === this.#tailId)
|
|
148
|
+
return;
|
|
149
|
+
this.#readHandles.get(id)?.close();
|
|
150
|
+
this.#readHandles.delete(id);
|
|
151
|
+
this.#liveBytes.delete(id);
|
|
152
|
+
await this.#tree.deleteFile(extentPath(id));
|
|
153
|
+
}
|
|
154
|
+
meta() {
|
|
155
|
+
return {
|
|
156
|
+
nextExtentId: this.#nextId,
|
|
157
|
+
tailExtentId: this.#tailId,
|
|
158
|
+
tailOffset: this.#tailOffset,
|
|
159
|
+
liveBytes: [...this.#liveBytes.entries()],
|
|
160
|
+
};
|
|
161
|
+
}
|
|
162
|
+
flush() {
|
|
163
|
+
this.#tailHandle.flush();
|
|
164
|
+
}
|
|
165
|
+
close() {
|
|
166
|
+
this.#tailHandle.close();
|
|
167
|
+
for (const handle of this.#readHandles.values())
|
|
168
|
+
handle.close();
|
|
169
|
+
this.#readHandles.clear();
|
|
170
|
+
}
|
|
171
|
+
}
|
|
172
|
+
export function extentPath(id) {
|
|
173
|
+
return ["extents", String(id).padStart(6, "0")];
|
|
174
|
+
}
|
|
175
|
+
//# sourceMappingURL=extents.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"extents.js","sourceRoot":"","sources":["../../../src/storage/toolkit/extents.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The storage adapter toolkit: optional building blocks for implementing `BlockStore` against
|
|
3
|
+
* a new substrate. Nothing here is part of the storage contract — the contract is the
|
|
4
|
+
* `BlockStore` capability interfaces, their documented rules, and the conformance kit in
|
|
5
|
+
* `@minnowdb/core/testing` — and the engine never references this module. An adapter is free
|
|
6
|
+
* to ignore all of it and store records however its platform does best.
|
|
7
|
+
*
|
|
8
|
+
* What it offers, and which shipped adapter proves each piece:
|
|
9
|
+
*
|
|
10
|
+
* - `RecordCore` — the synchronous record-state machine behind `MemoryBlockStore` and
|
|
11
|
+
* `OpfsBlockStore`: every record family, every validation order, every typed conflict the
|
|
12
|
+
* contract requires, with `dump()`/`load()` for checkpointing. An adapter that owns a
|
|
13
|
+
* single-writer view of the records (a leader, a lone process) can wrap it and spend its
|
|
14
|
+
* own code purely on persistence.
|
|
15
|
+
* - `WalWriter` / `replayWalFrames` — checksummed write-ahead-log frames over any
|
|
16
|
+
* `SyncFileHandle`.
|
|
17
|
+
* - `ExtentPool` — packed append-only files for bulk bytes, addressed by `Placement`.
|
|
18
|
+
* - `encodeRecordJson` and the envelope codecs — JSON with bigint support, checksummed and
|
|
19
|
+
* versioned, for frames, checkpoints, and immutable chunks.
|
|
20
|
+
*
|
|
21
|
+
* `SyncFileHandle` is the only substrate assumption the file-shaped pieces make; the browser's
|
|
22
|
+
* `FileSystemSyncAccessHandle` satisfies it as-is, and so does anything with positioned
|
|
23
|
+
* synchronous I/O. See `/docs/storage/custom` for the guide.
|
|
24
|
+
*/
|
|
25
|
+
export type { SyncFileHandle } from "./sync-file.js";
|
|
26
|
+
export { RecordCore, type PhysicalBlocks, type RecordCoreState } from "./record-core.js";
|
|
27
|
+
export { WalWriter, replayWalFrames } from "./wal.js";
|
|
28
|
+
export { ExtentPool, extentPath, type ExtentFiles, type ExtentMeta, type Placement, } from "./extents.js";
|
|
29
|
+
export { LOG_FORMAT_VERSION, decodeChunk, decodeRecordJson, decodeSyncCheckpoint, encodeChunk, encodeRecordJson, encodeSyncCheckpoint, } from "./wire.js";
|
|
30
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/storage/toolkit/index.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AACH,YAAY,EAAE,cAAc,EAAE,MAAM,gBAAgB,CAAC;AACrD,OAAO,EAAE,UAAU,EAAE,KAAK,cAAc,EAAE,KAAK,eAAe,EAAE,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,UAAU,EACV,UAAU,EACV,KAAK,WAAW,EAChB,KAAK,UAAU,EACf,KAAK,SAAS,GACf,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,5 @@
|
|
|
1
|
+
export { RecordCore } from "./record-core.js";
|
|
2
|
+
export { WalWriter, replayWalFrames } from "./wal.js";
|
|
3
|
+
export { ExtentPool, extentPath, } from "./extents.js";
|
|
4
|
+
export { LOG_FORMAT_VERSION, decodeChunk, decodeRecordJson, decodeSyncCheckpoint, encodeChunk, encodeRecordJson, encodeSyncCheckpoint, } from "./wire.js";
|
|
5
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/storage/toolkit/index.ts"],"names":[],"mappings":"AAyBA,OAAO,EAAE,UAAU,EAA6C,MAAM,kBAAkB,CAAC;AACzF,OAAO,EAAE,SAAS,EAAE,eAAe,EAAE,MAAM,UAAU,CAAC;AACtD,OAAO,EACL,UAAU,EACV,UAAU,GAIX,MAAM,cAAc,CAAC;AACtB,OAAO,EACL,kBAAkB,EAClB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,EACpB,WAAW,EACX,gBAAgB,EAChB,oBAAoB,GACrB,MAAM,WAAW,CAAC"}
|
|
@@ -0,0 +1,252 @@
|
|
|
1
|
+
import { type BeginTransactionInput, type BeginTransactionResult, type CommitTransactionInput, type CompactionJobRecord, type CompactionJobRecordUpdate, type CreateGarbageCollectionJobInput, type CatalogProbe, type TriggerRecord, type FtsCandidates, type FtsColumnIndexRecord, type FtsPosting, type GarbageCollectionJobRecord, type GarbageCollectionStepResult, type LeaseRecord, type Manifest, type ManifestSummary, type PublishManifestInput, type QueryCatalogState, type RowIdRange, type RunGarbageCollectionStepInput, type SegmentRecord, type StageTransactionArtifactsInput, type StoragePage, type TableColumnRecord, type TableRecord, type TempOwnerRecord, type TempRunPage, type TransactionRecord, type TransactionRecordUpdate, type WriteTransactionInput } from "../types.js";
|
|
2
|
+
import { type DatabaseSnapshot } from "../snapshot.js";
|
|
3
|
+
/**
|
|
4
|
+
* How the record core sees block bytes it does not hold. The core owns every small record —
|
|
5
|
+
* catalog, manifests, transactions, leases, jobs, counters, keys — but block payloads live
|
|
6
|
+
* wherever the enclosing store keeps them (a Map in memory, files on OPFS), so existence and
|
|
7
|
+
* size checks go through this seam.
|
|
8
|
+
*/
|
|
9
|
+
export interface PhysicalBlocks {
|
|
10
|
+
hasBlock(id: string): boolean;
|
|
11
|
+
/** `undefined` means the block does not exist. */
|
|
12
|
+
blockByteLength(id: string): number | undefined;
|
|
13
|
+
}
|
|
14
|
+
/** `RecordCore.dump()`'s shape; see there. Arrays rather than Maps so the value serializes. */
|
|
15
|
+
export interface RecordCoreState {
|
|
16
|
+
currentVersion: number | null;
|
|
17
|
+
catalogEpoch: number;
|
|
18
|
+
manifests: Manifest[];
|
|
19
|
+
transactions: TransactionRecord[];
|
|
20
|
+
tables: TableRecord[];
|
|
21
|
+
segments: SegmentRecord[];
|
|
22
|
+
leases: LeaseRecord[];
|
|
23
|
+
compactionJobs: CompactionJobRecord[];
|
|
24
|
+
garbageCollectionJobs: GarbageCollectionJobRecord[];
|
|
25
|
+
nextRowIds: Array<readonly [string, bigint]>;
|
|
26
|
+
nextAutoIncrement: Array<readonly [string, bigint]>;
|
|
27
|
+
ftsBases: Array<readonly [string, {
|
|
28
|
+
coversVersion: number;
|
|
29
|
+
chunks: FtsPosting[][];
|
|
30
|
+
totalTokens: number;
|
|
31
|
+
}]>;
|
|
32
|
+
ftsDeltas: Array<readonly [string, Array<readonly [number, {
|
|
33
|
+
postings: FtsPosting[];
|
|
34
|
+
totalTokens: number;
|
|
35
|
+
}]>]>;
|
|
36
|
+
uniqueKeys: Array<readonly [string, string[]]>;
|
|
37
|
+
tempOwners: TempOwnerRecord[];
|
|
38
|
+
}
|
|
39
|
+
/**
|
|
40
|
+
* The synchronous record-state machine behind `MemoryBlockStore` and `OpfsBlockStore`, offered
|
|
41
|
+
* to adapter authors as the semantics half of a `BlockStore`: every record family the contract
|
|
42
|
+
* names, every validation order, every typed conflict error, every defensive copy — one method
|
|
43
|
+
* body per contract operation, so an adapter that wraps it inherits the behaviour the
|
|
44
|
+
* conformance kit checks and spends its own code purely on persistence.
|
|
45
|
+
*
|
|
46
|
+
* What wrapping it requires of the adapter:
|
|
47
|
+
*
|
|
48
|
+
* - **One writer at a time.** Methods validate then mutate synchronously; they are only safe
|
|
49
|
+
* when calls cannot interleave. Serialize access — a promise-chain queue (the memory store),
|
|
50
|
+
* a leader that is provably the sole writer (the OPFS store), a process-wide lock.
|
|
51
|
+
* - **Durability is yours.** The core is memory. Record each mutation (a write-ahead-log frame
|
|
52
|
+
* of the method and its input), checkpoint with `dump()`/`load()`, and replay on open.
|
|
53
|
+
* - **Block bytes are yours.** The core tracks records; the `PhysicalBlocks` seam asks you
|
|
54
|
+
* whether payload bytes exist and how large they are.
|
|
55
|
+
*
|
|
56
|
+
* Changing behaviour here changes every store built on it — which is the point.
|
|
57
|
+
*/
|
|
58
|
+
export declare class RecordCore {
|
|
59
|
+
#private;
|
|
60
|
+
constructor(physical: PhysicalBlocks);
|
|
61
|
+
createTempOwner(record: TempOwnerRecord): void;
|
|
62
|
+
getTempOwner(ownerId: string): TempOwnerRecord | undefined;
|
|
63
|
+
renewTempOwner(ownerId: string, expectedRevision: number, expiresAt: string): TempOwnerRecord;
|
|
64
|
+
/**
|
|
65
|
+
* Removes the owner record when it is absent or expired, and reports whether the caller
|
|
66
|
+
* should also remove the owner's physical pages. Page bytes are the enclosing store's.
|
|
67
|
+
*/
|
|
68
|
+
removeTempOwnerIfExpired(ownerId: string, expiresAtCutoff: string): boolean;
|
|
69
|
+
removeTempOwner(ownerId: string): void;
|
|
70
|
+
/**
|
|
71
|
+
* Pages through owner IDs. `extraOwnerIds` carries owners the enclosing store discovered from
|
|
72
|
+
* physical pages that have no record — orphaned spill runs still need to be listed so the
|
|
73
|
+
* expiry sweep can reclaim them.
|
|
74
|
+
*/
|
|
75
|
+
listTempOwnerIdsPage(afterOwnerId: string | null, limit: number, extraOwnerIds: Iterable<string>): StoragePage<string, string>;
|
|
76
|
+
addTable(record: TableRecord): void;
|
|
77
|
+
getTable(id: string): TableRecord | undefined;
|
|
78
|
+
updateTable(id: string, expectedRevision: number, update: {
|
|
79
|
+
columns?: TableColumnRecord[];
|
|
80
|
+
ftsColumns?: Record<string, FtsColumnIndexRecord> | null;
|
|
81
|
+
triggers?: TriggerRecord[] | null;
|
|
82
|
+
}): TableRecord;
|
|
83
|
+
removeTable(id: string, expectedRevision: number): void;
|
|
84
|
+
writeFtsBase(tableId: string, columnId: string, input: {
|
|
85
|
+
coversVersion: number;
|
|
86
|
+
chunks: FtsPosting[][];
|
|
87
|
+
totalTokens: number;
|
|
88
|
+
}): void;
|
|
89
|
+
readFtsCandidates(tableId: string, columnId: string, terms: ReadonlyArray<{
|
|
90
|
+
term: string;
|
|
91
|
+
prefix: boolean;
|
|
92
|
+
}>, upToVersion: number): FtsCandidates & {
|
|
93
|
+
deltaChunkCount: number;
|
|
94
|
+
totalTokens: number;
|
|
95
|
+
coversVersion: number;
|
|
96
|
+
};
|
|
97
|
+
/**
|
|
98
|
+
* The delta half of a full-text read, for stores that keep base chunks outside the core
|
|
99
|
+
* (the OPFS store keeps them as immutable files). Mirrors `readFtsCandidates`' delta
|
|
100
|
+
* selection exactly: versions above the base's coverage, up to the read's snapshot.
|
|
101
|
+
*/
|
|
102
|
+
readFtsDeltas(tableId: string, columnId: string, coversVersion: number, upToVersion: number): {
|
|
103
|
+
chunkLists: FtsPosting[][];
|
|
104
|
+
deltaChunkCount: number;
|
|
105
|
+
deltaTokens: number;
|
|
106
|
+
};
|
|
107
|
+
/** The delta-pruning half of `writeFtsBase`, for stores that keep the base itself outside. */
|
|
108
|
+
pruneFtsDeltas(tableId: string, columnId: string, coversVersion: number): void;
|
|
109
|
+
/**
|
|
110
|
+
* Applies a garbage-collection step's already-resolved record effect: the advanced job
|
|
111
|
+
* record, manifest tombstones, and segment removals — exactly the mutations
|
|
112
|
+
* `runGarbageCollectionStep` makes, reproduced from its outcome. The OPFS store logs the
|
|
113
|
+
* outcome rather than the request so replaying is deterministic without the executor's
|
|
114
|
+
* physical file knowledge.
|
|
115
|
+
*/
|
|
116
|
+
applyGarbageCollectionEffect(effect: {
|
|
117
|
+
job: GarbageCollectionJobRecord;
|
|
118
|
+
prunedManifestVersions: readonly number[];
|
|
119
|
+
reclaimedSegmentIds: readonly string[];
|
|
120
|
+
reclaimedTransactionIds?: readonly string[];
|
|
121
|
+
updatedAt: string;
|
|
122
|
+
}): void;
|
|
123
|
+
getTableByName(name: string): TableRecord | undefined;
|
|
124
|
+
/** For stores that compose lookups over their own overridable methods. */
|
|
125
|
+
getTableIdByName(name: string): string | undefined;
|
|
126
|
+
listTables(): TableRecord[];
|
|
127
|
+
addSegment(record: SegmentRecord): void;
|
|
128
|
+
getSegment(id: string): SegmentRecord | undefined;
|
|
129
|
+
listSegments(tableId?: string): SegmentRecord[];
|
|
130
|
+
removeSegment(id: string): void;
|
|
131
|
+
reserveRowIds(tableId: string, count: number): RowIdRange;
|
|
132
|
+
reserveAutoIncrement(tableId: string, columnId: string, count: number, atLeast?: bigint): RowIdRange;
|
|
133
|
+
getExistingUniqueKeys(tableId: string, keyTokens: readonly string[]): string[];
|
|
134
|
+
getCurrentManifestVersion(): number | null;
|
|
135
|
+
getCatalogProbe(): CatalogProbe;
|
|
136
|
+
getQueryCatalogState(tableNames: readonly string[]): QueryCatalogState;
|
|
137
|
+
getCurrentManifest(): Manifest | undefined;
|
|
138
|
+
getManifest(version: number): Manifest | undefined;
|
|
139
|
+
listManifests(): Manifest[];
|
|
140
|
+
listManifestPage(afterVersion: number | null, limit: number): StoragePage<Manifest, number>;
|
|
141
|
+
/**
|
|
142
|
+
* RecordCore keeps resolved manifests. A tombstone below the first readable manifest is no
|
|
143
|
+
* longer needed for delta resolution, but its narrowed block list remains the collector's
|
|
144
|
+
* durable discovery record until every named payload has actually gone. Deleting it sooner
|
|
145
|
+
* loses garbage left behind by a bounded planning pass.
|
|
146
|
+
*/
|
|
147
|
+
removePrunedManifestRecords(): number[];
|
|
148
|
+
publishManifest(input: PublishManifestInput): Manifest;
|
|
149
|
+
beginTransaction(input: BeginTransactionInput): BeginTransactionResult;
|
|
150
|
+
createTransaction(record: TransactionRecord): void;
|
|
151
|
+
getTransaction(id: string): TransactionRecord | undefined;
|
|
152
|
+
getTransactions(ids: readonly string[]): Array<TransactionRecord | undefined>;
|
|
153
|
+
listTransactions(): TransactionRecord[];
|
|
154
|
+
listTransactionPage(afterId: string | null, limit: number): StoragePage<TransactionRecord, string>;
|
|
155
|
+
updateTransaction(id: string, expectedRevision: number, update: TransactionRecordUpdate): TransactionRecord;
|
|
156
|
+
/**
|
|
157
|
+
* Validates and applies the record half of staging: the journal update and the segment
|
|
158
|
+
* records. Block bytes are the enclosing store's to write — after this returns, in the same
|
|
159
|
+
* atomic step.
|
|
160
|
+
*/
|
|
161
|
+
stageTransactionArtifacts(input: StageTransactionArtifactsInput, options?: {
|
|
162
|
+
/**
|
|
163
|
+
* The enclosing store already ran the duplicate check and wrote the bytes — the OPFS
|
|
164
|
+
* store writes block files before its log entry, so at apply time the files exist and
|
|
165
|
+
* the check would misread them as duplicates.
|
|
166
|
+
*/
|
|
167
|
+
blocksPrevalidated?: boolean;
|
|
168
|
+
}): TransactionRecord;
|
|
169
|
+
commitTransaction(input: CommitTransactionInput): ManifestSummary;
|
|
170
|
+
/**
|
|
171
|
+
* The single-shot write: begin or continue a transaction, journal the artifacts, and commit
|
|
172
|
+
* — validated in full before anything mutates, so a refusal anywhere (a stale revision, a
|
|
173
|
+
* moved manifest, a duplicate key) leaves the core exactly as it was, fresh record included.
|
|
174
|
+
* Block bytes are the enclosing store's to write afterwards, in the same atomic step.
|
|
175
|
+
*/
|
|
176
|
+
writeTransaction(input: WriteTransactionInput, options?: {
|
|
177
|
+
/** As on `stageTransactionArtifacts`: the enclosing store already checked the block ids. */
|
|
178
|
+
blocksPrevalidated?: boolean;
|
|
179
|
+
}): ManifestSummary;
|
|
180
|
+
createLease(record: LeaseRecord): void;
|
|
181
|
+
getLease(id: string): LeaseRecord | undefined;
|
|
182
|
+
listLeases(): LeaseRecord[];
|
|
183
|
+
renewLease(id: string, expectedRevision: number, expiresAt: string): LeaseRecord;
|
|
184
|
+
moveLease(id: string, expectedRevision: number, manifestVersion: number | null, expiresAt: string): LeaseRecord;
|
|
185
|
+
removeLeaseIfExpired(id: string, expectedRevision: number, expiresAtCutoff: string): boolean;
|
|
186
|
+
removeLease(id: string): void;
|
|
187
|
+
createCompactionJob(record: CompactionJobRecord): void;
|
|
188
|
+
getCompactionJob(id: string): CompactionJobRecord | undefined;
|
|
189
|
+
listCompactionJobs(tableId?: string): CompactionJobRecord[];
|
|
190
|
+
listCompactionJobPage(afterId: string | null, limit: number): StoragePage<CompactionJobRecord, string>;
|
|
191
|
+
updateCompactionJob(id: string, expectedRevision: number, update: CompactionJobRecordUpdate): CompactionJobRecord;
|
|
192
|
+
cancelCompactionJob(id: string, expectedRevision: number, cancelledAt: string): CompactionJobRecord;
|
|
193
|
+
removeCompactionJob(id: string): void;
|
|
194
|
+
createGarbageCollectionJob(input: CreateGarbageCollectionJobInput): GarbageCollectionJobRecord;
|
|
195
|
+
getGarbageCollectionJob(id: string): GarbageCollectionJobRecord | undefined;
|
|
196
|
+
listGarbageCollectionJobs(): GarbageCollectionJobRecord[];
|
|
197
|
+
/**
|
|
198
|
+
* Advances the job and mutates every record it reclaims. Physical block bytes are the
|
|
199
|
+
* caller's to delete afterwards, from the result's `reclaimedBlockIds` — in the same atomic
|
|
200
|
+
* step for the memory store, or after the logged entry for a store whose bytes are files.
|
|
201
|
+
*/
|
|
202
|
+
runGarbageCollectionStep(input: RunGarbageCollectionStepInput): GarbageCollectionStepResult;
|
|
203
|
+
removeGarbageCollectionJob(id: string): void;
|
|
204
|
+
/**
|
|
205
|
+
* Copies the current version out as a portable snapshot. The caller provides the block bytes
|
|
206
|
+
* and the atomicity — run this where no commit can interleave.
|
|
207
|
+
*
|
|
208
|
+
* Only blocks the current manifest still points at are copied, which drops every superseded
|
|
209
|
+
* block a compaction left behind, and only full-text bases that already cover this exact
|
|
210
|
+
* version are carried; any other indexed column is exported as `invalid` so the loaded
|
|
211
|
+
* database rebuilds it. That costs a rebuild, never a wrong answer — the index is a pruning
|
|
212
|
+
* accelerator and the scan re-verifies every candidate.
|
|
213
|
+
*/
|
|
214
|
+
exportSnapshot(readBlockBytes: (id: string) => Uint8Array | undefined): DatabaseSnapshot;
|
|
215
|
+
/**
|
|
216
|
+
* The record half of `exportSnapshot`, for stores whose block bytes need asynchronous reads:
|
|
217
|
+
* capture the records synchronously at one version, then read the immutable (and pinned)
|
|
218
|
+
* block files at leisure.
|
|
219
|
+
*/
|
|
220
|
+
exportSnapshotRecords(): {
|
|
221
|
+
records: Omit<DatabaseSnapshot, "blocks">;
|
|
222
|
+
blockIds: string[];
|
|
223
|
+
};
|
|
224
|
+
/** Refuses to load over an existing database; see `loadSnapshot` for the load itself. */
|
|
225
|
+
importSnapshot(snapshot: DatabaseSnapshot, storeBlockBytes: (id: string, bytes: Uint8Array) => void): void;
|
|
226
|
+
loadSnapshot(snapshot: DatabaseSnapshot, storeBlockBytes: (id: string, bytes: Uint8Array) => void): void;
|
|
227
|
+
/** The record half of a snapshot load; block bytes are the caller's, ids theirs to name. */
|
|
228
|
+
loadSnapshotRecords(snapshot: Omit<DatabaseSnapshot, "blocks"> & {
|
|
229
|
+
blocks?: undefined;
|
|
230
|
+
}, blockIds: readonly string[]): void;
|
|
231
|
+
/**
|
|
232
|
+
* The complete record state as one value — the checkpoint payload of a log-structured store.
|
|
233
|
+
* Everything `load` needs to reproduce this core exactly, including operational state the
|
|
234
|
+
* portable snapshot format deliberately drops (transactions, leases, jobs, counters). The
|
|
235
|
+
* shape is JSON plus bigints; `encodeRecordJson` in this module serializes it verbatim.
|
|
236
|
+
*
|
|
237
|
+
* The arrays are fresh but their records alias live state: serialize (or clone) the result
|
|
238
|
+
* before the next mutation. The one caller serializes synchronously in the same run, and
|
|
239
|
+
* `load` clones on the way in — skipping a deep clone here saves tens of milliseconds per
|
|
240
|
+
* checkpoint at scale.
|
|
241
|
+
*/
|
|
242
|
+
dump(): RecordCoreState;
|
|
243
|
+
/** Replaces the whole record state with a dump's content. */
|
|
244
|
+
load(state: RecordCoreState): void;
|
|
245
|
+
}
|
|
246
|
+
export declare function validateId(id: string): void;
|
|
247
|
+
export declare function validateAutoIncrementReservation(count: number, atLeast: bigint | undefined): void;
|
|
248
|
+
export declare function validateBeginTransactionInput(input: BeginTransactionInput): void;
|
|
249
|
+
export declare function validateLeaseExpiration(expiresAt: string): void;
|
|
250
|
+
export declare function validateTempRunPage(page: TempRunPage): void;
|
|
251
|
+
export declare function validateTempRunPageIdentity(ownerId: string, runId: string, pageIndex: number): void;
|
|
252
|
+
//# sourceMappingURL=record-core.d.ts.map
|