@fireproof/core 0.19.100 → 0.19.101
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/{chunk-OFGPKRCM.js → chunk-3EB3ENHT.js} +54 -25
- package/chunk-3EB3ENHT.js.map +1 -0
- package/chunk-HQ7D3PEU.js +61 -0
- package/chunk-HQ7D3PEU.js.map +1 -0
- package/chunk-PZ5AY32C.js +10 -0
- package/deno-filesystem-Q2IJ7YDR.js +57 -0
- package/deno-filesystem-Q2IJ7YDR.js.map +1 -0
- package/{gateway-5FCWPX5W.js → gateway-GK5QZ6KP.js} +13 -12
- package/gateway-GK5QZ6KP.js.map +1 -0
- package/{gateway-H7UD6TNB.js → gateway-TQTGDRCN.js} +9 -8
- package/gateway-TQTGDRCN.js.map +1 -0
- package/index.cjs +2158 -1718
- package/index.cjs.map +1 -1
- package/index.d.cts +261 -117
- package/index.d.ts +261 -117
- package/index.global.js +11834 -11354
- package/index.global.js.map +1 -1
- package/index.js +1865 -1519
- package/index.js.map +1 -1
- package/{key-bag-file-WADZBHYG.js → key-bag-file-VOSSK46F.js} +4 -3
- package/{key-bag-file-WADZBHYG.js.map → key-bag-file-VOSSK46F.js.map} +1 -1
- package/{key-bag-indexdb-PGVAI3FJ.js → key-bag-indexdb-AXTQOSMC.js} +4 -3
- package/{key-bag-indexdb-PGVAI3FJ.js.map → key-bag-indexdb-AXTQOSMC.js.map} +1 -1
- package/key-bag-memory-LWE6ARPX.js +29 -0
- package/key-bag-memory-LWE6ARPX.js.map +1 -0
- package/metafile-cjs.json +1 -1
- package/metafile-esm.json +1 -1
- package/metafile-iife.json +1 -1
- package/{node-filesystem-INX4ZTHE.js → node-filesystem-CFRXFSO7.js} +6 -9
- package/node-filesystem-CFRXFSO7.js.map +1 -0
- package/package.json +1 -1
- package/tests/blockstore/keyed-crypto-indexdb-file.test.ts +129 -0
- package/tests/blockstore/keyed-crypto.test.ts +63 -227
- package/tests/blockstore/loader.test.ts +19 -11
- package/tests/blockstore/store.test.ts +23 -19
- package/tests/blockstore/transaction.test.ts +12 -12
- package/tests/fireproof/all-gateway.test.ts +201 -193
- package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +324 -316
- package/tests/fireproof/crdt.test.ts +67 -16
- package/tests/fireproof/database.test.ts +183 -21
- package/tests/fireproof/fireproof.test.ts +83 -74
- package/tests/fireproof/hello.test.ts +18 -14
- package/tests/fireproof/indexer.test.ts +53 -43
- package/tests/fireproof/utils.test.ts +18 -6
- package/tests/gateway/file/loader-config.test.ts +303 -0
- package/tests/gateway/indexdb/loader-config.test.ts +75 -0
- package/tests/helpers.ts +27 -9
- package/tests/react/useFireproof.test.tsx +1 -1
- package/{utils-QO2HIWGI.js → utils-STA2C35G.js} +4 -3
- package/utils-STA2C35G.js.map +1 -0
- package/chunk-OFGPKRCM.js.map +0 -1
- package/chunk-WS3YRPIA.js +0 -75
- package/chunk-WS3YRPIA.js.map +0 -1
- package/gateway-5FCWPX5W.js.map +0 -1
- package/gateway-H7UD6TNB.js.map +0 -1
- package/mem-filesystem-YPPJV7Q2.js +0 -41
- package/mem-filesystem-YPPJV7Q2.js.map +0 -1
- package/node-filesystem-INX4ZTHE.js.map +0 -1
- package/tests/fireproof/config.test.ts +0 -172
- /package/{utils-QO2HIWGI.js.map → chunk-PZ5AY32C.js.map} +0 -0
- /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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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>(
|
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>(
|
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(
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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 {
|
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 =
|
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:
|
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 =
|
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 =
|
97
|
+
const db2 = DatabaseFactory("factory-name") as DatabaseShell;
|
82
98
|
const { rows } = await db2.changes([]);
|
83
|
-
expect(rows.length).toBe(
|
84
|
-
|
85
|
-
|
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 =
|
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.
|
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 =
|
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.
|
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.
|
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.
|
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 =
|
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 =
|
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 =
|
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
|
+
});
|