@fireproof/core 0.17.5 → 0.17.6
Sign up to get free protection for your applications and to get access to all the features.
- package/README.md +1 -0
- package/dist/browser/fireproof.cjs +7 -3
- package/dist/browser/fireproof.cjs.map +1 -1
- package/dist/browser/fireproof.d.cts +1 -0
- package/dist/browser/fireproof.d.ts +1 -0
- package/dist/browser/fireproof.global.js +99 -18
- package/dist/browser/fireproof.global.js.map +1 -1
- package/dist/browser/fireproof.js +7 -3
- package/dist/browser/fireproof.js.map +1 -1
- package/dist/browser/metafile-cjs.json +1 -1
- package/dist/browser/metafile-esm.json +1 -1
- package/dist/browser/metafile-iife.json +1 -1
- package/dist/memory/fireproof.cjs +7 -3
- package/dist/memory/fireproof.cjs.map +1 -1
- package/dist/memory/fireproof.d.cts +1 -0
- package/dist/memory/fireproof.d.ts +1 -0
- package/dist/memory/fireproof.global.js +99 -18
- package/dist/memory/fireproof.global.js.map +1 -1
- package/dist/memory/fireproof.js +7 -3
- package/dist/memory/fireproof.js.map +1 -1
- package/dist/memory/metafile-cjs.json +1 -1
- package/dist/memory/metafile-esm.json +1 -1
- package/dist/memory/metafile-iife.json +1 -1
- package/dist/node/fireproof.cjs +7 -3
- package/dist/node/fireproof.cjs.map +1 -1
- package/dist/node/fireproof.d.cts +1 -0
- package/dist/node/fireproof.d.ts +1 -0
- package/dist/node/fireproof.global.js +99 -18
- package/dist/node/fireproof.global.js.map +1 -1
- package/dist/node/fireproof.js +7 -3
- package/dist/node/fireproof.js.map +1 -1
- package/dist/node/metafile-cjs.json +1 -1
- package/dist/node/metafile-esm.json +1 -1
- package/dist/node/metafile-iife.json +1 -1
- package/package.json +2 -2
@@ -9968,7 +9968,7 @@ You can use close({ resize: true }) to resize header`);
|
|
9968
9968
|
}
|
9969
9969
|
return bytes;
|
9970
9970
|
}
|
9971
|
-
var PACKAGE_VERSION = "0.17.
|
9971
|
+
var PACKAGE_VERSION = "0.17.5";
|
9972
9972
|
var match = PACKAGE_VERSION.match(/^([^.]*\.[^.]*)/);
|
9973
9973
|
if (!match)
|
9974
9974
|
throw new Error("invalid version: " + PACKAGE_VERSION);
|
@@ -10038,6 +10038,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10038
10038
|
key;
|
10039
10039
|
keyId;
|
10040
10040
|
seenCompacted = /* @__PURE__ */ new Set();
|
10041
|
+
processedCars = /* @__PURE__ */ new Set();
|
10041
10042
|
writing = Promise.resolve();
|
10042
10043
|
getBlockCache = /* @__PURE__ */ new Map();
|
10043
10044
|
seenMeta = /* @__PURE__ */ new Set();
|
@@ -10126,7 +10127,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10126
10127
|
// can these skip the queue? or have a file queue?
|
10127
10128
|
async _commitInternalFiles(t, done, opts = { noLoader: false, compact: false }) {
|
10128
10129
|
await this.ready;
|
10129
|
-
const { files: roots } = this.makeFileCarHeader(done
|
10130
|
+
const { files: roots } = this.makeFileCarHeader(done);
|
10130
10131
|
const { cid, bytes } = await this.prepareCarFile(roots[0], t, !!opts.public);
|
10131
10132
|
await this.fileStore.save({ cid, bytes });
|
10132
10133
|
await this.remoteWAL.enqueueFile(cid, !!opts.public);
|
@@ -10146,7 +10147,10 @@ You can use close({ resize: true }) to resize header`);
|
|
10146
10147
|
}
|
10147
10148
|
}
|
10148
10149
|
}
|
10149
|
-
async cacheCarReader(reader) {
|
10150
|
+
async cacheCarReader(carCidStr, reader) {
|
10151
|
+
if (this.processedCars.has(carCidStr))
|
10152
|
+
return;
|
10153
|
+
this.processedCars.add(carCidStr);
|
10150
10154
|
for await (const block of reader.blocks()) {
|
10151
10155
|
const sBlock = block.cid.toString();
|
10152
10156
|
if (!this.getBlockCache.has(sBlock)) {
|
@@ -10176,7 +10180,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10176
10180
|
const theKey = isPublic ? null : await this._getKey();
|
10177
10181
|
return theKey && this.ebOpts.crypto ? await encryptedEncodeCarFile(this.ebOpts.crypto, theKey, root2, t) : await encodeCarFile([root2], t);
|
10178
10182
|
}
|
10179
|
-
makeFileCarHeader(result
|
10183
|
+
makeFileCarHeader(result) {
|
10180
10184
|
const files = [];
|
10181
10185
|
for (const [, meta] of Object.entries(result.files)) {
|
10182
10186
|
if (meta && typeof meta === "object" && "cid" in meta && meta !== null) {
|
@@ -10211,10 +10215,27 @@ You can use close({ resize: true }) to resize header`);
|
|
10211
10215
|
// await this.remoteWAL!.enqueue(dbMeta, { public: false })
|
10212
10216
|
// }
|
10213
10217
|
// }
|
10214
|
-
async *entries() {
|
10218
|
+
async *entries(cache22 = true) {
|
10215
10219
|
await this.ready;
|
10216
|
-
|
10217
|
-
|
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
|
+
}
|
10218
10239
|
}
|
10219
10240
|
}
|
10220
10241
|
async getBlock(cid) {
|
@@ -10227,11 +10248,37 @@ You can use close({ resize: true }) to resize header`);
|
|
10227
10248
|
if (!reader) {
|
10228
10249
|
throw new Error(`missing car reader ${carCid.toString()}`);
|
10229
10250
|
}
|
10230
|
-
await this.cacheCarReader(reader)
|
10251
|
+
await this.cacheCarReader(carCid.toString(), reader).catch((e) => {
|
10252
|
+
});
|
10231
10253
|
if (this.getBlockCache.has(sCid))
|
10232
10254
|
return this.getBlockCache.get(sCid);
|
10233
10255
|
throw new Error(`block not in reader: ${cid.toString()}`);
|
10234
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
|
+
};
|
10235
10282
|
let got;
|
10236
10283
|
const batchSize = 5;
|
10237
10284
|
for (let i = 0; i < this.carLog.length; i += batchSize) {
|
@@ -10246,8 +10293,19 @@ You can use close({ resize: true }) to resize header`);
|
|
10246
10293
|
if (got)
|
10247
10294
|
break;
|
10248
10295
|
}
|
10249
|
-
if (got) {
|
10250
|
-
this.
|
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
|
+
}
|
10251
10309
|
}
|
10252
10310
|
return got;
|
10253
10311
|
}
|
@@ -10354,6 +10412,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10354
10412
|
compacting = false;
|
10355
10413
|
ebOpts;
|
10356
10414
|
transactions = /* @__PURE__ */ new Set();
|
10415
|
+
lastTxMeta = null;
|
10357
10416
|
constructor(ebOpts) {
|
10358
10417
|
this.ebOpts = ebOpts;
|
10359
10418
|
const { name: name7 } = ebOpts;
|
@@ -10368,6 +10427,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10368
10427
|
async transaction(fn, opts = { noLoader: false }) {
|
10369
10428
|
const t = new CarTransaction(this);
|
10370
10429
|
const done = await fn(t);
|
10430
|
+
this.lastTxMeta = done;
|
10371
10431
|
if (this.loader) {
|
10372
10432
|
const car = await this.loader.commit(t, done, opts);
|
10373
10433
|
if (this.ebOpts.autoCompact && this.loader.carLog.length > this.ebOpts.autoCompact) {
|
@@ -10413,7 +10473,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10413
10473
|
throw new Error("loader required to compact");
|
10414
10474
|
if (this.loader.carLog.length < 2)
|
10415
10475
|
return;
|
10416
|
-
const compactFn = this.ebOpts.compact;
|
10476
|
+
const compactFn = this.ebOpts.compact || ((blocks) => this.defaultCompact(blocks));
|
10417
10477
|
if (!compactFn || this.compacting)
|
10418
10478
|
return;
|
10419
10479
|
const blockLog = new CompactionFetcher(this);
|
@@ -10425,6 +10485,23 @@ You can use close({ resize: true }) to resize header`);
|
|
10425
10485
|
});
|
10426
10486
|
this.compacting = false;
|
10427
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
|
+
}
|
10428
10505
|
async *entries() {
|
10429
10506
|
const seen = /* @__PURE__ */ new Set();
|
10430
10507
|
if (this.loader) {
|
@@ -10694,7 +10771,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10694
10771
|
}));
|
10695
10772
|
|
10696
10773
|
// ../encrypted-blockstore/dist/lib/store-web.js
|
10697
|
-
var PACKAGE_VERSION2 = "0.17.
|
10774
|
+
var PACKAGE_VERSION2 = "0.17.5";
|
10698
10775
|
var match2 = PACKAGE_VERSION2.match(/^([^.]*\.[^.]*)/);
|
10699
10776
|
if (!match2)
|
10700
10777
|
throw new Error("invalid version: " + PACKAGE_VERSION2);
|
@@ -10832,7 +10909,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10832
10909
|
const car = await this.loader.carStore.load(dbMeta.car).catch(() => null);
|
10833
10910
|
if (!car) {
|
10834
10911
|
if (cidListIncludes2(this.loader.carLog, dbMeta.car))
|
10835
|
-
throw new Error(`missing car ${dbMeta.car.toString()}`);
|
10912
|
+
throw new Error(`missing local car ${dbMeta.car.toString()}`);
|
10836
10913
|
} else {
|
10837
10914
|
await this.loader.remoteCarStore.save(car);
|
10838
10915
|
}
|
@@ -10845,7 +10922,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10845
10922
|
const car = await this.loader.carStore.load(dbMeta.car).catch(() => null);
|
10846
10923
|
if (!car) {
|
10847
10924
|
if (cidListIncludes2(this.loader.carLog, dbMeta.car))
|
10848
|
-
throw new Error(`missing car ${dbMeta.car.toString()}`);
|
10925
|
+
throw new Error(`missing local car ${dbMeta.car.toString()}`);
|
10849
10926
|
} else {
|
10850
10927
|
await this.loader.remoteCarStore.save(car);
|
10851
10928
|
}
|
@@ -10870,7 +10947,7 @@ You can use close({ resize: true }) to resize header`);
|
|
10870
10947
|
const res = await Promise.allSettled(uploads);
|
10871
10948
|
const errors = res.filter((r) => r.status === "rejected");
|
10872
10949
|
if (errors.length) {
|
10873
|
-
console.error("error uploading", JSON.stringify(errors));
|
10950
|
+
console.error("error uploading", JSON.stringify(errors.map((e) => e.reason)));
|
10874
10951
|
throw errors[0].reason;
|
10875
10952
|
}
|
10876
10953
|
if (operations.length) {
|
@@ -20670,7 +20747,6 @@ You can use close({ resize: true }) to resize header`);
|
|
20670
20747
|
var isCompacting = false;
|
20671
20748
|
async function doCompact(blockLog, head) {
|
20672
20749
|
if (isCompacting) {
|
20673
|
-
console.log("already compacting");
|
20674
20750
|
return;
|
20675
20751
|
}
|
20676
20752
|
isCompacting = true;
|
@@ -21377,7 +21453,10 @@ You can use close({ resize: true }) to resize header`);
|
|
21377
21453
|
const task = queue.shift();
|
21378
21454
|
if (!task)
|
21379
21455
|
continue;
|
21380
|
-
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
|
+
});
|
21381
21460
|
if (task.updates) {
|
21382
21461
|
allUpdates.push(...task.updates);
|
21383
21462
|
}
|
@@ -21400,6 +21479,9 @@ You can use close({ resize: true }) to resize header`);
|
|
21400
21479
|
push(task) {
|
21401
21480
|
queue.push(task);
|
21402
21481
|
return process();
|
21482
|
+
},
|
21483
|
+
size() {
|
21484
|
+
return queue.length;
|
21403
21485
|
}
|
21404
21486
|
};
|
21405
21487
|
}
|
@@ -21501,7 +21583,6 @@ You can use close({ resize: true }) to resize header`);
|
|
21501
21583
|
try {
|
21502
21584
|
head = await advance(tblocks, head, cid);
|
21503
21585
|
} catch (e) {
|
21504
|
-
console.log("failed to advance head:", cid.toString());
|
21505
21586
|
continue;
|
21506
21587
|
}
|
21507
21588
|
}
|