@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.
@@ -8099,6 +8099,35 @@
8099
8099
  throw lastError ?? createTimeoutError(options);
8100
8100
  };
8101
8101
 
8102
+ // src/protocol.ts
8103
+ var REQUEST_TYPES = /* @__PURE__ */ new Set([
8104
+ "open",
8105
+ "close",
8106
+ "clear",
8107
+ "size",
8108
+ "status",
8109
+ "get",
8110
+ "del",
8111
+ "put",
8112
+ "sublevel",
8113
+ "iterator-next",
8114
+ "iterator-stop"
8115
+ ]);
8116
+ var isOPFSRequest = (value) => {
8117
+ return typeof value === "object" && value !== null && typeof value.messageId === "string" && Array.isArray(value.level) && REQUEST_TYPES.has(value.type);
8118
+ };
8119
+ var getTransferables = (message) => {
8120
+ if (message.type === "get" && "bytes" in message && message.bytes) {
8121
+ return [message.bytes.buffer];
8122
+ }
8123
+ if (message.type === "iterator-next" && "values" in message) {
8124
+ return message.values.map(
8125
+ (value) => value.buffer
8126
+ );
8127
+ }
8128
+ return [];
8129
+ };
8130
+
8102
8131
  // src/worker.ts
8103
8132
  var directory = location.hash.split("#")?.[1];
8104
8133
  var encodeName = (name) => {
@@ -8215,7 +8244,8 @@
8215
8244
  create: true
8216
8245
  });
8217
8246
  const writeFileHandle = await createWriteHandle(fileHandle);
8218
- writeFileHandle.write(value);
8247
+ writeFileHandle.write(value, { at: 0 });
8248
+ writeFileHandle.truncate(value.byteLength);
8219
8249
  writeFileHandle.flush();
8220
8250
  writeFileHandle.close();
8221
8251
  const prevSize = sizeMap.get(encodedKey);
@@ -8261,7 +8291,7 @@
8261
8291
  };
8262
8292
  this._rootStore = createMemory();
8263
8293
  self.addEventListener("message", async (ev) => {
8264
- const message = deserialize(ev["data"], MemoryRequest);
8294
+ const message = this.parseMessage(ev.data);
8265
8295
  try {
8266
8296
  if (message instanceof MemoryMessage) {
8267
8297
  if (message instanceof REQ_Open) {
@@ -8369,22 +8399,145 @@
8369
8399
  );
8370
8400
  }
8371
8401
  }
8402
+ if (isOPFSRequest(message)) {
8403
+ if (message.type === "open") {
8404
+ if (await this._rootStore.status() === "closed") {
8405
+ await this._rootStore.open();
8406
+ }
8407
+ await this.respond(message, {
8408
+ type: "ack",
8409
+ level: message.level,
8410
+ messageId: message.messageId
8411
+ });
8412
+ return;
8413
+ }
8414
+ const m = message.level.length === 0 ? this._rootStore : this._levels.get(levelKey(message.level));
8415
+ if (!m) {
8416
+ throw new Error("Recieved memory message for an undefined level");
8417
+ }
8418
+ if (message.type === "clear") {
8419
+ await m.clear();
8420
+ await this.respond(message, {
8421
+ type: "ack",
8422
+ level: message.level,
8423
+ messageId: message.messageId
8424
+ });
8425
+ } else if (message.type === "close") {
8426
+ await m.close();
8427
+ await this.respond(message, {
8428
+ type: "ack",
8429
+ level: message.level,
8430
+ messageId: message.messageId
8431
+ });
8432
+ } else if (message.type === "del") {
8433
+ await m.del(message.key);
8434
+ await this.respond(message, {
8435
+ type: "ack",
8436
+ level: message.level,
8437
+ messageId: message.messageId
8438
+ });
8439
+ } else if (message.type === "iterator-next") {
8440
+ let iterator = this._memoryIterator.get(message.id);
8441
+ if (!iterator) {
8442
+ iterator = m.iterator()[Symbol.asyncIterator]();
8443
+ this._memoryIterator.set(message.id, iterator);
8444
+ }
8445
+ const next = await iterator.next();
8446
+ const nextValue = next.done ? void 0 : next.value;
8447
+ const response = {
8448
+ type: "iterator-next",
8449
+ keys: nextValue ? [nextValue[0]] : [],
8450
+ values: nextValue ? [nextValue[1]] : [],
8451
+ level: message.level,
8452
+ messageId: message.messageId
8453
+ };
8454
+ await this.respond(message, response);
8455
+ if (next.done) {
8456
+ this._memoryIterator.delete(message.id);
8457
+ }
8458
+ } else if (message.type === "iterator-stop") {
8459
+ this._memoryIterator.delete(message.id);
8460
+ await this.respond(message, {
8461
+ type: "ack",
8462
+ level: message.level,
8463
+ messageId: message.messageId
8464
+ });
8465
+ } else if (message.type === "get") {
8466
+ await this.respond(message, {
8467
+ type: "get",
8468
+ bytes: await m.get(message.key),
8469
+ level: message.level,
8470
+ messageId: message.messageId
8471
+ });
8472
+ } else if (message.type === "put") {
8473
+ await m.put(message.key, message.bytes);
8474
+ await this.respond(message, {
8475
+ type: "ack",
8476
+ level: message.level,
8477
+ messageId: message.messageId
8478
+ });
8479
+ } else if (message.type === "size") {
8480
+ await this.respond(message, {
8481
+ type: "size",
8482
+ size: await m.size(),
8483
+ level: message.level,
8484
+ messageId: message.messageId
8485
+ });
8486
+ } else if (message.type === "status") {
8487
+ await this.respond(message, {
8488
+ type: "status",
8489
+ status: await m.status(),
8490
+ level: message.level,
8491
+ messageId: message.messageId
8492
+ });
8493
+ } else if (message.type === "sublevel") {
8494
+ await m.sublevel(message.name);
8495
+ await this.respond(message, {
8496
+ type: "ack",
8497
+ level: message.level,
8498
+ messageId: message.messageId
8499
+ });
8500
+ }
8501
+ }
8372
8502
  } catch (error) {
8373
- await this.respond(
8374
- message,
8375
- new RESP_Error({
8376
- error: error?.["message"] || error?.constructor.name,
8377
- level: message["level"] || []
8378
- }),
8379
- postMessageFn
8380
- );
8503
+ if (message instanceof MemoryRequest) {
8504
+ await this.respond(
8505
+ message,
8506
+ new RESP_Error({
8507
+ error: error?.["message"] || error?.constructor.name,
8508
+ level: message["level"] || []
8509
+ }),
8510
+ postMessageFn
8511
+ );
8512
+ return;
8513
+ }
8514
+ await this.respond(message, {
8515
+ type: "error",
8516
+ error: error?.["message"] || error?.constructor.name,
8517
+ level: message?.level || [],
8518
+ messageId: message?.messageId || ""
8519
+ });
8381
8520
  }
8382
8521
  });
8383
8522
  }
8523
+ parseMessage(data) {
8524
+ if (isOPFSRequest(data)) {
8525
+ return data;
8526
+ }
8527
+ const bytes = data instanceof Uint8Array ? data : new Uint8Array(data);
8528
+ return deserialize(bytes, MemoryRequest);
8529
+ }
8384
8530
  async respond(request, response, postMessageFn = postMessage) {
8385
- response.messageId = request.messageId;
8386
- const bytes = serialize(response);
8387
- postMessageFn(bytes, { transfer: [bytes.buffer] });
8531
+ if (request instanceof MemoryRequest) {
8532
+ const legacyResponse = response;
8533
+ legacyResponse.messageId = request.messageId;
8534
+ const bytes = serialize(legacyResponse);
8535
+ postMessageFn(bytes, { transfer: [bytes.buffer] });
8536
+ return;
8537
+ }
8538
+ const cloneResponse = response;
8539
+ cloneResponse.messageId = request.messageId;
8540
+ postMessageFn(cloneResponse, { transfer: getTransferables(cloneResponse) });
8388
8541
  }
8389
8542
  };
8390
8543
  new OPFSStoreWorker();