@fireproof/core 0.19.101 → 0.19.102

Sign up to get free protection for your applications and to get access to all the features.
Files changed (61) hide show
  1. package/{chunk-3EB3ENHT.js → chunk-OFGPKRCM.js} +25 -54
  2. package/chunk-OFGPKRCM.js.map +1 -0
  3. package/chunk-WS3YRPIA.js +75 -0
  4. package/chunk-WS3YRPIA.js.map +1 -0
  5. package/{gateway-GK5QZ6KP.js → gateway-5FCWPX5W.js} +12 -13
  6. package/gateway-5FCWPX5W.js.map +1 -0
  7. package/{gateway-TQTGDRCN.js → gateway-H7UD6TNB.js} +8 -9
  8. package/gateway-H7UD6TNB.js.map +1 -0
  9. package/index.cjs +1571 -1992
  10. package/index.cjs.map +1 -1
  11. package/index.d.cts +117 -257
  12. package/index.d.ts +117 -257
  13. package/index.global.js +12280 -12741
  14. package/index.global.js.map +1 -1
  15. package/index.js +1463 -1790
  16. package/index.js.map +1 -1
  17. package/{key-bag-file-VOSSK46F.js → key-bag-file-WADZBHYG.js} +3 -4
  18. package/{key-bag-file-VOSSK46F.js.map → key-bag-file-WADZBHYG.js.map} +1 -1
  19. package/{key-bag-indexdb-AXTQOSMC.js → key-bag-indexdb-PGVAI3FJ.js} +3 -4
  20. package/{key-bag-indexdb-AXTQOSMC.js.map → key-bag-indexdb-PGVAI3FJ.js.map} +1 -1
  21. package/mem-filesystem-YPPJV7Q2.js +41 -0
  22. package/mem-filesystem-YPPJV7Q2.js.map +1 -0
  23. package/metafile-cjs.json +1 -1
  24. package/metafile-esm.json +1 -1
  25. package/metafile-iife.json +1 -1
  26. package/{node-filesystem-CFRXFSO7.js → node-filesystem-INX4ZTHE.js} +9 -6
  27. package/node-filesystem-INX4ZTHE.js.map +1 -0
  28. package/package.json +1 -1
  29. package/tests/blockstore/keyed-crypto.test.ts +227 -63
  30. package/tests/blockstore/loader.test.ts +11 -19
  31. package/tests/blockstore/store.test.ts +19 -23
  32. package/tests/blockstore/transaction.test.ts +12 -12
  33. package/tests/fireproof/all-gateway.test.ts +193 -201
  34. package/tests/fireproof/cars/bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i.ts +316 -324
  35. package/tests/fireproof/config.test.ts +172 -0
  36. package/tests/fireproof/crdt.test.ts +16 -67
  37. package/tests/fireproof/database.test.ts +21 -183
  38. package/tests/fireproof/fireproof.test.ts +74 -83
  39. package/tests/fireproof/hello.test.ts +14 -18
  40. package/tests/fireproof/indexer.test.ts +43 -53
  41. package/tests/fireproof/utils.test.ts +6 -18
  42. package/tests/helpers.ts +9 -27
  43. package/tests/react/useFireproof.test.tsx +1 -1
  44. package/{utils-STA2C35G.js → utils-QO2HIWGI.js} +3 -4
  45. package/chunk-3EB3ENHT.js.map +0 -1
  46. package/chunk-HQ7D3PEU.js +0 -61
  47. package/chunk-HQ7D3PEU.js.map +0 -1
  48. package/chunk-PZ5AY32C.js +0 -10
  49. package/deno-filesystem-Q2IJ7YDR.js +0 -57
  50. package/deno-filesystem-Q2IJ7YDR.js.map +0 -1
  51. package/gateway-GK5QZ6KP.js.map +0 -1
  52. package/gateway-TQTGDRCN.js.map +0 -1
  53. package/key-bag-memory-LWE6ARPX.js +0 -29
  54. package/key-bag-memory-LWE6ARPX.js.map +0 -1
  55. package/node-filesystem-CFRXFSO7.js.map +0 -1
  56. package/tests/blockstore/keyed-crypto-indexdb-file.test.ts +0 -129
  57. package/tests/gateway/file/loader-config.test.ts +0 -303
  58. package/tests/gateway/indexdb/loader-config.test.ts +0 -75
  59. package/utils-STA2C35G.js.map +0 -1
  60. /package/tests/fireproof/{fireproof.fixture.ts → fireproof.test.fixture.ts} +0 -0
  61. /package/{chunk-PZ5AY32C.js.map → utils-QO2HIWGI.js.map} +0 -0
@@ -0,0 +1,172 @@
1
+ import { describe, it, expect, beforeAll } from "vitest";
2
+ import { dataDir, fireproof, rt } from "@fireproof/core";
3
+ import { runtimeFn, URI } from "@adviser/cement";
4
+ import { mockSuperThis } from "../helpers";
5
+
6
+ describe("runtime", () => {
7
+ it("runtime", () => {
8
+ const isNode = !!(typeof process === "object" && process.versions?.node);
9
+ expect(runtimeFn()).toEqual({
10
+ isBrowser: !isNode,
11
+ isDeno: false,
12
+ isNodeIsh: isNode,
13
+ isReactNative: false,
14
+ });
15
+ });
16
+ });
17
+
18
+ describe("fireproof/config", () => {
19
+ let _my_app = "my-app";
20
+ function my_app() {
21
+ return _my_app;
22
+ }
23
+ function params(store: string) {
24
+ return Object.entries({
25
+ store,
26
+ name: my_app(),
27
+ storekey: `@${my_app()}:${store}@`,
28
+ version: rt.FILESTORE_VERSION,
29
+ });
30
+ }
31
+ const sthis = mockSuperThis();
32
+ beforeAll(async () => {
33
+ await sthis.start();
34
+ if (runtimeFn().isNodeIsh) {
35
+ const fpStorageUrl = sthis.env.get("FP_STORAGE_URL");
36
+ if (fpStorageUrl) {
37
+ const url = URI.from(fpStorageUrl);
38
+ _my_app = `my-app-${url.protocol.replace(/:$/, "")}:${url.getParam("fs") || "fs"}`;
39
+ }
40
+ }
41
+ });
42
+
43
+ if (!runtimeFn().isNodeIsh) {
44
+ it("default", async () => {
45
+ const db = fireproof(my_app());
46
+ await db.put({ name: "my-app" });
47
+ expect(db.name).toBe(my_app());
48
+
49
+ const fileStore = await db.blockstore.loader?.fileStore();
50
+ expect(fileStore?.url().toString()).toMatch(
51
+ new RegExp(`indexdb://fp\\?name=my-app&store=data&storekey=%40my-app%3Adata%40&version=${rt.INDEXDB_VERSION}`),
52
+ );
53
+ const metaStore = await db.blockstore.loader?.metaStore();
54
+ expect(metaStore?.url().toString()).toMatch(
55
+ new RegExp(`indexdb://fp\\?name=my-app&store=meta&storekey=%40my-app%3Ameta%40&version=${rt.INDEXDB_VERSION}`),
56
+ );
57
+
58
+ const carStore = await db.blockstore.loader?.carStore();
59
+ expect(carStore?.url().toString()).toMatch(
60
+ new RegExp(`indexdb://fp\\?name=my-app&store=data&storekey=%40my-app%3Adata%40&version=${rt.INDEXDB_VERSION}`),
61
+ );
62
+
63
+ await db.close();
64
+ });
65
+ return;
66
+ }
67
+ it("node default", async () => {
68
+ const old = sthis.env.get("FP_STORAGE_URL");
69
+ sthis.env.delete("FP_STORAGE_URL");
70
+ let baseDir = dataDir(sthis, my_app()).pathname;
71
+ baseDir = sthis.pathOps.join(baseDir, rt.FILESTORE_VERSION, my_app());
72
+
73
+ const sysfs = await rt.getFileSystem(URI.from(baseDir));
74
+ await sysfs.rm(baseDir, { recursive: true }).catch(() => {
75
+ /* */
76
+ });
77
+
78
+ expect(baseDir).toMatch(new RegExp(`/\\.fireproof/${rt.FILESTORE_VERSION}/${my_app()}`));
79
+
80
+ const db = fireproof(my_app());
81
+ await db.put({ name: "my-app" });
82
+ expect(db.name).toBe(my_app());
83
+ const carStore = await db.blockstore.loader?.carStore();
84
+
85
+ for (const [param, value] of Object.entries({
86
+ store: "data",
87
+ name: my_app(),
88
+ storekey: `@${my_app()}:data@`,
89
+ version: rt.FILESTORE_VERSION,
90
+ })) {
91
+ expect(carStore?.url().getParam(param)).toBe(value);
92
+ }
93
+ expect((await sysfs.stat(sthis.pathOps.join(baseDir, "data"))).isDirectory()).toBeTruthy();
94
+
95
+ const fileStore = await db.blockstore.loader?.fileStore();
96
+ for (const [param, value] of params("data")) {
97
+ expect(fileStore?.url().getParam(param)).toBe(value);
98
+ }
99
+ const metaStore = await db.blockstore.loader?.metaStore();
100
+ for (const [param, value] of params("meta")) {
101
+ expect(metaStore?.url().getParam(param)).toBe(value);
102
+ }
103
+ expect((await sysfs.stat(sthis.pathOps.join(baseDir, "meta"))).isDirectory()).toBeTruthy();
104
+ sthis.env.set("FP_STORAGE_URL", old);
105
+ await db.close();
106
+ });
107
+
108
+ it("set by env", async () => {
109
+ const old = sthis.env.get("FP_STORAGE_URL");
110
+ const testUrl = URI.merge(`./dist/env`, old);
111
+ sthis.env.set("FP_STORAGE_URL", testUrl.toString());
112
+
113
+ let baseDir = dataDir(sthis, my_app()).pathname;
114
+ baseDir = sthis.pathOps.join(baseDir, rt.FILESTORE_VERSION, my_app());
115
+
116
+ const sysfs = await rt.getFileSystem(testUrl);
117
+ await sysfs.rm(baseDir, { recursive: true }).catch(() => {
118
+ /* */
119
+ });
120
+
121
+ const db = fireproof(my_app());
122
+ await db.put({ name: "my-app" });
123
+ expect(db.name).toBe(my_app());
124
+ const carStore = await db.blockstore.loader?.carStore();
125
+ for (const [param, value] of params("data")) {
126
+ expect(carStore?.url().getParam(param)).toBe(value);
127
+ }
128
+ expect((await sysfs.stat(sthis.pathOps.join(baseDir, "data"))).isDirectory()).toBeTruthy();
129
+ const fileStore = await db.blockstore.loader?.fileStore();
130
+ for (const [param, value] of params("data")) {
131
+ expect(fileStore?.url().getParam(param)).toBe(value);
132
+ }
133
+ const metaStore = await db.blockstore.loader?.metaStore();
134
+ for (const [param, value] of params("meta")) {
135
+ expect(metaStore?.url().getParam(param)).toBe(value);
136
+ }
137
+ expect((await sysfs.stat(sthis.pathOps.join(baseDir, "meta"))).isDirectory()).toBeTruthy();
138
+ await db.close();
139
+ sthis.env.set("FP_STORAGE_URL", old);
140
+ });
141
+
142
+ it("file path", async () => {
143
+ let baseDir = "./dist/data".replace(/\?.*$/, "").replace(/^file:\/\//, "");
144
+ baseDir = sthis.pathOps.join(baseDir, rt.FILESTORE_VERSION, my_app());
145
+
146
+ const base = "./dist/data";
147
+ const sysfs = await rt.getFileSystem(URI.from(base));
148
+ await sysfs.rm(baseDir, { recursive: true }).catch(() => {
149
+ /* */
150
+ });
151
+
152
+ const db = fireproof(my_app(), { store: { stores: { base } } });
153
+ // console.log(`>>>>>>>>>>>>>>>file-path`)
154
+ await db.put({ name: "my-app" });
155
+ expect(db.name).toBe(my_app());
156
+ const carStore = await db.blockstore.loader?.carStore();
157
+ for (const [param, value] of params("data")) {
158
+ expect(carStore?.url().getParam(param)).toBe(value);
159
+ }
160
+ const fileStore = await db.blockstore.loader?.fileStore();
161
+ for (const [param, value] of params("data")) {
162
+ expect(fileStore?.url().getParam(param)).toBe(value);
163
+ }
164
+ expect((await sysfs.stat(sthis.pathOps.join(baseDir, "data"))).isDirectory()).toBeTruthy();
165
+ const metaStore = await db.blockstore.loader?.metaStore();
166
+ for (const [param, value] of params("meta")) {
167
+ expect(metaStore?.url().getParam(param)).toBe(value);
168
+ }
169
+ expect((await sysfs.stat(sthis.pathOps.join(baseDir, "meta"))).isDirectory()).toBeTruthy();
170
+ await db.close();
171
+ });
172
+ });
@@ -1,9 +1,8 @@
1
- import { CRDT, DatabaseOpts, toStoreURIRuntime } from "@fireproof/core";
1
+ import { CRDT } 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";
7
6
 
8
7
  describe("Fresh crdt", function () {
9
8
  let crdt: CRDT<{ hello: string } | { points: number }>;
@@ -14,12 +13,7 @@ describe("Fresh crdt", function () {
14
13
  });
15
14
  beforeEach(async function () {
16
15
  await sthis.start();
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);
16
+ crdt = new CRDT(sthis);
23
17
  });
24
18
  it("should have an empty head", async function () {
25
19
  const head = crdt.clock.head;
@@ -56,12 +50,7 @@ describe("CRDT with one record", function () {
56
50
 
57
51
  beforeEach(async function () {
58
52
  await sthis.start();
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);
53
+ crdt = new CRDT(sthis, `test@${sthis.nextId()}`);
65
54
  firstPut = await crdt.bulk([{ id: "hello", value: { hello: "world" } }]);
66
55
  });
67
56
  it("should have a one-element head", async function () {
@@ -111,12 +100,7 @@ describe("CRDT with a multi-write", function () {
111
100
  });
112
101
  beforeEach(async function () {
113
102
  await sthis.start();
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);
103
+ crdt = new CRDT(sthis);
120
104
  firstPut = await crdt.bulk([
121
105
  { id: "ace", value: { points: 11 } },
122
106
  { id: "king", value: { points: 10 } },
@@ -181,12 +165,7 @@ describe("CRDT with two multi-writes", function () {
181
165
  });
182
166
  beforeEach(async () => {
183
167
  await sthis.start();
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);
168
+ crdt = new CRDT(sthis);
190
169
  firstPut = await crdt.bulk([
191
170
  { id: "ace", value: { points: 11 } },
192
171
  { id: "king", value: { points: 10 } },
@@ -234,12 +213,7 @@ describe("Compact a named CRDT with writes", function () {
234
213
  });
235
214
  beforeEach(async function () {
236
215
  await sthis.start();
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);
216
+ crdt = new CRDT(sthis, "named-crdt-compaction");
243
217
  for (let i = 0; i < 10; i++) {
244
218
  const bulk = [
245
219
  { id: "ace", value: { points: 11 } },
@@ -295,17 +269,12 @@ describe("CRDT with an index", function () {
295
269
  });
296
270
  beforeEach(async function () {
297
271
  await sthis.start();
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);
272
+ crdt = new CRDT<CRDTTestType>(sthis);
304
273
  await crdt.bulk([
305
274
  { id: "ace", value: { points: 11 } },
306
275
  { id: "king", value: { points: 10 } },
307
276
  ]);
308
- idx = await index<number, CRDTTestType>({ crdt: crdt }, "points");
277
+ idx = await index<number, CRDTTestType>(sthis, { _crdt: crdt }, "points");
309
278
  });
310
279
  it("should query the data", async function () {
311
280
  const got = await idx.query({ range: [9, 12] });
@@ -314,7 +283,7 @@ describe("CRDT with an index", function () {
314
283
  expect(got.rows[0].key).toBe(10);
315
284
  });
316
285
  it("should register the index", async function () {
317
- const rIdx = await index<number, CRDTTestType>({ crdt: crdt }, "points");
286
+ const rIdx = await index<number, CRDTTestType>(sthis, { _crdt: crdt }, "points");
318
287
  expect(rIdx).toBeTruthy();
319
288
  expect(rIdx.name).toBe("points");
320
289
  const got = await rIdx.query({ range: [9, 12] });
@@ -323,7 +292,7 @@ describe("CRDT with an index", function () {
323
292
  expect(got.rows[0].key).toBe(10);
324
293
  });
325
294
  it("creating a different index with same name should not work", async function () {
326
- const e = await index({ crdt: crdt }, "points", (doc) => doc._id)
295
+ const e = await index(sthis, { _crdt: crdt }, "points", (doc) => doc._id)
327
296
  .query()
328
297
  .catch((err) => err);
329
298
  expect(e.message).toMatch(/cannot apply/);
@@ -346,25 +315,15 @@ describe("Loader with a committed transaction", function () {
346
315
  });
347
316
  beforeEach(async function () {
348
317
  await sthis.start();
349
- const dbOpts: DatabaseOpts = {
350
- keyBag: defaultKeyBagOpts(sthis),
351
- storeUrls: toStoreURIRuntime(sthis, dbname),
352
- storeEnDe: bs.ensureStoreEnDeFile({}),
353
- };
354
- crdt = new CRDT(sthis, dbOpts);
318
+ crdt = new CRDT(sthis, dbname);
355
319
  blockstore = crdt.blockstore as bs.EncryptedBlockstore;
356
320
  expect(blockstore.loader).toBeTruthy();
357
321
  loader = blockstore.loader;
358
322
  done = await crdt.bulk([{ id: "foo", value: { foo: "bar" } }]);
359
323
  });
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
- // });
324
+ it("should have a name", function () {
325
+ expect(loader.name).toBe(dbname);
326
+ });
368
327
  it("should commit a transaction", function () {
369
328
  expect(done.head).toBeTruthy();
370
329
  // expect(done.cars).toBeTruthy();
@@ -399,12 +358,7 @@ describe("Loader with two committed transactions", function () {
399
358
  });
400
359
  beforeEach(async function () {
401
360
  await sthis.start();
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);
361
+ crdt = new CRDT(sthis, "test-loader");
408
362
  blockstore = crdt.blockstore as bs.EncryptedBlockstore;
409
363
  expect(blockstore.loader).toBeTruthy();
410
364
  loader = blockstore.loader;
@@ -454,12 +408,7 @@ describe("Loader with many committed transactions", function () {
454
408
  });
455
409
  beforeEach(async function () {
456
410
  await sthis.start();
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);
411
+ crdt = new CRDT(sthis, "test-loader-many");
463
412
  blockstore = crdt.blockstore as bs.EncryptedBlockstore;
464
413
  expect(blockstore.loader).toBeTruthy();
465
414
  loader = blockstore.loader;
@@ -1,19 +1,5 @@
1
- import { URI } from "@adviser/cement";
2
1
  import { buildBlobFiles, FileWithCid, mockSuperThis } from "../helpers.js";
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";
2
+ import { bs, Database, DocResponse, DocFileMeta, DocWithId, DocFiles } from "@fireproof/core";
17
3
 
18
4
  describe("basic Database", () => {
19
5
  let db: Database;
@@ -24,9 +10,7 @@ describe("basic Database", () => {
24
10
  });
25
11
  beforeEach(async () => {
26
12
  await sthis.start();
27
- db = DatabaseFactory(undefined, {
28
- logger: sthis.logger,
29
- });
13
+ db = new Database();
30
14
  });
31
15
  it("should put", async () => {
32
16
  /** @type {Doc} */
@@ -54,7 +38,7 @@ describe("basic Database with record", function () {
54
38
  interface Doc {
55
39
  readonly value: string;
56
40
  }
57
- let db: DatabaseShell;
41
+ let db: Database;
58
42
  const sthis = mockSuperThis();
59
43
  afterEach(async () => {
60
44
  await db.close();
@@ -62,7 +46,7 @@ describe("basic Database with record", function () {
62
46
  });
63
47
  beforeEach(async function () {
64
48
  await sthis.start();
65
- db = DatabaseFactory("factory-name") as DatabaseShell;
49
+ db = new Database();
66
50
  const ok = await db.put<Doc>({ _id: "hello", value: "world" });
67
51
  expect(ok.id).toBe("hello");
68
52
  });
@@ -94,13 +78,13 @@ describe("basic Database with record", function () {
94
78
  expect(rows[0].value._id).toBe("hello");
95
79
  });
96
80
  it("is not persisted", async function () {
97
- const db2 = DatabaseFactory("factory-name") as DatabaseShell;
81
+ const db2 = new Database();
98
82
  const { rows } = await db2.changes([]);
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");
83
+ expect(rows.length).toBe(0);
84
+ const doc = await db2.get("hello").catch((e) => e);
85
+ expect(doc.message).toBeTruthy();
103
86
  await db2.close();
87
+ await db2.destroy();
104
88
  });
105
89
  });
106
90
 
@@ -116,7 +100,7 @@ describe("named Database with record", function () {
116
100
  });
117
101
  beforeEach(async function () {
118
102
  await sthis.start();
119
- db = DatabaseFactory("test-db-name");
103
+ db = new Database("test-db-name");
120
104
  /** @type {Doc} */
121
105
  const doc = { _id: "hello", value: "world" };
122
106
  const ok = await db.put(doc);
@@ -152,7 +136,7 @@ describe("named Database with record", function () {
152
136
  it("should have a key", async function () {
153
137
  const { rows } = await db.changes([]);
154
138
  expect(rows.length).toBe(1);
155
- const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
139
+ const blocks = db._crdt.blockstore as bs.EncryptedBlockstore;
156
140
  const loader = blocks.loader;
157
141
  expect(loader).toBeTruthy();
158
142
  await loader.ready();
@@ -243,7 +227,7 @@ describe("basic Database parallel writes / public", function () {
243
227
  });
244
228
  beforeEach(async function () {
245
229
  await sthis.start();
246
- db = DatabaseFactory("test-parallel-writes", { public: true });
230
+ db = new Database("test-parallel-writes", { public: true });
247
231
  for (let i = 0; i < 10; i++) {
248
232
  const doc = { _id: `id-${i}`, hello: "world" };
249
233
  writes.push(db.put(doc));
@@ -251,7 +235,7 @@ describe("basic Database parallel writes / public", function () {
251
235
  await Promise.all(writes);
252
236
  });
253
237
  it("should have one head", function () {
254
- const crdt = db.crdt;
238
+ const crdt = db._crdt;
255
239
  expect(crdt.clock.head.length).toBe(1);
256
240
  });
257
241
  it("should write all", async function () {
@@ -288,7 +272,7 @@ describe("basic Database parallel writes / public", function () {
288
272
  });
289
273
  it("has changes", async function () {
290
274
  const { rows, clock } = await db.changes([]);
291
- expect(clock[0]).toBe(db.crdt.clock.head[0]);
275
+ expect(clock[0]).toBe(db._crdt.clock.head[0]);
292
276
  expect(rows.length).toBe(10);
293
277
  // rows.sort((a, b) => a.key.localeCompare(b.key));
294
278
  for (let i = 0; i < 10; i++) {
@@ -299,9 +283,9 @@ describe("basic Database parallel writes / public", function () {
299
283
  it("should not have a key", async function () {
300
284
  const { rows } = await db.changes([]);
301
285
  expect(rows.length).toBe(10);
302
- // expect(db.opts.public).toBeTruthy();
303
- // expect(db._crdt.opts.public).toBeTruthy();
304
- const blocks = db.crdt.blockstore as bs.EncryptedBlockstore;
286
+ expect(db.opts.public).toBeTruthy();
287
+ expect(db._crdt.opts.public).toBeTruthy();
288
+ const blocks = db._crdt.blockstore as bs.EncryptedBlockstore;
305
289
  const loader = blocks.loader;
306
290
  expect(loader).toBeTruthy();
307
291
  await loader.ready();
@@ -323,7 +307,7 @@ describe("basic Database with subscription", function () {
323
307
  });
324
308
  beforeEach(async function () {
325
309
  await sthis.start();
326
- db = DatabaseFactory("factory-name");
310
+ db = new Database();
327
311
  didRun = 0;
328
312
  waitForSub = new Promise((resolve) => {
329
313
  unsubscribe = db.subscribe((docs) => {
@@ -367,8 +351,9 @@ describe("basic Database with no update subscription", function () {
367
351
  });
368
352
  beforeEach(async function () {
369
353
  await sthis.start();
370
- db = DatabaseFactory("factory-name");
354
+ db = new Database();
371
355
  didRun = 0;
356
+
372
357
  unsubscribe = db.subscribe(() => {
373
358
  didRun++;
374
359
  });
@@ -405,7 +390,7 @@ describe("database with files input", () => {
405
390
  beforeEach(async function () {
406
391
  await sthis.start();
407
392
  imagefiles = await buildBlobFiles();
408
- db = DatabaseFactory("fireproof-with-images");
393
+ db = new Database("fireproof-with-images");
409
394
  const doc = {
410
395
  _id: "images-main",
411
396
  type: "files",
@@ -487,150 +472,3 @@ describe("database with files input", () => {
487
472
  expect(file.size).toBe(imagefiles[0].file.size);
488
473
  });
489
474
  });
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
- });