@yydb/light-db 0.0.18 → 0.1.2
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/api/index.d.ts +4 -9
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +3 -6
- package/dist/api/index.js.map +1 -1
- package/dist/api/types.d.ts +71 -42
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js +5 -3
- package/dist/api/types.js.map +1 -1
- package/dist/api/wasm-database.d.ts +134 -27
- package/dist/api/wasm-database.d.ts.map +1 -1
- package/dist/api/wasm-database.js +172 -28
- package/dist/api/wasm-database.js.map +1 -1
- package/dist/index.d.ts +14 -11
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -11
- package/dist/index.js.map +1 -1
- package/dist/shared/micro.d.ts +86 -0
- package/dist/shared/micro.d.ts.map +1 -0
- package/dist/shared/micro.js +194 -0
- package/dist/shared/micro.js.map +1 -0
- package/dist/shared/udf-types.d.ts +31 -0
- package/dist/shared/udf-types.d.ts.map +1 -0
- package/dist/shared/udf-types.js +12 -0
- package/dist/shared/udf-types.js.map +1 -0
- package/package.json +5 -7
- package/readme.md +60 -63
- package/dist/api/database.d.ts +0 -101
- package/dist/api/database.d.ts.map +0 -1
- package/dist/api/database.js +0 -149
- package/dist/api/database.js.map +0 -1
- package/dist/api/schema.d.ts +0 -33
- package/dist/api/schema.d.ts.map +0 -1
- package/dist/api/schema.js +0 -80
- package/dist/api/schema.js.map +0 -1
- package/dist/api/transaction.d.ts +0 -26
- package/dist/api/transaction.d.ts.map +0 -1
- package/dist/api/transaction.js +0 -52
- package/dist/api/transaction.js.map +0 -1
- package/dist/codec/binary.d.ts +0 -196
- package/dist/codec/binary.d.ts.map +0 -1
- package/dist/codec/binary.js +0 -342
- package/dist/codec/binary.js.map +0 -1
- package/dist/codec/checksum.d.ts +0 -21
- package/dist/codec/checksum.d.ts.map +0 -1
- package/dist/codec/checksum.js +0 -46
- package/dist/codec/checksum.js.map +0 -1
- package/dist/codec/index.d.ts +0 -12
- package/dist/codec/index.d.ts.map +0 -1
- package/dist/codec/index.js +0 -10
- package/dist/codec/index.js.map +0 -1
- package/dist/codec/page.d.ts +0 -114
- package/dist/codec/page.d.ts.map +0 -1
- package/dist/codec/page.js +0 -225
- package/dist/codec/page.js.map +0 -1
- package/dist/codec/record.d.ts +0 -62
- package/dist/codec/record.d.ts.map +0 -1
- package/dist/codec/record.js +0 -82
- package/dist/codec/record.js.map +0 -1
- package/dist/core/broadcast.d.ts +0 -39
- package/dist/core/broadcast.d.ts.map +0 -1
- package/dist/core/broadcast.js +0 -54
- package/dist/core/broadcast.js.map +0 -1
- package/dist/core/checkpoint.d.ts +0 -23
- package/dist/core/checkpoint.d.ts.map +0 -1
- package/dist/core/checkpoint.js +0 -49
- package/dist/core/checkpoint.js.map +0 -1
- package/dist/core/engine.d.ts +0 -142
- package/dist/core/engine.d.ts.map +0 -1
- package/dist/core/engine.js +0 -304
- package/dist/core/engine.js.map +0 -1
- package/dist/core/index.d.ts +0 -17
- package/dist/core/index.d.ts.map +0 -1
- package/dist/core/index.js +0 -13
- package/dist/core/index.js.map +0 -1
- package/dist/core/lease.d.ts +0 -32
- package/dist/core/lease.d.ts.map +0 -1
- package/dist/core/lease.js +0 -81
- package/dist/core/lease.js.map +0 -1
- package/dist/core/records.d.ts +0 -49
- package/dist/core/records.d.ts.map +0 -1
- package/dist/core/records.js +0 -70
- package/dist/core/records.js.map +0 -1
- package/dist/core/recovery.d.ts +0 -43
- package/dist/core/recovery.d.ts.map +0 -1
- package/dist/core/recovery.js +0 -99
- package/dist/core/recovery.js.map +0 -1
- package/dist/core/wal.d.ts +0 -50
- package/dist/core/wal.d.ts.map +0 -1
- package/dist/core/wal.js +0 -114
- package/dist/core/wal.js.map +0 -1
- package/dist/storage/StorageAdapter.d.ts +0 -97
- package/dist/storage/StorageAdapter.d.ts.map +0 -1
- package/dist/storage/StorageAdapter.js +0 -9
- package/dist/storage/StorageAdapter.js.map +0 -1
- package/dist/storage/index.d.ts +0 -11
- package/dist/storage/index.d.ts.map +0 -1
- package/dist/storage/index.js +0 -10
- package/dist/storage/index.js.map +0 -1
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +0 -140
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +0 -1
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +0 -403
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +0 -1
- package/dist/storage/memory/MemoryStorageAdapter.d.ts +0 -76
- package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +0 -1
- package/dist/storage/memory/MemoryStorageAdapter.js +0 -212
- package/dist/storage/memory/MemoryStorageAdapter.js.map +0 -1
- package/dist/storage/opfs/OpfsStorageAdapter.d.ts +0 -141
- package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +0 -1
- package/dist/storage/opfs/OpfsStorageAdapter.js +0 -400
- package/dist/storage/opfs/OpfsStorageAdapter.js.map +0 -1
package/dist/core/records.d.ts
DELETED
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 记录存储
|
|
3
|
-
*
|
|
4
|
-
* 数据库在内存中的键值视图。值在写入与读取时都做一次复制,
|
|
5
|
-
* 避免调用方持有内部字节数组造成校验和与快照不一致。
|
|
6
|
-
*/
|
|
7
|
-
/**
|
|
8
|
-
* 内存记录存储
|
|
9
|
-
*/
|
|
10
|
-
export declare class RecordStore {
|
|
11
|
-
private records;
|
|
12
|
-
/**
|
|
13
|
-
* 读取值
|
|
14
|
-
* @param key 键
|
|
15
|
-
*/
|
|
16
|
-
get(key: string): Uint8Array | null;
|
|
17
|
-
/**
|
|
18
|
-
* 是否存在键
|
|
19
|
-
* @param key 键
|
|
20
|
-
*/
|
|
21
|
-
has(key: string): boolean;
|
|
22
|
-
/**
|
|
23
|
-
* 写入值
|
|
24
|
-
* @param key 键
|
|
25
|
-
* @param value 值
|
|
26
|
-
*/
|
|
27
|
-
put(key: string, value: Uint8Array): void;
|
|
28
|
-
/**
|
|
29
|
-
* 删除键
|
|
30
|
-
* @param key 键
|
|
31
|
-
*/
|
|
32
|
-
delete(key: string): boolean;
|
|
33
|
-
/** 记录数量 */
|
|
34
|
-
get size(): number;
|
|
35
|
-
/**
|
|
36
|
-
* 快照当前记录
|
|
37
|
-
*
|
|
38
|
-
* 返回只读视图,供检查点打包使用。
|
|
39
|
-
*/
|
|
40
|
-
snapshot(): ReadonlyMap<string, Uint8Array>;
|
|
41
|
-
/**
|
|
42
|
-
* 用恢复结果替换全部记录
|
|
43
|
-
* @param records 记录映射
|
|
44
|
-
*/
|
|
45
|
-
restore(records: ReadonlyMap<string, Uint8Array>): void;
|
|
46
|
-
/** 清空所有记录 */
|
|
47
|
-
clear(): void;
|
|
48
|
-
}
|
|
49
|
-
//# sourceMappingURL=records.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"records.d.ts","sourceRoot":"","sources":["../../src/core/records.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAIH;;GAEG;AACH,qBAAa,WAAW;IACpB,OAAO,CAAC,OAAO,CAAsC;IAErD;;;OAGG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,UAAU,GAAG,IAAI;IAK1C;;;OAGG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAIhC;;;;OAIG;IACI,GAAG,CAAC,GAAG,EAAE,MAAM,EAAE,KAAK,EAAE,UAAU,GAAG,IAAI;IAIhD;;;OAGG;IACI,MAAM,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO;IAInC,WAAW;IACX,IAAW,IAAI,IAAI,MAAM,CAExB;IAED;;;;OAIG;IACI,QAAQ,IAAI,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC;IAIlD;;;OAGG;IACI,OAAO,CAAC,OAAO,EAAE,WAAW,CAAC,MAAM,EAAE,UAAU,CAAC,GAAG,IAAI;IAO9D,aAAa;IACN,KAAK,IAAI,IAAI;CAGvB"}
|
package/dist/core/records.js
DELETED
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 记录存储
|
|
3
|
-
*
|
|
4
|
-
* 数据库在内存中的键值视图。值在写入与读取时都做一次复制,
|
|
5
|
-
* 避免调用方持有内部字节数组造成校验和与快照不一致。
|
|
6
|
-
*/
|
|
7
|
-
import { BinaryUtils } from '../codec';
|
|
8
|
-
/**
|
|
9
|
-
* 内存记录存储
|
|
10
|
-
*/
|
|
11
|
-
export class RecordStore {
|
|
12
|
-
records = new Map();
|
|
13
|
-
/**
|
|
14
|
-
* 读取值
|
|
15
|
-
* @param key 键
|
|
16
|
-
*/
|
|
17
|
-
get(key) {
|
|
18
|
-
const value = this.records.get(key);
|
|
19
|
-
return value ? BinaryUtils.copy(value) : null;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 是否存在键
|
|
23
|
-
* @param key 键
|
|
24
|
-
*/
|
|
25
|
-
has(key) {
|
|
26
|
-
return this.records.has(key);
|
|
27
|
-
}
|
|
28
|
-
/**
|
|
29
|
-
* 写入值
|
|
30
|
-
* @param key 键
|
|
31
|
-
* @param value 值
|
|
32
|
-
*/
|
|
33
|
-
put(key, value) {
|
|
34
|
-
this.records.set(key, BinaryUtils.copy(value));
|
|
35
|
-
}
|
|
36
|
-
/**
|
|
37
|
-
* 删除键
|
|
38
|
-
* @param key 键
|
|
39
|
-
*/
|
|
40
|
-
delete(key) {
|
|
41
|
-
return this.records.delete(key);
|
|
42
|
-
}
|
|
43
|
-
/** 记录数量 */
|
|
44
|
-
get size() {
|
|
45
|
-
return this.records.size;
|
|
46
|
-
}
|
|
47
|
-
/**
|
|
48
|
-
* 快照当前记录
|
|
49
|
-
*
|
|
50
|
-
* 返回只读视图,供检查点打包使用。
|
|
51
|
-
*/
|
|
52
|
-
snapshot() {
|
|
53
|
-
return this.records;
|
|
54
|
-
}
|
|
55
|
-
/**
|
|
56
|
-
* 用恢复结果替换全部记录
|
|
57
|
-
* @param records 记录映射
|
|
58
|
-
*/
|
|
59
|
-
restore(records) {
|
|
60
|
-
this.records = new Map();
|
|
61
|
-
for (const [key, value] of records) {
|
|
62
|
-
this.records.set(key, BinaryUtils.copy(value));
|
|
63
|
-
}
|
|
64
|
-
}
|
|
65
|
-
/** 清空所有记录 */
|
|
66
|
-
clear() {
|
|
67
|
-
this.records.clear();
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
//# sourceMappingURL=records.js.map
|
package/dist/core/records.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"records.js","sourceRoot":"","sources":["../../src/core/records.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,OAAO,EAAE,WAAW,EAAE,MAAM,UAAU,CAAC;AAEvC;;GAEG;AACH,MAAM,OAAO,WAAW;IACZ,OAAO,GAA4B,IAAI,GAAG,EAAE,CAAC;IAErD;;;OAGG;IACI,GAAG,CAAC,GAAW;QAClB,MAAM,KAAK,GAAG,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;QACpC,OAAO,KAAK,CAAC,CAAC,CAAC,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC;IAClD,CAAC;IAED;;;OAGG;IACI,GAAG,CAAC,GAAW;QAClB,OAAO,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,CAAC;IACjC,CAAC;IAED;;;;OAIG;IACI,GAAG,CAAC,GAAW,EAAE,KAAiB;QACrC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;IACnD,CAAC;IAED;;;OAGG;IACI,MAAM,CAAC,GAAW;QACrB,OAAO,IAAI,CAAC,OAAO,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC;IACpC,CAAC;IAED,WAAW;IACX,IAAW,IAAI;QACX,OAAO,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC;IAC7B,CAAC;IAED;;;;OAIG;IACI,QAAQ;QACX,OAAO,IAAI,CAAC,OAAO,CAAC;IACxB,CAAC;IAED;;;OAGG;IACI,OAAO,CAAC,OAAwC;QACnD,IAAI,CAAC,OAAO,GAAG,IAAI,GAAG,EAAE,CAAC;QACzB,KAAK,MAAM,CAAC,GAAG,EAAE,KAAK,CAAC,IAAI,OAAO,EAAE,CAAC;YACjC,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,EAAE,WAAW,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC;QACnD,CAAC;IACL,CAAC;IAED,aAAa;IACN,KAAK;QACR,IAAI,CAAC,OAAO,CAAC,KAAK,EAAE,CAAC;IACzB,CAAC;CACJ"}
|
package/dist/core/recovery.d.ts
DELETED
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 崩溃恢复
|
|
3
|
-
*
|
|
4
|
-
* 读取最近一次快照,再按 WAL 顺序重放快照之后的记录。
|
|
5
|
-
*/
|
|
6
|
-
import type { StorageAdapter } from '../storage/StorageAdapter';
|
|
7
|
-
import type { WalLog } from './wal';
|
|
8
|
-
/** 恢复结果 */
|
|
9
|
-
export interface RecoveryOutcome {
|
|
10
|
-
/** 恢复后的记录 */
|
|
11
|
-
records: Map<string, Uint8Array>;
|
|
12
|
-
/** 已覆盖到的最大 LSN */
|
|
13
|
-
lastLsn: bigint;
|
|
14
|
-
/** 载入的页数量 */
|
|
15
|
-
pagesLoaded: number;
|
|
16
|
-
/** 重放的 WAL 记录数量 */
|
|
17
|
-
recordsReplayed: number;
|
|
18
|
-
/** 丢弃的不完整 WAL 尾字节数 */
|
|
19
|
-
discardedTailBytes: number;
|
|
20
|
-
}
|
|
21
|
-
/**
|
|
22
|
-
* 恢复管理器
|
|
23
|
-
*/
|
|
24
|
-
export declare class RecoveryManager {
|
|
25
|
-
private readonly adapter;
|
|
26
|
-
constructor(adapter: StorageAdapter);
|
|
27
|
-
/**
|
|
28
|
-
* 执行恢复
|
|
29
|
-
* @param wal 已打开的 WAL
|
|
30
|
-
*/
|
|
31
|
-
recover(wal: WalLog): Promise<RecoveryOutcome>;
|
|
32
|
-
/**
|
|
33
|
-
* 读取快照,不存在时返回空记录
|
|
34
|
-
*/
|
|
35
|
-
private loadSnapshot;
|
|
36
|
-
/**
|
|
37
|
-
* 应用一条 WAL 记录
|
|
38
|
-
* @param records 记录映射
|
|
39
|
-
* @param record WAL 记录
|
|
40
|
-
*/
|
|
41
|
-
private apply;
|
|
42
|
-
}
|
|
43
|
-
//# sourceMappingURL=recovery.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.d.ts","sourceRoot":"","sources":["../../src/core/recovery.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAMH,OAAO,KAAK,EAAE,cAAc,EAAE,MAAM,2BAA2B,CAAC;AAChE,OAAO,KAAK,EAAE,MAAM,EAAE,MAAM,OAAO,CAAC;AAEpC,WAAW;AACX,MAAM,WAAW,eAAe;IAC5B,aAAa;IACb,OAAO,EAAE,GAAG,CAAC,MAAM,EAAE,UAAU,CAAC,CAAC;IACjC,kBAAkB;IAClB,OAAO,EAAE,MAAM,CAAC;IAChB,aAAa;IACb,WAAW,EAAE,MAAM,CAAC;IACpB,mBAAmB;IACnB,eAAe,EAAE,MAAM,CAAC;IACxB,sBAAsB;IACtB,kBAAkB,EAAE,MAAM,CAAC;CAC9B;AAED;;GAEG;AACH,qBAAa,eAAe;IACxB,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;gBAE7B,OAAO,EAAE,cAAc;IAInC;;;OAGG;IACU,OAAO,CAAC,GAAG,EAAE,MAAM,GAAG,OAAO,CAAC,eAAe,CAAC;IA6B3D;;OAEG;YACW,YAAY;IAoC1B;;;;OAIG;IACH,OAAO,CAAC,KAAK;CAchB"}
|
package/dist/core/recovery.js
DELETED
|
@@ -1,99 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 崩溃恢复
|
|
3
|
-
*
|
|
4
|
-
* 读取最近一次快照,再按 WAL 顺序重放快照之后的记录。
|
|
5
|
-
*/
|
|
6
|
-
import { ChecksumMismatchError, decodeSnapshot, SnapshotFormatError } from '../codec';
|
|
7
|
-
import { WalOperation } from '../codec';
|
|
8
|
-
import { LightDbError, LightDbErrorCodes } from '../errors';
|
|
9
|
-
/**
|
|
10
|
-
* 恢复管理器
|
|
11
|
-
*/
|
|
12
|
-
export class RecoveryManager {
|
|
13
|
-
adapter;
|
|
14
|
-
constructor(adapter) {
|
|
15
|
-
this.adapter = adapter;
|
|
16
|
-
}
|
|
17
|
-
/**
|
|
18
|
-
* 执行恢复
|
|
19
|
-
* @param wal 已打开的 WAL
|
|
20
|
-
*/
|
|
21
|
-
async recover(wal) {
|
|
22
|
-
const snapshot = await this.loadSnapshot();
|
|
23
|
-
const { records: walRecords, validBytes, fileSize } = await wal.readAll();
|
|
24
|
-
if (validBytes < fileSize) {
|
|
25
|
-
await wal.truncate(validBytes);
|
|
26
|
-
}
|
|
27
|
-
let recordsReplayed = 0;
|
|
28
|
-
let lastLsn = snapshot.lastSnapshotLsn;
|
|
29
|
-
for (const record of walRecords) {
|
|
30
|
-
if (record.lsn <= snapshot.lastSnapshotLsn) {
|
|
31
|
-
continue;
|
|
32
|
-
}
|
|
33
|
-
this.apply(snapshot.records, record);
|
|
34
|
-
lastLsn = record.lsn > lastLsn ? record.lsn : lastLsn;
|
|
35
|
-
recordsReplayed++;
|
|
36
|
-
}
|
|
37
|
-
return {
|
|
38
|
-
records: snapshot.records,
|
|
39
|
-
lastLsn,
|
|
40
|
-
pagesLoaded: snapshot.pagesLoaded,
|
|
41
|
-
recordsReplayed,
|
|
42
|
-
discardedTailBytes: fileSize - validBytes,
|
|
43
|
-
};
|
|
44
|
-
}
|
|
45
|
-
/**
|
|
46
|
-
* 读取快照,不存在时返回空记录
|
|
47
|
-
*/
|
|
48
|
-
async loadSnapshot() {
|
|
49
|
-
if (!(await this.adapter.exists('main'))) {
|
|
50
|
-
return { records: new Map(), lastSnapshotLsn: 0n, pagesLoaded: 0 };
|
|
51
|
-
}
|
|
52
|
-
const handle = await this.adapter.open('main', 'read');
|
|
53
|
-
let data;
|
|
54
|
-
try {
|
|
55
|
-
const size = await handle.size();
|
|
56
|
-
data = await handle.read(0, size);
|
|
57
|
-
}
|
|
58
|
-
finally {
|
|
59
|
-
await handle.close();
|
|
60
|
-
}
|
|
61
|
-
try {
|
|
62
|
-
const snapshot = decodeSnapshot(data);
|
|
63
|
-
return {
|
|
64
|
-
records: snapshot.records,
|
|
65
|
-
lastSnapshotLsn: snapshot.header.lastSnapshotLsn,
|
|
66
|
-
pagesLoaded: snapshot.pageCount,
|
|
67
|
-
};
|
|
68
|
-
}
|
|
69
|
-
catch (error) {
|
|
70
|
-
if (error instanceof SnapshotFormatError || error instanceof ChecksumMismatchError) {
|
|
71
|
-
throw new LightDbError(LightDbErrorCodes.corrupt, 'database snapshot is corrupt', {
|
|
72
|
-
operation: 'recover',
|
|
73
|
-
cause: error,
|
|
74
|
-
});
|
|
75
|
-
}
|
|
76
|
-
throw error;
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
/**
|
|
80
|
-
* 应用一条 WAL 记录
|
|
81
|
-
* @param records 记录映射
|
|
82
|
-
* @param record WAL 记录
|
|
83
|
-
*/
|
|
84
|
-
apply(records, record) {
|
|
85
|
-
switch (record.operation) {
|
|
86
|
-
case WalOperation.Put:
|
|
87
|
-
if (record.value) {
|
|
88
|
-
records.set(record.key, record.value);
|
|
89
|
-
}
|
|
90
|
-
break;
|
|
91
|
-
case WalOperation.Delete:
|
|
92
|
-
records.delete(record.key);
|
|
93
|
-
break;
|
|
94
|
-
case WalOperation.Checkpoint:
|
|
95
|
-
break;
|
|
96
|
-
}
|
|
97
|
-
}
|
|
98
|
-
}
|
|
99
|
-
//# sourceMappingURL=recovery.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/core/recovery.ts"],"names":[],"mappings":"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"}
|
package/dist/core/wal.d.ts
DELETED
|
@@ -1,50 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WAL 日志
|
|
3
|
-
*
|
|
4
|
-
* 只通过 `StorageAdapter` 访问平台,记录格式由 `codec/record` 决定。
|
|
5
|
-
*/
|
|
6
|
-
import type { WalRecord } from '../codec';
|
|
7
|
-
import type { StorageAdapter } from '../storage/StorageAdapter';
|
|
8
|
-
/**
|
|
9
|
-
* 预写日志
|
|
10
|
-
*/
|
|
11
|
-
export declare class WalLog {
|
|
12
|
-
private readonly adapter;
|
|
13
|
-
private handle;
|
|
14
|
-
private offset;
|
|
15
|
-
constructor(adapter: StorageAdapter);
|
|
16
|
-
/** 当前日志字节数 */
|
|
17
|
-
get byteSize(): number;
|
|
18
|
-
/**
|
|
19
|
-
* 打开日志,定位到末尾
|
|
20
|
-
*/
|
|
21
|
-
open(): Promise<void>;
|
|
22
|
-
/**
|
|
23
|
-
* 追加记录并等待落盘
|
|
24
|
-
* @param records 记录
|
|
25
|
-
*/
|
|
26
|
-
append(records: readonly WalRecord[]): Promise<number>;
|
|
27
|
-
/**
|
|
28
|
-
* 读取全部完整记录
|
|
29
|
-
*
|
|
30
|
-
* 末尾不完整的记录(写入过程中断)会被丢弃,`validBytes` 指向最后一个完整记录之后。
|
|
31
|
-
*/
|
|
32
|
-
readAll(): Promise<{
|
|
33
|
-
records: WalRecord[];
|
|
34
|
-
validBytes: number;
|
|
35
|
-
fileSize: number;
|
|
36
|
-
}>;
|
|
37
|
-
/**
|
|
38
|
-
* 截断日志
|
|
39
|
-
* @param size 目标字节数,默认 0
|
|
40
|
-
*/
|
|
41
|
-
truncate(size?: number): Promise<void>;
|
|
42
|
-
/** 关闭日志 */
|
|
43
|
-
close(): Promise<void>;
|
|
44
|
-
/**
|
|
45
|
-
* 获取已打开的句柄
|
|
46
|
-
* @param operation 操作名
|
|
47
|
-
*/
|
|
48
|
-
private requireHandle;
|
|
49
|
-
}
|
|
50
|
-
//# sourceMappingURL=wal.d.ts.map
|
package/dist/core/wal.d.ts.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wal.d.ts","sourceRoot":"","sources":["../../src/core/wal.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAGH,OAAO,KAAK,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAE1C,OAAO,KAAK,EAAE,cAAc,EAAiB,MAAM,2BAA2B,CAAC;AAE/E;;GAEG;AACH,qBAAa,MAAM;IACf,OAAO,CAAC,QAAQ,CAAC,OAAO,CAAiB;IACzC,OAAO,CAAC,MAAM,CAA8B;IAC5C,OAAO,CAAC,MAAM,CAAa;gBAEf,OAAO,EAAE,cAAc;IAInC,cAAc;IACd,IAAW,QAAQ,IAAI,MAAM,CAE5B;IAED;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC;IAKlC;;;OAGG;IACU,MAAM,CAAC,OAAO,EAAE,SAAS,SAAS,EAAE,GAAG,OAAO,CAAC,MAAM,CAAC;IAsBnE;;;;OAIG;IACU,OAAO,IAAI,OAAO,CAAC;QAAE,OAAO,EAAE,SAAS,EAAE,CAAC;QAAC,UAAU,EAAE,MAAM,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAA;KAAE,CAAC;IAiC/F;;;OAGG;IACU,QAAQ,CAAC,IAAI,GAAE,MAAU,GAAG,OAAO,CAAC,IAAI,CAAC;IAOtD,WAAW;IACE,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAOnC;;;OAGG;IACH,OAAO,CAAC,aAAa;CAMxB"}
|
package/dist/core/wal.js
DELETED
|
@@ -1,114 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* WAL 日志
|
|
3
|
-
*
|
|
4
|
-
* 只通过 `StorageAdapter` 访问平台,记录格式由 `codec/record` 决定。
|
|
5
|
-
*/
|
|
6
|
-
import { ChecksumMismatchError, decodeWalRecord, encodeWalRecord } from '../codec';
|
|
7
|
-
import { LightDbError, LightDbErrorCodes } from '../errors';
|
|
8
|
-
/**
|
|
9
|
-
* 预写日志
|
|
10
|
-
*/
|
|
11
|
-
export class WalLog {
|
|
12
|
-
adapter;
|
|
13
|
-
handle = null;
|
|
14
|
-
offset = 0;
|
|
15
|
-
constructor(adapter) {
|
|
16
|
-
this.adapter = adapter;
|
|
17
|
-
}
|
|
18
|
-
/** 当前日志字节数 */
|
|
19
|
-
get byteSize() {
|
|
20
|
-
return this.offset;
|
|
21
|
-
}
|
|
22
|
-
/**
|
|
23
|
-
* 打开日志,定位到末尾
|
|
24
|
-
*/
|
|
25
|
-
async open() {
|
|
26
|
-
this.handle = await this.adapter.open('wal', 'readwrite');
|
|
27
|
-
this.offset = await this.handle.size();
|
|
28
|
-
}
|
|
29
|
-
/**
|
|
30
|
-
* 追加记录并等待落盘
|
|
31
|
-
* @param records 记录
|
|
32
|
-
*/
|
|
33
|
-
async append(records) {
|
|
34
|
-
if (records.length === 0) {
|
|
35
|
-
return 0;
|
|
36
|
-
}
|
|
37
|
-
const handle = this.requireHandle('walAppend');
|
|
38
|
-
const encoded = records.map((record) => encodeWalRecord(record));
|
|
39
|
-
const total = encoded.reduce((sum, part) => sum + part.length, 0);
|
|
40
|
-
const buffer = new Uint8Array(total);
|
|
41
|
-
let position = 0;
|
|
42
|
-
for (const part of encoded) {
|
|
43
|
-
buffer.set(part, position);
|
|
44
|
-
position += part.length;
|
|
45
|
-
}
|
|
46
|
-
await handle.write(this.offset, buffer);
|
|
47
|
-
await handle.sync();
|
|
48
|
-
this.offset += total;
|
|
49
|
-
return total;
|
|
50
|
-
}
|
|
51
|
-
/**
|
|
52
|
-
* 读取全部完整记录
|
|
53
|
-
*
|
|
54
|
-
* 末尾不完整的记录(写入过程中断)会被丢弃,`validBytes` 指向最后一个完整记录之后。
|
|
55
|
-
*/
|
|
56
|
-
async readAll() {
|
|
57
|
-
const handle = this.requireHandle('walRead');
|
|
58
|
-
const size = await handle.size();
|
|
59
|
-
if (size === 0) {
|
|
60
|
-
return { records: [], validBytes: 0, fileSize: 0 };
|
|
61
|
-
}
|
|
62
|
-
const data = await handle.read(0, size);
|
|
63
|
-
const records = [];
|
|
64
|
-
let offset = 0;
|
|
65
|
-
while (offset < data.length) {
|
|
66
|
-
try {
|
|
67
|
-
const decoded = decodeWalRecord(data, offset);
|
|
68
|
-
if (decoded.status === 'incomplete') {
|
|
69
|
-
break;
|
|
70
|
-
}
|
|
71
|
-
records.push(decoded.record);
|
|
72
|
-
offset += decoded.bytesRead;
|
|
73
|
-
}
|
|
74
|
-
catch (error) {
|
|
75
|
-
if (error instanceof ChecksumMismatchError) {
|
|
76
|
-
throw new LightDbError(LightDbErrorCodes.corrupt, `WAL record is corrupt at offset ${offset}`, {
|
|
77
|
-
operation: 'walRead',
|
|
78
|
-
cause: error,
|
|
79
|
-
});
|
|
80
|
-
}
|
|
81
|
-
throw error;
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
return { records, validBytes: offset, fileSize: size };
|
|
85
|
-
}
|
|
86
|
-
/**
|
|
87
|
-
* 截断日志
|
|
88
|
-
* @param size 目标字节数,默认 0
|
|
89
|
-
*/
|
|
90
|
-
async truncate(size = 0) {
|
|
91
|
-
const handle = this.requireHandle('walTruncate');
|
|
92
|
-
await handle.truncate(size);
|
|
93
|
-
await handle.sync();
|
|
94
|
-
this.offset = size;
|
|
95
|
-
}
|
|
96
|
-
/** 关闭日志 */
|
|
97
|
-
async close() {
|
|
98
|
-
if (this.handle) {
|
|
99
|
-
await this.handle.close();
|
|
100
|
-
this.handle = null;
|
|
101
|
-
}
|
|
102
|
-
}
|
|
103
|
-
/**
|
|
104
|
-
* 获取已打开的句柄
|
|
105
|
-
* @param operation 操作名
|
|
106
|
-
*/
|
|
107
|
-
requireHandle(operation) {
|
|
108
|
-
if (!this.handle) {
|
|
109
|
-
throw new LightDbError(LightDbErrorCodes.sessionClosed, 'WAL is not open', { operation });
|
|
110
|
-
}
|
|
111
|
-
return this.handle;
|
|
112
|
-
}
|
|
113
|
-
}
|
|
114
|
-
//# sourceMappingURL=wal.js.map
|
package/dist/core/wal.js.map
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"wal.js","sourceRoot":"","sources":["../../src/core/wal.ts"],"names":[],"mappings":"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"}
|
|
@@ -1,97 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* 存储适配器合同
|
|
3
|
-
*
|
|
4
|
-
* 这是 `@yydb/light-db` 唯一的平台边界。上层只认识逻辑文件名与随机访问句柄,
|
|
5
|
-
* 不认识本地路径、OPFS 目录结构或任何 Node 文件 API。
|
|
6
|
-
*/
|
|
7
|
-
/** 逻辑文件名,对外不暴露扩展名与目录结构 */
|
|
8
|
-
export type StorageFile = 'main' | 'main.tmp' | 'wal' | 'shm';
|
|
9
|
-
/** 所有逻辑文件 */
|
|
10
|
-
export declare const STORAGE_FILES: readonly StorageFile[];
|
|
11
|
-
/** 打开模式 */
|
|
12
|
-
export type StorageOpenMode = 'read' | 'readwrite';
|
|
13
|
-
/** 适配器类型 */
|
|
14
|
-
export type StorageAdapterKind = 'opfs' | 'indexeddb' | 'memory';
|
|
15
|
-
/**
|
|
16
|
-
* 随机访问句柄
|
|
17
|
-
*
|
|
18
|
-
* 语义参照 OPFS `FileSystemSyncAccessHandle`:按位置读写、可截断、可 flush,
|
|
19
|
-
* 不提供路径、目录或文件重命名能力。
|
|
20
|
-
*/
|
|
21
|
-
export interface StorageHandle {
|
|
22
|
-
/**
|
|
23
|
-
* 读取指定区间
|
|
24
|
-
* @param position 起始位置
|
|
25
|
-
* @param length 期望长度,超出文件末尾时返回实际可读部分
|
|
26
|
-
*/
|
|
27
|
-
read(position: number, length: number): Promise<Uint8Array>;
|
|
28
|
-
/**
|
|
29
|
-
* 写入指定位置,必要时扩展文件
|
|
30
|
-
* @param position 起始位置
|
|
31
|
-
* @param data 数据
|
|
32
|
-
*/
|
|
33
|
-
write(position: number, data: Uint8Array): Promise<void>;
|
|
34
|
-
/**
|
|
35
|
-
* 截断到指定大小
|
|
36
|
-
* @param size 目标大小
|
|
37
|
-
*/
|
|
38
|
-
truncate(size: number): Promise<void>;
|
|
39
|
-
/** 将已写入的数据持久化到宿主 */
|
|
40
|
-
sync(): Promise<void>;
|
|
41
|
-
/** 当前文件大小 */
|
|
42
|
-
size(): Promise<number>;
|
|
43
|
-
/** 关闭句柄 */
|
|
44
|
-
close(): Promise<void>;
|
|
45
|
-
}
|
|
46
|
-
/**
|
|
47
|
-
* 单个数据库的存储适配器
|
|
48
|
-
*
|
|
49
|
-
* 适配器只管理四个逻辑文件,原子发布由 `rename` 完成。
|
|
50
|
-
*/
|
|
51
|
-
export interface StorageAdapter {
|
|
52
|
-
/** 适配器类型 */
|
|
53
|
-
readonly kind: StorageAdapterKind;
|
|
54
|
-
/** 数据是否在会话结束后仍然存在 */
|
|
55
|
-
readonly persistent: boolean;
|
|
56
|
-
/**
|
|
57
|
-
* 打开逻辑文件
|
|
58
|
-
* @param file 逻辑文件名
|
|
59
|
-
* @param mode 打开模式,默认 `readwrite`
|
|
60
|
-
*/
|
|
61
|
-
open(file: StorageFile, mode?: StorageOpenMode): Promise<StorageHandle>;
|
|
62
|
-
/**
|
|
63
|
-
* 判断逻辑文件是否存在
|
|
64
|
-
* @param file 逻辑文件名
|
|
65
|
-
*/
|
|
66
|
-
exists(file: StorageFile): Promise<boolean>;
|
|
67
|
-
/**
|
|
68
|
-
* 删除逻辑文件,不存在时视为成功
|
|
69
|
-
* @param file 逻辑文件名
|
|
70
|
-
*/
|
|
71
|
-
delete(file: StorageFile): Promise<void>;
|
|
72
|
-
/**
|
|
73
|
-
* 原子重命名,用于发布快照
|
|
74
|
-
* @param from 源文件
|
|
75
|
-
* @param to 目标文件
|
|
76
|
-
*/
|
|
77
|
-
rename(from: StorageFile, to: StorageFile): Promise<void>;
|
|
78
|
-
/** 列出已存在的逻辑文件 */
|
|
79
|
-
list(): Promise<StorageFile[]>;
|
|
80
|
-
/** 关闭适配器 */
|
|
81
|
-
close(): Promise<void>;
|
|
82
|
-
}
|
|
83
|
-
/**
|
|
84
|
-
* 按数据库名打开适配器的工厂
|
|
85
|
-
*/
|
|
86
|
-
export interface StorageAdapterFactory {
|
|
87
|
-
/** 适配器类型 */
|
|
88
|
-
readonly kind: StorageAdapterKind;
|
|
89
|
-
/** 数据是否在会话结束后仍然存在 */
|
|
90
|
-
readonly persistent: boolean;
|
|
91
|
-
/**
|
|
92
|
-
* 打开指定数据库的适配器
|
|
93
|
-
* @param name 数据库名(浏览器 storage namespace)
|
|
94
|
-
*/
|
|
95
|
-
openDatabase(name: string): Promise<StorageAdapter>;
|
|
96
|
-
}
|
|
97
|
-
//# sourceMappingURL=StorageAdapter.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAdapter.d.ts","sourceRoot":"","sources":["../../src/storage/StorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,0BAA0B;AAC1B,MAAM,MAAM,WAAW,GAAG,MAAM,GAAG,UAAU,GAAG,KAAK,GAAG,KAAK,CAAC;AAE9D,aAAa;AACb,eAAO,MAAM,aAAa,EAAE,SAAS,WAAW,EAAuC,CAAC;AAExF,WAAW;AACX,MAAM,MAAM,eAAe,GAAG,MAAM,GAAG,WAAW,CAAC;AAEnD,YAAY;AACZ,MAAM,MAAM,kBAAkB,GAAG,MAAM,GAAG,WAAW,GAAG,QAAQ,CAAC;AAEjE;;;;;GAKG;AACH,MAAM,WAAW,aAAa;IAC1B;;;;OAIG;IACH,IAAI,CAAC,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,GAAG,OAAO,CAAC,UAAU,CAAC,CAAC;IAE5D;;;;OAIG;IACH,KAAK,CAAC,QAAQ,EAAE,MAAM,EAAE,IAAI,EAAE,UAAU,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzD;;;OAGG;IACH,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtC,oBAAoB;IACpB,IAAI,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;IAEtB,aAAa;IACb,IAAI,IAAI,OAAO,CAAC,MAAM,CAAC,CAAC;IAExB,WAAW;IACX,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;;;GAIG;AACH,MAAM,WAAW,cAAc;IAC3B,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC,qBAAqB;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B;;;;OAIG;IACH,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,CAAC,EAAE,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,CAAC;IAExE;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC,CAAC;IAE5C;;;OAGG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAEzC;;;;OAIG;IACH,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IAE1D,iBAAiB;IACjB,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC,CAAC;IAE/B,YAAY;IACZ,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED;;GAEG;AACH,MAAM,WAAW,qBAAqB;IAClC,YAAY;IACZ,QAAQ,CAAC,IAAI,EAAE,kBAAkB,CAAC;IAElC,qBAAqB;IACrB,QAAQ,CAAC,UAAU,EAAE,OAAO,CAAC;IAE7B;;;OAGG;IACH,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;CACvD"}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"StorageAdapter.js","sourceRoot":"","sources":["../../src/storage/StorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAKH,aAAa;AACb,MAAM,CAAC,MAAM,aAAa,GAA2B,CAAC,MAAM,EAAE,UAAU,EAAE,KAAK,EAAE,KAAK,CAAC,CAAC"}
|
package/dist/storage/index.d.ts
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* storage 层导出
|
|
3
|
-
*
|
|
4
|
-
* `StorageAdapter` 是唯一平台边界;OPFS 为默认后端,内存后端用于测试与一次性会话。
|
|
5
|
-
*/
|
|
6
|
-
export { STORAGE_FILES } from './StorageAdapter';
|
|
7
|
-
export type { StorageAdapter, StorageAdapterFactory, StorageAdapterKind, StorageFile, StorageHandle, StorageOpenMode } from './StorageAdapter';
|
|
8
|
-
export { MemoryStorageAdapter, MemoryStorageBackend } from './memory/MemoryStorageAdapter';
|
|
9
|
-
export { OpfsStorageAdapter, OpfsStorageAdapterFactory, isOpfsAvailable } from './opfs/OpfsStorageAdapter';
|
|
10
|
-
export { IndexedDbStorageAdapter, IndexedDbStorageAdapterFactory, isIndexedDbAvailable } from './indexeddb/IndexedDbStorageAdapter';
|
|
11
|
-
//# sourceMappingURL=index.d.ts.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AACjD,YAAY,EAAE,cAAc,EAAE,qBAAqB,EAAE,kBAAkB,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,kBAAkB,CAAC;AAC/I,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC"}
|
package/dist/storage/index.js
DELETED
|
@@ -1,10 +0,0 @@
|
|
|
1
|
-
/**
|
|
2
|
-
* storage 层导出
|
|
3
|
-
*
|
|
4
|
-
* `StorageAdapter` 是唯一平台边界;OPFS 为默认后端,内存后端用于测试与一次性会话。
|
|
5
|
-
*/
|
|
6
|
-
export { STORAGE_FILES } from './StorageAdapter';
|
|
7
|
-
export { MemoryStorageAdapter, MemoryStorageBackend } from './memory/MemoryStorageAdapter';
|
|
8
|
-
export { OpfsStorageAdapter, OpfsStorageAdapterFactory, isOpfsAvailable } from './opfs/OpfsStorageAdapter';
|
|
9
|
-
export { IndexedDbStorageAdapter, IndexedDbStorageAdapterFactory, isIndexedDbAvailable } from './indexeddb/IndexedDbStorageAdapter';
|
|
10
|
-
//# sourceMappingURL=index.js.map
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../src/storage/index.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,aAAa,EAAE,MAAM,kBAAkB,CAAC;AAEjD,OAAO,EAAE,oBAAoB,EAAE,oBAAoB,EAAE,MAAM,+BAA+B,CAAC;AAC3F,OAAO,EAAE,kBAAkB,EAAE,yBAAyB,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC3G,OAAO,EAAE,uBAAuB,EAAE,8BAA8B,EAAE,oBAAoB,EAAE,MAAM,qCAAqC,CAAC"}
|