@fireproof/core 0.17.4 → 0.17.6

Sign up to get free protection for your applications and to get access to all the features.
Files changed (35) hide show
  1. package/README.md +3 -2
  2. package/dist/browser/fireproof.cjs +7 -3
  3. package/dist/browser/fireproof.cjs.map +1 -1
  4. package/dist/browser/fireproof.d.cts +1 -0
  5. package/dist/browser/fireproof.d.ts +1 -0
  6. package/dist/browser/fireproof.global.js +129 -96
  7. package/dist/browser/fireproof.global.js.map +1 -1
  8. package/dist/browser/fireproof.js +7 -3
  9. package/dist/browser/fireproof.js.map +1 -1
  10. package/dist/browser/metafile-cjs.json +1 -1
  11. package/dist/browser/metafile-esm.json +1 -1
  12. package/dist/browser/metafile-iife.json +1 -1
  13. package/dist/memory/fireproof.cjs +7 -3
  14. package/dist/memory/fireproof.cjs.map +1 -1
  15. package/dist/memory/fireproof.d.cts +1 -0
  16. package/dist/memory/fireproof.d.ts +1 -0
  17. package/dist/memory/fireproof.global.js +129 -96
  18. package/dist/memory/fireproof.global.js.map +1 -1
  19. package/dist/memory/fireproof.js +7 -3
  20. package/dist/memory/fireproof.js.map +1 -1
  21. package/dist/memory/metafile-cjs.json +1 -1
  22. package/dist/memory/metafile-esm.json +1 -1
  23. package/dist/memory/metafile-iife.json +1 -1
  24. package/dist/node/fireproof.cjs +7 -3
  25. package/dist/node/fireproof.cjs.map +1 -1
  26. package/dist/node/fireproof.d.cts +1 -0
  27. package/dist/node/fireproof.d.ts +1 -0
  28. package/dist/node/fireproof.global.js +129 -96
  29. package/dist/node/fireproof.global.js.map +1 -1
  30. package/dist/node/fireproof.js +7 -3
  31. package/dist/node/fireproof.js.map +1 -1
  32. package/dist/node/metafile-cjs.json +1 -1
  33. package/dist/node/metafile-esm.json +1 -1
  34. package/dist/node/metafile-iife.json +1 -1
  35. package/package.json +3 -3
@@ -4082,7 +4082,7 @@ var Fireproof = (() => {
4082
4082
  };
4083
4083
  var parse = (source, base4) => CID.parse(source, base4);
4084
4084
 
4085
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.0/node_modules/@web3-storage/pail/src/block.js
4085
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/block.js
4086
4086
  var MemoryBlockstore = class {
4087
4087
  /** @type {Map<string, Uint8Array>} */
4088
4088
  #blocks = /* @__PURE__ */ new Map();
@@ -4129,6 +4129,22 @@ var Fireproof = (() => {
4129
4129
  }
4130
4130
  }
4131
4131
  };
4132
+ var MultiBlockFetcher = class {
4133
+ /** @type {API.BlockFetcher[]} */
4134
+ #fetchers;
4135
+ /** @param {API.BlockFetcher[]} fetchers */
4136
+ constructor(...fetchers) {
4137
+ this.#fetchers = fetchers;
4138
+ }
4139
+ /** @type {API.BlockFetcher['get']} */
4140
+ async get(link2) {
4141
+ for (const f of this.#fetchers) {
4142
+ const v = await f.get(link2);
4143
+ if (v)
4144
+ return v;
4145
+ }
4146
+ }
4147
+ };
4132
4148
 
4133
4149
  // ../../node_modules/.pnpm/yocto-queue@1.0.0/node_modules/yocto-queue/index.js
4134
4150
  var Node = class {
@@ -9952,7 +9968,7 @@ You can use close({ resize: true }) to resize header`);
9952
9968
  }
9953
9969
  return bytes;
9954
9970
  }
9955
- var PACKAGE_VERSION = "0.17.3";
9971
+ var PACKAGE_VERSION = "0.17.5";
9956
9972
  var match = PACKAGE_VERSION.match(/^([^.]*\.[^.]*)/);
9957
9973
  if (!match)
9958
9974
  throw new Error("invalid version: " + PACKAGE_VERSION);
@@ -10022,6 +10038,7 @@ You can use close({ resize: true }) to resize header`);
10022
10038
  key;
10023
10039
  keyId;
10024
10040
  seenCompacted = /* @__PURE__ */ new Set();
10041
+ processedCars = /* @__PURE__ */ new Set();
10025
10042
  writing = Promise.resolve();
10026
10043
  getBlockCache = /* @__PURE__ */ new Map();
10027
10044
  seenMeta = /* @__PURE__ */ new Set();
@@ -10110,7 +10127,7 @@ You can use close({ resize: true }) to resize header`);
10110
10127
  // can these skip the queue? or have a file queue?
10111
10128
  async _commitInternalFiles(t, done, opts = { noLoader: false, compact: false }) {
10112
10129
  await this.ready;
10113
- const { files: roots } = this.makeFileCarHeader(done, this.carLog, !!opts.compact);
10130
+ const { files: roots } = this.makeFileCarHeader(done);
10114
10131
  const { cid, bytes } = await this.prepareCarFile(roots[0], t, !!opts.public);
10115
10132
  await this.fileStore.save({ cid, bytes });
10116
10133
  await this.remoteWAL.enqueueFile(cid, !!opts.public);
@@ -10130,7 +10147,10 @@ You can use close({ resize: true }) to resize header`);
10130
10147
  }
10131
10148
  }
10132
10149
  }
10133
- async cacheCarReader(reader) {
10150
+ async cacheCarReader(carCidStr, reader) {
10151
+ if (this.processedCars.has(carCidStr))
10152
+ return;
10153
+ this.processedCars.add(carCidStr);
10134
10154
  for await (const block of reader.blocks()) {
10135
10155
  const sBlock = block.cid.toString();
10136
10156
  if (!this.getBlockCache.has(sBlock)) {
@@ -10160,7 +10180,7 @@ You can use close({ resize: true }) to resize header`);
10160
10180
  const theKey = isPublic ? null : await this._getKey();
10161
10181
  return theKey && this.ebOpts.crypto ? await encryptedEncodeCarFile(this.ebOpts.crypto, theKey, root2, t) : await encodeCarFile([root2], t);
10162
10182
  }
10163
- makeFileCarHeader(result, cars, compact = false) {
10183
+ makeFileCarHeader(result) {
10164
10184
  const files = [];
10165
10185
  for (const [, meta] of Object.entries(result.files)) {
10166
10186
  if (meta && typeof meta === "object" && "cid" in meta && meta !== null) {
@@ -10195,10 +10215,27 @@ You can use close({ resize: true }) to resize header`);
10195
10215
  // await this.remoteWAL!.enqueue(dbMeta, { public: false })
10196
10216
  // }
10197
10217
  // }
10198
- async *entries() {
10218
+ async *entries(cache22 = true) {
10199
10219
  await this.ready;
10200
- for (const [, block] of this.getBlockCache) {
10201
- yield block;
10220
+ if (cache22) {
10221
+ for (const [, block] of this.getBlockCache) {
10222
+ yield block;
10223
+ }
10224
+ } else {
10225
+ for (const [, block] of this.getBlockCache) {
10226
+ yield block;
10227
+ }
10228
+ for (const cid of this.carLog) {
10229
+ const reader = await this.loadCar(cid);
10230
+ if (!reader)
10231
+ throw new Error(`missing car reader ${cid.toString()}`);
10232
+ for await (const block of reader.blocks()) {
10233
+ const sCid = block.cid.toString();
10234
+ if (!this.getBlockCache.has(sCid)) {
10235
+ yield block;
10236
+ }
10237
+ }
10238
+ }
10202
10239
  }
10203
10240
  }
10204
10241
  async getBlock(cid) {
@@ -10211,11 +10248,37 @@ You can use close({ resize: true }) to resize header`);
10211
10248
  if (!reader) {
10212
10249
  throw new Error(`missing car reader ${carCid.toString()}`);
10213
10250
  }
10214
- await this.cacheCarReader(reader);
10251
+ await this.cacheCarReader(carCid.toString(), reader).catch((e) => {
10252
+ });
10215
10253
  if (this.getBlockCache.has(sCid))
10216
10254
  return this.getBlockCache.get(sCid);
10217
10255
  throw new Error(`block not in reader: ${cid.toString()}`);
10218
10256
  };
10257
+ const getCompactCarCids = async (carCid) => {
10258
+ const reader = await this.loadCar(carCid);
10259
+ if (!reader) {
10260
+ throw new Error(`missing car reader ${carCid.toString()}`);
10261
+ }
10262
+ const header = await parseCarFile(reader);
10263
+ const compacts = header.compact;
10264
+ let got2;
10265
+ const batchSize2 = 5;
10266
+ for (let i = 0; i < compacts.length; i += batchSize2) {
10267
+ const promises = [];
10268
+ for (let j = i; j < Math.min(i + batchSize2, compacts.length); j++) {
10269
+ promises.push(getCarCid(compacts[j]));
10270
+ }
10271
+ try {
10272
+ got2 = await Promise.any(promises);
10273
+ } catch {
10274
+ }
10275
+ if (got2)
10276
+ break;
10277
+ }
10278
+ if (this.getBlockCache.has(sCid))
10279
+ return this.getBlockCache.get(sCid);
10280
+ throw new Error(`block not in compact reader: ${cid.toString()}`);
10281
+ };
10219
10282
  let got;
10220
10283
  const batchSize = 5;
10221
10284
  for (let i = 0; i < this.carLog.length; i += batchSize) {
@@ -10230,8 +10293,19 @@ You can use close({ resize: true }) to resize header`);
10230
10293
  if (got)
10231
10294
  break;
10232
10295
  }
10233
- if (got) {
10234
- this.getBlockCache.set(sCid, got);
10296
+ if (!got) {
10297
+ for (let i = 0; i < this.carLog.length; i += batchSize) {
10298
+ const promises = [];
10299
+ for (let j = i; j < Math.min(i + batchSize, this.carLog.length); j++) {
10300
+ promises.push(getCompactCarCids(this.carLog[j]));
10301
+ }
10302
+ try {
10303
+ got = await Promise.any(promises);
10304
+ } catch {
10305
+ }
10306
+ if (got)
10307
+ break;
10308
+ }
10235
10309
  }
10236
10310
  return got;
10237
10311
  }
@@ -10338,6 +10412,7 @@ You can use close({ resize: true }) to resize header`);
10338
10412
  compacting = false;
10339
10413
  ebOpts;
10340
10414
  transactions = /* @__PURE__ */ new Set();
10415
+ lastTxMeta = null;
10341
10416
  constructor(ebOpts) {
10342
10417
  this.ebOpts = ebOpts;
10343
10418
  const { name: name7 } = ebOpts;
@@ -10352,6 +10427,7 @@ You can use close({ resize: true }) to resize header`);
10352
10427
  async transaction(fn, opts = { noLoader: false }) {
10353
10428
  const t = new CarTransaction(this);
10354
10429
  const done = await fn(t);
10430
+ this.lastTxMeta = done;
10355
10431
  if (this.loader) {
10356
10432
  const car = await this.loader.commit(t, done, opts);
10357
10433
  if (this.ebOpts.autoCompact && this.loader.carLog.length > this.ebOpts.autoCompact) {
@@ -10397,7 +10473,7 @@ You can use close({ resize: true }) to resize header`);
10397
10473
  throw new Error("loader required to compact");
10398
10474
  if (this.loader.carLog.length < 2)
10399
10475
  return;
10400
- const compactFn = this.ebOpts.compact;
10476
+ const compactFn = this.ebOpts.compact || ((blocks) => this.defaultCompact(blocks));
10401
10477
  if (!compactFn || this.compacting)
10402
10478
  return;
10403
10479
  const blockLog = new CompactionFetcher(this);
@@ -10409,6 +10485,23 @@ You can use close({ resize: true }) to resize header`);
10409
10485
  });
10410
10486
  this.compacting = false;
10411
10487
  }
10488
+ async defaultCompact(blocks) {
10489
+ if (!this.loader) {
10490
+ throw new Error("no loader");
10491
+ }
10492
+ if (!this.lastTxMeta) {
10493
+ throw new Error("no lastTxMeta");
10494
+ }
10495
+ for await (const blk of this.loader.entries(false)) {
10496
+ blocks.loggedBlocks.putSync(blk.cid, blk.bytes);
10497
+ }
10498
+ for (const t of this.transactions) {
10499
+ for await (const blk of t.entries()) {
10500
+ blocks.loggedBlocks.putSync(blk.cid, blk.bytes);
10501
+ }
10502
+ }
10503
+ return this.lastTxMeta;
10504
+ }
10412
10505
  async *entries() {
10413
10506
  const seen = /* @__PURE__ */ new Set();
10414
10507
  if (this.loader) {
@@ -10678,7 +10771,7 @@ You can use close({ resize: true }) to resize header`);
10678
10771
  }));
10679
10772
 
10680
10773
  // ../encrypted-blockstore/dist/lib/store-web.js
10681
- var PACKAGE_VERSION2 = "0.17.3";
10774
+ var PACKAGE_VERSION2 = "0.17.5";
10682
10775
  var match2 = PACKAGE_VERSION2.match(/^([^.]*\.[^.]*)/);
10683
10776
  if (!match2)
10684
10777
  throw new Error("invalid version: " + PACKAGE_VERSION2);
@@ -10816,7 +10909,7 @@ You can use close({ resize: true }) to resize header`);
10816
10909
  const car = await this.loader.carStore.load(dbMeta.car).catch(() => null);
10817
10910
  if (!car) {
10818
10911
  if (cidListIncludes2(this.loader.carLog, dbMeta.car))
10819
- throw new Error(`missing car ${dbMeta.car.toString()}`);
10912
+ throw new Error(`missing local car ${dbMeta.car.toString()}`);
10820
10913
  } else {
10821
10914
  await this.loader.remoteCarStore.save(car);
10822
10915
  }
@@ -10829,7 +10922,7 @@ You can use close({ resize: true }) to resize header`);
10829
10922
  const car = await this.loader.carStore.load(dbMeta.car).catch(() => null);
10830
10923
  if (!car) {
10831
10924
  if (cidListIncludes2(this.loader.carLog, dbMeta.car))
10832
- throw new Error(`missing car ${dbMeta.car.toString()}`);
10925
+ throw new Error(`missing local car ${dbMeta.car.toString()}`);
10833
10926
  } else {
10834
10927
  await this.loader.remoteCarStore.save(car);
10835
10928
  }
@@ -10854,7 +10947,7 @@ You can use close({ resize: true }) to resize header`);
10854
10947
  const res = await Promise.allSettled(uploads);
10855
10948
  const errors = res.filter((r) => r.status === "rejected");
10856
10949
  if (errors.length) {
10857
- console.error("error uploading", JSON.stringify(errors));
10950
+ console.error("error uploading", JSON.stringify(errors.map((e) => e.reason)));
10858
10951
  throw errors[0].reason;
10859
10952
  }
10860
10953
  if (operations.length) {
@@ -10976,7 +11069,7 @@ You can use close({ resize: true }) to resize header`);
10976
11069
  makeRemoteWAL
10977
11070
  };
10978
11071
 
10979
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/clock/index.js
11072
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/clock/index.js
10980
11073
  var advance = async (blocks, head, event) => {
10981
11074
  const events = new EventFetcher(blocks);
10982
11075
  const headmap = new Map(head.map((cid) => [cid.toString(), cid]));
@@ -11102,7 +11195,7 @@ You can use close({ resize: true }) to resize header`);
11102
11195
  };
11103
11196
  var shortLink = (l) => `${String(l).slice(0, 4)}..${String(l).slice(-4)}`;
11104
11197
 
11105
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/shard.js
11198
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/shard.js
11106
11199
  var MaxKeyLength = 64;
11107
11200
  var MaxShardSize = 512 * 1024;
11108
11201
  var CID_TAG2 = new Token(Type.tag, 42);
@@ -11234,7 +11327,7 @@ You can use close({ resize: true }) to resize header`);
11234
11327
  }
11235
11328
  };
11236
11329
 
11237
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/index.js
11330
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/index.js
11238
11331
  var put = async (blocks, root2, key, value) => {
11239
11332
  const shards = new ShardFetcher(blocks);
11240
11333
  const rshard = await shards.get(root2);
@@ -11437,71 +11530,7 @@ You can use close({ resize: true }) to resize header`);
11437
11530
  return [shard];
11438
11531
  };
11439
11532
 
11440
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/block.js
11441
- var MemoryBlockstore2 = class {
11442
- /** @type {Map<string, Uint8Array>} */
11443
- #blocks = /* @__PURE__ */ new Map();
11444
- /**
11445
- * @param {Array<import('multiformats').Block>} [blocks]
11446
- */
11447
- constructor(blocks) {
11448
- if (blocks) {
11449
- this.#blocks = new Map(blocks.map((b) => [b.cid.toString(), b.bytes]));
11450
- }
11451
- }
11452
- /** @type {API.BlockFetcher['get']} */
11453
- async get(cid) {
11454
- const bytes = this.#blocks.get(cid.toString());
11455
- if (!bytes)
11456
- return;
11457
- return { cid, bytes };
11458
- }
11459
- /**
11460
- * @param {API.UnknownLink} cid
11461
- * @param {Uint8Array} bytes
11462
- */
11463
- async put(cid, bytes) {
11464
- this.#blocks.set(cid.toString(), bytes);
11465
- }
11466
- /**
11467
- * @param {API.UnknownLink} cid
11468
- * @param {Uint8Array} bytes
11469
- */
11470
- putSync(cid, bytes) {
11471
- this.#blocks.set(cid.toString(), bytes);
11472
- }
11473
- /** @param {API.UnknownLink} cid */
11474
- async delete(cid) {
11475
- this.#blocks.delete(cid.toString());
11476
- }
11477
- /** @param {API.UnknownLink} cid */
11478
- deleteSync(cid) {
11479
- this.#blocks.delete(cid.toString());
11480
- }
11481
- *entries() {
11482
- for (const [str, bytes] of this.#blocks) {
11483
- yield { cid: parse(str), bytes };
11484
- }
11485
- }
11486
- };
11487
- var MultiBlockFetcher = class {
11488
- /** @type {API.BlockFetcher[]} */
11489
- #fetchers;
11490
- /** @param {API.BlockFetcher[]} fetchers */
11491
- constructor(...fetchers) {
11492
- this.#fetchers = fetchers;
11493
- }
11494
- /** @type {API.BlockFetcher['get']} */
11495
- async get(link2) {
11496
- for (const f of this.#fetchers) {
11497
- const v = await f.get(link2);
11498
- if (v)
11499
- return v;
11500
- }
11501
- }
11502
- };
11503
-
11504
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/batch/shard.js
11533
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/batch/shard.js
11505
11534
  var ShardLinkByteLength = 36;
11506
11535
  var CID_TAG3 = new Token(Type.tag, 42);
11507
11536
  var create8 = (init2) => ({
@@ -11548,7 +11577,7 @@ You can use close({ resize: true }) to resize header`);
11548
11577
  return tokensToLength(tokens);
11549
11578
  };
11550
11579
 
11551
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/batch/index.js
11580
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/batch/index.js
11552
11581
  var Batcher = class _Batcher {
11553
11582
  #committed = false;
11554
11583
  /**
@@ -11730,9 +11759,9 @@ You can use close({ resize: true }) to resize header`);
11730
11759
  static code = "ERR_BATCH_COMMITTED";
11731
11760
  };
11732
11761
 
11733
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/crdt/index.js
11762
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/crdt/index.js
11734
11763
  var put3 = async (blocks, head, key, value) => {
11735
- const mblocks = new MemoryBlockstore2();
11764
+ const mblocks = new MemoryBlockstore();
11736
11765
  blocks = new MultiBlockFetcher(mblocks, blocks);
11737
11766
  if (!head.length) {
11738
11767
  const shard = await ShardBlock.create();
@@ -11816,7 +11845,7 @@ You can use close({ resize: true }) to resize header`);
11816
11845
  var root = async (blocks, head) => {
11817
11846
  if (!head.length)
11818
11847
  throw new Error("cannot determine root of headless clock");
11819
- const mblocks = new MemoryBlockstore2();
11848
+ const mblocks = new MemoryBlockstore();
11820
11849
  blocks = new MultiBlockFetcher(mblocks, blocks);
11821
11850
  const events = new EventFetcher(blocks);
11822
11851
  if (head.length === 1) {
@@ -11875,7 +11904,7 @@ You can use close({ resize: true }) to resize header`);
11875
11904
  return;
11876
11905
  const result = await root(blocks, head);
11877
11906
  if (result.additions.length) {
11878
- blocks = new MultiBlockFetcher(new MemoryBlockstore2(result.additions), blocks);
11907
+ blocks = new MultiBlockFetcher(new MemoryBlockstore(result.additions), blocks);
11879
11908
  }
11880
11909
  return get2(blocks, result.root, key);
11881
11910
  };
@@ -11884,7 +11913,7 @@ You can use close({ resize: true }) to resize header`);
11884
11913
  return;
11885
11914
  const result = await root(blocks, head);
11886
11915
  if (result.additions.length) {
11887
- blocks = new MultiBlockFetcher(new MemoryBlockstore2(result.additions), blocks);
11916
+ blocks = new MultiBlockFetcher(new MemoryBlockstore(result.additions), blocks);
11888
11917
  }
11889
11918
  yield* entries(blocks, result.root, options);
11890
11919
  };
@@ -11968,7 +11997,7 @@ You can use close({ resize: true }) to resize header`);
11968
11997
  return acc.concat(...rest);
11969
11998
  };
11970
11999
 
11971
- // ../../node_modules/.pnpm/@web3-storage+pail@0.4.1/node_modules/@web3-storage/pail/src/crdt/batch/index.js
12000
+ // ../../node_modules/.pnpm/@web3-storage+pail@0.4.2/node_modules/@web3-storage/pail/src/crdt/batch/index.js
11972
12001
  var Batcher2 = class _Batcher {
11973
12002
  #committed = false;
11974
12003
  /**
@@ -12013,7 +12042,7 @@ You can use close({ resize: true }) to resize header`);
12013
12042
  const res = await commit(this);
12014
12043
  const data = { type: "batch", ops: this.ops, root: res.root };
12015
12044
  const event = await EventBlock.create(data, this.head);
12016
- const mblocks = new MemoryBlockstore2();
12045
+ const mblocks = new MemoryBlockstore();
12017
12046
  const blocks = new MultiBlockFetcher(mblocks, this.blocks);
12018
12047
  mblocks.putSync(event.cid, event.bytes);
12019
12048
  const head = await advance(blocks, this.head, event.cid);
@@ -12053,7 +12082,7 @@ You can use close({ resize: true }) to resize header`);
12053
12082
  * @param {string} init.prefix
12054
12083
  */
12055
12084
  static async create({ blocks, head, prefix }) {
12056
- const mblocks = new MemoryBlockstore2();
12085
+ const mblocks = new MemoryBlockstore();
12057
12086
  blocks = new MultiBlockFetcher(mblocks, blocks);
12058
12087
  if (!head.length) {
12059
12088
  const base5 = await ShardBlock.create();
@@ -20718,7 +20747,6 @@ You can use close({ resize: true }) to resize header`);
20718
20747
  var isCompacting = false;
20719
20748
  async function doCompact(blockLog, head) {
20720
20749
  if (isCompacting) {
20721
- console.log("already compacting");
20722
20750
  return;
20723
20751
  }
20724
20752
  isCompacting = true;
@@ -21425,7 +21453,10 @@ You can use close({ resize: true }) to resize header`);
21425
21453
  const task = queue.shift();
21426
21454
  if (!task)
21427
21455
  continue;
21428
- await worker(task.newHead, task.prevHead, task.updates !== null);
21456
+ await worker(task.newHead, task.prevHead, task.updates !== null).catch((e) => {
21457
+ console.error("int_applyHead worker error", e);
21458
+ throw e;
21459
+ });
21429
21460
  if (task.updates) {
21430
21461
  allUpdates.push(...task.updates);
21431
21462
  }
@@ -21448,6 +21479,9 @@ You can use close({ resize: true }) to resize header`);
21448
21479
  push(task) {
21449
21480
  queue.push(task);
21450
21481
  return process();
21482
+ },
21483
+ size() {
21484
+ return queue.length;
21451
21485
  }
21452
21486
  };
21453
21487
  }
@@ -21549,7 +21583,6 @@ You can use close({ resize: true }) to resize header`);
21549
21583
  try {
21550
21584
  head = await advance(tblocks, head, cid);
21551
21585
  } catch (e) {
21552
- console.log("failed to advance head:", cid.toString());
21553
21586
  continue;
21554
21587
  }
21555
21588
  }