@peerbit/any-store 2.0.1 → 2.0.2-0691c73
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/src/index.d.ts +4 -0
- package/dist/src/index.d.ts.map +1 -0
- package/dist/src/index.js +2 -0
- package/dist/src/index.js.map +1 -0
- package/{lib/esm → dist/src}/level.d.ts +2 -1
- package/dist/src/level.d.ts.map +1 -0
- package/{lib/esm → dist/src}/level.js +3 -5
- package/dist/src/level.js.map +1 -0
- package/{lib/esm → dist/src}/memory.d.ts +3 -2
- package/dist/src/memory.d.ts.map +1 -0
- package/{lib/esm → dist/src}/memory.js +3 -2
- package/dist/src/memory.js.map +1 -0
- package/{lib/esm → dist/src}/store.browser.d.ts +2 -1
- package/dist/src/store.browser.d.ts.map +1 -0
- package/{lib/esm → dist/src}/store.browser.js +1 -1
- package/dist/src/store.browser.js.map +1 -0
- package/{lib/esm → dist/src}/store.d.ts +1 -0
- package/dist/src/store.d.ts.map +1 -0
- package/package.json +79 -50
- package/src/index.ts +2 -2
- package/src/level.ts +11 -16
- package/src/memory.ts +3 -3
- package/src/store.browser.ts +1 -1
- package/LICENSE +0 -202
- package/lib/esm/index.d.ts +0 -3
- package/lib/esm/index.js +0 -4
- package/lib/esm/index.js.map +0 -1
- package/lib/esm/interface.d.ts +0 -18
- package/lib/esm/interface.js +0 -2
- package/lib/esm/interface.js.map +0 -1
- package/lib/esm/level.js.map +0 -1
- package/lib/esm/memory.js.map +0 -1
- package/lib/esm/opfs-worker-messages.d.ts +0 -122
- package/lib/esm/opfs-worker-messages.js +0 -325
- package/lib/esm/opfs-worker-messages.js.map +0 -1
- package/lib/esm/opfs-worker.d.ts +0 -8
- package/lib/esm/opfs-worker.js +0 -276
- package/lib/esm/opfs-worker.js.map +0 -1
- package/lib/esm/opfs.d.ts +0 -27
- package/lib/esm/opfs.js +0 -148
- package/lib/esm/opfs.js.map +0 -1
- package/lib/esm/store.browser.js.map +0 -1
- package/src/interface.ts +0 -20
- package/src/opfs-worker-messages.ts +0 -210
- package/src/opfs-worker.ts +0 -347
- package/src/opfs.ts +0 -205
- /package/{lib/esm → dist/src}/store.js +0 -0
- /package/{lib/esm → dist/src}/store.js.map +0 -0
package/src/opfs.ts
DELETED
|
@@ -1,205 +0,0 @@
|
|
|
1
|
-
import { AnyStore, MaybePromise } from "./interface.js";
|
|
2
|
-
import * as memory from "./opfs-worker-messages.js";
|
|
3
|
-
import { v4 as uuid } from "uuid";
|
|
4
|
-
import { serialize, deserialize } from "@dao-xyz/borsh";
|
|
5
|
-
import workerUrl from "./opfs-worker?worker&url";
|
|
6
|
-
|
|
7
|
-
function memoryIterator(
|
|
8
|
-
client: {
|
|
9
|
-
request<T extends memory.MemoryRequest>(
|
|
10
|
-
request: memory.MemoryRequest
|
|
11
|
-
): Promise<T>;
|
|
12
|
-
},
|
|
13
|
-
level: string[]
|
|
14
|
-
): {
|
|
15
|
-
[Symbol.asyncIterator]: () => AsyncIterator<[string, Uint8Array], void, void>;
|
|
16
|
-
} {
|
|
17
|
-
return {
|
|
18
|
-
[Symbol.asyncIterator]() {
|
|
19
|
-
const iteratorId = uuid();
|
|
20
|
-
return {
|
|
21
|
-
next: async () => {
|
|
22
|
-
const resp = await client.request<memory.RESP_Iterator_Next>(
|
|
23
|
-
new memory.REQ_Iterator_Next({ id: iteratorId, level })
|
|
24
|
-
);
|
|
25
|
-
if (resp.keys.length > 1) {
|
|
26
|
-
throw new Error("Unsupported iteration response");
|
|
27
|
-
}
|
|
28
|
-
// Will only have 0 or 1 element for now
|
|
29
|
-
for (let i = 0; i < resp.keys.length; i++) {
|
|
30
|
-
return {
|
|
31
|
-
done: false,
|
|
32
|
-
value: [resp.keys[i], resp.values[i]] as [string, Uint8Array]
|
|
33
|
-
} as { done: false; value: [string, Uint8Array] };
|
|
34
|
-
}
|
|
35
|
-
return { done: true, value: undefined } as {
|
|
36
|
-
done: true;
|
|
37
|
-
value: undefined;
|
|
38
|
-
};
|
|
39
|
-
},
|
|
40
|
-
async return() {
|
|
41
|
-
await client.request<memory.RESP_Iterator_Next>(
|
|
42
|
-
new memory.REQ_Iterator_Stop({ id: iteratorId, level })
|
|
43
|
-
);
|
|
44
|
-
return { done: true, value: undefined } as {
|
|
45
|
-
done: true;
|
|
46
|
-
value: undefined;
|
|
47
|
-
};
|
|
48
|
-
}
|
|
49
|
-
};
|
|
50
|
-
}
|
|
51
|
-
};
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
const createWorker = (directory) => {
|
|
55
|
-
const workerURL = workerUrl + "#" + directory;
|
|
56
|
-
return new Worker(workerURL, { type: "module" });
|
|
57
|
-
};
|
|
58
|
-
|
|
59
|
-
export class OPFSStore implements AnyStore {
|
|
60
|
-
worker: Worker;
|
|
61
|
-
levelMap: Map<string, AnyStore>;
|
|
62
|
-
root: AnyStore;
|
|
63
|
-
|
|
64
|
-
private _responseCallbacks: Map<
|
|
65
|
-
string,
|
|
66
|
-
{ fn: (message: memory.MemoryRequest) => any; once: boolean }
|
|
67
|
-
> = new Map();
|
|
68
|
-
|
|
69
|
-
private _createStorage: (level: string[]) => AnyStore;
|
|
70
|
-
constructor(readonly directory?: string) {
|
|
71
|
-
this.levelMap = new Map();
|
|
72
|
-
this._createStorage = (level: string[] = []): AnyStore => {
|
|
73
|
-
return {
|
|
74
|
-
clear: async () => {
|
|
75
|
-
await this.request<memory.RESP_Clear>(
|
|
76
|
-
new memory.REQ_Clear({ level })
|
|
77
|
-
);
|
|
78
|
-
},
|
|
79
|
-
del: async (key) => {
|
|
80
|
-
await this.request<memory.RESP_Del>(
|
|
81
|
-
new memory.REQ_Del({ level, key })
|
|
82
|
-
);
|
|
83
|
-
},
|
|
84
|
-
get: async (key) => {
|
|
85
|
-
return (
|
|
86
|
-
await this.request<memory.RESP_Get>(
|
|
87
|
-
new memory.REQ_Get({ level, key })
|
|
88
|
-
)
|
|
89
|
-
).bytes;
|
|
90
|
-
},
|
|
91
|
-
put: async (key, value) => {
|
|
92
|
-
await this.request<memory.RESP_Put>(
|
|
93
|
-
new memory.REQ_Put({ level, key, bytes: value })
|
|
94
|
-
);
|
|
95
|
-
},
|
|
96
|
-
status: async () =>
|
|
97
|
-
(
|
|
98
|
-
await this.request<memory.RESP_Status>(
|
|
99
|
-
new memory.REQ_Status({ level })
|
|
100
|
-
)
|
|
101
|
-
).status,
|
|
102
|
-
sublevel: async (name) => {
|
|
103
|
-
await this.request(new memory.REQ_Sublevel({ level, name }));
|
|
104
|
-
const newLevels = [...level, name];
|
|
105
|
-
const sublevel = this._createStorage(newLevels);
|
|
106
|
-
this.levelMap.set(memory.levelKey(newLevels), sublevel);
|
|
107
|
-
return sublevel;
|
|
108
|
-
},
|
|
109
|
-
|
|
110
|
-
iterator: () => memoryIterator(this, level),
|
|
111
|
-
close: async () => {
|
|
112
|
-
await this.request<memory.RESP_Close>(
|
|
113
|
-
new memory.REQ_Close({ level })
|
|
114
|
-
);
|
|
115
|
-
/* this.levelMap.delete(memory.levelKey(level)); */
|
|
116
|
-
},
|
|
117
|
-
open: async () => {
|
|
118
|
-
await this.request<memory.RESP_Open>(new memory.REQ_Open({ level }));
|
|
119
|
-
},
|
|
120
|
-
|
|
121
|
-
size: async () => {
|
|
122
|
-
const size = await this.request<memory.RESP_Size>(
|
|
123
|
-
new memory.REQ_Size({ level })
|
|
124
|
-
);
|
|
125
|
-
return size.size;
|
|
126
|
-
}
|
|
127
|
-
};
|
|
128
|
-
};
|
|
129
|
-
}
|
|
130
|
-
status() {
|
|
131
|
-
return this.worker ? this.root.status() : "closed";
|
|
132
|
-
}
|
|
133
|
-
async close(): Promise<void> {
|
|
134
|
-
this.worker.terminate();
|
|
135
|
-
this.worker = undefined!;
|
|
136
|
-
this._responseCallbacks.clear();
|
|
137
|
-
this.levelMap.clear();
|
|
138
|
-
}
|
|
139
|
-
async open(): Promise<void> {
|
|
140
|
-
if (!this.worker) {
|
|
141
|
-
if (
|
|
142
|
-
!globalThis["__playwright_test__"] &&
|
|
143
|
-
(await navigator.storage.persist()) === false
|
|
144
|
-
) {
|
|
145
|
-
throw new Error("OPFS not allowed to persist data");
|
|
146
|
-
}
|
|
147
|
-
this.worker = createWorker(this.directory);
|
|
148
|
-
this.root = this._createStorage([]);
|
|
149
|
-
this.worker.addEventListener("message", async (ev) => {
|
|
150
|
-
const message = deserialize(ev.data, memory.MemoryMessage);
|
|
151
|
-
this._responseCallbacks.get(message.messageId)!.fn(message);
|
|
152
|
-
});
|
|
153
|
-
await this.root.open();
|
|
154
|
-
}
|
|
155
|
-
}
|
|
156
|
-
get(key: string): MaybePromise<Uint8Array | undefined> {
|
|
157
|
-
return this.root.get(key);
|
|
158
|
-
}
|
|
159
|
-
put(key: string, value: Uint8Array) {
|
|
160
|
-
return this.root.put(key, value);
|
|
161
|
-
}
|
|
162
|
-
del(key: any): MaybePromise<void> {
|
|
163
|
-
return this.root.del(key);
|
|
164
|
-
}
|
|
165
|
-
sublevel(name: string): AnyStore | MaybePromise<AnyStore> {
|
|
166
|
-
return this.root.sublevel(name);
|
|
167
|
-
}
|
|
168
|
-
iterator(): {
|
|
169
|
-
[Symbol.asyncIterator]: () => AsyncIterator<
|
|
170
|
-
[string, Uint8Array],
|
|
171
|
-
void,
|
|
172
|
-
void
|
|
173
|
-
>;
|
|
174
|
-
} {
|
|
175
|
-
return this.root.iterator();
|
|
176
|
-
}
|
|
177
|
-
clear(): MaybePromise<void> {
|
|
178
|
-
return this.root.clear();
|
|
179
|
-
}
|
|
180
|
-
|
|
181
|
-
size(): MaybePromise<number> {
|
|
182
|
-
return this.root.size();
|
|
183
|
-
}
|
|
184
|
-
|
|
185
|
-
async request<T extends memory.MemoryRequest>(
|
|
186
|
-
request: memory.MemoryRequest
|
|
187
|
-
): Promise<T> {
|
|
188
|
-
return new Promise<T>((resolve, reject) => {
|
|
189
|
-
const onResponse = (message: memory.MemoryRequest) => {
|
|
190
|
-
this._responseCallbacks.delete(request.messageId);
|
|
191
|
-
if (message instanceof memory.RESP_Error) {
|
|
192
|
-
reject(new Error(message.error));
|
|
193
|
-
} else {
|
|
194
|
-
resolve(message as T);
|
|
195
|
-
}
|
|
196
|
-
};
|
|
197
|
-
this._responseCallbacks.set(request.messageId, {
|
|
198
|
-
fn: onResponse,
|
|
199
|
-
once: true
|
|
200
|
-
});
|
|
201
|
-
const bytes = serialize(request);
|
|
202
|
-
this.worker.postMessage(bytes, [bytes.buffer]);
|
|
203
|
-
});
|
|
204
|
-
}
|
|
205
|
-
}
|
|
File without changes
|
|
File without changes
|