@fireproof/core 0.19.99 → 0.19.101

Sign up to get free protection for your applications and to get access to all the features.
Files changed (62) hide show
  1. package/{chunk-OFGPKRCM.js → chunk-3EB3ENHT.js} +54 -25
  2. package/chunk-3EB3ENHT.js.map +1 -0
  3. package/chunk-HQ7D3PEU.js +61 -0
  4. package/chunk-HQ7D3PEU.js.map +1 -0
  5. package/chunk-PZ5AY32C.js +10 -0
  6. package/deno-filesystem-Q2IJ7YDR.js +57 -0
  7. package/deno-filesystem-Q2IJ7YDR.js.map +1 -0
  8. package/deno.json +3 -1
  9. package/{gateway-5FCWPX5W.js → gateway-GK5QZ6KP.js} +13 -12
  10. package/gateway-GK5QZ6KP.js.map +1 -0
  11. package/{gateway-H7UD6TNB.js → gateway-TQTGDRCN.js} +9 -8
  12. package/gateway-TQTGDRCN.js.map +1 -0
  13. package/index.cjs +2232 -1781
  14. package/index.cjs.map +1 -1
  15. package/index.d.cts +261 -117
  16. package/index.d.ts +261 -117
  17. package/index.global.js +12776 -11829
  18. package/index.global.js.map +1 -1
  19. package/index.js +1936 -1579
  20. package/index.js.map +1 -1
  21. package/{key-bag-file-WADZBHYG.js → key-bag-file-VOSSK46F.js} +4 -3
  22. package/{key-bag-file-WADZBHYG.js.map → key-bag-file-VOSSK46F.js.map} +1 -1
  23. package/{key-bag-indexdb-PGVAI3FJ.js → key-bag-indexdb-AXTQOSMC.js} +4 -3
  24. package/{key-bag-indexdb-PGVAI3FJ.js.map → key-bag-indexdb-AXTQOSMC.js.map} +1 -1
  25. package/key-bag-memory-LWE6ARPX.js +29 -0
  26. package/key-bag-memory-LWE6ARPX.js.map +1 -0
  27. package/metafile-cjs.json +1 -1
  28. package/metafile-esm.json +1 -1
  29. package/metafile-iife.json +1 -1
  30. package/{node-filesystem-INX4ZTHE.js → node-filesystem-CFRXFSO7.js} +6 -9
  31. package/node-filesystem-CFRXFSO7.js.map +1 -0
  32. package/package.json +4 -2
  33. package/tests/blockstore/keyed-crypto-indexdb-file.test.ts +129 -0
  34. package/tests/blockstore/keyed-crypto.test.ts +63 -227
  35. package/tests/blockstore/loader.test.ts +19 -11
  36. package/tests/blockstore/store.test.ts +23 -19
  37. package/tests/blockstore/transaction.test.ts +12 -12
  38. package/tests/fireproof/all-gateway.test.ts +201 -193
  39. package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +324 -316
  40. package/tests/fireproof/crdt.test.ts +67 -16
  41. package/tests/fireproof/database.test.ts +183 -21
  42. package/tests/fireproof/fireproof.test.ts +83 -74
  43. package/tests/fireproof/hello.test.ts +18 -14
  44. package/tests/fireproof/indexer.test.ts +53 -43
  45. package/tests/fireproof/utils.test.ts +18 -6
  46. package/tests/gateway/file/loader-config.test.ts +303 -0
  47. package/tests/gateway/indexdb/loader-config.test.ts +75 -0
  48. package/tests/helpers.ts +27 -9
  49. package/tests/react/useFireproof.test.tsx +1 -1
  50. package/{utils-QO2HIWGI.js → utils-STA2C35G.js} +4 -3
  51. package/utils-STA2C35G.js.map +1 -0
  52. package/chunk-OFGPKRCM.js.map +0 -1
  53. package/chunk-WS3YRPIA.js +0 -75
  54. package/chunk-WS3YRPIA.js.map +0 -1
  55. package/gateway-5FCWPX5W.js.map +0 -1
  56. package/gateway-H7UD6TNB.js.map +0 -1
  57. package/mem-filesystem-YPPJV7Q2.js +0 -41
  58. package/mem-filesystem-YPPJV7Q2.js.map +0 -1
  59. package/node-filesystem-INX4ZTHE.js.map +0 -1
  60. package/tests/fireproof/config.test.ts +0 -172
  61. /package/{utils-QO2HIWGI.js.map → chunk-PZ5AY32C.js.map} +0 -0
  62. /package/tests/fireproof/{fireproof.test.fixture.ts → fireproof.fixture.ts} +0 -0
@@ -1,8 +1,9 @@
1
- import { CRDT } from "@fireproof/core";
1
+ import { CRDT, DatabaseOpts, toStoreURIRuntime } from "@fireproof/core";
2
2
  import { bs } from "@fireproof/core";
3
3
  import { CRDTMeta, DocValue } from "@fireproof/core";
4
4
  import { Index, index } from "@fireproof/core";
5
5
  import { mockSuperThis } from "../helpers";
6
+ import { defaultKeyBagOpts } from "../../src/runtime/key-bag";
6
7
 
7
8
  describe("Fresh crdt", function () {
8
9
  let crdt: CRDT<{ hello: string } | { points: number }>;
@@ -13,7 +14,12 @@ describe("Fresh crdt", function () {
13
14
  });
14
15
  beforeEach(async function () {
15
16
  await sthis.start();
16
- crdt = new CRDT(sthis);
17
+ const dbOpts: DatabaseOpts = {
18
+ keyBag: defaultKeyBagOpts(sthis),
19
+ storeUrls: toStoreURIRuntime(sthis, "test-crdt-cold"),
20
+ storeEnDe: bs.ensureStoreEnDeFile({}),
21
+ };
22
+ crdt = new CRDT(sthis, dbOpts);
17
23
  });
18
24
  it("should have an empty head", async function () {
19
25
  const head = crdt.clock.head;
@@ -50,7 +56,12 @@ describe("CRDT with one record", function () {
50
56
 
51
57
  beforeEach(async function () {
52
58
  await sthis.start();
53
- crdt = new CRDT(sthis, `test@${sthis.nextId()}`);
59
+ const dbOpts: DatabaseOpts = {
60
+ keyBag: defaultKeyBagOpts(sthis),
61
+ storeUrls: toStoreURIRuntime(sthis, `test@${sthis.nextId()}`),
62
+ storeEnDe: bs.ensureStoreEnDeFile({}),
63
+ };
64
+ crdt = new CRDT(sthis, dbOpts);
54
65
  firstPut = await crdt.bulk([{ id: "hello", value: { hello: "world" } }]);
55
66
  });
56
67
  it("should have a one-element head", async function () {
@@ -100,7 +111,12 @@ describe("CRDT with a multi-write", function () {
100
111
  });
101
112
  beforeEach(async function () {
102
113
  await sthis.start();
103
- crdt = new CRDT(sthis);
114
+ const dbOpts: DatabaseOpts = {
115
+ keyBag: defaultKeyBagOpts(sthis),
116
+ storeUrls: toStoreURIRuntime(sthis, "test-crdt-cold"),
117
+ storeEnDe: bs.ensureStoreEnDeFile({}),
118
+ };
119
+ crdt = new CRDT(sthis, dbOpts);
104
120
  firstPut = await crdt.bulk([
105
121
  { id: "ace", value: { points: 11 } },
106
122
  { id: "king", value: { points: 10 } },
@@ -165,7 +181,12 @@ describe("CRDT with two multi-writes", function () {
165
181
  });
166
182
  beforeEach(async () => {
167
183
  await sthis.start();
168
- crdt = new CRDT(sthis);
184
+ const dbOpts: DatabaseOpts = {
185
+ keyBag: defaultKeyBagOpts(sthis),
186
+ storeUrls: toStoreURIRuntime(sthis, `test-multiple-writes@${sthis.nextId()}`),
187
+ storeEnDe: bs.ensureStoreEnDeFile({}),
188
+ };
189
+ crdt = new CRDT(sthis, dbOpts);
169
190
  firstPut = await crdt.bulk([
170
191
  { id: "ace", value: { points: 11 } },
171
192
  { id: "king", value: { points: 10 } },
@@ -213,7 +234,12 @@ describe("Compact a named CRDT with writes", function () {
213
234
  });
214
235
  beforeEach(async function () {
215
236
  await sthis.start();
216
- crdt = new CRDT(sthis, "named-crdt-compaction");
237
+ const dbOpts: DatabaseOpts = {
238
+ keyBag: defaultKeyBagOpts(sthis),
239
+ storeUrls: toStoreURIRuntime(sthis, `named-crdt-compaction`),
240
+ storeEnDe: bs.ensureStoreEnDeFile({}),
241
+ };
242
+ crdt = new CRDT(sthis, dbOpts);
217
243
  for (let i = 0; i < 10; i++) {
218
244
  const bulk = [
219
245
  { id: "ace", value: { points: 11 } },
@@ -269,12 +295,17 @@ describe("CRDT with an index", function () {
269
295
  });
270
296
  beforeEach(async function () {
271
297
  await sthis.start();
272
- crdt = new CRDT<CRDTTestType>(sthis);
298
+ const dbOpts: DatabaseOpts = {
299
+ keyBag: defaultKeyBagOpts(sthis),
300
+ storeUrls: toStoreURIRuntime(sthis, "test-crdt-cold"),
301
+ storeEnDe: bs.ensureStoreEnDeFile({}),
302
+ };
303
+ crdt = new CRDT<CRDTTestType>(sthis, dbOpts);
273
304
  await crdt.bulk([
274
305
  { id: "ace", value: { points: 11 } },
275
306
  { id: "king", value: { points: 10 } },
276
307
  ]);
277
- idx = await index<number, CRDTTestType>(sthis, { _crdt: crdt }, "points");
308
+ idx = await index<number, CRDTTestType>({ crdt: crdt }, "points");
278
309
  });
279
310
  it("should query the data", async function () {
280
311
  const got = await idx.query({ range: [9, 12] });
@@ -283,7 +314,7 @@ describe("CRDT with an index", function () {
283
314
  expect(got.rows[0].key).toBe(10);
284
315
  });
285
316
  it("should register the index", async function () {
286
- const rIdx = await index<number, CRDTTestType>(sthis, { _crdt: crdt }, "points");
317
+ const rIdx = await index<number, CRDTTestType>({ crdt: crdt }, "points");
287
318
  expect(rIdx).toBeTruthy();
288
319
  expect(rIdx.name).toBe("points");
289
320
  const got = await rIdx.query({ range: [9, 12] });
@@ -292,7 +323,7 @@ describe("CRDT with an index", function () {
292
323
  expect(got.rows[0].key).toBe(10);
293
324
  });
294
325
  it("creating a different index with same name should not work", async function () {
295
- const e = await index(sthis, { _crdt: crdt }, "points", (doc) => doc._id)
326
+ const e = await index({ crdt: crdt }, "points", (doc) => doc._id)
296
327
  .query()
297
328
  .catch((err) => err);
298
329
  expect(e.message).toMatch(/cannot apply/);
@@ -315,15 +346,25 @@ describe("Loader with a committed transaction", function () {
315
346
  });
316
347
  beforeEach(async function () {
317
348
  await sthis.start();
318
- crdt = new CRDT(sthis, dbname);
349
+ const dbOpts: DatabaseOpts = {
350
+ keyBag: defaultKeyBagOpts(sthis),
351
+ storeUrls: toStoreURIRuntime(sthis, dbname),
352
+ storeEnDe: bs.ensureStoreEnDeFile({}),
353
+ };
354
+ crdt = new CRDT(sthis, dbOpts);
319
355
  blockstore = crdt.blockstore as bs.EncryptedBlockstore;
320
356
  expect(blockstore.loader).toBeTruthy();
321
357
  loader = blockstore.loader;
322
358
  done = await crdt.bulk([{ id: "foo", value: { foo: "bar" } }]);
323
359
  });
324
- it("should have a name", function () {
325
- expect(loader.name).toBe(dbname);
326
- });
360
+ // it("should have a name", function () {
361
+ // expect(loader.ebOpts.storeUrls).toEqual({
362
+ // data: "file://./dist/fp-dir-file?name=test-loader&store=data&storekey=%40test-loader-data%40&suffix=.car&urlGen=fromEnv",
363
+ // file: "file://./dist/fp-dir-file?name=test-loader&store=data&storekey=%40test-loader-data%40&urlGen=fromEnv",
364
+ // meta: "file://./dist/fp-dir-file?name=test-loader&store=meta&storekey=%40test-loader-meta%40&urlGen=fromEnv",
365
+ // wal: "file://./dist/fp-dir-file?name=test-loader&store=wal&storekey=%40test-loader-wal%40&urlGen=fromEnv",
366
+ // });
367
+ // });
327
368
  it("should commit a transaction", function () {
328
369
  expect(done.head).toBeTruthy();
329
370
  // expect(done.cars).toBeTruthy();
@@ -358,7 +399,12 @@ describe("Loader with two committed transactions", function () {
358
399
  });
359
400
  beforeEach(async function () {
360
401
  await sthis.start();
361
- crdt = new CRDT(sthis, "test-loader");
402
+ const dbOpts: DatabaseOpts = {
403
+ keyBag: defaultKeyBagOpts(sthis),
404
+ storeUrls: toStoreURIRuntime(sthis, "test-loader"),
405
+ storeEnDe: bs.ensureStoreEnDeFile({}),
406
+ };
407
+ crdt = new CRDT(sthis, dbOpts);
362
408
  blockstore = crdt.blockstore as bs.EncryptedBlockstore;
363
409
  expect(blockstore.loader).toBeTruthy();
364
410
  loader = blockstore.loader;
@@ -408,7 +454,12 @@ describe("Loader with many committed transactions", function () {
408
454
  });
409
455
  beforeEach(async function () {
410
456
  await sthis.start();
411
- crdt = new CRDT(sthis, "test-loader-many");
457
+ const dbOpts: DatabaseOpts = {
458
+ keyBag: defaultKeyBagOpts(sthis),
459
+ storeUrls: toStoreURIRuntime(sthis, "test-loader-many"),
460
+ storeEnDe: bs.ensureStoreEnDeFile({}),
461
+ };
462
+ crdt = new CRDT(sthis, dbOpts);
412
463
  blockstore = crdt.blockstore as bs.EncryptedBlockstore;
413
464
  expect(blockstore.loader).toBeTruthy();
414
465
  loader = blockstore.loader;
@@ -1,5 +1,19 @@
1
+ import { URI } from "@adviser/cement";
1
2
  import { buildBlobFiles, FileWithCid, mockSuperThis } from "../helpers.js";
2
- import { bs, Database, DocResponse, DocFileMeta, DocWithId, DocFiles } from "@fireproof/core";
3
+ import {
4
+ bs,
5
+ Database,
6
+ DocResponse,
7
+ DocFileMeta,
8
+ DocWithId,
9
+ DocFiles,
10
+ toStoreURIRuntime,
11
+ keyConfigOpts,
12
+ DatabaseFactory,
13
+ DatabaseShell,
14
+ } from "@fireproof/core";
15
+ import { fileGatewayFactoryItem } from "../../src/blockstore/register-store-protocol.js";
16
+ import { FILESTORE_VERSION } from "../../src/runtime/index.js";
3
17
 
4
18
  describe("basic Database", () => {
5
19
  let db: Database;
@@ -10,7 +24,9 @@ describe("basic Database", () => {
10
24
  });
11
25
  beforeEach(async () => {
12
26
  await sthis.start();
13
- db = new Database();
27
+ db = DatabaseFactory(undefined, {
28
+ logger: sthis.logger,
29
+ });
14
30
  });
15
31
  it("should put", async () => {
16
32
  /** @type {Doc} */
@@ -38,7 +54,7 @@ describe("basic Database with record", function () {
38
54
  interface Doc {
39
55
  readonly value: string;
40
56
  }
41
- let db: Database;
57
+ let db: DatabaseShell;
42
58
  const sthis = mockSuperThis();
43
59
  afterEach(async () => {
44
60
  await db.close();
@@ -46,7 +62,7 @@ describe("basic Database with record", function () {
46
62
  });
47
63
  beforeEach(async function () {
48
64
  await sthis.start();
49
- db = new Database();
65
+ db = DatabaseFactory("factory-name") as DatabaseShell;
50
66
  const ok = await db.put<Doc>({ _id: "hello", value: "world" });
51
67
  expect(ok.id).toBe("hello");
52
68
  });
@@ -78,13 +94,13 @@ describe("basic Database with record", function () {
78
94
  expect(rows[0].value._id).toBe("hello");
79
95
  });
80
96
  it("is not persisted", async function () {
81
- const db2 = new Database();
97
+ const db2 = DatabaseFactory("factory-name") as DatabaseShell;
82
98
  const { rows } = await db2.changes([]);
83
- expect(rows.length).toBe(0);
84
- const doc = await db2.get("hello").catch((e) => e);
85
- expect(doc.message).toBeTruthy();
99
+ expect(rows.length).toBe(1);
100
+ expect(db2.ref).toBe(db.ref);
101
+ const doc = await db2.get<Doc>("hello").catch((e) => e);
102
+ expect(doc.value).toBe("world");
86
103
  await db2.close();
87
- await db2.destroy();
88
104
  });
89
105
  });
90
106
 
@@ -100,7 +116,7 @@ describe("named Database with record", function () {
100
116
  });
101
117
  beforeEach(async function () {
102
118
  await sthis.start();
103
- db = new Database("test-db-name");
119
+ db = DatabaseFactory("test-db-name");
104
120
  /** @type {Doc} */
105
121
  const doc = { _id: "hello", value: "world" };
106
122
  const ok = await db.put(doc);
@@ -136,7 +152,7 @@ describe("named Database with record", function () {
136
152
  it("should have a key", async function () {
137
153
  const { rows } = await db.changes([]);
138
154
  expect(rows.length).toBe(1);
139
- const blocks = db._crdt.blockstore as bs.EncryptedBlockstore;
155
+ const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
140
156
  const loader = blocks.loader;
141
157
  expect(loader).toBeTruthy();
142
158
  await loader.ready();
@@ -227,7 +243,7 @@ describe("basic Database parallel writes / public", function () {
227
243
  });
228
244
  beforeEach(async function () {
229
245
  await sthis.start();
230
- db = new Database("test-parallel-writes", { public: true });
246
+ db = DatabaseFactory("test-parallel-writes", { public: true });
231
247
  for (let i = 0; i < 10; i++) {
232
248
  const doc = { _id: `id-${i}`, hello: "world" };
233
249
  writes.push(db.put(doc));
@@ -235,7 +251,7 @@ describe("basic Database parallel writes / public", function () {
235
251
  await Promise.all(writes);
236
252
  });
237
253
  it("should have one head", function () {
238
- const crdt = db._crdt;
254
+ const crdt = db.crdt;
239
255
  expect(crdt.clock.head.length).toBe(1);
240
256
  });
241
257
  it("should write all", async function () {
@@ -272,7 +288,7 @@ describe("basic Database parallel writes / public", function () {
272
288
  });
273
289
  it("has changes", async function () {
274
290
  const { rows, clock } = await db.changes([]);
275
- expect(clock[0]).toBe(db._crdt.clock.head[0]);
291
+ expect(clock[0]).toBe(db.crdt.clock.head[0]);
276
292
  expect(rows.length).toBe(10);
277
293
  // rows.sort((a, b) => a.key.localeCompare(b.key));
278
294
  for (let i = 0; i < 10; i++) {
@@ -283,9 +299,9 @@ describe("basic Database parallel writes / public", function () {
283
299
  it("should not have a key", async function () {
284
300
  const { rows } = await db.changes([]);
285
301
  expect(rows.length).toBe(10);
286
- expect(db.opts.public).toBeTruthy();
287
- expect(db._crdt.opts.public).toBeTruthy();
288
- const blocks = db._crdt.blockstore as bs.EncryptedBlockstore;
302
+ // expect(db.opts.public).toBeTruthy();
303
+ // expect(db._crdt.opts.public).toBeTruthy();
304
+ const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
289
305
  const loader = blocks.loader;
290
306
  expect(loader).toBeTruthy();
291
307
  await loader.ready();
@@ -307,7 +323,7 @@ describe("basic Database with subscription", function () {
307
323
  });
308
324
  beforeEach(async function () {
309
325
  await sthis.start();
310
- db = new Database();
326
+ db = DatabaseFactory("factory-name");
311
327
  didRun = 0;
312
328
  waitForSub = new Promise((resolve) => {
313
329
  unsubscribe = db.subscribe((docs) => {
@@ -351,9 +367,8 @@ describe("basic Database with no update subscription", function () {
351
367
  });
352
368
  beforeEach(async function () {
353
369
  await sthis.start();
354
- db = new Database();
370
+ db = DatabaseFactory("factory-name");
355
371
  didRun = 0;
356
-
357
372
  unsubscribe = db.subscribe(() => {
358
373
  didRun++;
359
374
  });
@@ -390,7 +405,7 @@ describe("database with files input", () => {
390
405
  beforeEach(async function () {
391
406
  await sthis.start();
392
407
  imagefiles = await buildBlobFiles();
393
- db = new Database("fireproof-with-images");
408
+ db = DatabaseFactory("fireproof-with-images");
394
409
  const doc = {
395
410
  _id: "images-main",
396
411
  type: "files",
@@ -472,3 +487,150 @@ describe("database with files input", () => {
472
487
  expect(file.size).toBe(imagefiles[0].file.size);
473
488
  });
474
489
  });
490
+
491
+ describe("StoreURIRuntime", () => {
492
+ const sthis = mockSuperThis();
493
+ let safeEnv: string | undefined;
494
+ let unreg: () => void;
495
+ beforeEach(async () => {
496
+ await sthis.start();
497
+ safeEnv = sthis.env.get("FP_STORAGE_URL");
498
+ sthis.env.set("FP_STORAGE_URL", "my://bla/storage");
499
+ unreg = bs.registerStoreProtocol({
500
+ protocol: "murks",
501
+ isDefault: true,
502
+ defaultURI: function (): URI {
503
+ return URI.from("murks://fp");
504
+ },
505
+ gateway: function (): Promise<bs.Gateway> {
506
+ throw new Error("Function not implemented.");
507
+ },
508
+ test: function (): Promise<bs.TestGateway> {
509
+ throw new Error("Function not implemented.");
510
+ },
511
+ });
512
+ });
513
+ afterEach(() => {
514
+ sthis.env.set("FP_STORAGE_URL", safeEnv);
515
+ unreg();
516
+ });
517
+ it("default toStoreURIRuntime", () => {
518
+ expect(JSON.parse(JSON.stringify(toStoreURIRuntime(sthis, "test")))).toEqual({
519
+ data: {
520
+ data: "my://bla/storage?name=test&store=data&storekey=%40test-data%40&suffix=.car&urlGen=fromEnv",
521
+ file: "my://bla/storage?name=test&store=data&storekey=%40test-data%40&urlGen=fromEnv",
522
+ meta: "my://bla/storage?name=test&store=meta&storekey=%40test-meta%40&urlGen=fromEnv",
523
+ wal: "my://bla/storage?name=test&store=wal&storekey=%40test-wal%40&urlGen=fromEnv",
524
+ },
525
+ idx: {
526
+ data: "my://bla/storage?index=idx&name=test&store=data&storekey=%40test-data-idx%40&suffix=.car&urlGen=fromEnv",
527
+ file: "my://bla/storage?index=idx&name=test&store=data&storekey=%40test-data-idx%40&urlGen=fromEnv",
528
+ meta: "my://bla/storage?index=idx&name=test&store=meta&storekey=%40test-meta-idx%40&urlGen=fromEnv",
529
+ wal: "my://bla/storage?index=idx&name=test&store=wal&storekey=%40test-wal-idx%40&urlGen=fromEnv",
530
+ },
531
+ });
532
+ // keyConfigOpts(sthis: SuperThis, name: string, opts?: ConfigOpts): string {
533
+ });
534
+ it("no name toStoreURIRuntime", () => {
535
+ expect(JSON.parse(JSON.stringify(toStoreURIRuntime(sthis)))).toEqual({
536
+ data: {
537
+ data: "my://bla/storage?name=storage&store=data&storekey=%40storage-data%40&suffix=.car&urlGen=fromEnv",
538
+ file: "my://bla/storage?name=storage&store=data&storekey=%40storage-data%40&urlGen=fromEnv",
539
+ meta: "my://bla/storage?name=storage&store=meta&storekey=%40storage-meta%40&urlGen=fromEnv",
540
+ wal: "my://bla/storage?name=storage&store=wal&storekey=%40storage-wal%40&urlGen=fromEnv",
541
+ },
542
+ idx: {
543
+ data: "my://bla/storage?index=idx&name=storage&store=data&storekey=%40storage-data-idx%40&suffix=.car&urlGen=fromEnv",
544
+ file: "my://bla/storage?index=idx&name=storage&store=data&storekey=%40storage-data-idx%40&urlGen=fromEnv",
545
+ meta: "my://bla/storage?index=idx&name=storage&store=meta&storekey=%40storage-meta-idx%40&urlGen=fromEnv",
546
+ wal: "my://bla/storage?index=idx&name=storage&store=wal&storekey=%40storage-wal-idx%40&urlGen=fromEnv",
547
+ },
548
+ });
549
+ });
550
+
551
+ it("set toStoreURIRuntime", () => {
552
+ expect(
553
+ JSON.parse(
554
+ JSON.stringify(
555
+ toStoreURIRuntime(sthis, "xxx", {
556
+ base: "my://storage-base",
557
+ data: {
558
+ data: "my://storage-data?name=yyy",
559
+ meta: "my://storage-meta",
560
+ },
561
+ idx: {
562
+ data: "my://storage-idx-data?name=yyy&index=bla",
563
+ meta: "my://storage-idx-meta",
564
+ },
565
+ }),
566
+ ),
567
+ ),
568
+ ).toEqual({
569
+ data: {
570
+ data: "my://storage-data?name=yyy&store=data&storekey=%40yyy-data%40&suffix=.car",
571
+ file: "my://storage-data?name=yyy&store=data&storekey=%40yyy-data%40",
572
+ meta: "my://storage-meta?name=storage-meta&store=meta&storekey=%40storage-meta-meta%40",
573
+ wal: "my://storage-base?name=xxx&store=wal&storekey=%40xxx-wal%40",
574
+ },
575
+ idx: {
576
+ data: "my://storage-idx-data?index=bla&name=yyy&store=data&storekey=%40yyy-data-idx%40&suffix=.car",
577
+ file: "my://storage-idx-data?index=bla&name=yyy&store=data&storekey=%40yyy-data-idx%40",
578
+ meta: "my://storage-idx-meta?index=idx&name=storage-idx-meta&store=meta&storekey=%40storage-idx-meta-meta-idx%40",
579
+ wal: "my://storage-base?index=idx&name=xxx&store=wal&storekey=%40xxx-wal-idx%40",
580
+ },
581
+ });
582
+ });
583
+
584
+ it("default-reg toStoreURIRuntime", () => {
585
+ sthis.env.delete("FP_STORAGE_URL");
586
+ expect(JSON.parse(JSON.stringify(toStoreURIRuntime(sthis, "maxi")))).toEqual({
587
+ data: {
588
+ data: "murks://fp?name=maxi&store=data&storekey=%40maxi-data%40&suffix=.car&urlGen=default",
589
+ file: "murks://fp?name=maxi&store=data&storekey=%40maxi-data%40&urlGen=default",
590
+ meta: "murks://fp?name=maxi&store=meta&storekey=%40maxi-meta%40&urlGen=default",
591
+ wal: "murks://fp?name=maxi&store=wal&storekey=%40maxi-wal%40&urlGen=default",
592
+ },
593
+ idx: {
594
+ data: "murks://fp?index=idx&name=maxi&store=data&storekey=%40maxi-data-idx%40&suffix=.car&urlGen=default",
595
+ file: "murks://fp?index=idx&name=maxi&store=data&storekey=%40maxi-data-idx%40&urlGen=default",
596
+ meta: "murks://fp?index=idx&name=maxi&store=meta&storekey=%40maxi-meta-idx%40&urlGen=default",
597
+ wal: "murks://fp?index=idx&name=maxi&store=wal&storekey=%40maxi-wal-idx%40&urlGen=default",
598
+ },
599
+ });
600
+ });
601
+
602
+ it("keyConfigOpts", () => {
603
+ expect(JSON.parse(keyConfigOpts(sthis, "test"))).toEqual([
604
+ {
605
+ name: "test",
606
+ },
607
+ {
608
+ stores: [
609
+ {
610
+ data: {
611
+ data: "my://bla/storage?name=test&store=data&storekey=%40test-data%40&suffix=.car&urlGen=fromEnv",
612
+ file: "my://bla/storage?name=test&store=data&storekey=%40test-data%40&urlGen=fromEnv",
613
+ meta: "my://bla/storage?name=test&store=meta&storekey=%40test-meta%40&urlGen=fromEnv",
614
+ wal: "my://bla/storage?name=test&store=wal&storekey=%40test-wal%40&urlGen=fromEnv",
615
+ },
616
+ },
617
+ {
618
+ idx: {
619
+ data: "my://bla/storage?index=idx&name=test&store=data&storekey=%40test-data-idx%40&suffix=.car&urlGen=fromEnv",
620
+ file: "my://bla/storage?index=idx&name=test&store=data&storekey=%40test-data-idx%40&urlGen=fromEnv",
621
+ meta: "my://bla/storage?index=idx&name=test&store=meta&storekey=%40test-meta-idx%40&urlGen=fromEnv",
622
+ wal: "my://bla/storage?index=idx&name=test&store=wal&storekey=%40test-wal-idx%40&urlGen=fromEnv",
623
+ },
624
+ },
625
+ ],
626
+ },
627
+ ]);
628
+ });
629
+
630
+ it("check file protocol defaultURI", () => {
631
+ const gw = fileGatewayFactoryItem();
632
+ expect(gw.defaultURI(sthis).toString()).toBe(
633
+ `file://${sthis.env.get("HOME")}/.fireproof/${FILESTORE_VERSION.replace(/-.*$/, "")}`,
634
+ );
635
+ });
636
+ });