@peerbit/any-store-opfs 1.1.4 → 1.1.6
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/assets/opfs/opfs.worker.min.js +166 -13
- package/dist/assets/opfs/opfs.worker.min.js.map +3 -3
- package/dist/index.min.js +1 -1
- package/dist/index.min.js.map +4 -4
- package/dist/src/opfs-store.d.ts +7 -3
- package/dist/src/opfs-store.d.ts.map +1 -1
- package/dist/src/opfs-store.js +104 -21
- package/dist/src/opfs-store.js.map +1 -1
- package/dist/src/protocol.d.ts +62 -0
- package/dist/src/protocol.d.ts.map +1 -0
- package/dist/src/protocol.js +45 -0
- package/dist/src/protocol.js.map +1 -0
- package/dist/src/worker.d.ts +3 -1
- package/dist/src/worker.d.ts.map +1 -1
- package/dist/src/worker.js +144 -8
- package/dist/src/worker.js.map +1 -1
- package/package.json +2 -2
- package/src/opfs-store.ts +147 -47
- package/src/protocol.ts +128 -0
- package/src/worker.ts +151 -15
package/src/worker.ts
CHANGED
|
@@ -9,6 +9,12 @@ import { type AnyStore } from "@peerbit/any-store-interface";
|
|
|
9
9
|
import * as memory from "@peerbit/any-store-interface/messages";
|
|
10
10
|
import { fromBase64URL, ready, toBase64URL } from "@peerbit/crypto";
|
|
11
11
|
import { waitForResolved } from "@peerbit/time";
|
|
12
|
+
import {
|
|
13
|
+
getTransferables,
|
|
14
|
+
type OPFSRequest,
|
|
15
|
+
type OPFSResponse,
|
|
16
|
+
isOPFSRequest,
|
|
17
|
+
} from "./protocol.js";
|
|
12
18
|
|
|
13
19
|
const directory = location.hash.split("#")?.[1];
|
|
14
20
|
|
|
@@ -162,7 +168,8 @@ export class OPFSStoreWorker {
|
|
|
162
168
|
create: true,
|
|
163
169
|
});
|
|
164
170
|
const writeFileHandle = await createWriteHandle(fileHandle);
|
|
165
|
-
writeFileHandle.write(value);
|
|
171
|
+
writeFileHandle.write(value, { at: 0 });
|
|
172
|
+
writeFileHandle.truncate(value.byteLength);
|
|
166
173
|
writeFileHandle.flush();
|
|
167
174
|
writeFileHandle.close();
|
|
168
175
|
|
|
@@ -214,7 +221,7 @@ export class OPFSStoreWorker {
|
|
|
214
221
|
this._rootStore = createMemory();
|
|
215
222
|
|
|
216
223
|
self.addEventListener("message", async (ev) => {
|
|
217
|
-
const message =
|
|
224
|
+
const message = this.parseMessage(ev.data);
|
|
218
225
|
try {
|
|
219
226
|
if (message instanceof memory.MemoryMessage) {
|
|
220
227
|
if (message instanceof memory.REQ_Open) {
|
|
@@ -329,27 +336,156 @@ export class OPFSStoreWorker {
|
|
|
329
336
|
);
|
|
330
337
|
}
|
|
331
338
|
}
|
|
339
|
+
if (isOPFSRequest(message)) {
|
|
340
|
+
if (message.type === "open") {
|
|
341
|
+
if ((await this._rootStore.status()) === "closed") {
|
|
342
|
+
await this._rootStore.open();
|
|
343
|
+
}
|
|
344
|
+
await this.respond(message, {
|
|
345
|
+
type: "ack",
|
|
346
|
+
level: message.level,
|
|
347
|
+
messageId: message.messageId,
|
|
348
|
+
});
|
|
349
|
+
return;
|
|
350
|
+
}
|
|
351
|
+
|
|
352
|
+
const m =
|
|
353
|
+
message.level.length === 0
|
|
354
|
+
? this._rootStore
|
|
355
|
+
: this._levels.get(memory.levelKey(message.level));
|
|
356
|
+
if (!m) {
|
|
357
|
+
throw new Error("Recieved memory message for an undefined level");
|
|
358
|
+
}
|
|
359
|
+
if (message.type === "clear") {
|
|
360
|
+
await m.clear();
|
|
361
|
+
await this.respond(message, {
|
|
362
|
+
type: "ack",
|
|
363
|
+
level: message.level,
|
|
364
|
+
messageId: message.messageId,
|
|
365
|
+
});
|
|
366
|
+
} else if (message.type === "close") {
|
|
367
|
+
await m.close();
|
|
368
|
+
await this.respond(message, {
|
|
369
|
+
type: "ack",
|
|
370
|
+
level: message.level,
|
|
371
|
+
messageId: message.messageId,
|
|
372
|
+
});
|
|
373
|
+
} else if (message.type === "del") {
|
|
374
|
+
await m.del(message.key);
|
|
375
|
+
await this.respond(message, {
|
|
376
|
+
type: "ack",
|
|
377
|
+
level: message.level,
|
|
378
|
+
messageId: message.messageId,
|
|
379
|
+
});
|
|
380
|
+
} else if (message.type === "iterator-next") {
|
|
381
|
+
let iterator = this._memoryIterator.get(message.id);
|
|
382
|
+
if (!iterator) {
|
|
383
|
+
iterator = m.iterator()[Symbol.asyncIterator]();
|
|
384
|
+
this._memoryIterator.set(message.id, iterator);
|
|
385
|
+
}
|
|
386
|
+
const next = await iterator.next();
|
|
387
|
+
const nextValue = next.done ? undefined : next.value;
|
|
388
|
+
const response: OPFSResponse = {
|
|
389
|
+
type: "iterator-next",
|
|
390
|
+
keys: nextValue ? [nextValue[0]] : [],
|
|
391
|
+
values: nextValue ? [nextValue[1]] : [],
|
|
392
|
+
level: message.level,
|
|
393
|
+
messageId: message.messageId,
|
|
394
|
+
};
|
|
395
|
+
await this.respond(message, response);
|
|
396
|
+
if (next.done) {
|
|
397
|
+
this._memoryIterator.delete(message.id);
|
|
398
|
+
}
|
|
399
|
+
} else if (message.type === "iterator-stop") {
|
|
400
|
+
this._memoryIterator.delete(message.id);
|
|
401
|
+
await this.respond(message, {
|
|
402
|
+
type: "ack",
|
|
403
|
+
level: message.level,
|
|
404
|
+
messageId: message.messageId,
|
|
405
|
+
});
|
|
406
|
+
} else if (message.type === "get") {
|
|
407
|
+
await this.respond(message, {
|
|
408
|
+
type: "get",
|
|
409
|
+
bytes: await m.get(message.key),
|
|
410
|
+
level: message.level,
|
|
411
|
+
messageId: message.messageId,
|
|
412
|
+
});
|
|
413
|
+
} else if (message.type === "put") {
|
|
414
|
+
await m.put(message.key, message.bytes);
|
|
415
|
+
await this.respond(message, {
|
|
416
|
+
type: "ack",
|
|
417
|
+
level: message.level,
|
|
418
|
+
messageId: message.messageId,
|
|
419
|
+
});
|
|
420
|
+
} else if (message.type === "size") {
|
|
421
|
+
await this.respond(message, {
|
|
422
|
+
type: "size",
|
|
423
|
+
size: await m.size(),
|
|
424
|
+
level: message.level,
|
|
425
|
+
messageId: message.messageId,
|
|
426
|
+
});
|
|
427
|
+
} else if (message.type === "status") {
|
|
428
|
+
await this.respond(message, {
|
|
429
|
+
type: "status",
|
|
430
|
+
status: await m.status(),
|
|
431
|
+
level: message.level,
|
|
432
|
+
messageId: message.messageId,
|
|
433
|
+
});
|
|
434
|
+
} else if (message.type === "sublevel") {
|
|
435
|
+
await m.sublevel(message.name);
|
|
436
|
+
await this.respond(message, {
|
|
437
|
+
type: "ack",
|
|
438
|
+
level: message.level,
|
|
439
|
+
messageId: message.messageId,
|
|
440
|
+
});
|
|
441
|
+
}
|
|
442
|
+
}
|
|
332
443
|
} catch (error) {
|
|
333
|
-
|
|
334
|
-
|
|
335
|
-
|
|
336
|
-
|
|
337
|
-
|
|
338
|
-
|
|
339
|
-
|
|
340
|
-
|
|
444
|
+
if (message instanceof memory.MemoryRequest) {
|
|
445
|
+
await this.respond(
|
|
446
|
+
message,
|
|
447
|
+
new memory.RESP_Error({
|
|
448
|
+
error: (error as any)?.["message"] || error?.constructor.name,
|
|
449
|
+
level: (message as any)["level"] || [],
|
|
450
|
+
}),
|
|
451
|
+
postMessageFn,
|
|
452
|
+
);
|
|
453
|
+
return;
|
|
454
|
+
}
|
|
455
|
+
await this.respond(message, {
|
|
456
|
+
type: "error",
|
|
457
|
+
error: (error as any)?.["message"] || error?.constructor.name,
|
|
458
|
+
level: message?.level || [],
|
|
459
|
+
messageId: message?.messageId || "",
|
|
460
|
+
});
|
|
341
461
|
}
|
|
342
462
|
});
|
|
343
463
|
}
|
|
344
464
|
|
|
465
|
+
private parseMessage(data: unknown): OPFSRequest | memory.MemoryRequest {
|
|
466
|
+
if (isOPFSRequest(data)) {
|
|
467
|
+
return data;
|
|
468
|
+
}
|
|
469
|
+
const bytes =
|
|
470
|
+
data instanceof Uint8Array ? data : new Uint8Array(data as ArrayBuffer);
|
|
471
|
+
return deserialize(bytes, memory.MemoryRequest);
|
|
472
|
+
}
|
|
473
|
+
|
|
345
474
|
async respond(
|
|
346
|
-
request: memory.MemoryRequest,
|
|
347
|
-
response: memory.MemoryRequest,
|
|
475
|
+
request: OPFSRequest | memory.MemoryRequest,
|
|
476
|
+
response: OPFSResponse | memory.MemoryRequest,
|
|
348
477
|
postMessageFn = postMessage,
|
|
349
478
|
) {
|
|
350
|
-
|
|
351
|
-
|
|
352
|
-
|
|
479
|
+
if (request instanceof memory.MemoryRequest) {
|
|
480
|
+
const legacyResponse = response as memory.MemoryRequest;
|
|
481
|
+
legacyResponse.messageId = request.messageId;
|
|
482
|
+
const bytes = serialize(legacyResponse);
|
|
483
|
+
postMessageFn(bytes, { transfer: [bytes.buffer] });
|
|
484
|
+
return;
|
|
485
|
+
}
|
|
486
|
+
const cloneResponse = response as OPFSResponse;
|
|
487
|
+
cloneResponse.messageId = request.messageId;
|
|
488
|
+
postMessageFn(cloneResponse, { transfer: getTransferables(cloneResponse) });
|
|
353
489
|
}
|
|
354
490
|
}
|
|
355
491
|
|