@yydb/light-db 0.0.17 → 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (110) hide show
  1. package/dist/api/index.d.ts +4 -9
  2. package/dist/api/index.d.ts.map +1 -1
  3. package/dist/api/index.js +3 -6
  4. package/dist/api/index.js.map +1 -1
  5. package/dist/api/types.d.ts +71 -42
  6. package/dist/api/types.d.ts.map +1 -1
  7. package/dist/api/types.js +5 -3
  8. package/dist/api/types.js.map +1 -1
  9. package/dist/api/wasm-database.d.ts +134 -27
  10. package/dist/api/wasm-database.d.ts.map +1 -1
  11. package/dist/api/wasm-database.js +172 -28
  12. package/dist/api/wasm-database.js.map +1 -1
  13. package/dist/index.d.ts +14 -11
  14. package/dist/index.d.ts.map +1 -1
  15. package/dist/index.js +14 -11
  16. package/dist/index.js.map +1 -1
  17. package/dist/shared/micro.d.ts +86 -0
  18. package/dist/shared/micro.d.ts.map +1 -0
  19. package/dist/shared/micro.js +194 -0
  20. package/dist/shared/micro.js.map +1 -0
  21. package/dist/shared/udf-types.d.ts +31 -0
  22. package/dist/shared/udf-types.d.ts.map +1 -0
  23. package/dist/shared/udf-types.js +12 -0
  24. package/dist/shared/udf-types.js.map +1 -0
  25. package/package.json +5 -7
  26. package/readme.md +60 -63
  27. package/dist/api/database.d.ts +0 -101
  28. package/dist/api/database.d.ts.map +0 -1
  29. package/dist/api/database.js +0 -149
  30. package/dist/api/database.js.map +0 -1
  31. package/dist/api/schema.d.ts +0 -33
  32. package/dist/api/schema.d.ts.map +0 -1
  33. package/dist/api/schema.js +0 -80
  34. package/dist/api/schema.js.map +0 -1
  35. package/dist/api/transaction.d.ts +0 -26
  36. package/dist/api/transaction.d.ts.map +0 -1
  37. package/dist/api/transaction.js +0 -52
  38. package/dist/api/transaction.js.map +0 -1
  39. package/dist/codec/binary.d.ts +0 -196
  40. package/dist/codec/binary.d.ts.map +0 -1
  41. package/dist/codec/binary.js +0 -342
  42. package/dist/codec/binary.js.map +0 -1
  43. package/dist/codec/checksum.d.ts +0 -21
  44. package/dist/codec/checksum.d.ts.map +0 -1
  45. package/dist/codec/checksum.js +0 -46
  46. package/dist/codec/checksum.js.map +0 -1
  47. package/dist/codec/index.d.ts +0 -12
  48. package/dist/codec/index.d.ts.map +0 -1
  49. package/dist/codec/index.js +0 -10
  50. package/dist/codec/index.js.map +0 -1
  51. package/dist/codec/page.d.ts +0 -114
  52. package/dist/codec/page.d.ts.map +0 -1
  53. package/dist/codec/page.js +0 -225
  54. package/dist/codec/page.js.map +0 -1
  55. package/dist/codec/record.d.ts +0 -62
  56. package/dist/codec/record.d.ts.map +0 -1
  57. package/dist/codec/record.js +0 -82
  58. package/dist/codec/record.js.map +0 -1
  59. package/dist/core/broadcast.d.ts +0 -39
  60. package/dist/core/broadcast.d.ts.map +0 -1
  61. package/dist/core/broadcast.js +0 -54
  62. package/dist/core/broadcast.js.map +0 -1
  63. package/dist/core/checkpoint.d.ts +0 -23
  64. package/dist/core/checkpoint.d.ts.map +0 -1
  65. package/dist/core/checkpoint.js +0 -49
  66. package/dist/core/checkpoint.js.map +0 -1
  67. package/dist/core/engine.d.ts +0 -142
  68. package/dist/core/engine.d.ts.map +0 -1
  69. package/dist/core/engine.js +0 -304
  70. package/dist/core/engine.js.map +0 -1
  71. package/dist/core/index.d.ts +0 -17
  72. package/dist/core/index.d.ts.map +0 -1
  73. package/dist/core/index.js +0 -13
  74. package/dist/core/index.js.map +0 -1
  75. package/dist/core/lease.d.ts +0 -32
  76. package/dist/core/lease.d.ts.map +0 -1
  77. package/dist/core/lease.js +0 -81
  78. package/dist/core/lease.js.map +0 -1
  79. package/dist/core/records.d.ts +0 -49
  80. package/dist/core/records.d.ts.map +0 -1
  81. package/dist/core/records.js +0 -70
  82. package/dist/core/records.js.map +0 -1
  83. package/dist/core/recovery.d.ts +0 -43
  84. package/dist/core/recovery.d.ts.map +0 -1
  85. package/dist/core/recovery.js +0 -99
  86. package/dist/core/recovery.js.map +0 -1
  87. package/dist/core/wal.d.ts +0 -50
  88. package/dist/core/wal.d.ts.map +0 -1
  89. package/dist/core/wal.js +0 -114
  90. package/dist/core/wal.js.map +0 -1
  91. package/dist/storage/StorageAdapter.d.ts +0 -97
  92. package/dist/storage/StorageAdapter.d.ts.map +0 -1
  93. package/dist/storage/StorageAdapter.js +0 -9
  94. package/dist/storage/StorageAdapter.js.map +0 -1
  95. package/dist/storage/index.d.ts +0 -11
  96. package/dist/storage/index.d.ts.map +0 -1
  97. package/dist/storage/index.js +0 -10
  98. package/dist/storage/index.js.map +0 -1
  99. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +0 -140
  100. package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +0 -1
  101. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +0 -403
  102. package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +0 -1
  103. package/dist/storage/memory/MemoryStorageAdapter.d.ts +0 -76
  104. package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +0 -1
  105. package/dist/storage/memory/MemoryStorageAdapter.js +0 -212
  106. package/dist/storage/memory/MemoryStorageAdapter.js.map +0 -1
  107. package/dist/storage/opfs/OpfsStorageAdapter.d.ts +0 -141
  108. package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +0 -1
  109. package/dist/storage/opfs/OpfsStorageAdapter.js +0 -400
  110. package/dist/storage/opfs/OpfsStorageAdapter.js.map +0 -1
@@ -1,400 +0,0 @@
1
- /**
2
- * OPFS 存储适配器
3
- *
4
- * 默认持久化后端。优先使用 sync access handle(需 Worker 上下文),
5
- * 主线程退化为 `createWritable` + `getFile`,两条路径共享同一套逻辑文件语义。
6
- *
7
- * 不把 OPFS 目录结构暴露给上层:上层只认识 `main` / `main.tmp` / `wal` / `shm`。
8
- */
9
- import { LightDbError, LightDbErrorCodes } from '../../errors';
10
- import { STORAGE_FILES } from '../StorageAdapter';
11
- /** 逻辑文件在 OPFS 中的物理文件名 */
12
- const PHYSICAL_NAMES = {
13
- main: 'main.snapshot',
14
- 'main.tmp': 'main.snapshot.tmp',
15
- wal: 'wal.log',
16
- shm: 'wal.index',
17
- };
18
- /**
19
- * 判断当前宿主是否提供 OPFS
20
- */
21
- export function isOpfsAvailable() {
22
- const storage = globalThis.navigator?.storage;
23
- return typeof storage?.getDirectory === 'function';
24
- }
25
- /**
26
- * OPFS 适配器工厂
27
- */
28
- export class OpfsStorageAdapterFactory {
29
- /** 适配器类型 */
30
- kind = 'opfs';
31
- /** 数据持久化 */
32
- persistent = true;
33
- root = null;
34
- /**
35
- * 打开数据库适配器
36
- * @param name 数据库名
37
- */
38
- async openDatabase(name) {
39
- const root = await this.getRoot();
40
- const directory = await this.getDirectory(root, encodeURIComponent(name), 'openDatabase');
41
- return new OpfsStorageAdapter(name, directory);
42
- }
43
- /**
44
- * 取得 OPFS 根目录
45
- */
46
- async getRoot() {
47
- const storage = globalThis.navigator?.storage;
48
- if (!storage) {
49
- throw new LightDbError(LightDbErrorCodes.unsupported, 'OPFS is not available in this environment', {
50
- operation: 'openDatabase',
51
- });
52
- }
53
- if (!this.root) {
54
- this.root = storage.getDirectory();
55
- }
56
- try {
57
- return await this.root;
58
- }
59
- catch (error) {
60
- this.root = null;
61
- throw new LightDbError(LightDbErrorCodes.io, 'failed to open the OPFS root directory', {
62
- operation: 'openDatabase',
63
- cause: error,
64
- });
65
- }
66
- }
67
- /**
68
- * 取得或创建目录
69
- * @param parent 父目录
70
- * @param name 目录名
71
- * @param operation 操作名
72
- */
73
- async getDirectory(parent, name, operation) {
74
- try {
75
- return await parent.getDirectoryHandle(name, { create: true });
76
- }
77
- catch (error) {
78
- throw new LightDbError(LightDbErrorCodes.io, `failed to open OPFS directory "${name}"`, {
79
- operation,
80
- cause: error,
81
- });
82
- }
83
- }
84
- }
85
- /**
86
- * OPFS 存储适配器
87
- */
88
- export class OpfsStorageAdapter {
89
- /** 适配器类型 */
90
- kind = 'opfs';
91
- /** 数据持久化 */
92
- persistent = true;
93
- name;
94
- directory;
95
- closed = false;
96
- constructor(name, directory) {
97
- this.name = name;
98
- this.directory = directory;
99
- }
100
- /**
101
- * 打开逻辑文件
102
- * @param file 逻辑文件名
103
- * @param mode 打开模式
104
- */
105
- async open(file, mode = 'readwrite') {
106
- this.assertOpen('storageOpen');
107
- const physical = PHYSICAL_NAMES[file];
108
- let handle;
109
- try {
110
- handle = await this.directory.getFileHandle(physical, { create: mode === 'readwrite' });
111
- }
112
- catch (error) {
113
- throw new LightDbError(LightDbErrorCodes.io, `failed to open OPFS file "${physical}"`, {
114
- operation: 'storageOpen',
115
- cause: error,
116
- });
117
- }
118
- return new OpfsStorageHandle(physical, handle);
119
- }
120
- /**
121
- * 判断文件是否存在
122
- * @param file 逻辑文件名
123
- */
124
- async exists(file) {
125
- this.assertOpen('storageExists');
126
- try {
127
- await this.directory.getFileHandle(PHYSICAL_NAMES[file]);
128
- return true;
129
- }
130
- catch {
131
- return false;
132
- }
133
- }
134
- /**
135
- * 删除文件
136
- * @param file 逻辑文件名
137
- */
138
- async delete(file) {
139
- this.assertOpen('storageDelete');
140
- try {
141
- await this.directory.removeEntry(PHYSICAL_NAMES[file]);
142
- }
143
- catch (error) {
144
- if (isNotFound(error)) {
145
- return;
146
- }
147
- throw new LightDbError(LightDbErrorCodes.io, `failed to delete OPFS file "${PHYSICAL_NAMES[file]}"`, {
148
- operation: 'storageDelete',
149
- cause: error,
150
- });
151
- }
152
- }
153
- /**
154
- * 发布快照:优先 `move`,否则复制后删除
155
- * @param from 源文件
156
- * @param to 目标文件
157
- */
158
- async rename(from, to) {
159
- this.assertOpen('storageRename');
160
- const fromName = PHYSICAL_NAMES[from];
161
- const toName = PHYSICAL_NAMES[to];
162
- try {
163
- const source = await this.directory.getFileHandle(fromName);
164
- if (typeof source.move === 'function') {
165
- try {
166
- await source.move(toName);
167
- return;
168
- }
169
- catch {
170
- // 宿主声明了 `move` 但拒绝执行(目标已存在或上下文受限),退回复制路径
171
- }
172
- }
173
- }
174
- catch (error) {
175
- if (!isNotFound(error)) {
176
- throw new LightDbError(LightDbErrorCodes.io, `failed to rename OPFS file "${fromName}"`, {
177
- operation: 'storageRename',
178
- cause: error,
179
- });
180
- }
181
- }
182
- const data = await this.readAll(from);
183
- const target = await this.open(to, 'readwrite');
184
- try {
185
- await target.truncate(0);
186
- await target.write(0, data);
187
- await target.sync();
188
- }
189
- finally {
190
- await target.close();
191
- }
192
- await this.delete(from);
193
- }
194
- /**
195
- * 列出已存在的文件
196
- */
197
- async list() {
198
- this.assertOpen('storageList');
199
- const present = [];
200
- for (const file of STORAGE_FILES) {
201
- if (await this.exists(file)) {
202
- present.push(file);
203
- }
204
- }
205
- return present;
206
- }
207
- /** 关闭适配器 */
208
- async close() {
209
- this.closed = true;
210
- }
211
- /**
212
- * 读取逻辑文件全部内容
213
- * @param file 逻辑文件名
214
- */
215
- async readAll(file) {
216
- const handle = await this.open(file, 'read');
217
- try {
218
- return await handle.read(0, await handle.size());
219
- }
220
- finally {
221
- await handle.close();
222
- }
223
- }
224
- /**
225
- * 断言适配器未关闭
226
- * @param operation 操作名
227
- */
228
- assertOpen(operation) {
229
- if (this.closed) {
230
- throw new LightDbError(LightDbErrorCodes.sessionClosed, `OPFS database "${this.name}" is closed`, {
231
- operation,
232
- });
233
- }
234
- }
235
- }
236
- /**
237
- * OPFS 文件句柄
238
- */
239
- class OpfsStorageHandle {
240
- physical;
241
- handle;
242
- syncHandle = null;
243
- syncProbed = false;
244
- closed = false;
245
- constructor(physical, handle) {
246
- this.physical = physical;
247
- this.handle = handle;
248
- }
249
- /**
250
- * 读取指定区间
251
- * @param position 起始位置
252
- * @param length 期望长度
253
- */
254
- async read(position, length) {
255
- this.assertOpen('read');
256
- if (length <= 0) {
257
- return new Uint8Array(0);
258
- }
259
- const sync = await this.getSyncHandle();
260
- if (sync) {
261
- const buffer = new Uint8Array(length);
262
- const bytesRead = sync.read(buffer, { at: position });
263
- return buffer.subarray(0, bytesRead);
264
- }
265
- const file = await this.handle.getFile();
266
- const data = new Uint8Array(await file.arrayBuffer());
267
- if (position >= data.length) {
268
- return new Uint8Array(0);
269
- }
270
- return data.subarray(position, Math.min(position + length, data.length));
271
- }
272
- /**
273
- * 写入指定位置
274
- * @param position 起始位置
275
- * @param data 数据
276
- */
277
- async write(position, data) {
278
- this.assertOpen('write');
279
- const sync = await this.getSyncHandle();
280
- if (sync) {
281
- sync.write(data, { at: position });
282
- return;
283
- }
284
- await this.withWritable(async (writable) => {
285
- await writable.write({ type: 'write', position, data });
286
- }, 'write');
287
- }
288
- /**
289
- * 截断文件
290
- * @param size 目标大小
291
- */
292
- async truncate(size) {
293
- this.assertOpen('truncate');
294
- const sync = await this.getSyncHandle();
295
- if (sync) {
296
- sync.truncate(size);
297
- return;
298
- }
299
- await this.withWritable(async (writable) => {
300
- await writable.truncate(size);
301
- }, 'truncate');
302
- }
303
- /** 落盘 */
304
- async sync() {
305
- this.assertOpen('sync');
306
- if (this.syncHandle) {
307
- this.syncHandle.flush();
308
- }
309
- // `createWritable` 路径每次写入都会 close 提交,无需额外 flush。
310
- }
311
- /** 当前文件大小 */
312
- async size() {
313
- this.assertOpen('size');
314
- if (this.syncHandle) {
315
- return this.syncHandle.getSize();
316
- }
317
- const file = await this.handle.getFile();
318
- return file.size;
319
- }
320
- /** 关闭句柄 */
321
- async close() {
322
- if (this.closed) {
323
- return;
324
- }
325
- this.closed = true;
326
- if (this.syncHandle) {
327
- this.syncHandle.close();
328
- this.syncHandle = null;
329
- }
330
- }
331
- /**
332
- * 尝试取得同步访问句柄
333
- *
334
- * 主线程没有 `createSyncAccessHandle` 或调用被拒绝时返回 null,退化到可写流。
335
- */
336
- async getSyncHandle() {
337
- if (this.syncHandle) {
338
- return this.syncHandle;
339
- }
340
- if (this.syncProbed || typeof this.handle.createSyncAccessHandle !== 'function') {
341
- return null;
342
- }
343
- this.syncProbed = true;
344
- try {
345
- this.syncHandle = await this.handle.createSyncAccessHandle();
346
- return this.syncHandle;
347
- }
348
- catch {
349
- return null;
350
- }
351
- }
352
- /**
353
- * 使用可写流执行一次提交
354
- * @param action 写入动作
355
- * @param operation 操作名
356
- */
357
- async withWritable(action, operation) {
358
- let writable;
359
- try {
360
- writable = await this.handle.createWritable({ keepExistingData: true });
361
- }
362
- catch (error) {
363
- throw new LightDbError(LightDbErrorCodes.io, `failed to open OPFS writable "${this.physical}"`, {
364
- operation,
365
- cause: error,
366
- });
367
- }
368
- try {
369
- await action(writable);
370
- }
371
- catch (error) {
372
- throw new LightDbError(LightDbErrorCodes.io, `failed to write OPFS file "${this.physical}"`, {
373
- operation,
374
- cause: error,
375
- });
376
- }
377
- finally {
378
- await writable.close();
379
- }
380
- }
381
- /**
382
- * 断言句柄未关闭
383
- * @param operation 操作名
384
- */
385
- assertOpen(operation) {
386
- if (this.closed) {
387
- throw new LightDbError(LightDbErrorCodes.sessionClosed, `OPFS handle "${this.physical}" is closed`, {
388
- operation,
389
- });
390
- }
391
- }
392
- }
393
- /**
394
- * 判断是否为「文件不存在」错误
395
- * @param error 错误
396
- */
397
- function isNotFound(error) {
398
- return typeof error === 'object' && error !== null && error.name === 'NotFoundError';
399
- }
400
- //# sourceMappingURL=OpfsStorageAdapter.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"OpfsStorageAdapter.js","sourceRoot":"","sources":["../../../src/storage/opfs/OpfsStorageAdapter.ts"],"names":[],"mappings":"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"}