@yydb/light-db 0.0.0 → 0.0.11
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/database.d.ts +48 -0
- package/dist/api/database.d.ts.map +1 -0
- package/dist/api/database.js +120 -0
- package/dist/api/database.js.map +1 -0
- package/dist/api/index.d.ts +7 -22
- package/dist/api/index.d.ts.map +1 -1
- package/dist/api/index.js +5 -52
- package/dist/api/index.js.map +1 -1
- package/dist/api/schema.d.ts +33 -0
- package/dist/api/schema.d.ts.map +1 -0
- package/dist/api/schema.js +80 -0
- package/dist/api/schema.js.map +1 -0
- package/dist/api/transaction.d.ts +26 -0
- package/dist/api/transaction.d.ts.map +1 -0
- package/dist/api/transaction.js +52 -0
- package/dist/api/transaction.js.map +1 -0
- package/dist/api/types.d.ts +55 -148
- package/dist/api/types.d.ts.map +1 -1
- package/dist/api/types.js +6 -5
- package/dist/api/types.js.map +1 -1
- package/dist/codec/binary.d.ts +196 -0
- package/dist/codec/binary.d.ts.map +1 -0
- package/dist/codec/binary.js +342 -0
- package/dist/codec/binary.js.map +1 -0
- package/dist/codec/checksum.d.ts +21 -0
- package/dist/codec/checksum.d.ts.map +1 -0
- package/dist/codec/checksum.js +46 -0
- package/dist/codec/checksum.js.map +1 -0
- package/dist/codec/index.d.ts +12 -0
- package/dist/codec/index.d.ts.map +1 -0
- package/dist/codec/index.js +10 -0
- package/dist/codec/index.js.map +1 -0
- package/dist/codec/page.d.ts +114 -0
- package/dist/codec/page.d.ts.map +1 -0
- package/dist/codec/page.js +225 -0
- package/dist/codec/page.js.map +1 -0
- package/dist/codec/record.d.ts +62 -0
- package/dist/codec/record.d.ts.map +1 -0
- package/dist/codec/record.js +82 -0
- package/dist/codec/record.js.map +1 -0
- package/dist/core/broadcast.d.ts +39 -0
- package/dist/core/broadcast.d.ts.map +1 -0
- package/dist/core/broadcast.js +54 -0
- package/dist/core/broadcast.js.map +1 -0
- package/dist/core/checkpoint.d.ts +23 -0
- package/dist/core/checkpoint.d.ts.map +1 -0
- package/dist/core/checkpoint.js +49 -0
- package/dist/core/checkpoint.js.map +1 -0
- package/dist/core/engine.d.ts +142 -0
- package/dist/core/engine.d.ts.map +1 -0
- package/dist/core/engine.js +304 -0
- package/dist/core/engine.js.map +1 -0
- package/dist/core/index.d.ts +17 -0
- package/dist/core/index.d.ts.map +1 -0
- package/dist/core/index.js +13 -0
- package/dist/core/index.js.map +1 -0
- package/dist/core/lease.d.ts +32 -0
- package/dist/core/lease.d.ts.map +1 -0
- package/dist/core/lease.js +81 -0
- package/dist/core/lease.js.map +1 -0
- package/dist/core/records.d.ts +49 -0
- package/dist/core/records.d.ts.map +1 -0
- package/dist/core/records.js +70 -0
- package/dist/core/records.js.map +1 -0
- package/dist/core/recovery.d.ts +43 -0
- package/dist/core/recovery.d.ts.map +1 -0
- package/dist/core/recovery.js +99 -0
- package/dist/core/recovery.js.map +1 -0
- package/dist/core/wal.d.ts +50 -0
- package/dist/core/wal.d.ts.map +1 -0
- package/dist/core/wal.js +114 -0
- package/dist/core/wal.js.map +1 -0
- package/dist/errors/index.d.ts +44 -66
- package/dist/errors/index.d.ts.map +1 -1
- package/dist/errors/index.js +43 -128
- package/dist/errors/index.js.map +1 -1
- package/dist/index.d.ts +14 -215
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +14 -724
- package/dist/index.js.map +1 -1
- package/dist/storage/StorageAdapter.d.ts +97 -0
- package/dist/storage/StorageAdapter.d.ts.map +1 -0
- package/dist/storage/StorageAdapter.js +9 -0
- package/dist/storage/StorageAdapter.js.map +1 -0
- package/dist/storage/index.d.ts +9 -8
- package/dist/storage/index.d.ts.map +1 -1
- package/dist/storage/index.js +8 -151
- package/dist/storage/index.js.map +1 -1
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts +140 -0
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.d.ts.map +1 -0
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.js +403 -0
- package/dist/storage/indexeddb/IndexedDbStorageAdapter.js.map +1 -0
- package/dist/storage/memory/MemoryStorageAdapter.d.ts +76 -0
- package/dist/storage/memory/MemoryStorageAdapter.d.ts.map +1 -0
- package/dist/storage/memory/MemoryStorageAdapter.js +212 -0
- package/dist/storage/memory/MemoryStorageAdapter.js.map +1 -0
- package/dist/storage/opfs/OpfsStorageAdapter.d.ts +141 -0
- package/dist/storage/opfs/OpfsStorageAdapter.d.ts.map +1 -0
- package/dist/storage/opfs/OpfsStorageAdapter.js +400 -0
- package/dist/storage/opfs/OpfsStorageAdapter.js.map +1 -0
- package/package.json +48 -36
- package/readme.md +80 -94
- package/dist/api/LightDB.d.ts +0 -194
- package/dist/api/LightDB.d.ts.map +0 -1
- package/dist/api/LightDB.js +0 -299
- package/dist/api/LightDB.js.map +0 -1
- package/dist/api/Transaction.d.ts +0 -100
- package/dist/api/Transaction.d.ts.map +0 -1
- package/dist/api/Transaction.js +0 -263
- package/dist/api/Transaction.js.map +0 -1
- package/dist/collection/Collection.d.ts +0 -235
- package/dist/collection/Collection.d.ts.map +0 -1
- package/dist/collection/Collection.js +0 -671
- package/dist/collection/Collection.js.map +0 -1
- package/dist/collection/QueryBuilder.d.ts +0 -225
- package/dist/collection/QueryBuilder.d.ts.map +0 -1
- package/dist/collection/QueryBuilder.js +0 -475
- package/dist/collection/QueryBuilder.js.map +0 -1
- package/dist/collection/QueryParser.d.ts +0 -117
- package/dist/collection/QueryParser.d.ts.map +0 -1
- package/dist/collection/QueryParser.js +0 -438
- package/dist/collection/QueryParser.js.map +0 -1
- package/dist/collection/index.d.ts +0 -42
- package/dist/collection/index.d.ts.map +0 -1
- package/dist/collection/index.js +0 -41
- package/dist/collection/index.js.map +0 -1
- package/dist/collection/types.d.ts +0 -365
- package/dist/collection/types.d.ts.map +0 -1
- package/dist/collection/types.js +0 -7
- package/dist/collection/types.js.map +0 -1
- package/dist/constants/index.d.ts +0 -51
- package/dist/constants/index.d.ts.map +0 -1
- package/dist/constants/index.js +0 -68
- package/dist/constants/index.js.map +0 -1
- package/dist/indexes/BPlusTree.d.ts +0 -181
- package/dist/indexes/BPlusTree.d.ts.map +0 -1
- package/dist/indexes/BPlusTree.js +0 -528
- package/dist/indexes/BPlusTree.js.map +0 -1
- package/dist/indexes/IndexManager.d.ts +0 -236
- package/dist/indexes/IndexManager.d.ts.map +0 -1
- package/dist/indexes/IndexManager.js +0 -502
- package/dist/indexes/IndexManager.js.map +0 -1
- package/dist/indexes/PrimaryIndex.d.ts +0 -240
- package/dist/indexes/PrimaryIndex.d.ts.map +0 -1
- package/dist/indexes/PrimaryIndex.js +0 -354
- package/dist/indexes/PrimaryIndex.js.map +0 -1
- package/dist/indexes/SecondaryIndex.d.ts +0 -204
- package/dist/indexes/SecondaryIndex.d.ts.map +0 -1
- package/dist/indexes/SecondaryIndex.js +0 -480
- package/dist/indexes/SecondaryIndex.js.map +0 -1
- package/dist/indexes/errors.d.ts +0 -66
- package/dist/indexes/errors.d.ts.map +0 -1
- package/dist/indexes/errors.js +0 -117
- package/dist/indexes/errors.js.map +0 -1
- package/dist/indexes/index.d.ts +0 -52
- package/dist/indexes/index.d.ts.map +0 -1
- package/dist/indexes/index.js +0 -131
- package/dist/indexes/index.js.map +0 -1
- package/dist/indexes/types.d.ts +0 -246
- package/dist/indexes/types.d.ts.map +0 -1
- package/dist/indexes/types.js +0 -30
- package/dist/indexes/types.js.map +0 -1
- package/dist/performance/BatchWALWriter.d.ts +0 -185
- package/dist/performance/BatchWALWriter.d.ts.map +0 -1
- package/dist/performance/BatchWALWriter.js +0 -490
- package/dist/performance/BatchWALWriter.js.map +0 -1
- package/dist/performance/ColumnarStorage.d.ts +0 -138
- package/dist/performance/ColumnarStorage.d.ts.map +0 -1
- package/dist/performance/ColumnarStorage.js +0 -875
- package/dist/performance/ColumnarStorage.js.map +0 -1
- package/dist/performance/LazyQuery.d.ts +0 -307
- package/dist/performance/LazyQuery.d.ts.map +0 -1
- package/dist/performance/LazyQuery.js +0 -588
- package/dist/performance/LazyQuery.js.map +0 -1
- package/dist/performance/OptimizedBuffer.d.ts +0 -375
- package/dist/performance/OptimizedBuffer.d.ts.map +0 -1
- package/dist/performance/OptimizedBuffer.js +0 -730
- package/dist/performance/OptimizedBuffer.js.map +0 -1
- package/dist/performance/RWLock.d.ts +0 -260
- package/dist/performance/RWLock.d.ts.map +0 -1
- package/dist/performance/RWLock.js +0 -570
- package/dist/performance/RWLock.js.map +0 -1
- package/dist/performance/index.d.ts +0 -41
- package/dist/performance/index.d.ts.map +0 -1
- package/dist/performance/index.js +0 -162
- package/dist/performance/index.js.map +0 -1
- package/dist/performance/types.d.ts +0 -247
- package/dist/performance/types.d.ts.map +0 -1
- package/dist/performance/types.js +0 -26
- package/dist/performance/types.js.map +0 -1
- package/dist/storage/Checkpoint.d.ts +0 -128
- package/dist/storage/Checkpoint.d.ts.map +0 -1
- package/dist/storage/Checkpoint.js +0 -251
- package/dist/storage/Checkpoint.js.map +0 -1
- package/dist/storage/LightFile.d.ts +0 -227
- package/dist/storage/LightFile.d.ts.map +0 -1
- package/dist/storage/LightFile.js +0 -526
- package/dist/storage/LightFile.js.map +0 -1
- package/dist/storage/Recovery.d.ts +0 -172
- package/dist/storage/Recovery.d.ts.map +0 -1
- package/dist/storage/Recovery.js +0 -399
- package/dist/storage/Recovery.js.map +0 -1
- package/dist/storage/SHMFile.d.ts +0 -243
- package/dist/storage/SHMFile.d.ts.map +0 -1
- package/dist/storage/SHMFile.js +0 -436
- package/dist/storage/SHMFile.js.map +0 -1
- package/dist/storage/StorageEngine.d.ts +0 -146
- package/dist/storage/StorageEngine.d.ts.map +0 -1
- package/dist/storage/StorageEngine.js +0 -353
- package/dist/storage/StorageEngine.js.map +0 -1
- package/dist/storage/WALFile.d.ts +0 -248
- package/dist/storage/WALFile.d.ts.map +0 -1
- package/dist/storage/WALFile.js +0 -597
- package/dist/storage/WALFile.js.map +0 -1
- package/dist/types/index.d.ts +0 -220
- package/dist/types/index.d.ts.map +0 -1
- package/dist/types/index.js +0 -7
- package/dist/types/index.js.map +0 -1
- package/dist/utils/binary.d.ts +0 -271
- package/dist/utils/binary.d.ts.map +0 -1
- package/dist/utils/binary.js +0 -454
- package/dist/utils/binary.js.map +0 -1
- package/dist/utils/file.d.ts +0 -166
- package/dist/utils/file.d.ts.map +0 -1
- package/dist/utils/file.js +0 -346
- package/dist/utils/file.js.map +0 -1
- package/dist/utils/index.d.ts +0 -6
- package/dist/utils/index.d.ts.map +0 -1
- package/dist/utils/index.js +0 -39
- package/dist/utils/index.js.map +0 -1
|
@@ -0,0 +1,212 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* 内存存储适配器
|
|
3
|
+
*
|
|
4
|
+
* 用于测试、无持久化需求的一次性会话,以及适配器合同的参考实现。
|
|
5
|
+
*/
|
|
6
|
+
import { LightDbError, LightDbErrorCodes } from '../../errors';
|
|
7
|
+
import { STORAGE_FILES } from '../StorageAdapter';
|
|
8
|
+
/**
|
|
9
|
+
* 内存存储后端
|
|
10
|
+
*
|
|
11
|
+
* 只有共用同一个后端实例才能跨 `openDatabase` 读到上一会话的数据,
|
|
12
|
+
* 测试据此模拟「关闭后重开」。
|
|
13
|
+
*/
|
|
14
|
+
export class MemoryStorageBackend {
|
|
15
|
+
/** 适配器类型 */
|
|
16
|
+
kind = 'memory';
|
|
17
|
+
/** 会话结束后数据不保留 */
|
|
18
|
+
persistent = false;
|
|
19
|
+
directories = new Map();
|
|
20
|
+
/**
|
|
21
|
+
* 打开数据库适配器
|
|
22
|
+
* @param name 数据库名
|
|
23
|
+
*/
|
|
24
|
+
async openDatabase(name) {
|
|
25
|
+
let directory = this.directories.get(name);
|
|
26
|
+
if (!directory) {
|
|
27
|
+
directory = new Map();
|
|
28
|
+
this.directories.set(name, directory);
|
|
29
|
+
}
|
|
30
|
+
return new MemoryStorageAdapter(name, directory);
|
|
31
|
+
}
|
|
32
|
+
/** 清空所有数据库 */
|
|
33
|
+
reset() {
|
|
34
|
+
this.directories.clear();
|
|
35
|
+
}
|
|
36
|
+
}
|
|
37
|
+
/**
|
|
38
|
+
* 内存存储适配器
|
|
39
|
+
*/
|
|
40
|
+
export class MemoryStorageAdapter {
|
|
41
|
+
/** 适配器类型 */
|
|
42
|
+
kind = 'memory';
|
|
43
|
+
/** 会话结束后数据不保留 */
|
|
44
|
+
persistent = false;
|
|
45
|
+
name;
|
|
46
|
+
directory;
|
|
47
|
+
closed = false;
|
|
48
|
+
constructor(name, directory) {
|
|
49
|
+
this.name = name;
|
|
50
|
+
this.directory = directory;
|
|
51
|
+
}
|
|
52
|
+
/**
|
|
53
|
+
* 打开逻辑文件
|
|
54
|
+
* @param file 逻辑文件名
|
|
55
|
+
* @param mode 打开模式
|
|
56
|
+
*/
|
|
57
|
+
async open(file, mode = 'readwrite') {
|
|
58
|
+
this.assertOpen('open');
|
|
59
|
+
const existing = this.directory.get(file);
|
|
60
|
+
if (!existing && mode === 'read') {
|
|
61
|
+
throw new LightDbError(LightDbErrorCodes.io, `storage file "${file}" does not exist in "${this.name}"`, {
|
|
62
|
+
operation: 'storageOpen',
|
|
63
|
+
});
|
|
64
|
+
}
|
|
65
|
+
if (!existing) {
|
|
66
|
+
this.directory.set(file, new Uint8Array(0));
|
|
67
|
+
}
|
|
68
|
+
return new MemoryStorageHandle(this.directory, file);
|
|
69
|
+
}
|
|
70
|
+
/**
|
|
71
|
+
* 判断文件是否存在
|
|
72
|
+
* @param file 逻辑文件名
|
|
73
|
+
*/
|
|
74
|
+
async exists(file) {
|
|
75
|
+
this.assertOpen('exists');
|
|
76
|
+
return this.directory.has(file);
|
|
77
|
+
}
|
|
78
|
+
/**
|
|
79
|
+
* 删除文件
|
|
80
|
+
* @param file 逻辑文件名
|
|
81
|
+
*/
|
|
82
|
+
async delete(file) {
|
|
83
|
+
this.assertOpen('delete');
|
|
84
|
+
this.directory.delete(file);
|
|
85
|
+
}
|
|
86
|
+
/**
|
|
87
|
+
* 原子重命名
|
|
88
|
+
* @param from 源文件
|
|
89
|
+
* @param to 目标文件
|
|
90
|
+
*/
|
|
91
|
+
async rename(from, to) {
|
|
92
|
+
this.assertOpen('rename');
|
|
93
|
+
const data = this.directory.get(from);
|
|
94
|
+
if (!data) {
|
|
95
|
+
throw new LightDbError(LightDbErrorCodes.io, `cannot rename missing storage file "${from}"`, {
|
|
96
|
+
operation: 'storageRename',
|
|
97
|
+
});
|
|
98
|
+
}
|
|
99
|
+
this.directory.set(to, data);
|
|
100
|
+
this.directory.delete(from);
|
|
101
|
+
}
|
|
102
|
+
/**
|
|
103
|
+
* 列出已存在的文件
|
|
104
|
+
*/
|
|
105
|
+
async list() {
|
|
106
|
+
this.assertOpen('list');
|
|
107
|
+
return STORAGE_FILES.filter((file) => this.directory.has(file));
|
|
108
|
+
}
|
|
109
|
+
/** 关闭适配器 */
|
|
110
|
+
async close() {
|
|
111
|
+
this.closed = true;
|
|
112
|
+
}
|
|
113
|
+
/**
|
|
114
|
+
* 断言适配器未关闭
|
|
115
|
+
* @param operation 操作名
|
|
116
|
+
*/
|
|
117
|
+
assertOpen(operation) {
|
|
118
|
+
if (this.closed) {
|
|
119
|
+
throw new LightDbError(LightDbErrorCodes.sessionClosed, 'storage adapter is closed', { operation });
|
|
120
|
+
}
|
|
121
|
+
}
|
|
122
|
+
}
|
|
123
|
+
/**
|
|
124
|
+
* 内存文件句柄
|
|
125
|
+
*/
|
|
126
|
+
class MemoryStorageHandle {
|
|
127
|
+
directory;
|
|
128
|
+
file;
|
|
129
|
+
closed = false;
|
|
130
|
+
constructor(directory, file) {
|
|
131
|
+
this.directory = directory;
|
|
132
|
+
this.file = file;
|
|
133
|
+
}
|
|
134
|
+
/**
|
|
135
|
+
* 读取指定区间
|
|
136
|
+
* @param position 起始位置
|
|
137
|
+
* @param length 期望长度
|
|
138
|
+
*/
|
|
139
|
+
async read(position, length) {
|
|
140
|
+
this.assertOpen('read');
|
|
141
|
+
const data = this.readData();
|
|
142
|
+
if (position >= data.length) {
|
|
143
|
+
return new Uint8Array(0);
|
|
144
|
+
}
|
|
145
|
+
return data.slice(position, Math.min(position + length, data.length));
|
|
146
|
+
}
|
|
147
|
+
/**
|
|
148
|
+
* 写入指定位置
|
|
149
|
+
* @param position 起始位置
|
|
150
|
+
* @param data 数据
|
|
151
|
+
*/
|
|
152
|
+
async write(position, data) {
|
|
153
|
+
this.assertOpen('write');
|
|
154
|
+
const current = this.readData();
|
|
155
|
+
const required = position + data.length;
|
|
156
|
+
const next = current.length >= required ? current : grow(current, required);
|
|
157
|
+
next.set(data, position);
|
|
158
|
+
this.directory.set(this.file, next);
|
|
159
|
+
}
|
|
160
|
+
/**
|
|
161
|
+
* 截断文件
|
|
162
|
+
* @param size 目标大小
|
|
163
|
+
*/
|
|
164
|
+
async truncate(size) {
|
|
165
|
+
this.assertOpen('truncate');
|
|
166
|
+
const current = this.readData();
|
|
167
|
+
if (size <= current.length) {
|
|
168
|
+
this.directory.set(this.file, current.slice(0, size));
|
|
169
|
+
return;
|
|
170
|
+
}
|
|
171
|
+
this.directory.set(this.file, grow(current, size));
|
|
172
|
+
}
|
|
173
|
+
/** 内存写入无需落盘 */
|
|
174
|
+
async sync() {
|
|
175
|
+
this.assertOpen('sync');
|
|
176
|
+
}
|
|
177
|
+
/** 当前文件大小 */
|
|
178
|
+
async size() {
|
|
179
|
+
this.assertOpen('size');
|
|
180
|
+
return this.readData().length;
|
|
181
|
+
}
|
|
182
|
+
/** 关闭句柄 */
|
|
183
|
+
async close() {
|
|
184
|
+
this.closed = true;
|
|
185
|
+
}
|
|
186
|
+
/**
|
|
187
|
+
* 读取当前文件内容
|
|
188
|
+
*/
|
|
189
|
+
readData() {
|
|
190
|
+
return this.directory.get(this.file) ?? new Uint8Array(0);
|
|
191
|
+
}
|
|
192
|
+
/**
|
|
193
|
+
* 断言句柄未关闭
|
|
194
|
+
* @param operation 操作名
|
|
195
|
+
*/
|
|
196
|
+
assertOpen(operation) {
|
|
197
|
+
if (this.closed) {
|
|
198
|
+
throw new LightDbError(LightDbErrorCodes.sessionClosed, 'storage handle is closed', { operation });
|
|
199
|
+
}
|
|
200
|
+
}
|
|
201
|
+
}
|
|
202
|
+
/**
|
|
203
|
+
* 扩展到指定大小,新增区间填零
|
|
204
|
+
* @param current 当前内容
|
|
205
|
+
* @param size 目标大小
|
|
206
|
+
*/
|
|
207
|
+
function grow(current, size) {
|
|
208
|
+
const next = new Uint8Array(size);
|
|
209
|
+
next.set(current, 0);
|
|
210
|
+
return next;
|
|
211
|
+
}
|
|
212
|
+
//# sourceMappingURL=MemoryStorageAdapter.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"MemoryStorageAdapter.js","sourceRoot":"","sources":["../../../src/storage/memory/MemoryStorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,EAAE,YAAY,EAAE,iBAAiB,EAAE,MAAM,cAAc,CAAC;AAE/D,OAAO,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAKlD;;;;;GAKG;AACH,MAAM,OAAO,oBAAoB;IAC7B,YAAY;IACI,IAAI,GAAG,QAAiB,CAAC;IAEzC,iBAAiB;IACD,UAAU,GAAG,KAAK,CAAC;IAElB,WAAW,GAAiC,IAAI,GAAG,EAAE,CAAC;IAEvE;;;OAGG;IACI,KAAK,CAAC,YAAY,CAAC,IAAY;QAClC,IAAI,SAAS,GAAG,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC3C,IAAI,CAAC,SAAS,EAAE,CAAC;YACb,SAAS,GAAG,IAAI,GAAG,EAAE,CAAC;YACtB,IAAI,CAAC,WAAW,CAAC,GAAG,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;QAC1C,CAAC;QACD,OAAO,IAAI,oBAAoB,CAAC,IAAI,EAAE,SAAS,CAAC,CAAC;IACrD,CAAC;IAED,cAAc;IACP,KAAK;QACR,IAAI,CAAC,WAAW,CAAC,KAAK,EAAE,CAAC;IAC7B,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,OAAO,oBAAoB;IAC7B,YAAY;IACI,IAAI,GAAG,QAAiB,CAAC;IAEzC,iBAAiB;IACD,UAAU,GAAG,KAAK,CAAC;IAElB,IAAI,CAAS;IACb,SAAS,CAAkB;IACpC,MAAM,GAAY,KAAK,CAAC;IAEhC,YAAY,IAAY,EAAE,SAA0B;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;QACjB,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;IAC/B,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,IAAI,CAAC,IAAiB,EAAE,OAAwB,WAAW;QACpE,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QAExB,MAAM,QAAQ,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QAC1C,IAAI,CAAC,QAAQ,IAAI,IAAI,KAAK,MAAM,EAAE,CAAC;YAC/B,MAAM,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,iBAAiB,IAAI,wBAAwB,IAAI,CAAC,IAAI,GAAG,EAAE;gBACpG,SAAS,EAAE,aAAa;aAC3B,CAAC,CAAC;QACP,CAAC;QAED,IAAI,CAAC,QAAQ,EAAE,CAAC;YACZ,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,EAAE,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;QAChD,CAAC;QAED,OAAO,IAAI,mBAAmB,CAAC,IAAI,CAAC,SAAS,EAAE,IAAI,CAAC,CAAC;IACzD,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,IAAiB;QACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;IACpC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,MAAM,CAAC,IAAiB;QACjC,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,MAAM,CAAC,IAAiB,EAAE,EAAe;QAClD,IAAI,CAAC,UAAU,CAAC,QAAQ,CAAC,CAAC;QAC1B,MAAM,IAAI,GAAG,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC;QACtC,IAAI,CAAC,IAAI,EAAE,CAAC;YACR,MAAM,IAAI,YAAY,CAAC,iBAAiB,CAAC,EAAE,EAAE,uCAAuC,IAAI,GAAG,EAAE;gBACzF,SAAS,EAAE,eAAe;aAC7B,CAAC,CAAC;QACP,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,EAAE,IAAI,CAAC,CAAC;QAC7B,IAAI,CAAC,SAAS,CAAC,MAAM,CAAC,IAAI,CAAC,CAAC;IAChC,CAAC;IAED;;OAEG;IACI,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,aAAa,CAAC,MAAM,CAAC,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC;IACpE,CAAC;IAED,YAAY;IACL,KAAK,CAAC,KAAK;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,SAAiB;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,2BAA2B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACxG,CAAC;IACL,CAAC;CACJ;AAED;;GAEG;AACH,MAAM,mBAAmB;IACJ,SAAS,CAAkB;IAC3B,IAAI,CAAc;IAC3B,MAAM,GAAY,KAAK,CAAC;IAEhC,YAAY,SAA0B,EAAE,IAAiB;QACrD,IAAI,CAAC,SAAS,GAAG,SAAS,CAAC;QAC3B,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC;IACrB,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,IAAI,CAAC,QAAgB,EAAE,MAAc;QAC9C,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,MAAM,IAAI,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC7B,IAAI,QAAQ,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YAC1B,OAAO,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;QAC7B,CAAC;QACD,OAAO,IAAI,CAAC,KAAK,CAAC,QAAQ,EAAE,IAAI,CAAC,GAAG,CAAC,QAAQ,GAAG,MAAM,EAAE,IAAI,CAAC,MAAM,CAAC,CAAC,CAAC;IAC1E,CAAC;IAED;;;;OAIG;IACI,KAAK,CAAC,KAAK,CAAC,QAAgB,EAAE,IAAgB;QACjD,IAAI,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC;QACzB,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,MAAM,QAAQ,GAAG,QAAQ,GAAG,IAAI,CAAC,MAAM,CAAC;QACxC,MAAM,IAAI,GAAG,OAAO,CAAC,MAAM,IAAI,QAAQ,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,CAAC,IAAI,CAAC,OAAO,EAAE,QAAQ,CAAC,CAAC;QAC5E,IAAI,CAAC,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;QACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;IACxC,CAAC;IAED;;;OAGG;IACI,KAAK,CAAC,QAAQ,CAAC,IAAY;QAC9B,IAAI,CAAC,UAAU,CAAC,UAAU,CAAC,CAAC;QAC5B,MAAM,OAAO,GAAG,IAAI,CAAC,QAAQ,EAAE,CAAC;QAChC,IAAI,IAAI,IAAI,OAAO,CAAC,MAAM,EAAE,CAAC;YACzB,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,IAAI,CAAC,CAAC,CAAC;YACtD,OAAO;QACX,CAAC;QACD,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,OAAO,EAAE,IAAI,CAAC,CAAC,CAAC;IACvD,CAAC;IAED,eAAe;IACR,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;IAC5B,CAAC;IAED,aAAa;IACN,KAAK,CAAC,IAAI;QACb,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,CAAC;QACxB,OAAO,IAAI,CAAC,QAAQ,EAAE,CAAC,MAAM,CAAC;IAClC,CAAC;IAED,WAAW;IACJ,KAAK,CAAC,KAAK;QACd,IAAI,CAAC,MAAM,GAAG,IAAI,CAAC;IACvB,CAAC;IAED;;OAEG;IACK,QAAQ;QACZ,OAAO,IAAI,CAAC,SAAS,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;IAC9D,CAAC;IAED;;;OAGG;IACK,UAAU,CAAC,SAAiB;QAChC,IAAI,IAAI,CAAC,MAAM,EAAE,CAAC;YACd,MAAM,IAAI,YAAY,CAAC,iBAAiB,CAAC,aAAa,EAAE,0BAA0B,EAAE,EAAE,SAAS,EAAE,CAAC,CAAC;QACvG,CAAC;IACL,CAAC;CACJ;AAED;;;;GAIG;AACH,SAAS,IAAI,CAAC,OAAmB,EAAE,IAAY;IAC3C,MAAM,IAAI,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,CAAC;IAClC,IAAI,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC;IACrB,OAAO,IAAI,CAAC;AAChB,CAAC"}
|
|
@@ -0,0 +1,141 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* OPFS 存储适配器
|
|
3
|
+
*
|
|
4
|
+
* 默认持久化后端。优先使用 sync access handle(需 Worker 上下文),
|
|
5
|
+
* 主线程退化为 `createWritable` + `getFile`,两条路径共享同一套逻辑文件语义。
|
|
6
|
+
*
|
|
7
|
+
* 不把 OPFS 目录结构暴露给上层:上层只认识 `main` / `main.tmp` / `wal` / `shm`。
|
|
8
|
+
*/
|
|
9
|
+
import type { StorageAdapter, StorageAdapterFactory, StorageFile, StorageHandle, StorageOpenMode } from '../StorageAdapter';
|
|
10
|
+
/** 文件元信息 */
|
|
11
|
+
interface FileLike {
|
|
12
|
+
size: number;
|
|
13
|
+
arrayBuffer(): Promise<ArrayBuffer>;
|
|
14
|
+
}
|
|
15
|
+
/** 可写流 */
|
|
16
|
+
interface WritableLike {
|
|
17
|
+
write(options: {
|
|
18
|
+
type: 'write';
|
|
19
|
+
position: number;
|
|
20
|
+
data: Uint8Array;
|
|
21
|
+
}): Promise<void>;
|
|
22
|
+
truncate(size: number): Promise<void>;
|
|
23
|
+
close(): Promise<void>;
|
|
24
|
+
}
|
|
25
|
+
/** 同步访问句柄 */
|
|
26
|
+
interface SyncAccessHandleLike {
|
|
27
|
+
read(buffer: Uint8Array, options?: {
|
|
28
|
+
at?: number;
|
|
29
|
+
}): number;
|
|
30
|
+
write(buffer: Uint8Array, options?: {
|
|
31
|
+
at?: number;
|
|
32
|
+
}): number;
|
|
33
|
+
truncate(size: number): void;
|
|
34
|
+
flush(): void;
|
|
35
|
+
getSize(): number;
|
|
36
|
+
close(): void;
|
|
37
|
+
}
|
|
38
|
+
/** 文件句柄 */
|
|
39
|
+
interface FileHandleLike {
|
|
40
|
+
getFile(): Promise<FileLike>;
|
|
41
|
+
createWritable(options?: {
|
|
42
|
+
keepExistingData?: boolean;
|
|
43
|
+
}): Promise<WritableLike>;
|
|
44
|
+
createSyncAccessHandle?(): Promise<SyncAccessHandleLike>;
|
|
45
|
+
move?(name: string): Promise<void>;
|
|
46
|
+
}
|
|
47
|
+
/** 目录句柄 */
|
|
48
|
+
interface DirectoryHandleLike {
|
|
49
|
+
getFileHandle(name: string, options?: {
|
|
50
|
+
create?: boolean;
|
|
51
|
+
}): Promise<FileHandleLike>;
|
|
52
|
+
getDirectoryHandle(name: string, options?: {
|
|
53
|
+
create?: boolean;
|
|
54
|
+
}): Promise<DirectoryHandleLike>;
|
|
55
|
+
removeEntry(name: string, options?: {
|
|
56
|
+
recursive?: boolean;
|
|
57
|
+
}): Promise<void>;
|
|
58
|
+
}
|
|
59
|
+
/**
|
|
60
|
+
* 判断当前宿主是否提供 OPFS
|
|
61
|
+
*/
|
|
62
|
+
export declare function isOpfsAvailable(): boolean;
|
|
63
|
+
/**
|
|
64
|
+
* OPFS 适配器工厂
|
|
65
|
+
*/
|
|
66
|
+
export declare class OpfsStorageAdapterFactory implements StorageAdapterFactory {
|
|
67
|
+
/** 适配器类型 */
|
|
68
|
+
readonly kind: "opfs";
|
|
69
|
+
/** 数据持久化 */
|
|
70
|
+
readonly persistent = true;
|
|
71
|
+
private root;
|
|
72
|
+
/**
|
|
73
|
+
* 打开数据库适配器
|
|
74
|
+
* @param name 数据库名
|
|
75
|
+
*/
|
|
76
|
+
openDatabase(name: string): Promise<StorageAdapter>;
|
|
77
|
+
/**
|
|
78
|
+
* 取得 OPFS 根目录
|
|
79
|
+
*/
|
|
80
|
+
private getRoot;
|
|
81
|
+
/**
|
|
82
|
+
* 取得或创建目录
|
|
83
|
+
* @param parent 父目录
|
|
84
|
+
* @param name 目录名
|
|
85
|
+
* @param operation 操作名
|
|
86
|
+
*/
|
|
87
|
+
private getDirectory;
|
|
88
|
+
}
|
|
89
|
+
/**
|
|
90
|
+
* OPFS 存储适配器
|
|
91
|
+
*/
|
|
92
|
+
export declare class OpfsStorageAdapter implements StorageAdapter {
|
|
93
|
+
/** 适配器类型 */
|
|
94
|
+
readonly kind: "opfs";
|
|
95
|
+
/** 数据持久化 */
|
|
96
|
+
readonly persistent = true;
|
|
97
|
+
private readonly name;
|
|
98
|
+
private readonly directory;
|
|
99
|
+
private closed;
|
|
100
|
+
constructor(name: string, directory: DirectoryHandleLike);
|
|
101
|
+
/**
|
|
102
|
+
* 打开逻辑文件
|
|
103
|
+
* @param file 逻辑文件名
|
|
104
|
+
* @param mode 打开模式
|
|
105
|
+
*/
|
|
106
|
+
open(file: StorageFile, mode?: StorageOpenMode): Promise<StorageHandle>;
|
|
107
|
+
/**
|
|
108
|
+
* 判断文件是否存在
|
|
109
|
+
* @param file 逻辑文件名
|
|
110
|
+
*/
|
|
111
|
+
exists(file: StorageFile): Promise<boolean>;
|
|
112
|
+
/**
|
|
113
|
+
* 删除文件
|
|
114
|
+
* @param file 逻辑文件名
|
|
115
|
+
*/
|
|
116
|
+
delete(file: StorageFile): Promise<void>;
|
|
117
|
+
/**
|
|
118
|
+
* 发布快照:优先 `move`,否则复制后删除
|
|
119
|
+
* @param from 源文件
|
|
120
|
+
* @param to 目标文件
|
|
121
|
+
*/
|
|
122
|
+
rename(from: StorageFile, to: StorageFile): Promise<void>;
|
|
123
|
+
/**
|
|
124
|
+
* 列出已存在的文件
|
|
125
|
+
*/
|
|
126
|
+
list(): Promise<StorageFile[]>;
|
|
127
|
+
/** 关闭适配器 */
|
|
128
|
+
close(): Promise<void>;
|
|
129
|
+
/**
|
|
130
|
+
* 读取逻辑文件全部内容
|
|
131
|
+
* @param file 逻辑文件名
|
|
132
|
+
*/
|
|
133
|
+
private readAll;
|
|
134
|
+
/**
|
|
135
|
+
* 断言适配器未关闭
|
|
136
|
+
* @param operation 操作名
|
|
137
|
+
*/
|
|
138
|
+
private assertOpen;
|
|
139
|
+
}
|
|
140
|
+
export {};
|
|
141
|
+
//# sourceMappingURL=OpfsStorageAdapter.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"OpfsStorageAdapter.d.ts","sourceRoot":"","sources":["../../../src/storage/opfs/OpfsStorageAdapter.ts"],"names":[],"mappings":"AAAA;;;;;;;GAOG;AAGH,OAAO,KAAK,EAAE,cAAc,EAAE,qBAAqB,EAAE,WAAW,EAAE,aAAa,EAAE,eAAe,EAAE,MAAM,mBAAmB,CAAC;AAW5H,YAAY;AACZ,UAAU,QAAQ;IACd,IAAI,EAAE,MAAM,CAAC;IACb,WAAW,IAAI,OAAO,CAAC,WAAW,CAAC,CAAC;CACvC;AAED,UAAU;AACV,UAAU,YAAY;IAClB,KAAK,CAAC,OAAO,EAAE;QAAE,IAAI,EAAE,OAAO,CAAC;QAAC,QAAQ,EAAE,MAAM,CAAC;QAAC,IAAI,EAAE,UAAU,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACrF,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;IACtC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC,CAAC;CAC1B;AAED,aAAa;AACb,UAAU,oBAAoB;IAC1B,IAAI,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC5D,KAAK,CAAC,MAAM,EAAE,UAAU,EAAE,OAAO,CAAC,EAAE;QAAE,EAAE,CAAC,EAAE,MAAM,CAAA;KAAE,GAAG,MAAM,CAAC;IAC7D,QAAQ,CAAC,IAAI,EAAE,MAAM,GAAG,IAAI,CAAC;IAC7B,KAAK,IAAI,IAAI,CAAC;IACd,OAAO,IAAI,MAAM,CAAC;IAClB,KAAK,IAAI,IAAI,CAAC;CACjB;AAED,WAAW;AACX,UAAU,cAAc;IACpB,OAAO,IAAI,OAAO,CAAC,QAAQ,CAAC,CAAC;IAC7B,cAAc,CAAC,OAAO,CAAC,EAAE;QAAE,gBAAgB,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,YAAY,CAAC,CAAC;IAChF,sBAAsB,CAAC,IAAI,OAAO,CAAC,oBAAoB,CAAC,CAAC;IACzD,IAAI,CAAC,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CACtC;AAED,WAAW;AACX,UAAU,mBAAmB;IACzB,aAAa,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,cAAc,CAAC,CAAC;IACrF,kBAAkB,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,MAAM,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,mBAAmB,CAAC,CAAC;IAC/F,WAAW,CAAC,IAAI,EAAE,MAAM,EAAE,OAAO,CAAC,EAAE;QAAE,SAAS,CAAC,EAAE,OAAO,CAAA;KAAE,GAAG,OAAO,CAAC,IAAI,CAAC,CAAC;CAC/E;AAOD;;GAEG;AACH,wBAAgB,eAAe,IAAI,OAAO,CAGzC;AAED;;GAEG;AACH,qBAAa,yBAA0B,YAAW,qBAAqB;IACnE,YAAY;IACZ,SAAgB,IAAI,SAAmB;IAEvC,YAAY;IACZ,SAAgB,UAAU,QAAQ;IAElC,OAAO,CAAC,IAAI,CAA6C;IAEzD;;;OAGG;IACU,YAAY,CAAC,IAAI,EAAE,MAAM,GAAG,OAAO,CAAC,cAAc,CAAC;IAMhE;;OAEG;YACW,OAAO;IAuBrB;;;;;OAKG;YACW,YAAY;CAU7B;AAED;;GAEG;AACH,qBAAa,kBAAmB,YAAW,cAAc;IACrD,YAAY;IACZ,SAAgB,IAAI,SAAmB;IAEvC,YAAY;IACZ,SAAgB,UAAU,QAAQ;IAElC,OAAO,CAAC,QAAQ,CAAC,IAAI,CAAS;IAC9B,OAAO,CAAC,QAAQ,CAAC,SAAS,CAAsB;IAChD,OAAO,CAAC,MAAM,CAAkB;gBAEpB,IAAI,EAAE,MAAM,EAAE,SAAS,EAAE,mBAAmB;IAKxD;;;;OAIG;IACU,IAAI,CAAC,IAAI,EAAE,WAAW,EAAE,IAAI,GAAE,eAA6B,GAAG,OAAO,CAAC,aAAa,CAAC;IAiBjG;;;OAGG;IACU,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,OAAO,CAAC;IAUxD;;;OAGG;IACU,MAAM,CAAC,IAAI,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAerD;;;;OAIG;IACU,MAAM,CAAC,IAAI,EAAE,WAAW,EAAE,EAAE,EAAE,WAAW,GAAG,OAAO,CAAC,IAAI,CAAC;IAoCtE;;OAEG;IACU,IAAI,IAAI,OAAO,CAAC,WAAW,EAAE,CAAC;IAW3C,YAAY;IACC,KAAK,IAAI,OAAO,CAAC,IAAI,CAAC;IAInC;;;OAGG;YACW,OAAO;IASrB;;;OAGG;IACH,OAAO,CAAC,UAAU;CAOrB"}
|