@fireproof/core 0.13.5-dev → 0.14.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -11583,7 +11583,7 @@ replaceTraps((oldTraps) => ({
11583
11583
  }));
11584
11584
 
11585
11585
  // src/version.ts
11586
- var PACKAGE_VERSION = "0.13.5-dev";
11586
+ var PACKAGE_VERSION = "0.14.0";
11587
11587
 
11588
11588
  // src/store.ts
11589
11589
  var match = PACKAGE_VERSION.match(/^([^.]*\.[^.]*)/);
@@ -12009,9 +12009,6 @@ var Loader = class {
12009
12009
  const header = await encodeCarHeader(fp);
12010
12010
  await t.put(header.cid, header.bytes);
12011
12011
  roots = [header.cid];
12012
- const got = await t.get(header.cid);
12013
- if (!got)
12014
- throw new Error("missing header!!!");
12015
12012
  }
12016
12013
  const theKey = opts.public ? null : await this._getKey();
12017
12014
  const { cid, bytes } = theKey ? await encryptedEncodeCarFile(theKey, roots[0], t) : await encodeCarFile(roots, t);
@@ -12785,6 +12782,9 @@ function makeMapFnFromName(name8) {
12785
12782
  };
12786
12783
  }
12787
12784
 
12785
+ // ../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/link.js
12786
+ var parse3 = (source, base3) => CID2.parse(source, base3);
12787
+
12788
12788
  // ../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/hasher.js
12789
12789
  var from4 = ({ name: name8, code: code8, encode: encode19 }) => new Hasher2(name8, code8, encode19);
12790
12790
  var Hasher2 = class {
@@ -14621,7 +14621,7 @@ var Data = $root.Data = (() => {
14621
14621
  }
14622
14622
  return d;
14623
14623
  };
14624
- Data3.prototype.toJSON = function toJSON2() {
14624
+ Data3.prototype.toJSON = function toJSON3() {
14625
14625
  return this.constructor.toObject(this, import_minimal.default.util.toJSONOptions);
14626
14626
  };
14627
14627
  Data3.DataType = function() {
@@ -14718,7 +14718,7 @@ var UnixTime = $root.UnixTime = (() => {
14718
14718
  }
14719
14719
  return d;
14720
14720
  };
14721
- UnixTime3.prototype.toJSON = function toJSON2() {
14721
+ UnixTime3.prototype.toJSON = function toJSON3() {
14722
14722
  return this.constructor.toObject(this, import_minimal.default.util.toJSONOptions);
14723
14723
  };
14724
14724
  return UnixTime3;
@@ -14777,7 +14777,7 @@ var Metadata = $root.Metadata = (() => {
14777
14777
  }
14778
14778
  return d;
14779
14779
  };
14780
- Metadata3.prototype.toJSON = function toJSON2() {
14780
+ Metadata3.prototype.toJSON = function toJSON3() {
14781
14781
  return this.constructor.toObject(this, import_minimal.default.util.toJSONOptions);
14782
14782
  };
14783
14783
  return Metadata3;
@@ -20932,6 +20932,8 @@ async function doCompact(blocks, head) {
20932
20932
  if (!bl)
20933
20933
  throw new Error("Missing head block: " + cid.toString());
20934
20934
  }
20935
+ for await (const entry of getAllEntries(blockLog, head)) {
20936
+ }
20935
20937
  for await (const [, link2] of entries2(blockLog, head)) {
20936
20938
  const bl = await blockLog.get(link2);
20937
20939
  if (!bl)
@@ -20948,6 +20950,18 @@ async function doCompact(blocks, head) {
20948
20950
  isCompacting = false;
20949
20951
  return done;
20950
20952
  }
20953
+ async function getThatBlock({ bytes }) {
20954
+ const realBytes = Uint8Array.from(atob(bytes), (c) => c.charCodeAt(0));
20955
+ const { cid, value } = await decode12({ bytes: realBytes, codec: src_exports, hasher: sha256 });
20956
+ return new Block({ cid, value, bytes: realBytes });
20957
+ }
20958
+ async function getBlock(blocks, cidString) {
20959
+ const block = await blocks.get(parse3(cidString));
20960
+ if (!block)
20961
+ throw new Error(`Missing block ${cidString}`);
20962
+ const { cid, value } = await decode12({ bytes: block.bytes, codec: src_exports, hasher: sha256 });
20963
+ return new Block({ cid, value, bytes: block.bytes });
20964
+ }
20951
20965
 
20952
20966
  // src/loaders.ts
20953
20967
  var _IdxLoader = class _IdxLoader extends Loader {
@@ -21010,18 +21024,17 @@ var _DbLoader = class _DbLoader extends Loader {
21010
21024
  return;
21011
21025
  }
21012
21026
  this.isCompacting = true;
21013
- try {
21014
- const compactHead = this.clock.head;
21015
- const compactingResult = await doCompact(blocks, this.clock.head);
21016
- await this.clock.applyHead(null, compactHead, compactHead, null);
21017
- return compactingResult;
21018
- } finally {
21019
- this.isCompacting = false;
21020
- }
21027
+ const compactHead = this.clock.head;
21028
+ const compactingResult = await doCompact(blocks, this.clock.head);
21029
+ await this.clock.applyHead(null, compactHead, compactHead, null);
21030
+ return compactingResult;
21021
21031
  };
21022
21032
  this.compacting = this._setWaitForWrite(compactingFn);
21033
+ this.compacting.finally(() => {
21034
+ this.isCompacting = false;
21035
+ this.awaitingCompact = false;
21036
+ });
21023
21037
  await this.compacting;
21024
- this.awaitingCompact = false;
21025
21038
  }
21026
21039
  async loadFileCar(cid, isPublic = false) {
21027
21040
  return await this.storesLoadCar(cid, this.fileStore, this.remoteFileStore, isPublic);
@@ -21235,17 +21248,25 @@ var CRDTClock = class {
21235
21248
  }
21236
21249
  async applyHead(tblocks, newHead, prevHead, updates = null) {
21237
21250
  const taskId = Math.random().toString().slice(2, 8);
21238
- for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({ id: taskId, tblocks, newHead, prevHead, updates })) {
21239
- Promise.resolve().then(async () => {
21240
- if (this.watchers.size && !all) {
21241
- const changes = await clockChangesSince(this.blocks, this.head, prevHead, {});
21242
- updates = changes.result;
21243
- } else {
21244
- updates = updatesAcc;
21245
- }
21246
- this.zoomers.forEach((fn) => fn());
21247
- this.notifyWatchers(updates || []);
21248
- });
21251
+ for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({
21252
+ id: taskId,
21253
+ tblocks,
21254
+ newHead,
21255
+ prevHead,
21256
+ updates
21257
+ })) {
21258
+ ;
21259
+ (async (updatesAcc2, all2) => {
21260
+ Promise.resolve().then(async () => {
21261
+ let intUpdates = updatesAcc2;
21262
+ if (this.watchers.size && !all2) {
21263
+ const changes = await clockChangesSince(this.blocks, this.head, prevHead, {});
21264
+ intUpdates = changes.result;
21265
+ }
21266
+ this.zoomers.forEach((fn) => fn());
21267
+ this.notifyWatchers(intUpdates || []);
21268
+ });
21269
+ })([...updatesAcc], all);
21249
21270
  }
21250
21271
  }
21251
21272
  async int_applyHead(taskId, tblocks, newHead, prevHead, updates = null) {
@@ -21258,13 +21279,11 @@ var CRDTClock = class {
21258
21279
  }
21259
21280
  });
21260
21281
  if (ogHead.toString() === newHead.toString()) {
21261
- this.notifyWatchers(updates || []);
21262
21282
  return;
21263
21283
  }
21264
21284
  const ogPrev = prevHead.sort((a, b) => a.toString().localeCompare(b.toString()));
21265
21285
  if (ogHead.toString() === ogPrev.toString()) {
21266
21286
  this.setHead(newHead);
21267
- this.notifyWatchers(updates || []);
21268
21287
  return;
21269
21288
  }
21270
21289
  let head = this.head;
@@ -21279,6 +21298,7 @@ var CRDTClock = class {
21279
21298
  try {
21280
21299
  head = await advance(tblocks2, head, cid);
21281
21300
  } catch (e) {
21301
+ console.error("failed to advance", cid.toString(), e);
21282
21302
  continue;
21283
21303
  }
21284
21304
  }
@@ -21349,16 +21369,22 @@ var CRDT = class {
21349
21369
  if (loader?.isCompacting) {
21350
21370
  throw new Error("cant bulk while compacting");
21351
21371
  }
21352
- const { head } = await this.blocks.transaction(async (tblocks) => {
21353
- const { head: head2 } = await applyBulkUpdateToCrdt(tblocks, this.clock.head, updates, options);
21372
+ const got = await this.blocks.transaction(async (tblocks) => {
21373
+ const { head } = await applyBulkUpdateToCrdt(tblocks, this.clock.head, updates, options);
21354
21374
  updates = updates.map(({ key, value, del: del2 }) => {
21355
21375
  readFiles(this.blocks, { doc: value });
21356
21376
  return { key, value, del: del2 };
21357
21377
  });
21358
- return { head: head2 };
21378
+ if (loader?.awaitingCompact) {
21379
+ console.log("missing?", head.toString());
21380
+ }
21381
+ if (loader?.isCompacting) {
21382
+ console.log("compacting?", head.toString());
21383
+ }
21384
+ return { head };
21359
21385
  });
21360
- await this.clock.applyHead(null, head, prevHead, updates);
21361
- return { head };
21386
+ await this.clock.applyHead(null, got.head, prevHead, updates);
21387
+ return got;
21362
21388
  })();
21363
21389
  if (loader) {
21364
21390
  const wr = loader.writing;
@@ -21387,6 +21413,14 @@ var CRDT = class {
21387
21413
  }
21388
21414
  return txt.join("\n");
21389
21415
  }
21416
+ async getBlock(cidString) {
21417
+ await this.ready;
21418
+ return await getBlock(this.blocks, cidString);
21419
+ }
21420
+ async getThatBlock() {
21421
+ const blockJson = { "cid": "bafyreib7ee4pscqpuioxobmh3ac5xbbslypmaqqbkugalhw67hnco6dvoa", "bytes": "omRkYXRhpGNrZXl4JDAxOGFmNzdiLWZmMTUtNzI5Ny04ODZiLTYwMjViM2MxODI2ZWRyb2902CpYJQABcRIgKVLI53HO1TFDbPUoSaybd0mop2oX/CRFm1RrpiY4ne9kdHlwZWNwdXRldmFsdWXYKlglAAFxEiAGw53MVtPzeeGT/itfdLBfCVu6MTj96AHU6v9a3K/wYGdwYXJlbnRzgdgqWCUAAXESIJiL5qjdpgghUfbQLpKJeCgMX+ubhoTpYBoZHYdzbQJ/" };
21422
+ return await getThatBlock(blockJson);
21423
+ }
21390
21424
  async get(key) {
21391
21425
  await this.ready;
21392
21426
  const result = await getValueFromCrdt(this.blocks, this.clock.head, key);