@yydb/light-db 0.0.0 → 0.0.10

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.
Files changed (230) hide show
  1. package/dist/api/database.d.ts +48 -0
  2. package/dist/api/database.d.ts.map +1 -0
  3. package/dist/api/database.js +120 -0
  4. package/dist/api/database.js.map +1 -0
  5. package/dist/api/index.d.ts +7 -22
  6. package/dist/api/index.d.ts.map +1 -1
  7. package/dist/api/index.js +5 -52
  8. package/dist/api/index.js.map +1 -1
  9. package/dist/api/schema.d.ts +33 -0
  10. package/dist/api/schema.d.ts.map +1 -0
  11. package/dist/api/schema.js +80 -0
  12. package/dist/api/schema.js.map +1 -0
  13. package/dist/api/transaction.d.ts +26 -0
  14. package/dist/api/transaction.d.ts.map +1 -0
  15. package/dist/api/transaction.js +52 -0
  16. package/dist/api/transaction.js.map +1 -0
  17. package/dist/api/types.d.ts +55 -148
  18. package/dist/api/types.d.ts.map +1 -1
  19. package/dist/api/types.js +6 -5
  20. package/dist/api/types.js.map +1 -1
  21. package/dist/codec/binary.d.ts +196 -0
  22. package/dist/codec/binary.d.ts.map +1 -0
  23. package/dist/codec/binary.js +342 -0
  24. package/dist/codec/binary.js.map +1 -0
  25. package/dist/codec/checksum.d.ts +21 -0
  26. package/dist/codec/checksum.d.ts.map +1 -0
  27. package/dist/codec/checksum.js +46 -0
  28. package/dist/codec/checksum.js.map +1 -0
  29. package/dist/codec/index.d.ts +12 -0
  30. package/dist/codec/index.d.ts.map +1 -0
  31. package/dist/codec/index.js +10 -0
  32. package/dist/codec/index.js.map +1 -0
  33. package/dist/codec/page.d.ts +114 -0
  34. package/dist/codec/page.d.ts.map +1 -0
  35. package/dist/codec/page.js +225 -0
  36. package/dist/codec/page.js.map +1 -0
  37. package/dist/codec/record.d.ts +62 -0
  38. package/dist/codec/record.d.ts.map +1 -0
  39. package/dist/codec/record.js +82 -0
  40. package/dist/codec/record.js.map +1 -0
  41. package/dist/core/broadcast.d.ts +39 -0
  42. package/dist/core/broadcast.d.ts.map +1 -0
  43. package/dist/core/broadcast.js +54 -0
  44. package/dist/core/broadcast.js.map +1 -0
  45. package/dist/core/checkpoint.d.ts +23 -0
  46. package/dist/core/checkpoint.d.ts.map +1 -0
  47. package/dist/core/checkpoint.js +49 -0
  48. package/dist/core/checkpoint.js.map +1 -0
  49. package/dist/core/engine.d.ts +142 -0
  50. package/dist/core/engine.d.ts.map +1 -0
  51. package/dist/core/engine.js +304 -0
  52. package/dist/core/engine.js.map +1 -0
  53. package/dist/core/index.d.ts +17 -0
  54. package/dist/core/index.d.ts.map +1 -0
  55. package/dist/core/index.js +13 -0
  56. package/dist/core/index.js.map +1 -0
  57. package/dist/core/lease.d.ts +32 -0
  58. package/dist/core/lease.d.ts.map +1 -0
  59. package/dist/core/lease.js +81 -0
  60. package/dist/core/lease.js.map +1 -0
  61. package/dist/core/records.d.ts +49 -0
  62. package/dist/core/records.d.ts.map +1 -0
  63. package/dist/core/records.js +70 -0
  64. package/dist/core/records.js.map +1 -0
  65. package/dist/core/recovery.d.ts +43 -0
  66. package/dist/core/recovery.d.ts.map +1 -0
  67. package/dist/core/recovery.js +99 -0
  68. package/dist/core/recovery.js.map +1 -0
  69. package/dist/core/wal.d.ts +50 -0
  70. package/dist/core/wal.d.ts.map +1 -0
  71. package/dist/core/wal.js +114 -0
  72. package/dist/core/wal.js.map +1 -0
  73. package/dist/errors/index.d.ts +44 -66
  74. package/dist/errors/index.d.ts.map +1 -1
  75. package/dist/errors/index.js +43 -128
  76. package/dist/errors/index.js.map +1 -1
  77. package/dist/index.d.ts +14 -215
  78. package/dist/index.d.ts.map +1 -1
  79. package/dist/index.js +14 -724
  80. package/dist/index.js.map +1 -1
  81. package/dist/storage/StorageAdapter.d.ts +97 -0
  82. package/dist/storage/StorageAdapter.d.ts.map +1 -0
  83. package/dist/storage/StorageAdapter.js +9 -0
  84. package/dist/storage/StorageAdapter.js.map +1 -0
  85. package/dist/storage/index.d.ts +9 -8
  86. package/dist/storage/index.d.ts.map +1 -1
  87. package/dist/storage/index.js +8 -151
  88. package/dist/storage/index.js.map +1 -1
  89. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +140 -0
  90. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +1 -0
  91. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +403 -0
  92. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +1 -0
  93. package/dist/storage/memory/MemoryStorageAdapter.d.ts +76 -0
  94. package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +1 -0
  95. package/dist/storage/memory/MemoryStorageAdapter.js +212 -0
  96. package/dist/storage/memory/MemoryStorageAdapter.js.map +1 -0
  97. package/dist/storage/opfs/OpfsStorageAdapter.d.ts +141 -0
  98. package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +1 -0
  99. package/dist/storage/opfs/OpfsStorageAdapter.js +400 -0
  100. package/dist/storage/opfs/OpfsStorageAdapter.js.map +1 -0
  101. package/package.json +48 -36
  102. package/readme.md +80 -94
  103. package/dist/api/LightDB.d.ts +0 -194
  104. package/dist/api/LightDB.d.ts.map +0 -1
  105. package/dist/api/LightDB.js +0 -299
  106. package/dist/api/LightDB.js.map +0 -1
  107. package/dist/api/Transaction.d.ts +0 -100
  108. package/dist/api/Transaction.d.ts.map +0 -1
  109. package/dist/api/Transaction.js +0 -263
  110. package/dist/api/Transaction.js.map +0 -1
  111. package/dist/collection/Collection.d.ts +0 -235
  112. package/dist/collection/Collection.d.ts.map +0 -1
  113. package/dist/collection/Collection.js +0 -671
  114. package/dist/collection/Collection.js.map +0 -1
  115. package/dist/collection/QueryBuilder.d.ts +0 -225
  116. package/dist/collection/QueryBuilder.d.ts.map +0 -1
  117. package/dist/collection/QueryBuilder.js +0 -475
  118. package/dist/collection/QueryBuilder.js.map +0 -1
  119. package/dist/collection/QueryParser.d.ts +0 -117
  120. package/dist/collection/QueryParser.d.ts.map +0 -1
  121. package/dist/collection/QueryParser.js +0 -438
  122. package/dist/collection/QueryParser.js.map +0 -1
  123. package/dist/collection/index.d.ts +0 -42
  124. package/dist/collection/index.d.ts.map +0 -1
  125. package/dist/collection/index.js +0 -41
  126. package/dist/collection/index.js.map +0 -1
  127. package/dist/collection/types.d.ts +0 -365
  128. package/dist/collection/types.d.ts.map +0 -1
  129. package/dist/collection/types.js +0 -7
  130. package/dist/collection/types.js.map +0 -1
  131. package/dist/constants/index.d.ts +0 -51
  132. package/dist/constants/index.d.ts.map +0 -1
  133. package/dist/constants/index.js +0 -68
  134. package/dist/constants/index.js.map +0 -1
  135. package/dist/indexes/BPlusTree.d.ts +0 -181
  136. package/dist/indexes/BPlusTree.d.ts.map +0 -1
  137. package/dist/indexes/BPlusTree.js +0 -528
  138. package/dist/indexes/BPlusTree.js.map +0 -1
  139. package/dist/indexes/IndexManager.d.ts +0 -236
  140. package/dist/indexes/IndexManager.d.ts.map +0 -1
  141. package/dist/indexes/IndexManager.js +0 -502
  142. package/dist/indexes/IndexManager.js.map +0 -1
  143. package/dist/indexes/PrimaryIndex.d.ts +0 -240
  144. package/dist/indexes/PrimaryIndex.d.ts.map +0 -1
  145. package/dist/indexes/PrimaryIndex.js +0 -354
  146. package/dist/indexes/PrimaryIndex.js.map +0 -1
  147. package/dist/indexes/SecondaryIndex.d.ts +0 -204
  148. package/dist/indexes/SecondaryIndex.d.ts.map +0 -1
  149. package/dist/indexes/SecondaryIndex.js +0 -480
  150. package/dist/indexes/SecondaryIndex.js.map +0 -1
  151. package/dist/indexes/errors.d.ts +0 -66
  152. package/dist/indexes/errors.d.ts.map +0 -1
  153. package/dist/indexes/errors.js +0 -117
  154. package/dist/indexes/errors.js.map +0 -1
  155. package/dist/indexes/index.d.ts +0 -52
  156. package/dist/indexes/index.d.ts.map +0 -1
  157. package/dist/indexes/index.js +0 -131
  158. package/dist/indexes/index.js.map +0 -1
  159. package/dist/indexes/types.d.ts +0 -246
  160. package/dist/indexes/types.d.ts.map +0 -1
  161. package/dist/indexes/types.js +0 -30
  162. package/dist/indexes/types.js.map +0 -1
  163. package/dist/performance/BatchWALWriter.d.ts +0 -185
  164. package/dist/performance/BatchWALWriter.d.ts.map +0 -1
  165. package/dist/performance/BatchWALWriter.js +0 -490
  166. package/dist/performance/BatchWALWriter.js.map +0 -1
  167. package/dist/performance/ColumnarStorage.d.ts +0 -138
  168. package/dist/performance/ColumnarStorage.d.ts.map +0 -1
  169. package/dist/performance/ColumnarStorage.js +0 -875
  170. package/dist/performance/ColumnarStorage.js.map +0 -1
  171. package/dist/performance/LazyQuery.d.ts +0 -307
  172. package/dist/performance/LazyQuery.d.ts.map +0 -1
  173. package/dist/performance/LazyQuery.js +0 -588
  174. package/dist/performance/LazyQuery.js.map +0 -1
  175. package/dist/performance/OptimizedBuffer.d.ts +0 -375
  176. package/dist/performance/OptimizedBuffer.d.ts.map +0 -1
  177. package/dist/performance/OptimizedBuffer.js +0 -730
  178. package/dist/performance/OptimizedBuffer.js.map +0 -1
  179. package/dist/performance/RWLock.d.ts +0 -260
  180. package/dist/performance/RWLock.d.ts.map +0 -1
  181. package/dist/performance/RWLock.js +0 -570
  182. package/dist/performance/RWLock.js.map +0 -1
  183. package/dist/performance/index.d.ts +0 -41
  184. package/dist/performance/index.d.ts.map +0 -1
  185. package/dist/performance/index.js +0 -162
  186. package/dist/performance/index.js.map +0 -1
  187. package/dist/performance/types.d.ts +0 -247
  188. package/dist/performance/types.d.ts.map +0 -1
  189. package/dist/performance/types.js +0 -26
  190. package/dist/performance/types.js.map +0 -1
  191. package/dist/storage/Checkpoint.d.ts +0 -128
  192. package/dist/storage/Checkpoint.d.ts.map +0 -1
  193. package/dist/storage/Checkpoint.js +0 -251
  194. package/dist/storage/Checkpoint.js.map +0 -1
  195. package/dist/storage/LightFile.d.ts +0 -227
  196. package/dist/storage/LightFile.d.ts.map +0 -1
  197. package/dist/storage/LightFile.js +0 -526
  198. package/dist/storage/LightFile.js.map +0 -1
  199. package/dist/storage/Recovery.d.ts +0 -172
  200. package/dist/storage/Recovery.d.ts.map +0 -1
  201. package/dist/storage/Recovery.js +0 -399
  202. package/dist/storage/Recovery.js.map +0 -1
  203. package/dist/storage/SHMFile.d.ts +0 -243
  204. package/dist/storage/SHMFile.d.ts.map +0 -1
  205. package/dist/storage/SHMFile.js +0 -436
  206. package/dist/storage/SHMFile.js.map +0 -1
  207. package/dist/storage/StorageEngine.d.ts +0 -146
  208. package/dist/storage/StorageEngine.d.ts.map +0 -1
  209. package/dist/storage/StorageEngine.js +0 -353
  210. package/dist/storage/StorageEngine.js.map +0 -1
  211. package/dist/storage/WALFile.d.ts +0 -248
  212. package/dist/storage/WALFile.d.ts.map +0 -1
  213. package/dist/storage/WALFile.js +0 -597
  214. package/dist/storage/WALFile.js.map +0 -1
  215. package/dist/types/index.d.ts +0 -220
  216. package/dist/types/index.d.ts.map +0 -1
  217. package/dist/types/index.js +0 -7
  218. package/dist/types/index.js.map +0 -1
  219. package/dist/utils/binary.d.ts +0 -271
  220. package/dist/utils/binary.d.ts.map +0 -1
  221. package/dist/utils/binary.js +0 -454
  222. package/dist/utils/binary.js.map +0 -1
  223. package/dist/utils/file.d.ts +0 -166
  224. package/dist/utils/file.d.ts.map +0 -1
  225. package/dist/utils/file.js +0 -346
  226. package/dist/utils/file.js.map +0 -1
  227. package/dist/utils/index.d.ts +0 -6
  228. package/dist/utils/index.d.ts.map +0 -1
  229. package/dist/utils/index.js +0 -39
  230. package/dist/utils/index.js.map +0 -1
@@ -0,0 +1,49 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,70 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,43 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,99 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"recovery.js","sourceRoot":"","sources":["../../src/core/recovery.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,50 @@
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
@@ -0,0 +1 @@
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"}
@@ -0,0 +1,114 @@
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
@@ -0,0 +1 @@
1
+ {"version":3,"file":"wal.js","sourceRoot":"","sources":["../../src/core/wal.ts"],"names":[],"mappings":"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"}
@@ -1,69 +1,47 @@
1
1
  /**
2
- * LightDB 存储引擎错误定义
3
- * 提供详细的错误类型和错误消息
4
- */
5
- /**
6
- * 存储引擎错误基类
7
- */
8
- export declare class StorageError extends Error {
9
- /** 错误代码 */
2
+ * 稳定错误模型
3
+ *
4
+ * 与 `@yydb/yydb` / `@yydb/yydb-client` 共用同一组错误码:宿主只按 `code` 分支,
5
+ * `message` 只用于显示。
6
+ */
7
+ /** 浏览器产品对外的稳定错误码 */
8
+ export declare const LightDbErrorCodes: {
9
+ /** I/O 失败 */
10
+ readonly io: "yydb.io";
11
+ /** 持久化数据损坏 */
12
+ readonly corrupt: "yydb.corrupt";
13
+ /** Schema 文档与已持久化内容冲突 */
14
+ readonly schemaConflict: "yydb.schema.conflict";
15
+ /** Schema 文档不合法 */
16
+ readonly schemaInvalid: "yydb.schema.invalid";
17
+ /** 宿主不支持该能力 */
18
+ readonly unsupported: "yydb.unsupported";
19
+ /** 会话或数据库已关闭 */
20
+ readonly sessionClosed: "yydb.session.closed";
21
+ /** 单写者租约不可用(例如缺少 Web Locks) */
22
+ readonly leaseUnavailable: "yydb.lease.unavailable";
23
+ /** 存储配额不足 */
24
+ readonly quotaExceeded: "yydb.quota.exceeded";
25
+ };
26
+ /**
27
+ * 数据库错误选项
28
+ */
29
+ export interface LightDbErrorOptions {
30
+ /** 失败的操作(`schemaGet`、`kvPut` 等) */
31
+ operation?: string;
32
+ /** 底层失败 */
33
+ cause?: unknown;
34
+ }
35
+ /**
36
+ * 携带稳定错误码的数据库错误
37
+ */
38
+ export declare class LightDbError extends Error {
39
+ /** 稳定错误码 */
10
40
  readonly code: string;
11
- /** 错误上下文信息 */
12
- readonly context?: Record<string, unknown>;
13
- constructor(message: string, code: string, context?: Record<string, unknown>);
14
- }
15
- /**
16
- * 文件操作错误
17
- */
18
- export declare class FileOperationError extends StorageError {
19
- constructor(message: string, filePath: string, operation: string);
20
- }
21
- /**
22
- * 文件格式错误
23
- */
24
- export declare class FileFormatError extends StorageError {
25
- constructor(message: string, filePath: string, expected?: string, actual?: unknown);
26
- }
27
- /**
28
- * 校验和错误
29
- */
30
- export declare class ChecksumError extends StorageError {
31
- constructor(message: string, expected: number, actual: number, position?: number);
32
- }
33
- /**
34
- * WAL 错误
35
- */
36
- export declare class WalError extends StorageError {
37
- constructor(message: string, lsn?: bigint, offset?: number);
38
- }
39
- /**
40
- * 恢复错误
41
- */
42
- export declare class RecoveryError extends StorageError {
43
- constructor(message: string, phase: string, details?: unknown);
44
- }
45
- /**
46
- * 检查点错误
47
- */
48
- export declare class CheckpointError extends StorageError {
49
- constructor(message: string, lsn?: bigint);
50
- }
51
- /**
52
- * 页面错误
53
- */
54
- export declare class PageError extends StorageError {
55
- constructor(message: string, pageId: number, details?: unknown);
56
- }
57
- /**
58
- * 序列化错误
59
- */
60
- export declare class SerializationError extends StorageError {
61
- constructor(message: string, data?: unknown);
62
- }
63
- /**
64
- * 配置错误
65
- */
66
- export declare class ConfigurationError extends StorageError {
67
- constructor(message: string, option?: string, value?: unknown);
41
+ /** 失败的操作 */
42
+ readonly operation: string;
43
+ /** 是否可以用相同参数重试 */
44
+ readonly retryable: boolean;
45
+ constructor(code: string, message: string, options?: LightDbErrorOptions);
68
46
  }
69
- //# sourceMappingURL=index.d.ts.map
47
+ //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;GAGG;AAEH;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACnC,WAAW;IACX,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,cAAc;IACd,SAAgB,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;gBAEtC,OAAO,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC;CAS/E;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACpC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM;CAKnE;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,OAAO;CAKrF;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBAC/B,OAAO,EAAE,MAAM,EAAE,QAAQ,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,QAAQ,CAAC,EAAE,MAAM;CAKnF;AAED;;GAEG;AACH,qBAAa,QAAS,SAAQ,YAAY;gBAC1B,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM;CAK7D;AAED;;GAEG;AACH,qBAAa,aAAc,SAAQ,YAAY;gBAC/B,OAAO,EAAE,MAAM,EAAE,KAAK,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAKhE;AAED;;GAEG;AACH,qBAAa,eAAgB,SAAQ,YAAY;gBACjC,OAAO,EAAE,MAAM,EAAE,GAAG,CAAC,EAAE,MAAM;CAK5C;AAED;;GAEG;AACH,qBAAa,SAAU,SAAQ,YAAY;gBAC3B,OAAO,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE,OAAO;CAKjE;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACpC,OAAO,EAAE,MAAM,EAAE,IAAI,CAAC,EAAE,OAAO;CAK9C;AAED;;GAEG;AACH,qBAAa,kBAAmB,SAAQ,YAAY;gBACpC,OAAO,EAAE,MAAM,EAAE,MAAM,CAAC,EAAE,MAAM,EAAE,KAAK,CAAC,EAAE,OAAO;CAKhE"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../src/errors/index.ts"],"names":[],"mappings":"AAAA;;;;;GAKG;AAEH,oBAAoB;AACpB,eAAO,MAAM,iBAAiB;IAC1B,aAAa;;IAEb,cAAc;;IAEd,yBAAyB;;IAEzB,mBAAmB;;IAEnB,eAAe;;IAEf,gBAAgB;;IAEhB,+BAA+B;;IAE/B,aAAa;;CAEP,CAAC;AAKX;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAChC,mCAAmC;IACnC,SAAS,CAAC,EAAE,MAAM,CAAC;IACnB,WAAW;IACX,KAAK,CAAC,EAAE,OAAO,CAAC;CACnB;AAED;;GAEG;AACH,qBAAa,YAAa,SAAQ,KAAK;IACnC,YAAY;IACZ,SAAgB,IAAI,EAAE,MAAM,CAAC;IAE7B,YAAY;IACZ,SAAgB,SAAS,EAAE,MAAM,CAAC;IAElC,kBAAkB;IAClB,SAAgB,SAAS,EAAE,OAAO,CAAC;gBAEvB,IAAI,EAAE,MAAM,EAAE,OAAO,EAAE,MAAM,EAAE,OAAO,GAAE,mBAAwB;CAQ/E"}