@fireproof/core 0.19.121-dev → 0.20.0-dev-preview-05
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.
- package/README.md +13 -12
- package/deno/index.d.ts +7 -0
- package/deno/index.js +66 -0
- package/deno/index.js.map +1 -0
- package/deno/metafile-esm.json +1 -0
- package/deno.json +3 -4
- package/index.cjs +1797 -1431
- package/index.cjs.map +1 -1
- package/index.d.cts +760 -381
- package/index.d.ts +760 -381
- package/index.js +1976 -913
- package/index.js.map +1 -1
- package/metafile-cjs.json +1 -1
- package/metafile-esm.json +1 -1
- package/node/{node-filesystem.cjs → index.cjs} +17 -6
- package/node/index.cjs.map +1 -0
- package/node/index.d.cts +7 -0
- package/node/index.d.ts +7 -0
- package/node/{node-filesystem.js → index.js} +25 -5
- package/node/index.js.map +1 -0
- package/node/metafile-cjs.json +1 -1
- package/node/metafile-esm.json +1 -1
- package/package.json +27 -17
- package/react/index.cjs +22 -22
- package/react/index.cjs.map +1 -1
- package/react/index.d.cts +7 -7
- package/react/index.d.ts +7 -7
- package/react/index.js +22 -22
- package/react/index.js.map +1 -1
- package/react/metafile-cjs.json +1 -1
- package/react/metafile-esm.json +1 -1
- package/tests/blockstore/fp-envelope.test.ts-off +65 -0
- package/tests/blockstore/interceptor-gateway.test.ts +122 -0
- package/tests/blockstore/keyed-crypto-indexdb-file.test.ts +130 -0
- package/tests/blockstore/keyed-crypto.test.ts +75 -118
- package/tests/blockstore/loader.test.ts +18 -9
- package/tests/blockstore/store.test.ts +40 -31
- package/tests/blockstore/transaction.test.ts +14 -13
- package/tests/fireproof/all-gateway.test.ts +286 -216
- package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +324 -316
- package/tests/fireproof/crdt.test.ts +78 -19
- package/tests/fireproof/fireproof.test.ts +111 -92
- package/tests/fireproof/hello.test.ts +21 -17
- package/tests/fireproof/indexer.test.ts +74 -50
- package/tests/fireproof/{database.test.ts → ledger.test.ts} +241 -45
- package/tests/fireproof/multiple-ledger.test.ts +2 -2
- package/tests/fireproof/utils.test.ts +47 -6
- package/tests/gateway/file/loader-config.test.ts +307 -0
- package/tests/gateway/fp-envelope-serialize.test.ts +256 -0
- package/tests/gateway/indexdb/loader-config.test.ts +79 -0
- package/tests/helpers.ts +44 -17
- package/tests/react/useFireproof.test.tsx +2 -2
- package/tests/www/gallery.html +2 -2
- package/tests/www/todo-aws.html +1 -1
- package/tests/www/todo-ipfs.html +1 -1
- package/tests/www/todo-local.html +1 -1
- package/tests/www/todo.html +25 -4
- package/web/index.cjs +218 -0
- package/web/index.cjs.map +1 -0
- package/web/index.d.cts +30 -0
- package/web/index.d.ts +30 -0
- package/web/index.js +195 -0
- package/web/index.js.map +1 -0
- package/web/metafile-cjs.json +1 -1
- package/web/metafile-esm.json +1 -1
- package/chunk-7EWIAXTM.js +0 -7
- package/chunk-7EWIAXTM.js.map +0 -1
- package/chunk-F4FC6B2T.js +0 -63
- package/chunk-F4FC6B2T.js.map +0 -1
- package/chunk-PZ5AY32C.js +0 -10
- package/chunk-PZ5AY32C.js.map +0 -1
- package/chunk-RXC4JGJT.js +0 -301
- package/chunk-RXC4JGJT.js.map +0 -1
- package/gateway-C62S56GY.js +0 -66
- package/gateway-C62S56GY.js.map +0 -1
- package/gateway-VVS4QWDA.js +0 -145
- package/gateway-VVS4QWDA.js.map +0 -1
- package/key-bag-file-PWZ3QE7B.js +0 -55
- package/key-bag-file-PWZ3QE7B.js.map +0 -1
- package/key-bag-indexdb-SYG3YD4D.js +0 -51
- package/key-bag-indexdb-SYG3YD4D.js.map +0 -1
- package/node/chunk-4A4RAVNS.js +0 -17
- package/node/chunk-4A4RAVNS.js.map +0 -1
- package/node/mem-filesystem.cjs +0 -72
- package/node/mem-filesystem.cjs.map +0 -1
- package/node/mem-filesystem.d.cts +0 -25
- package/node/mem-filesystem.d.ts +0 -25
- package/node/mem-filesystem.js +0 -40
- package/node/mem-filesystem.js.map +0 -1
- package/node/node-filesystem.cjs.map +0 -1
- package/node/node-filesystem.d.cts +0 -35
- package/node/node-filesystem.d.ts +0 -35
- package/node/node-filesystem.js.map +0 -1
- package/tests/fireproof/config.test.ts +0 -172
- package/utils-ZVVGAXFE.js +0 -13
- package/utils-ZVVGAXFE.js.map +0 -1
- package/web/gateway-impl.cjs +0 -183
- package/web/gateway-impl.cjs.map +0 -1
- package/web/gateway-impl.d.cts +0 -31
- package/web/gateway-impl.d.ts +0 -31
- package/web/gateway-impl.js +0 -162
- package/web/gateway-impl.js.map +0 -1
- /package/tests/blockstore/{fragment-gateway.test.ts → fragment-gateway.test.ts-off} +0 -0
@@ -1,8 +1,22 @@
|
|
1
|
-
import { sleep } from "../helpers.js";
|
1
|
+
import { sleep, storageURL } from "../helpers.js";
|
2
2
|
import { docs } from "./fireproof.test.fixture.js";
|
3
3
|
import { CID } from "multiformats/cid";
|
4
4
|
|
5
|
-
import {
|
5
|
+
import {
|
6
|
+
ConfigOpts,
|
7
|
+
Ledger,
|
8
|
+
LedgerFactory,
|
9
|
+
DocResponse,
|
10
|
+
DocWithId,
|
11
|
+
Index,
|
12
|
+
IndexRows,
|
13
|
+
MapFn,
|
14
|
+
bs,
|
15
|
+
fireproof,
|
16
|
+
index,
|
17
|
+
isLedger,
|
18
|
+
ensureSuperThis,
|
19
|
+
} from "@fireproof/core";
|
6
20
|
|
7
21
|
export function carLogIncludesGroup(list: bs.AnyLink[], cid: CID) {
|
8
22
|
return list.some((c) => c.equals(cid));
|
@@ -24,7 +38,7 @@ describe("dreamcode", function () {
|
|
24
38
|
let ok: DocResponse;
|
25
39
|
let doc: DocWithId<Doc>;
|
26
40
|
let result: IndexRows<string, Doc>;
|
27
|
-
let db:
|
41
|
+
let db: Ledger;
|
28
42
|
const sthis = ensureSuperThis();
|
29
43
|
afterEach(async function () {
|
30
44
|
await db.close();
|
@@ -63,7 +77,7 @@ describe("public API", function () {
|
|
63
77
|
interface Doc {
|
64
78
|
foo: string;
|
65
79
|
}
|
66
|
-
let db:
|
80
|
+
let db: Ledger;
|
67
81
|
let ok: DocResponse;
|
68
82
|
let doc: DocWithId<Doc>;
|
69
83
|
let query: IndexRows<string, Doc>;
|
@@ -82,9 +96,9 @@ describe("public API", function () {
|
|
82
96
|
doc = await db.get("test");
|
83
97
|
query = await db.query<string, Doc>((doc) => doc.foo);
|
84
98
|
});
|
85
|
-
it("should be a
|
99
|
+
it("should be a ledger instance", function () {
|
86
100
|
expect(db).toBeTruthy();
|
87
|
-
expect(db
|
101
|
+
expect(isLedger(db)).toBeTruthy();
|
88
102
|
});
|
89
103
|
it("should put", function () {
|
90
104
|
expect(ok).toBeTruthy();
|
@@ -101,11 +115,11 @@ describe("public API", function () {
|
|
101
115
|
});
|
102
116
|
});
|
103
117
|
|
104
|
-
describe("basic
|
118
|
+
describe("basic ledger", function () {
|
105
119
|
interface Doc {
|
106
120
|
foo: string;
|
107
121
|
}
|
108
|
-
let db:
|
122
|
+
let db: Ledger<Doc>;
|
109
123
|
const sthis = ensureSuperThis();
|
110
124
|
afterEach(async function () {
|
111
125
|
await db.close();
|
@@ -113,7 +127,7 @@ describe("basic database", function () {
|
|
113
127
|
});
|
114
128
|
beforeEach(async function () {
|
115
129
|
await sthis.start();
|
116
|
-
db =
|
130
|
+
db = LedgerFactory("test-basic");
|
117
131
|
});
|
118
132
|
it("can put with id", async function () {
|
119
133
|
const ok = await db.put({ _id: "test", foo: "bar" });
|
@@ -126,10 +140,19 @@ describe("basic database", function () {
|
|
126
140
|
const got = await db.get<Doc>(ok.id);
|
127
141
|
expect(got.foo).toBe("bam");
|
128
142
|
});
|
143
|
+
it("can bulk an array", async function () {
|
144
|
+
const ok = await db.bulk([{ foo: "cool" }, { foo: "dude" }]);
|
145
|
+
expect(ok).toBeTruthy();
|
146
|
+
expect(ok.ids.length).toBe(2);
|
147
|
+
const got = await db.get<Doc>(ok.ids[0]);
|
148
|
+
expect(got.foo).toBe("cool");
|
149
|
+
const got2 = await db.get<Doc>(ok.ids[1]);
|
150
|
+
expect(got2.foo).toBe("dude");
|
151
|
+
});
|
129
152
|
it("can define an index", async function () {
|
130
153
|
const ok = await db.put({ _id: "test", foo: "bar" });
|
131
154
|
expect(ok).toBeTruthy();
|
132
|
-
const idx = index<string, { foo: string }>(
|
155
|
+
const idx = index<string, { foo: string }>(db, "test-index", (doc) => doc.foo);
|
133
156
|
const result = await idx.query();
|
134
157
|
expect(result).toBeTruthy();
|
135
158
|
expect(result.rows).toBeTruthy();
|
@@ -139,7 +162,7 @@ describe("basic database", function () {
|
|
139
162
|
it("can define an index with a default function", async function () {
|
140
163
|
const ok = await db.put({ _id: "test", foo: "bar" });
|
141
164
|
expect(ok).toBeTruthy();
|
142
|
-
const idx = index(
|
165
|
+
const idx = index(db, "foo");
|
143
166
|
const result = await idx.query();
|
144
167
|
expect(result).toBeTruthy();
|
145
168
|
expect(result.rows).toBeTruthy();
|
@@ -169,7 +192,7 @@ describe("basic database", function () {
|
|
169
192
|
});
|
170
193
|
|
171
194
|
describe("benchmarking with compaction", function () {
|
172
|
-
let db:
|
195
|
+
let db: Ledger;
|
173
196
|
const sthis = ensureSuperThis();
|
174
197
|
afterEach(async function () {
|
175
198
|
await db.close();
|
@@ -178,14 +201,14 @@ describe("benchmarking with compaction", function () {
|
|
178
201
|
beforeEach(async function () {
|
179
202
|
// erase the existing test data
|
180
203
|
await sthis.start();
|
181
|
-
db =
|
204
|
+
db = LedgerFactory("test-benchmark-compaction", { autoCompact: 3 });
|
182
205
|
});
|
183
|
-
it("insert during compaction", async function () {
|
206
|
+
it.skip("insert during compaction", async function () {
|
184
207
|
const ok = await db.put({ _id: "test", foo: "fast" });
|
185
208
|
expect(ok).toBeTruthy();
|
186
209
|
expect(ok.id).toBe("test");
|
187
|
-
expect(db.
|
188
|
-
expect(db.
|
210
|
+
expect(db.crdt.clock.head).toBeTruthy();
|
211
|
+
expect(db.crdt.clock.head.length).toBe(1);
|
189
212
|
|
190
213
|
const numDocs = 20;
|
191
214
|
const batchSize = 5;
|
@@ -206,7 +229,7 @@ describe("benchmarking with compaction", function () {
|
|
206
229
|
}),
|
207
230
|
);
|
208
231
|
}
|
209
|
-
const blocks = db.
|
232
|
+
const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
|
210
233
|
const loader = blocks.loader;
|
211
234
|
expect(loader).toBeTruthy();
|
212
235
|
|
@@ -222,9 +245,9 @@ describe("benchmarking with compaction", function () {
|
|
222
245
|
});
|
223
246
|
});
|
224
247
|
|
225
|
-
describe("benchmarking a
|
226
|
-
/** @type {
|
227
|
-
let db:
|
248
|
+
describe("benchmarking a ledger", function () {
|
249
|
+
/** @type {Ledger} */
|
250
|
+
let db: Ledger;
|
228
251
|
const sthis = ensureSuperThis();
|
229
252
|
afterEach(async function () {
|
230
253
|
await db.close();
|
@@ -233,8 +256,8 @@ describe("benchmarking a database", function () {
|
|
233
256
|
beforeEach(async function () {
|
234
257
|
await sthis.start();
|
235
258
|
// erase the existing test data
|
236
|
-
db =
|
237
|
-
// db =
|
259
|
+
db = LedgerFactory("test-benchmark", { autoCompact: 100000, public: true });
|
260
|
+
// db = LedgerFactory(null, {autoCompact: 100000})
|
238
261
|
});
|
239
262
|
|
240
263
|
// run benchmarking tests
|
@@ -247,8 +270,8 @@ describe("benchmarking a database", function () {
|
|
247
270
|
expect(ok).toBeTruthy();
|
248
271
|
expect(ok.id).toBe("test");
|
249
272
|
|
250
|
-
expect(db.
|
251
|
-
expect(db.
|
273
|
+
expect(db.crdt.clock.head).toBeTruthy();
|
274
|
+
expect(db.crdt.clock.head.length).toBe(1);
|
252
275
|
|
253
276
|
const numDocs = 2500;
|
254
277
|
const batchSize = 500;
|
@@ -284,7 +307,7 @@ describe("benchmarking a database", function () {
|
|
284
307
|
// equals(allDocsResult2.rows.length, numDocs+1)
|
285
308
|
|
286
309
|
// console.time("open new DB");
|
287
|
-
const newDb =
|
310
|
+
const newDb = LedgerFactory("test-benchmark", { autoCompact: 100000, public: true });
|
288
311
|
const doc = await newDb.get<{ foo: string }>("test");
|
289
312
|
expect(doc.foo).toBe("fast");
|
290
313
|
// console.timeEnd("open new DB");
|
@@ -314,7 +337,7 @@ describe("benchmarking a database", function () {
|
|
314
337
|
await db.put({ _id: "compacted-test", foo: "bar" });
|
315
338
|
|
316
339
|
// console.log('car log length', db._crdt.blockstore.loader.carLog.length)
|
317
|
-
const blocks = db.
|
340
|
+
const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
|
318
341
|
const loader = blocks.loader;
|
319
342
|
expect(loader).toBeTruthy();
|
320
343
|
expect(loader.carLog.length).toBe(2);
|
@@ -326,10 +349,10 @@ describe("benchmarking a database", function () {
|
|
326
349
|
await sleep(100);
|
327
350
|
|
328
351
|
// console.time("compacted reopen again");
|
329
|
-
const newDb2 =
|
352
|
+
const newDb2 = LedgerFactory("test-benchmark", { autoCompact: 100000, public: true });
|
330
353
|
const doc21 = await newDb2.get<FooType>("test");
|
331
354
|
expect(doc21.foo).toBe("fast");
|
332
|
-
const blocks2 = newDb2.
|
355
|
+
const blocks2 = newDb2.crdt.blockstore as bs.EncryptedBlockstore;
|
333
356
|
const loader2 = blocks2.loader;
|
334
357
|
expect(loader2).toBeTruthy();
|
335
358
|
|
@@ -378,11 +401,11 @@ describe("benchmarking a database", function () {
|
|
378
401
|
}, 20000000);
|
379
402
|
});
|
380
403
|
|
381
|
-
describe("Reopening a
|
404
|
+
describe("Reopening a ledger", function () {
|
382
405
|
interface Doc {
|
383
406
|
foo: string;
|
384
407
|
}
|
385
|
-
let db:
|
408
|
+
let db: Ledger;
|
386
409
|
const sthis = ensureSuperThis();
|
387
410
|
afterEach(async function () {
|
388
411
|
await db.close();
|
@@ -392,13 +415,13 @@ describe("Reopening a database", function () {
|
|
392
415
|
// erase the existing test data
|
393
416
|
await sthis.start();
|
394
417
|
|
395
|
-
db =
|
418
|
+
db = LedgerFactory("test-reopen", { autoCompact: 100000 });
|
396
419
|
const ok = await db.put({ _id: "test", foo: "bar" });
|
397
420
|
expect(ok).toBeTruthy();
|
398
421
|
expect(ok.id).toBe("test");
|
399
422
|
|
400
|
-
expect(db.
|
401
|
-
expect(db.
|
423
|
+
expect(db.crdt.clock.head).toBeDefined();
|
424
|
+
expect(db.crdt.clock.head.length).toBe(1);
|
402
425
|
});
|
403
426
|
|
404
427
|
it("should persist data", async function () {
|
@@ -407,18 +430,18 @@ describe("Reopening a database", function () {
|
|
407
430
|
});
|
408
431
|
|
409
432
|
it("should have the same data on reopen", async function () {
|
410
|
-
const db2 =
|
433
|
+
const db2 = LedgerFactory("test-reopen");
|
411
434
|
const doc = await db2.get<FooType>("test");
|
412
435
|
expect(doc.foo).toBe("bar");
|
413
|
-
expect(db2.
|
414
|
-
expect(db2.
|
415
|
-
expect(db2.
|
436
|
+
expect(db2.crdt.clock.head).toBeDefined();
|
437
|
+
expect(db2.crdt.clock.head.length).toBe(1);
|
438
|
+
expect(db2.crdt.clock.head).toEqual(db.crdt.clock.head);
|
416
439
|
await db2.close();
|
417
440
|
});
|
418
441
|
|
419
442
|
it("should have a car in the car log", async function () {
|
420
|
-
await db.
|
421
|
-
const blocks = db.
|
443
|
+
await db.crdt.ready();
|
444
|
+
const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
|
422
445
|
const loader = blocks.loader;
|
423
446
|
expect(loader).toBeDefined();
|
424
447
|
expect(loader.carLog).toBeDefined();
|
@@ -426,9 +449,9 @@ describe("Reopening a database", function () {
|
|
426
449
|
});
|
427
450
|
|
428
451
|
it("should have carlog after reopen", async function () {
|
429
|
-
const db2 =
|
430
|
-
await db2.
|
431
|
-
const blocks = db2.
|
452
|
+
const db2 = LedgerFactory("test-reopen");
|
453
|
+
await db2.crdt.ready();
|
454
|
+
const blocks = db2.crdt.blockstore as bs.EncryptedBlockstore;
|
432
455
|
const loader = blocks.loader;
|
433
456
|
expect(loader).toBeDefined();
|
434
457
|
expect(loader.carLog).toBeDefined();
|
@@ -439,10 +462,10 @@ describe("Reopening a database", function () {
|
|
439
462
|
it("faster, should have the same data on reopen after reopen and update", async function () {
|
440
463
|
for (let i = 0; i < 4; i++) {
|
441
464
|
// console.log('iteration', i)
|
442
|
-
const db =
|
465
|
+
const db = LedgerFactory("test-reopen");
|
443
466
|
// assert(db._crdt.xready());
|
444
|
-
await db.
|
445
|
-
const blocks = db.
|
467
|
+
await db.crdt.ready();
|
468
|
+
const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
|
446
469
|
const loader = blocks.loader;
|
447
470
|
expect(loader.carLog.length).toBe(i + 1);
|
448
471
|
const ok = await db.put({ _id: `test${i}`, fire: "proof".repeat(50 * 1024) });
|
@@ -458,11 +481,11 @@ describe("Reopening a database", function () {
|
|
458
481
|
for (let i = 0; i < 200; i++) {
|
459
482
|
// console.log("iteration", i);
|
460
483
|
// console.time("db open");
|
461
|
-
const db =
|
484
|
+
const db = LedgerFactory("test-reopen", { autoCompact: 1000 }); // try with 10
|
462
485
|
// assert(db._crdt.ready);
|
463
|
-
await db.
|
486
|
+
await db.crdt.ready();
|
464
487
|
// console.timeEnd("db open");
|
465
|
-
const blocks = db.
|
488
|
+
const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
|
466
489
|
const loader = blocks.loader;
|
467
490
|
expect(loader).toBeDefined();
|
468
491
|
expect(loader.carLog.length).toBe(i + 1);
|
@@ -480,11 +503,11 @@ describe("Reopening a database", function () {
|
|
480
503
|
}, 200000);
|
481
504
|
});
|
482
505
|
|
483
|
-
describe("Reopening a
|
506
|
+
describe("Reopening a ledger with indexes", function () {
|
484
507
|
interface Doc {
|
485
508
|
foo: string;
|
486
509
|
}
|
487
|
-
let db:
|
510
|
+
let db: Ledger;
|
488
511
|
let idx: Index<string, Doc>;
|
489
512
|
let didMap: boolean;
|
490
513
|
let mapFn: MapFn<Doc>;
|
@@ -505,13 +528,13 @@ describe("Reopening a database with indexes", function () {
|
|
505
528
|
didMap = true;
|
506
529
|
return doc.foo;
|
507
530
|
};
|
508
|
-
idx = index<string, Doc>(
|
531
|
+
idx = index<string, Doc>(db, "foo", mapFn);
|
509
532
|
});
|
510
533
|
|
511
534
|
it("should persist data", async function () {
|
512
535
|
const doc = await db.get<Doc>("test");
|
513
536
|
expect(doc.foo).toBe("bar");
|
514
|
-
const idx2 = index<string, Doc>(
|
537
|
+
const idx2 = index<string, Doc>(db, "foo");
|
515
538
|
expect(idx2).toBe(idx);
|
516
539
|
const result = await idx2.query();
|
517
540
|
expect(result).toBeTruthy();
|
@@ -522,7 +545,7 @@ describe("Reopening a database with indexes", function () {
|
|
522
545
|
});
|
523
546
|
|
524
547
|
it("should reuse the index", async function () {
|
525
|
-
const idx2 = index(
|
548
|
+
const idx2 = index(db, "foo", mapFn);
|
526
549
|
expect(idx2).toBe(idx);
|
527
550
|
const result = await idx2.query();
|
528
551
|
expect(result).toBeTruthy();
|
@@ -543,9 +566,9 @@ describe("Reopening a database with indexes", function () {
|
|
543
566
|
const db2 = fireproof("test-reopen-idx");
|
544
567
|
const doc = await db2.get<FooType>("test");
|
545
568
|
expect(doc.foo).toBe("bar");
|
546
|
-
expect(db2.
|
547
|
-
expect(db2.
|
548
|
-
expect(db2.
|
569
|
+
expect(db2.crdt.clock.head).toBeTruthy();
|
570
|
+
expect(db2.crdt.clock.head.length).toBe(1);
|
571
|
+
expect(db2.crdt.clock.head).toEqual(db.crdt.clock.head);
|
549
572
|
});
|
550
573
|
|
551
574
|
it("should have the same data on reopen after a query", async function () {
|
@@ -558,9 +581,9 @@ describe("Reopening a database with indexes", function () {
|
|
558
581
|
const db2 = fireproof("test-reopen-idx");
|
559
582
|
const doc = await db2.get<FooType>("test");
|
560
583
|
expect(doc.foo).toBe("bar");
|
561
|
-
expect(db2.
|
562
|
-
expect(db2.
|
563
|
-
expect(db2.
|
584
|
+
expect(db2.crdt.clock.head).toBeTruthy();
|
585
|
+
expect(db2.crdt.clock.head.length).toBe(1);
|
586
|
+
expect(db2.crdt.clock.head).toEqual(db.crdt.clock.head);
|
564
587
|
});
|
565
588
|
|
566
589
|
// it('should query the same data on reopen', async function () {
|
@@ -595,11 +618,11 @@ describe("basic js verify", function () {
|
|
595
618
|
expect(ok.id).toBe("test");
|
596
619
|
const ok2 = await db.put({ _id: "test2", foo: ["bar", "bam"] });
|
597
620
|
expect(ok2.id).toBe("test2");
|
598
|
-
const blocks = db.
|
621
|
+
const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
|
599
622
|
const loader = blocks.loader;
|
600
623
|
expect(loader).toBeTruthy();
|
601
624
|
const cid = loader.carLog[0][0];
|
602
|
-
const cid2 = db.
|
625
|
+
const cid2 = db.crdt.clock.head[0];
|
603
626
|
expect(cid).not.toBe(cid2);
|
604
627
|
expect(cid).not.toBe(cid2);
|
605
628
|
const cidList = [cid, cid2];
|
@@ -612,8 +635,8 @@ describe("basic js verify", function () {
|
|
612
635
|
});
|
613
636
|
|
614
637
|
describe("same workload twice, same CID", function () {
|
615
|
-
let dbA:
|
616
|
-
let dbB:
|
638
|
+
let dbA: Ledger;
|
639
|
+
let dbB: Ledger;
|
617
640
|
let headA: string;
|
618
641
|
let headB: string;
|
619
642
|
|
@@ -621,21 +644,17 @@ describe("same workload twice, same CID", function () {
|
|
621
644
|
// let configA: any;
|
622
645
|
// let configB: any;
|
623
646
|
|
624
|
-
|
625
|
-
|
626
|
-
|
627
|
-
|
628
|
-
|
629
|
-
|
630
|
-
|
631
|
-
|
632
|
-
|
633
|
-
|
634
|
-
|
635
|
-
// base: storageURL(sthis).build().setParam("storekey", "@test@"),
|
636
|
-
// },
|
637
|
-
// },
|
638
|
-
// };
|
647
|
+
const configA: ConfigOpts = {
|
648
|
+
storeUrls: {
|
649
|
+
base: storageURL(sthis).build().setParam("storekey", "@test@"),
|
650
|
+
},
|
651
|
+
};
|
652
|
+
|
653
|
+
const configB: ConfigOpts = {
|
654
|
+
storeUrls: {
|
655
|
+
base: storageURL(sthis).build().setParam("storekey", "@test@"),
|
656
|
+
},
|
657
|
+
};
|
639
658
|
|
640
659
|
afterEach(async function () {
|
641
660
|
await dbA.close();
|
@@ -646,23 +665,23 @@ describe("same workload twice, same CID", function () {
|
|
646
665
|
beforeEach(async function () {
|
647
666
|
let ok: DocResponse;
|
648
667
|
await sthis.start();
|
649
|
-
// todo this fails because the test setup doesn't properly configure both
|
650
|
-
dbA = fireproof("test-dual-workload-a");
|
668
|
+
// todo this fails because the test setup doesn't properly configure both ledgers to use the same key
|
669
|
+
dbA = fireproof("test-dual-workload-a", configA);
|
651
670
|
for (const doc of docs) {
|
652
671
|
ok = await dbA.put(doc);
|
653
672
|
expect(ok).toBeTruthy();
|
654
673
|
expect(ok.id).toBeTruthy();
|
655
674
|
}
|
656
|
-
headA = dbA.
|
675
|
+
headA = dbA.crdt.clock.head.toString();
|
657
676
|
|
658
|
-
// todo this fails because the test setup doesn't properly configure both
|
659
|
-
dbB = fireproof("test-dual-workload-b");
|
677
|
+
// todo this fails because the test setup doesn't properly configure both ledgers to use the same key
|
678
|
+
dbB = fireproof("test-dual-workload-b", configB);
|
660
679
|
for (const doc of docs) {
|
661
680
|
ok = await dbB.put(doc);
|
662
681
|
expect(ok).toBeTruthy();
|
663
682
|
expect(ok.id).toBeTruthy();
|
664
683
|
}
|
665
|
-
headB = dbB.
|
684
|
+
headB = dbB.crdt.clock.head.toString();
|
666
685
|
});
|
667
686
|
it("should have head A and B", async function () {
|
668
687
|
expect(headA).toBeTruthy();
|
@@ -671,34 +690,34 @@ describe("same workload twice, same CID", function () {
|
|
671
690
|
expect(headA.length).toBeGreaterThan(10);
|
672
691
|
});
|
673
692
|
it("should have same car log", async function () {
|
674
|
-
const logA = dbA.
|
693
|
+
const logA = dbA.crdt.blockstore.loader?.carLog;
|
675
694
|
expect(logA).toBeTruthy();
|
676
695
|
assert(logA);
|
677
|
-
expect(logA.length).toBe(
|
696
|
+
expect(logA.length).toBe(docs.length);
|
678
697
|
|
679
|
-
const logB = dbB.
|
698
|
+
const logB = dbB.crdt.blockstore.loader?.carLog;
|
680
699
|
expect(logB).toBeTruthy();
|
681
700
|
assert(logB);
|
682
|
-
expect(logB.length).toBe(
|
701
|
+
expect(logB.length).toBe(docs.length);
|
683
702
|
|
684
703
|
const logA2 = logA.map((c) => c.toString());
|
685
704
|
const logB2 = logB.map((c) => c.toString());
|
686
705
|
|
687
706
|
expect(logA2.length).toBe(logB2.length);
|
688
707
|
|
689
|
-
// todo this fails because the test setup doesn't properly configure both
|
708
|
+
// todo this fails because the test setup doesn't properly configure both ledgers to use the same key
|
690
709
|
// expect(logA2).toEqual(logB2);
|
691
710
|
});
|
692
711
|
it("should have same car log after compact", async function () {
|
693
712
|
await dbA.compact();
|
694
713
|
await dbB.compact();
|
695
714
|
|
696
|
-
const cmpLogA = dbA.
|
715
|
+
const cmpLogA = dbA.crdt.blockstore.loader?.carLog;
|
697
716
|
expect(cmpLogA).toBeTruthy();
|
698
717
|
assert(cmpLogA);
|
699
718
|
expect(cmpLogA.length).toBe(1);
|
700
719
|
|
701
|
-
const cmpLogB = dbB.
|
720
|
+
const cmpLogB = dbB.crdt.blockstore.loader?.carLog;
|
702
721
|
expect(cmpLogB).toBeTruthy();
|
703
722
|
assert(cmpLogB);
|
704
723
|
expect(cmpLogB.length).toBe(1);
|
@@ -708,7 +727,7 @@ describe("same workload twice, same CID", function () {
|
|
708
727
|
|
709
728
|
expect(cmpLogA2.length).toBe(cmpLogB2.length);
|
710
729
|
|
711
|
-
// todo this fails because the test setup doesn't properly configure both
|
730
|
+
// todo this fails because the test setup doesn't properly configure both ledgers to use the same key
|
712
731
|
// expect(cmpLogA2).toEqual(cmpLogB2);
|
713
732
|
});
|
714
733
|
});
|
@@ -1,31 +1,36 @@
|
|
1
|
-
import { fireproof
|
1
|
+
import { fireproof, Ledger, DocResponse, DocWithId, index, isLedger } from "@fireproof/core";
|
2
|
+
import { mockSuperThis } from "../helpers.js";
|
2
3
|
|
3
4
|
describe("Hello World Test", function () {
|
4
5
|
it("should pass the hello world test", function () {
|
5
|
-
const result =
|
6
|
+
const result = fireproof("hello"); // call to your library function
|
6
7
|
expect(result.name).toBe("hello");
|
7
8
|
});
|
8
9
|
});
|
9
10
|
|
10
|
-
describe("hello public API",
|
11
|
+
describe("hello public API", () => {
|
11
12
|
interface TestDoc {
|
12
13
|
foo: string;
|
13
14
|
}
|
14
|
-
let db:
|
15
|
+
let db: Ledger;
|
15
16
|
let ok: DocResponse;
|
16
17
|
let doc: DocWithId<TestDoc>;
|
17
|
-
|
18
|
+
// let idx: Index<string, TestDoc>;
|
19
|
+
const sthis = mockSuperThis();
|
20
|
+
afterEach(async () => {
|
18
21
|
await db.close();
|
19
22
|
await db.destroy();
|
20
23
|
});
|
21
|
-
beforeEach(async
|
22
|
-
|
24
|
+
beforeEach(async () => {
|
25
|
+
await sthis.start();
|
26
|
+
db = fireproof("test-public-api");
|
27
|
+
index<string, TestDoc>(db, "test-index", (doc) => doc.foo);
|
23
28
|
ok = await db.put({ _id: "test", foo: "bar" });
|
24
29
|
doc = await db.get("test");
|
25
30
|
});
|
26
|
-
it("should have a
|
31
|
+
it("should have a ledger", function () {
|
27
32
|
expect(db).toBeTruthy();
|
28
|
-
expect(db
|
33
|
+
expect(isLedger(db)).toBeTruthy();
|
29
34
|
});
|
30
35
|
it("should put", function () {
|
31
36
|
expect(ok).toBeTruthy();
|
@@ -34,23 +39,22 @@ describe("hello public API", function () {
|
|
34
39
|
it("should get", function () {
|
35
40
|
expect(doc.foo).toBe("bar");
|
36
41
|
});
|
37
|
-
it("should get when you open it again", async
|
42
|
+
it("should get when you open it again", async () => {
|
38
43
|
await db.close();
|
39
|
-
|
40
|
-
|
41
|
-
doc = await db2.get("test");
|
44
|
+
db = fireproof("test-public-api");
|
45
|
+
doc = await db.get("test");
|
42
46
|
expect(doc.foo).toBe("bar");
|
43
47
|
});
|
44
48
|
});
|
45
49
|
|
46
|
-
describe("Simplified Reopening a
|
47
|
-
let db:
|
50
|
+
describe("Simplified Reopening a ledger", function () {
|
51
|
+
let db: Ledger;
|
48
52
|
afterEach(async function () {
|
49
53
|
await db.close();
|
50
54
|
await db.destroy();
|
51
55
|
});
|
52
56
|
beforeEach(async function () {
|
53
|
-
db =
|
57
|
+
db = fireproof("test-reopen-simple");
|
54
58
|
const ok = await db.put({ _id: "test", foo: "bar" });
|
55
59
|
expect(ok).toBeTruthy();
|
56
60
|
expect(ok.id).toBe("test");
|
@@ -62,7 +66,7 @@ describe("Simplified Reopening a database", function () {
|
|
62
66
|
});
|
63
67
|
|
64
68
|
it("should have the same data on reopen", async function () {
|
65
|
-
const db2 =
|
69
|
+
const db2 = fireproof("test-reopen-simple");
|
66
70
|
const doc = await db2.get<{ foo: string }>("test");
|
67
71
|
expect(doc.foo).toBe("bar");
|
68
72
|
await db2.close();
|