@fireproof/core 0.13.5-dev → 0.14.0

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.
@@ -11605,7 +11605,7 @@ replaceTraps((oldTraps) => ({
11605
11605
  }));
11606
11606
 
11607
11607
  // src/version.ts
11608
- var PACKAGE_VERSION = "0.13.5-dev";
11608
+ var PACKAGE_VERSION = "0.14.0";
11609
11609
 
11610
11610
  // src/store.ts
11611
11611
  var match = PACKAGE_VERSION.match(/^([^.]*\.[^.]*)/);
@@ -12031,9 +12031,6 @@ var Loader = class {
12031
12031
  const header = await encodeCarHeader(fp);
12032
12032
  await t.put(header.cid, header.bytes);
12033
12033
  roots = [header.cid];
12034
- const got = await t.get(header.cid);
12035
- if (!got)
12036
- throw new Error("missing header!!!");
12037
12034
  }
12038
12035
  const theKey = opts.public ? null : await this._getKey();
12039
12036
  const { cid, bytes } = theKey ? await encryptedEncodeCarFile(theKey, roots[0], t) : await encodeCarFile(roots, t);
@@ -12807,6 +12804,9 @@ function makeMapFnFromName(name8) {
12807
12804
  };
12808
12805
  }
12809
12806
 
12807
+ // ../../node_modules/.pnpm/multiformats@12.0.1/node_modules/multiformats/src/link.js
12808
+ var parse3 = (source, base3) => CID2.parse(source, base3);
12809
+
12810
12810
  // ../../node_modules/.pnpm/multiformats@11.0.2/node_modules/multiformats/src/hashes/hasher.js
12811
12811
  var from4 = ({ name: name8, code: code8, encode: encode19 }) => new Hasher2(name8, code8, encode19);
12812
12812
  var Hasher2 = class {
@@ -14643,7 +14643,7 @@ var Data = $root.Data = (() => {
14643
14643
  }
14644
14644
  return d;
14645
14645
  };
14646
- Data3.prototype.toJSON = function toJSON2() {
14646
+ Data3.prototype.toJSON = function toJSON3() {
14647
14647
  return this.constructor.toObject(this, import_minimal.default.util.toJSONOptions);
14648
14648
  };
14649
14649
  Data3.DataType = function() {
@@ -14740,7 +14740,7 @@ var UnixTime = $root.UnixTime = (() => {
14740
14740
  }
14741
14741
  return d;
14742
14742
  };
14743
- UnixTime3.prototype.toJSON = function toJSON2() {
14743
+ UnixTime3.prototype.toJSON = function toJSON3() {
14744
14744
  return this.constructor.toObject(this, import_minimal.default.util.toJSONOptions);
14745
14745
  };
14746
14746
  return UnixTime3;
@@ -14799,7 +14799,7 @@ var Metadata = $root.Metadata = (() => {
14799
14799
  }
14800
14800
  return d;
14801
14801
  };
14802
- Metadata3.prototype.toJSON = function toJSON2() {
14802
+ Metadata3.prototype.toJSON = function toJSON3() {
14803
14803
  return this.constructor.toObject(this, import_minimal.default.util.toJSONOptions);
14804
14804
  };
14805
14805
  return Metadata3;
@@ -20954,6 +20954,8 @@ async function doCompact(blocks, head) {
20954
20954
  if (!bl)
20955
20955
  throw new Error("Missing head block: " + cid.toString());
20956
20956
  }
20957
+ for await (const entry of getAllEntries(blockLog, head)) {
20958
+ }
20957
20959
  for await (const [, link2] of entries2(blockLog, head)) {
20958
20960
  const bl = await blockLog.get(link2);
20959
20961
  if (!bl)
@@ -20970,6 +20972,18 @@ async function doCompact(blocks, head) {
20970
20972
  isCompacting = false;
20971
20973
  return done;
20972
20974
  }
20975
+ async function getThatBlock({ bytes }) {
20976
+ const realBytes = Uint8Array.from(atob(bytes), (c) => c.charCodeAt(0));
20977
+ const { cid, value } = await decode12({ bytes: realBytes, codec: src_exports, hasher: sha256 });
20978
+ return new Block({ cid, value, bytes: realBytes });
20979
+ }
20980
+ async function getBlock(blocks, cidString) {
20981
+ const block = await blocks.get(parse3(cidString));
20982
+ if (!block)
20983
+ throw new Error(`Missing block ${cidString}`);
20984
+ const { cid, value } = await decode12({ bytes: block.bytes, codec: src_exports, hasher: sha256 });
20985
+ return new Block({ cid, value, bytes: block.bytes });
20986
+ }
20973
20987
 
20974
20988
  // src/loaders.ts
20975
20989
  var _IdxLoader = class _IdxLoader extends Loader {
@@ -21032,18 +21046,17 @@ var _DbLoader = class _DbLoader extends Loader {
21032
21046
  return;
21033
21047
  }
21034
21048
  this.isCompacting = true;
21035
- try {
21036
- const compactHead = this.clock.head;
21037
- const compactingResult = await doCompact(blocks, this.clock.head);
21038
- await this.clock.applyHead(null, compactHead, compactHead, null);
21039
- return compactingResult;
21040
- } finally {
21041
- this.isCompacting = false;
21042
- }
21049
+ const compactHead = this.clock.head;
21050
+ const compactingResult = await doCompact(blocks, this.clock.head);
21051
+ await this.clock.applyHead(null, compactHead, compactHead, null);
21052
+ return compactingResult;
21043
21053
  };
21044
21054
  this.compacting = this._setWaitForWrite(compactingFn);
21055
+ this.compacting.finally(() => {
21056
+ this.isCompacting = false;
21057
+ this.awaitingCompact = false;
21058
+ });
21045
21059
  await this.compacting;
21046
- this.awaitingCompact = false;
21047
21060
  }
21048
21061
  async loadFileCar(cid, isPublic = false) {
21049
21062
  return await this.storesLoadCar(cid, this.fileStore, this.remoteFileStore, isPublic);
@@ -21257,17 +21270,25 @@ var CRDTClock = class {
21257
21270
  }
21258
21271
  async applyHead(tblocks, newHead, prevHead, updates = null) {
21259
21272
  const taskId = Math.random().toString().slice(2, 8);
21260
- for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({ id: taskId, tblocks, newHead, prevHead, updates })) {
21261
- Promise.resolve().then(async () => {
21262
- if (this.watchers.size && !all) {
21263
- const changes = await clockChangesSince(this.blocks, this.head, prevHead, {});
21264
- updates = changes.result;
21265
- } else {
21266
- updates = updatesAcc;
21267
- }
21268
- this.zoomers.forEach((fn) => fn());
21269
- this.notifyWatchers(updates || []);
21270
- });
21273
+ for await (const { updates: updatesAcc, all } of this.applyHeadQueue.push({
21274
+ id: taskId,
21275
+ tblocks,
21276
+ newHead,
21277
+ prevHead,
21278
+ updates
21279
+ })) {
21280
+ ;
21281
+ (async (updatesAcc2, all2) => {
21282
+ Promise.resolve().then(async () => {
21283
+ let intUpdates = updatesAcc2;
21284
+ if (this.watchers.size && !all2) {
21285
+ const changes = await clockChangesSince(this.blocks, this.head, prevHead, {});
21286
+ intUpdates = changes.result;
21287
+ }
21288
+ this.zoomers.forEach((fn) => fn());
21289
+ this.notifyWatchers(intUpdates || []);
21290
+ });
21291
+ })([...updatesAcc], all);
21271
21292
  }
21272
21293
  }
21273
21294
  async int_applyHead(taskId, tblocks, newHead, prevHead, updates = null) {
@@ -21280,13 +21301,11 @@ var CRDTClock = class {
21280
21301
  }
21281
21302
  });
21282
21303
  if (ogHead.toString() === newHead.toString()) {
21283
- this.notifyWatchers(updates || []);
21284
21304
  return;
21285
21305
  }
21286
21306
  const ogPrev = prevHead.sort((a, b) => a.toString().localeCompare(b.toString()));
21287
21307
  if (ogHead.toString() === ogPrev.toString()) {
21288
21308
  this.setHead(newHead);
21289
- this.notifyWatchers(updates || []);
21290
21309
  return;
21291
21310
  }
21292
21311
  let head = this.head;
@@ -21301,6 +21320,7 @@ var CRDTClock = class {
21301
21320
  try {
21302
21321
  head = await advance(tblocks2, head, cid);
21303
21322
  } catch (e) {
21323
+ console.error("failed to advance", cid.toString(), e);
21304
21324
  continue;
21305
21325
  }
21306
21326
  }
@@ -21371,16 +21391,22 @@ var CRDT = class {
21371
21391
  if (loader?.isCompacting) {
21372
21392
  throw new Error("cant bulk while compacting");
21373
21393
  }
21374
- const { head } = await this.blocks.transaction(async (tblocks) => {
21375
- const { head: head2 } = await applyBulkUpdateToCrdt(tblocks, this.clock.head, updates, options);
21394
+ const got = await this.blocks.transaction(async (tblocks) => {
21395
+ const { head } = await applyBulkUpdateToCrdt(tblocks, this.clock.head, updates, options);
21376
21396
  updates = updates.map(({ key, value, del: del2 }) => {
21377
21397
  readFiles(this.blocks, { doc: value });
21378
21398
  return { key, value, del: del2 };
21379
21399
  });
21380
- return { head: head2 };
21400
+ if (loader?.awaitingCompact) {
21401
+ console.log("missing?", head.toString());
21402
+ }
21403
+ if (loader?.isCompacting) {
21404
+ console.log("compacting?", head.toString());
21405
+ }
21406
+ return { head };
21381
21407
  });
21382
- await this.clock.applyHead(null, head, prevHead, updates);
21383
- return { head };
21408
+ await this.clock.applyHead(null, got.head, prevHead, updates);
21409
+ return got;
21384
21410
  })();
21385
21411
  if (loader) {
21386
21412
  const wr = loader.writing;
@@ -21409,6 +21435,14 @@ var CRDT = class {
21409
21435
  }
21410
21436
  return txt.join("\n");
21411
21437
  }
21438
+ async getBlock(cidString) {
21439
+ await this.ready;
21440
+ return await getBlock(this.blocks, cidString);
21441
+ }
21442
+ async getThatBlock() {
21443
+ const blockJson = { "cid": "bafyreib7ee4pscqpuioxobmh3ac5xbbslypmaqqbkugalhw67hnco6dvoa", "bytes": "omRkYXRhpGNrZXl4JDAxOGFmNzdiLWZmMTUtNzI5Ny04ODZiLTYwMjViM2MxODI2ZWRyb2902CpYJQABcRIgKVLI53HO1TFDbPUoSaybd0mop2oX/CRFm1RrpiY4ne9kdHlwZWNwdXRldmFsdWXYKlglAAFxEiAGw53MVtPzeeGT/itfdLBfCVu6MTj96AHU6v9a3K/wYGdwYXJlbnRzgdgqWCUAAXESIJiL5qjdpgghUfbQLpKJeCgMX+ubhoTpYBoZHYdzbQJ/" };
21444
+ return await getThatBlock(blockJson);
21445
+ }
21412
21446
  async get(key) {
21413
21447
  await this.ready;
21414
21448
  const result = await getValueFromCrdt(this.blocks, this.clock.head, key);