@fireproof/core 0.20.0-dev-preview-18 → 0.20.0-dev-preview-20

Sign up to get free protection for your applications and to get access to all the features.
@@ -10,9 +10,10 @@ function runtime(sthis: SuperThis) {
10
10
  async function mockLoader(sthis: SuperThis, name?: string): Promise<bs.StoreFactoryItem> {
11
11
  const url = noopUrl(name);
12
12
  return {
13
- sthis,
13
+ // sthis,
14
14
  url: url,
15
15
  loader: {
16
+ sthis,
16
17
  keyBag: () => rt.kb.getKeyBag(sthis),
17
18
  // eslint-disable-next-line @typescript-eslint/no-unused-vars
18
19
  handleDbMetasFromStore: (metas: DbMeta[]): Promise<void> => Promise.resolve(),
@@ -22,8 +23,9 @@ async function mockLoader(sthis: SuperThis, name?: string): Promise<bs.StoreFact
22
23
 
23
24
  describe("DataStore", function () {
24
25
  let store: bs.DataStore;
25
-
26
26
  const sthis = ensureSuperThis();
27
+ let loader: bs.StoreFactoryItem;
28
+
27
29
  afterEach(async () => {
28
30
  await store.close();
29
31
  await store.destroy();
@@ -31,7 +33,8 @@ describe("DataStore", function () {
31
33
 
32
34
  beforeEach(async () => {
33
35
  await sthis.start();
34
- store = await runtime(sthis).makeDataStore(await mockLoader(sthis));
36
+ loader = await mockLoader(sthis);
37
+ store = await runtime(sthis).makeDataStore(loader);
35
38
  await store.start();
36
39
  });
37
40
 
@@ -45,7 +48,7 @@ describe("DataStore", function () {
45
48
  bytes: new Uint8Array([55, 56, 57]),
46
49
  };
47
50
  await store.save(car);
48
- const data = (await store.realGateway.getPlain(sthis, store.url(), car.cid.toString())).Ok();
51
+ const data = (await store.realGateway.getPlain(loader, store.url(), car.cid.toString())).Ok();
49
52
  expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
50
53
  });
51
54
  });
@@ -53,6 +56,7 @@ describe("DataStore", function () {
53
56
  describe("DataStore with a saved car", function () {
54
57
  let store: bs.DataStore;
55
58
  let car: bs.AnyBlock;
59
+ let loader: bs.StoreFactoryItem;
56
60
 
57
61
  const sthis = ensureSuperThis();
58
62
 
@@ -63,7 +67,8 @@ describe("DataStore with a saved car", function () {
63
67
 
64
68
  beforeEach(async function () {
65
69
  await sthis.start();
66
- store = await runtime(sthis).makeDataStore(await mockLoader(sthis, "test2"));
70
+ loader = await mockLoader(sthis, "test2");
71
+ store = await runtime(sthis).makeDataStore(loader);
67
72
  await store.start();
68
73
  car = {
69
74
  cid: "cid" as unknown as CID,
@@ -73,7 +78,7 @@ describe("DataStore with a saved car", function () {
73
78
  });
74
79
 
75
80
  it("should have a car", async function () {
76
- const data = (await store.realGateway.getPlain(sthis, store.url(), car.cid.toString())).Ok();
81
+ const data = (await store.realGateway.getPlain(loader, store.url(), car.cid.toString())).Ok();
77
82
  expect(sthis.txt.decode(data)).toEqual(sthis.txt.decode(car.bytes));
78
83
  });
79
84
 
@@ -93,8 +98,8 @@ describe("DataStore with a saved car", function () {
93
98
 
94
99
  describe("MetaStore", function () {
95
100
  let store: bs.MetaStore;
96
-
97
101
  const sthis = ensureSuperThis();
102
+ let loader: bs.StoreFactoryItem;
98
103
 
99
104
  afterEach(async () => {
100
105
  await store.close();
@@ -103,7 +108,8 @@ describe("MetaStore", function () {
103
108
 
104
109
  beforeEach(async function () {
105
110
  await sthis.start();
106
- store = await runtime(sthis).makeMetaStore(await mockLoader(sthis, "test"));
111
+ loader = await mockLoader(sthis, "test");
112
+ store = await runtime(sthis).makeMetaStore(loader);
107
113
  await store.start();
108
114
  });
109
115
 
@@ -118,7 +124,7 @@ describe("MetaStore", function () {
118
124
  // key: undefined,
119
125
  };
120
126
  await store.save(h);
121
- const file = await store.realGateway.getPlain(sthis, store.url(), "main");
127
+ const file = await store.realGateway.getPlain(loader, store.url(), "main");
122
128
  const blockMeta = (await rt.gw.fpDeserialize(sthis, store.url(), file)) as Result<bs.FPEnvelopeMeta>;
123
129
  expect(blockMeta.Ok()).toBeTruthy();
124
130
  expect(blockMeta.Ok().payload.length).toEqual(1);
@@ -133,6 +139,7 @@ describe("MetaStore with a saved header", function () {
133
139
  let store: bs.MetaStore;
134
140
  let cid: CID;
135
141
  const sthis = ensureSuperThis();
142
+ let loader: bs.StoreFactoryItem;
136
143
 
137
144
  afterEach(async () => {
138
145
  await store.close();
@@ -141,7 +148,8 @@ describe("MetaStore with a saved header", function () {
141
148
 
142
149
  beforeEach(async function () {
143
150
  await sthis.start();
144
- store = await runtime(sthis).makeMetaStore(await mockLoader(sthis, "test-saved-header"));
151
+ loader = await mockLoader(sthis, "test-saved-header");
152
+ store = await runtime(sthis).makeMetaStore(loader);
145
153
  await store.start();
146
154
  cid = CID.parse("bafybeia4luuns6dgymy5kau5rm7r4qzrrzg6cglpzpogussprpy42cmcn4");
147
155
  await store.save({ cars: [cid] /*, key: undefined */ });
@@ -154,7 +162,7 @@ describe("MetaStore with a saved header", function () {
154
162
  // });
155
163
 
156
164
  it("should have a header", async function () {
157
- const bytes = await store.realGateway.getPlain(sthis, store.url(), "main");
165
+ const bytes = await store.realGateway.getPlain(loader, store.url(), "main");
158
166
  const data = sthis.txt.decode(bytes.Ok());
159
167
  expect(data).toMatch(/parents/);
160
168
  const header = JSON.parse(data)[0];
@@ -41,6 +41,7 @@ describe("noop Gateway", function () {
41
41
  let fileGateway: bs.SerdeGateway;
42
42
  let walGateway: bs.SerdeGateway;
43
43
  const sthis = ensureSuperThis();
44
+ let ctx: { loader: bs.Loadable };
44
45
 
45
46
  afterEach(async function () {
46
47
  await db.close();
@@ -50,12 +51,13 @@ describe("noop Gateway", function () {
50
51
  db = LedgerFactory("test-gateway-" + sthis.nextId().str, {
51
52
  logger: sthis.logger,
52
53
  });
54
+ ctx = { loader: await db.crdt.blockstore.loader };
53
55
 
54
56
  // Extract stores from the loader
55
- carStore = (await db.crdt.blockstore.loader?.carStore()) as bs.DataStore;
56
- metaStore = (await db.crdt.blockstore.loader?.metaStore()) as bs.MetaStore;
57
- fileStore = (await db.crdt.blockstore.loader?.fileStore()) as bs.DataStore;
58
- walStore = (await db.crdt.blockstore.loader?.WALStore()) as bs.WALStore;
57
+ carStore = (await ctx.loader.carStore()) as bs.DataStore;
58
+ metaStore = (await ctx.loader.metaStore()) as bs.MetaStore;
59
+ fileStore = (await ctx.loader.fileStore()) as bs.DataStore;
60
+ walStore = (await ctx.loader.WALStore()) as bs.WALStore;
59
61
 
60
62
  // Extract and log gateways
61
63
  carGateway = carStore.realGateway;
@@ -112,19 +114,19 @@ describe("noop Gateway", function () {
112
114
 
113
115
  it("should build CAR Gateway URL", async function () {
114
116
  const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
115
- const carUrl = await carGateway.buildUrl(sthis, carStore.url(), testKey);
117
+ const carUrl = await carGateway.buildUrl(ctx, carStore.url(), testKey);
116
118
  expect(carUrl.Ok().hasParam("key")).toBeTruthy();
117
119
  });
118
120
 
119
121
  it("should start CAR Gateway", async function () {
120
- const url = await carGateway.start(sthis, carStore.url());
122
+ const url = await carGateway.start(ctx, carStore.url());
121
123
  expect(url.Ok().asObj()).toEqual(carStore.url().asObj());
122
124
  });
123
125
 
124
126
  it("should put data in CAR Gateway", async function () {
125
- const carUrl = await carGateway.buildUrl(sthis, carStore.url(), fileContent.cid);
126
- await carGateway.start(sthis, carStore.url());
127
- const carPutResult = await carGateway.put(sthis, carUrl.Ok(), {
127
+ const carUrl = await carGateway.buildUrl(ctx, carStore.url(), fileContent.cid);
128
+ await carGateway.start(ctx, carStore.url());
129
+ const carPutResult = await carGateway.put(ctx, carUrl.Ok(), {
128
130
  type: bs.FPEnvelopeType.CAR,
129
131
  payload: fileContent.block,
130
132
  });
@@ -132,59 +134,59 @@ describe("noop Gateway", function () {
132
134
  });
133
135
 
134
136
  it("should get data from CAR Gateway", async function () {
135
- const carUrl = await carGateway.buildUrl(sthis, carStore.url(), fileContent.cid);
136
- await carGateway.start(sthis, carStore.url());
137
- await carGateway.put(sthis, carUrl.Ok(), {
137
+ const carUrl = await carGateway.buildUrl(ctx, carStore.url(), fileContent.cid);
138
+ await carGateway.start(ctx, carStore.url());
139
+ await carGateway.put(ctx, carUrl.Ok(), {
138
140
  type: bs.FPEnvelopeType.CAR,
139
141
  payload: fileContent.block,
140
142
  });
141
- const carGetResult = await carGateway.get(sthis, carUrl.Ok());
143
+ const carGetResult = await carGateway.get(ctx, carUrl.Ok());
142
144
  expect(carGetResult.Ok().type).toEqual("car");
143
145
  expect(carGetResult.Ok().payload).toEqual(fileContent.block);
144
146
  // customExpect(carGetResult.Ok(), (v) => expect(v).toEqual(testData), "carGetResult should match testData");
145
147
  });
146
148
 
147
149
  it("should delete data from CAR Gateway", async function () {
148
- const carUrl = await carGateway.buildUrl(sthis, carStore.url(), fileContent.cid);
149
- await carGateway.start(sthis, carStore.url());
150
- await carGateway.put(sthis, carUrl.Ok(), {
150
+ const carUrl = await carGateway.buildUrl(ctx, carStore.url(), fileContent.cid);
151
+ await carGateway.start(ctx, carStore.url());
152
+ await carGateway.put(ctx, carUrl.Ok(), {
151
153
  type: bs.FPEnvelopeType.CAR,
152
154
  payload: fileContent.block,
153
155
  });
154
- const carDeleteResult = await carGateway.delete(sthis, carUrl.Ok());
156
+ const carDeleteResult = await carGateway.delete(ctx, carUrl.Ok());
155
157
  expect(carDeleteResult.isOk()).toBeTruthy();
156
158
  });
157
159
 
158
160
  it("should close CAR Gateway", async function () {
159
- await carGateway.close(sthis, carStore.url());
161
+ await carGateway.close(ctx, carStore.url());
160
162
  });
161
163
  it("should build Meta Gateway URL", async function () {
162
- const metaUrl = await metaGateway.buildUrl(sthis, metaStore.url(), "main");
164
+ const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
163
165
  expect(metaUrl.Ok()).toBeTruthy();
164
166
  });
165
167
 
166
168
  it("should start Meta Gateway", async function () {
167
- await metaGateway.start(sthis, metaStore.url());
169
+ await metaGateway.start(ctx, metaStore.url());
168
170
  });
169
171
 
170
172
  it("should close Meta Gateway", async function () {
171
- await metaGateway.start(sthis, metaStore.url());
172
- await metaGateway.close(sthis, metaStore.url());
173
+ await metaGateway.start(ctx, metaStore.url());
174
+ await metaGateway.close(ctx, metaStore.url());
173
175
  });
174
176
 
175
177
  it("should build File Gateway URL", async function () {
176
- const fileUrl = await fileGateway.buildUrl(sthis, fileStore.url(), fileContent.cid);
178
+ const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
177
179
  expect(fileUrl.Ok()).toBeTruthy();
178
180
  });
179
181
 
180
182
  it("should start File Gateway", async function () {
181
- await fileGateway.start(sthis, fileStore.url());
183
+ await fileGateway.start(ctx, fileStore.url());
182
184
  });
183
185
 
184
186
  it("should put data to File Gateway", async function () {
185
- const fileUrl = await fileGateway.buildUrl(sthis, fileStore.url(), fileContent.cid);
186
- await fileGateway.start(sthis, fileStore.url());
187
- const filePutResult = await fileGateway.put(sthis, fileUrl.Ok(), {
187
+ const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
188
+ await fileGateway.start(ctx, fileStore.url());
189
+ const filePutResult = await fileGateway.put(ctx, fileUrl.Ok(), {
188
190
  type: bs.FPEnvelopeType.FILE,
189
191
  payload: fileContent.block,
190
192
  });
@@ -192,48 +194,48 @@ describe("noop Gateway", function () {
192
194
  });
193
195
 
194
196
  it("should get data from File Gateway", async function () {
195
- const fileUrl = await fileGateway.buildUrl(sthis, fileStore.url(), fileContent.cid);
196
- await fileGateway.start(sthis, fileStore.url());
197
- await fileGateway.put(sthis, fileUrl.Ok(), {
197
+ const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
198
+ await fileGateway.start(ctx, fileStore.url());
199
+ await fileGateway.put(ctx, fileUrl.Ok(), {
198
200
  type: bs.FPEnvelopeType.FILE,
199
201
  payload: fileContent.block,
200
202
  });
201
- const fileGetResult = await fileGateway.get(sthis, fileUrl.Ok());
203
+ const fileGetResult = await fileGateway.get(ctx, fileUrl.Ok());
202
204
  expect(fileGetResult.Ok().type).toEqual("file");
203
205
  expect(fileGetResult.Ok().payload).toEqual(fileContent.block);
204
206
  });
205
207
 
206
208
  it("should delete data from File Gateway", async function () {
207
- const fileUrl = await fileGateway.buildUrl(sthis, fileStore.url(), fileContent.cid);
208
- await fileGateway.start(sthis, fileStore.url());
209
- await fileGateway.put(sthis, fileUrl.Ok(), {
209
+ const fileUrl = await fileGateway.buildUrl(ctx, fileStore.url(), fileContent.cid);
210
+ await fileGateway.start(ctx, fileStore.url());
211
+ await fileGateway.put(ctx, fileUrl.Ok(), {
210
212
  type: bs.FPEnvelopeType.FILE,
211
213
  payload: fileContent.block,
212
214
  });
213
- const fileDeleteResult = await fileGateway.delete(sthis, fileUrl.Ok());
215
+ const fileDeleteResult = await fileGateway.delete(ctx, fileUrl.Ok());
214
216
  expect(fileDeleteResult.isOk()).toBeTruthy();
215
217
  });
216
218
 
217
219
  it("should close File Gateway", async function () {
218
- await fileGateway.close(sthis, fileStore.url());
220
+ await fileGateway.close(ctx, fileStore.url());
219
221
  });
220
222
  it("should build WAL Gateway URL", async function () {
221
223
  const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
222
- const walUrl = await walGateway.buildUrl(sthis, walStore.url(), testKey);
224
+ const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
223
225
  expect(walUrl.Ok()).toBeTruthy();
224
226
  });
225
227
 
226
228
  it("should start WAL Gateway", async function () {
227
- await walGateway.start(sthis, walStore.url());
229
+ await walGateway.start(ctx, walStore.url());
228
230
  });
229
231
 
230
232
  it("should put data to WAL Gateway", async function () {
231
233
  const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
232
- const walUrl = await walGateway.buildUrl(sthis, walStore.url(), testKey);
233
- await walGateway.start(sthis, walStore.url());
234
+ const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
235
+ await walGateway.start(ctx, walStore.url());
234
236
  // const walTestDataString = JSON.stringify();
235
237
  // const walTestData = sthis.txt.encode(walTestDataString);
236
- const walPutResult = await walGateway.put(sthis, walUrl.Ok(), {
238
+ const walPutResult = await walGateway.put(ctx, walUrl.Ok(), {
237
239
  type: bs.FPEnvelopeType.WAL,
238
240
  payload: {
239
241
  operations: [],
@@ -246,8 +248,8 @@ describe("noop Gateway", function () {
246
248
 
247
249
  it("should get data from WAL Gateway", async function () {
248
250
  const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
249
- const walUrl = await walGateway.buildUrl(sthis, walStore.url(), testKey);
250
- await walGateway.start(sthis, walStore.url());
251
+ const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
252
+ await walGateway.start(ctx, walStore.url());
251
253
  const ref: bs.WALState = {
252
254
  operations: [
253
255
  {
@@ -272,11 +274,11 @@ describe("noop Gateway", function () {
272
274
  // fileOperations: [],
273
275
  // });
274
276
  // const walTestData = sthis.txt.encode(walTestDataString);
275
- await walGateway.put(sthis, walUrl.Ok(), {
277
+ await walGateway.put(ctx, walUrl.Ok(), {
276
278
  type: bs.FPEnvelopeType.WAL,
277
279
  payload: ref,
278
280
  });
279
- const walGetResult = await walGateway.get(sthis, walUrl.Ok());
281
+ const walGetResult = await walGateway.get(ctx, walUrl.Ok());
280
282
  expect(walGetResult.isOk()).toBeTruthy();
281
283
  // const okResult = walGetResult.Ok();
282
284
  // const decodedResult = sthis.txt.decode(okResult);
@@ -285,8 +287,8 @@ describe("noop Gateway", function () {
285
287
 
286
288
  it("should delete data from WAL Gateway", async function () {
287
289
  const testKey = "bafkreidxwt2nhvbl4fnqfw3ctlt6zbrir4kqwmjo5im6rf4q5si27kgo2i";
288
- const walUrl = await walGateway.buildUrl(sthis, walStore.url(), testKey);
289
- await walGateway.start(sthis, walStore.url());
290
+ const walUrl = await walGateway.buildUrl(ctx, walStore.url(), testKey);
291
+ await walGateway.start(ctx, walStore.url());
290
292
  const ref: bs.WALState = {
291
293
  operations: [
292
294
  {
@@ -305,17 +307,17 @@ describe("noop Gateway", function () {
305
307
  },
306
308
  ],
307
309
  };
308
- await walGateway.put(sthis, walUrl.Ok(), {
310
+ await walGateway.put(ctx, walUrl.Ok(), {
309
311
  type: bs.FPEnvelopeType.WAL,
310
312
  payload: ref,
311
313
  });
312
- const walDeleteResult = await walGateway.delete(sthis, walUrl.Ok());
314
+ const walDeleteResult = await walGateway.delete(ctx, walUrl.Ok());
313
315
  expect(walDeleteResult.isOk()).toBeTruthy();
314
316
  });
315
317
 
316
318
  it("should close WAL Gateway", async function () {
317
- await walGateway.start(sthis, walStore.url());
318
- await walGateway.close(sthis, walStore.url());
319
+ await walGateway.start(ctx, walStore.url());
320
+ await walGateway.close(ctx, walStore.url());
319
321
  });
320
322
 
321
323
  // it("should have correct CAR Gateway properties", async function () {
@@ -370,6 +372,7 @@ describe("noop Gateway subscribe", function () {
370
372
 
371
373
  let metaGateway: bs.SerdeGateway;
372
374
  const sthis = ensureSuperThis();
375
+ let ctx: bs.SerdeGatewayCtx;
373
376
 
374
377
  afterEach(async function () {
375
378
  await db.close();
@@ -378,19 +381,20 @@ describe("noop Gateway subscribe", function () {
378
381
  beforeEach(async function () {
379
382
  db = fireproof("test-gateway-" + sthis.nextId().str);
380
383
 
384
+ ctx = { loader: db.ledger.crdt.blockstore.loader };
381
385
  // Extract stores from the loader
382
386
  metaStore = (await db.ledger.crdt.blockstore.loader?.metaStore()) as bs.MetaStore;
383
387
 
384
388
  metaGateway = metaStore.realGateway;
385
389
  });
386
390
  it("should subscribe to meta Gateway", async function () {
387
- const metaUrl = await metaGateway.buildUrl(sthis, metaStore.url(), "main");
388
- await metaGateway.start(sthis, metaStore.url());
391
+ const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
392
+ await metaGateway.start(ctx, metaStore.url());
389
393
 
390
394
  let didCall = false;
391
395
  const p = new Future<void>();
392
396
 
393
- const metaSubscribeResult = (await metaGateway.subscribe(sthis, metaUrl.Ok(), async (data: bs.FPEnvelopeMeta) => {
397
+ const metaSubscribeResult = (await metaGateway.subscribe(ctx, metaUrl.Ok(), async (data: bs.FPEnvelopeMeta) => {
394
398
  // const decodedData = sthis.txt.decode(data);
395
399
  expect(Array.isArray(data.payload)).toBeTruthy();
396
400
  didCall = true;
@@ -417,12 +421,15 @@ describe("Gateway", function () {
417
421
  // let walGateway: ExtendedGateway;
418
422
  const sthis = ensureSuperThis();
419
423
 
424
+ let ctx: bs.SerdeGatewayCtx;
425
+
420
426
  afterEach(async function () {
421
427
  await db.close();
422
428
  await db.destroy();
423
429
  });
424
430
  beforeEach(async function () {
425
431
  db = fireproof("test-gateway-" + sthis.nextId().str);
432
+ ctx = { loader: db.ledger.crdt.blockstore.loader };
426
433
  const ok = await db.put({ _id: "test", foo: "bar" });
427
434
  expect(ok).toBeTruthy();
428
435
  expect(ok.id).toBe("test");
@@ -441,9 +448,9 @@ describe("Gateway", function () {
441
448
  });
442
449
 
443
450
  it("should get data from Meta Gateway", async function () {
444
- const metaUrl = await metaGateway.buildUrl(sthis, metaStore.url(), "main");
445
- await metaGateway.start(sthis, metaStore.url());
446
- const metaGetResult = await metaGateway.get(sthis, metaUrl.Ok());
451
+ const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
452
+ await metaGateway.start(ctx, metaStore.url());
453
+ const metaGetResult = await metaGateway.get(ctx, metaUrl.Ok());
447
454
  expect(metaGetResult.isOk()).toBeTruthy();
448
455
  const meta = metaGetResult.Ok().payload as bs.DbMetaEvent[];
449
456
  // const metaGetResultOk = metaGetResult.Ok();
@@ -453,10 +460,10 @@ describe("Gateway", function () {
453
460
  });
454
461
 
455
462
  it("should delete data from Meta Gateway", async function () {
456
- const metaUrl = await metaGateway.buildUrl(sthis, metaStore.url(), "main");
457
- await metaGateway.start(sthis, metaStore.url());
463
+ const metaUrl = await metaGateway.buildUrl(ctx, metaStore.url(), "main");
464
+ await metaGateway.start(ctx, metaStore.url());
458
465
  // should we be testing .destroy() instead?
459
- const metaDeleteResult = await metaGateway.delete(sthis, metaUrl.Ok());
466
+ const metaDeleteResult = await metaGateway.delete(ctx, metaUrl.Ok());
460
467
  expect(metaDeleteResult.isOk()).toBeTruthy();
461
468
  });
462
469
  });
@@ -1,7 +1,7 @@
1
1
  import { fireproof } from "@fireproof/core";
2
2
  import { mockSuperThis } from "../../helpers.js";
3
3
 
4
- describe("fireproof config indexdb", () => {
4
+ describe("fireproof config indexeddb", () => {
5
5
  const _my_app = "my-app";
6
6
  function my_app() {
7
7
  return _my_app;
@@ -11,7 +11,7 @@ describe("fireproof config indexdb", () => {
11
11
  await sthis.start();
12
12
  });
13
13
 
14
- it("indexdb-loader", async () => {
14
+ it("indexeddb-loader", async () => {
15
15
  const db = fireproof(my_app());
16
16
  await db.put({ name: "my-app" });
17
17
  expect(db.ledger.name).toBe(my_app());
@@ -19,14 +19,14 @@ describe("fireproof config indexdb", () => {
19
19
  const fileStore = await db.ledger.crdt.blockstore.loader.fileStore();
20
20
  expect(fileStore?.url().asObj()).toEqual({
21
21
  pathname: "fp",
22
- protocol: "indexdb:",
22
+ protocol: "indexeddb:",
23
23
  searchParams: {
24
24
  name: "my-app",
25
25
  store: "data",
26
26
  runtime: "browser",
27
27
  storekey: "@my-app-data@",
28
28
  urlGen: "default",
29
- version: "v0.19-indexdb",
29
+ version: "v0.19-indexeddb",
30
30
  },
31
31
  style: "path",
32
32
  });
@@ -34,7 +34,7 @@ describe("fireproof config indexdb", () => {
34
34
  const dataStore = await db.ledger.crdt.blockstore.loader.carStore();
35
35
  expect(dataStore?.url().asObj()).toEqual({
36
36
  pathname: "fp",
37
- protocol: "indexdb:",
37
+ protocol: "indexeddb:",
38
38
  searchParams: {
39
39
  name: "my-app",
40
40
  store: "data",
@@ -42,35 +42,35 @@ describe("fireproof config indexdb", () => {
42
42
  storekey: "@my-app-data@",
43
43
  suffix: ".car",
44
44
  urlGen: "default",
45
- version: "v0.19-indexdb",
45
+ version: "v0.19-indexeddb",
46
46
  },
47
47
  style: "path",
48
48
  });
49
49
  const metaStore = await db.ledger.crdt.blockstore.loader.metaStore();
50
50
  expect(metaStore?.url().asObj()).toEqual({
51
51
  pathname: "fp",
52
- protocol: "indexdb:",
52
+ protocol: "indexeddb:",
53
53
  searchParams: {
54
54
  name: "my-app",
55
55
  store: "meta",
56
56
  runtime: "browser",
57
57
  storekey: "@my-app-meta@",
58
58
  urlGen: "default",
59
- version: "v0.19-indexdb",
59
+ version: "v0.19-indexeddb",
60
60
  },
61
61
  style: "path",
62
62
  });
63
63
  const WALStore = await db.ledger.crdt.blockstore.loader.WALStore();
64
64
  expect(WALStore?.url().asObj()).toEqual({
65
65
  pathname: "fp",
66
- protocol: "indexdb:",
66
+ protocol: "indexeddb:",
67
67
  searchParams: {
68
68
  name: "my-app",
69
69
  store: "wal",
70
70
  runtime: "browser",
71
71
  storekey: "@my-app-wal@",
72
72
  urlGen: "default",
73
- version: "v0.19-indexdb",
73
+ version: "v0.19-indexeddb",
74
74
  },
75
75
  style: "path",
76
76
  });
package/tests/helpers.ts CHANGED
@@ -31,7 +31,7 @@ export function storageURL(sthis: SuperThis): URI {
31
31
  const old = sthis.env.get("FP_STORAGE_URL");
32
32
  let merged: URI;
33
33
  if (runtimeFn().isBrowser) {
34
- merged = URI.merge(`indexdb://fp`, old, "indexdb:");
34
+ merged = URI.merge(`indexeddb://fp`, old, "indexeddb:");
35
35
  } else {
36
36
  merged = URI.merge(`./dist/env`, old);
37
37
  }
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/runtime/gateways/indexdb/index.ts","../../../src/runtime/gateways/indexdb/key-bag-indexdb.ts","../../../src/runtime/gateways/indexdb/gateway-impl.ts","../../../src/runtime/gateways/indexdb-version.ts"],"sourcesContent":["// export * from \"./gateway-impl.js\";\n\nexport * from \"./key-bag-indexdb.js\";\nimport { KeyBagProviderIndexDB as KeyBagProviderImpl } from \"./key-bag-indexdb.js\";\n\nexport { KeyBagProviderImpl };\n\nimport { IndexDBGateway as GatewayImpl } from \"./gateway-impl.js\";\nexport { GatewayImpl };\n","import { IDBPDatabase, openDB } from \"idb\";\nimport { Logger, ResolveOnce, URI } from \"@adviser/cement\";\nimport { type SuperThis, rt } from \"@fireproof/core\";\n\nexport class KeyBagProviderIndexDB implements rt.kb.KeyBagProvider {\n readonly _db: ResolveOnce<IDBPDatabase<unknown>> = new ResolveOnce<IDBPDatabase<unknown>>();\n\n readonly dbName: string;\n readonly url: URI;\n readonly logger: Logger;\n readonly sthis: SuperThis;\n constructor(url: URI, sthis: SuperThis) {\n this.sthis = sthis;\n this.logger = sthis.logger;\n this.url = url;\n this.dbName = rt.getPath(this.url, this.sthis);\n }\n\n async _prepare(): Promise<IDBPDatabase<unknown>> {\n return this._db.once(async () => {\n return await openDB(this.dbName, 1, {\n upgrade(db) {\n // console.log('upgrade:', dbName);\n [\"bag\"].map((store) => {\n db.createObjectStore(store, {\n autoIncrement: false,\n });\n });\n },\n });\n });\n }\n\n async get(id: string): Promise<rt.kb.KeyItem | undefined> {\n const db = await this._prepare();\n const tx = db.transaction([\"bag\"], \"readonly\");\n const keyItem = await tx.objectStore(\"bag\").get(id);\n await tx.done;\n if (!keyItem) {\n return undefined;\n }\n return keyItem;\n }\n\n async set(id: string, item: rt.kb.KeyItem): Promise<void> {\n const db = await this._prepare();\n const tx = db.transaction([\"bag\"], \"readwrite\");\n await tx.objectStore(\"bag\").put(item, id);\n await tx.done;\n }\n}\n","import { openDB, IDBPDatabase } from \"idb\";\nimport { exception2Result, KeyedResolvOnce, Result, URI } from \"@adviser/cement\";\n\nimport { INDEXDB_VERSION } from \"../indexdb-version.js\";\nimport { NotFoundError, PARAM, exceptionWrapper, getKey, getStore, type SuperThis, bs } from \"@fireproof/core\";\n\nfunction ensureVersion(url: URI): URI {\n return url.build().defParam(PARAM.VERSION, INDEXDB_VERSION).URI();\n}\n\ninterface IDBConn {\n readonly db: IDBPDatabase<unknown>;\n readonly dbName: DbName;\n readonly version: string;\n readonly url: URI;\n}\nconst onceIndexDB = new KeyedResolvOnce<IDBConn>();\n\nfunction sanitzeKey(key: string | string[]): string | string[] {\n if (key.length === 1) {\n key = key[0];\n }\n return key;\n}\n\nasync function connectIdb(url: URI, sthis: SuperThis): Promise<IDBConn> {\n const dbName = getIndexDBName(url, sthis);\n const once = await onceIndexDB.get(dbName.fullDb).once(async () => {\n const db = await openDB(dbName.fullDb, 1, {\n upgrade(db) {\n [\"version\", \"data\", \"wal\", \"meta\", \"idx.data\", \"idx.wal\", \"idx.meta\"].map((store) => {\n db.createObjectStore(store, {\n autoIncrement: false,\n });\n });\n },\n });\n const found = await db.get(\"version\", \"version\");\n const version = ensureVersion(url).getParam(PARAM.VERSION) as string;\n if (!found) {\n await db.put(\"version\", { version }, \"version\");\n } else if (found.version !== version) {\n sthis.logger.Warn().Url(url).Str(\"version\", version).Str(\"found\", found.version).Msg(\"version mismatch\");\n }\n return { db, dbName, version, url };\n });\n return {\n ...once,\n url: url.build().setParam(PARAM.VERSION, once.version).URI(),\n };\n}\n\nexport interface DbName {\n readonly fullDb: string;\n readonly objStore: string;\n readonly connectionKey: string;\n readonly dbName: string;\n}\n\nfunction joinDBName(...names: string[]): string {\n return names\n .map((i) => i.replace(/^[^a-zA-Z0-9]+/g, \"\").replace(/[^a-zA-Z0-9-]+/g, \"_\"))\n .filter((i) => i.length)\n .join(\".\");\n}\n\nexport function getIndexDBName(iurl: URI, sthis: SuperThis): DbName {\n const url = ensureVersion(iurl);\n const fullDb = url.pathname.replace(/^\\/+/, \"\").replace(/\\?.*$/, \"\"); // cut leading slashes\n const dbName = url.getParam(PARAM.NAME);\n if (!dbName) throw sthis.logger.Error().Str(\"url\", url.toString()).Msg(`name not found`).AsError();\n const result = joinDBName(fullDb, dbName);\n const objStore = getStore(url, sthis, joinDBName).name;\n const connectionKey = [result, objStore].join(\":\");\n return {\n fullDb: result,\n objStore,\n connectionKey,\n dbName,\n };\n}\n\nexport class IndexDBGateway implements bs.Gateway {\n _db: IDBPDatabase<unknown> = {} as IDBPDatabase<unknown>;\n\n async start(baseURL: URI, sthis: SuperThis): Promise<Result<URI>> {\n return exception2Result(async () => {\n await sthis.start();\n sthis.logger.Debug().Url(baseURL).Msg(\"starting\");\n const ic = await connectIdb(baseURL, sthis);\n this._db = ic.db;\n sthis.logger.Debug().Url(ic.url).Msg(\"started\");\n return ic.url;\n });\n }\n async close(): Promise<Result<void>> {\n return Result.Ok(undefined);\n }\n async destroy(baseUrl: URI, sthis: SuperThis): Promise<Result<void>> {\n return exception2Result(async () => {\n // return deleteDB(getIndexDBName(this.url).fullDb);\n const type = getStore(baseUrl, sthis, joinDBName).name;\n // console.log(\"IndexDBDataStore:destroy\", type);\n const idb = this._db;\n const trans = idb.transaction(type, \"readwrite\");\n const object_store = trans.objectStore(type);\n const toDelete = [];\n for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {\n toDelete.push(cursor.primaryKey);\n }\n for (const key of toDelete) {\n await trans.db.delete(type, key);\n }\n await trans.done;\n });\n }\n\n buildUrl(baseUrl: URI, key: string): Promise<Result<URI>> {\n return Promise.resolve(Result.Ok(baseUrl.build().setParam(PARAM.KEY, key).URI()));\n }\n\n async get(url: URI, sthis: SuperThis): Promise<bs.GetResult> {\n return exceptionWrapper(async () => {\n const key = getKey(url, sthis.logger);\n const store = getStore(url, sthis, joinDBName).name;\n sthis.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n const tx = this._db.transaction([store], \"readonly\");\n const bytes = await tx.objectStore(store).get(sanitzeKey(key));\n await tx.done;\n if (!bytes) {\n return Result.Err(new NotFoundError(`missing ${key}`));\n }\n return Promise.resolve(Result.Ok(bytes));\n });\n }\n async put(url: URI, bytes: Uint8Array, sthis: SuperThis): Promise<Result<void>> {\n return exception2Result(async () => {\n const key = getKey(url, sthis.logger);\n const store = getStore(url, sthis, joinDBName).name;\n sthis.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"putting\");\n const tx = this._db.transaction([store], \"readwrite\");\n await tx.objectStore(store).put(bytes, sanitzeKey(key));\n await tx.done;\n });\n }\n async delete(url: URI, sthis: SuperThis) {\n return exception2Result(async () => {\n const key = getKey(url, sthis.logger);\n const store = getStore(url, sthis, joinDBName).name;\n sthis.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"deleting\");\n const tx = this._db.transaction([store], \"readwrite\");\n await tx.objectStore(store).delete(sanitzeKey(key));\n await tx.done;\n return Result.Ok(undefined);\n });\n }\n\n async getPlain(url: URI, key: string, sthis: SuperThis): Promise<Result<Uint8Array>> {\n const ic = await connectIdb(url, sthis);\n const store = getStore(ic.url, sthis, joinDBName).name;\n sthis.logger.Debug().Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n let bytes = await ic.db.get(store, sanitzeKey(key));\n sthis.logger.Debug().Str(\"key\", key).Str(\"store\", store).Int(\"len\", bytes.length).Msg(\"got\");\n if (typeof bytes === \"string\") {\n bytes = sthis.txt.encode(bytes);\n }\n return Result.Ok(bytes as Uint8Array);\n }\n}\n","export const INDEXDB_VERSION = \"v0.19-indexdb\";\n"],"mappings":"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","names":["import_idb","import_cement","import_core","db"]}
@@ -1 +0,0 @@
1
- {"version":3,"sources":["../../../src/runtime/gateways/indexdb/key-bag-indexdb.ts","../../../src/runtime/gateways/indexdb/gateway-impl.ts","../../../src/runtime/gateways/indexdb-version.ts"],"sourcesContent":["import { IDBPDatabase, openDB } from \"idb\";\nimport { Logger, ResolveOnce, URI } from \"@adviser/cement\";\nimport { type SuperThis, rt } from \"@fireproof/core\";\n\nexport class KeyBagProviderIndexDB implements rt.kb.KeyBagProvider {\n readonly _db: ResolveOnce<IDBPDatabase<unknown>> = new ResolveOnce<IDBPDatabase<unknown>>();\n\n readonly dbName: string;\n readonly url: URI;\n readonly logger: Logger;\n readonly sthis: SuperThis;\n constructor(url: URI, sthis: SuperThis) {\n this.sthis = sthis;\n this.logger = sthis.logger;\n this.url = url;\n this.dbName = rt.getPath(this.url, this.sthis);\n }\n\n async _prepare(): Promise<IDBPDatabase<unknown>> {\n return this._db.once(async () => {\n return await openDB(this.dbName, 1, {\n upgrade(db) {\n // console.log('upgrade:', dbName);\n [\"bag\"].map((store) => {\n db.createObjectStore(store, {\n autoIncrement: false,\n });\n });\n },\n });\n });\n }\n\n async get(id: string): Promise<rt.kb.KeyItem | undefined> {\n const db = await this._prepare();\n const tx = db.transaction([\"bag\"], \"readonly\");\n const keyItem = await tx.objectStore(\"bag\").get(id);\n await tx.done;\n if (!keyItem) {\n return undefined;\n }\n return keyItem;\n }\n\n async set(id: string, item: rt.kb.KeyItem): Promise<void> {\n const db = await this._prepare();\n const tx = db.transaction([\"bag\"], \"readwrite\");\n await tx.objectStore(\"bag\").put(item, id);\n await tx.done;\n }\n}\n","import { openDB, IDBPDatabase } from \"idb\";\nimport { exception2Result, KeyedResolvOnce, Result, URI } from \"@adviser/cement\";\n\nimport { INDEXDB_VERSION } from \"../indexdb-version.js\";\nimport { NotFoundError, PARAM, exceptionWrapper, getKey, getStore, type SuperThis, bs } from \"@fireproof/core\";\n\nfunction ensureVersion(url: URI): URI {\n return url.build().defParam(PARAM.VERSION, INDEXDB_VERSION).URI();\n}\n\ninterface IDBConn {\n readonly db: IDBPDatabase<unknown>;\n readonly dbName: DbName;\n readonly version: string;\n readonly url: URI;\n}\nconst onceIndexDB = new KeyedResolvOnce<IDBConn>();\n\nfunction sanitzeKey(key: string | string[]): string | string[] {\n if (key.length === 1) {\n key = key[0];\n }\n return key;\n}\n\nasync function connectIdb(url: URI, sthis: SuperThis): Promise<IDBConn> {\n const dbName = getIndexDBName(url, sthis);\n const once = await onceIndexDB.get(dbName.fullDb).once(async () => {\n const db = await openDB(dbName.fullDb, 1, {\n upgrade(db) {\n [\"version\", \"data\", \"wal\", \"meta\", \"idx.data\", \"idx.wal\", \"idx.meta\"].map((store) => {\n db.createObjectStore(store, {\n autoIncrement: false,\n });\n });\n },\n });\n const found = await db.get(\"version\", \"version\");\n const version = ensureVersion(url).getParam(PARAM.VERSION) as string;\n if (!found) {\n await db.put(\"version\", { version }, \"version\");\n } else if (found.version !== version) {\n sthis.logger.Warn().Url(url).Str(\"version\", version).Str(\"found\", found.version).Msg(\"version mismatch\");\n }\n return { db, dbName, version, url };\n });\n return {\n ...once,\n url: url.build().setParam(PARAM.VERSION, once.version).URI(),\n };\n}\n\nexport interface DbName {\n readonly fullDb: string;\n readonly objStore: string;\n readonly connectionKey: string;\n readonly dbName: string;\n}\n\nfunction joinDBName(...names: string[]): string {\n return names\n .map((i) => i.replace(/^[^a-zA-Z0-9]+/g, \"\").replace(/[^a-zA-Z0-9-]+/g, \"_\"))\n .filter((i) => i.length)\n .join(\".\");\n}\n\nexport function getIndexDBName(iurl: URI, sthis: SuperThis): DbName {\n const url = ensureVersion(iurl);\n const fullDb = url.pathname.replace(/^\\/+/, \"\").replace(/\\?.*$/, \"\"); // cut leading slashes\n const dbName = url.getParam(PARAM.NAME);\n if (!dbName) throw sthis.logger.Error().Str(\"url\", url.toString()).Msg(`name not found`).AsError();\n const result = joinDBName(fullDb, dbName);\n const objStore = getStore(url, sthis, joinDBName).name;\n const connectionKey = [result, objStore].join(\":\");\n return {\n fullDb: result,\n objStore,\n connectionKey,\n dbName,\n };\n}\n\nexport class IndexDBGateway implements bs.Gateway {\n _db: IDBPDatabase<unknown> = {} as IDBPDatabase<unknown>;\n\n async start(baseURL: URI, sthis: SuperThis): Promise<Result<URI>> {\n return exception2Result(async () => {\n await sthis.start();\n sthis.logger.Debug().Url(baseURL).Msg(\"starting\");\n const ic = await connectIdb(baseURL, sthis);\n this._db = ic.db;\n sthis.logger.Debug().Url(ic.url).Msg(\"started\");\n return ic.url;\n });\n }\n async close(): Promise<Result<void>> {\n return Result.Ok(undefined);\n }\n async destroy(baseUrl: URI, sthis: SuperThis): Promise<Result<void>> {\n return exception2Result(async () => {\n // return deleteDB(getIndexDBName(this.url).fullDb);\n const type = getStore(baseUrl, sthis, joinDBName).name;\n // console.log(\"IndexDBDataStore:destroy\", type);\n const idb = this._db;\n const trans = idb.transaction(type, \"readwrite\");\n const object_store = trans.objectStore(type);\n const toDelete = [];\n for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {\n toDelete.push(cursor.primaryKey);\n }\n for (const key of toDelete) {\n await trans.db.delete(type, key);\n }\n await trans.done;\n });\n }\n\n buildUrl(baseUrl: URI, key: string): Promise<Result<URI>> {\n return Promise.resolve(Result.Ok(baseUrl.build().setParam(PARAM.KEY, key).URI()));\n }\n\n async get(url: URI, sthis: SuperThis): Promise<bs.GetResult> {\n return exceptionWrapper(async () => {\n const key = getKey(url, sthis.logger);\n const store = getStore(url, sthis, joinDBName).name;\n sthis.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n const tx = this._db.transaction([store], \"readonly\");\n const bytes = await tx.objectStore(store).get(sanitzeKey(key));\n await tx.done;\n if (!bytes) {\n return Result.Err(new NotFoundError(`missing ${key}`));\n }\n return Promise.resolve(Result.Ok(bytes));\n });\n }\n async put(url: URI, bytes: Uint8Array, sthis: SuperThis): Promise<Result<void>> {\n return exception2Result(async () => {\n const key = getKey(url, sthis.logger);\n const store = getStore(url, sthis, joinDBName).name;\n sthis.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"putting\");\n const tx = this._db.transaction([store], \"readwrite\");\n await tx.objectStore(store).put(bytes, sanitzeKey(key));\n await tx.done;\n });\n }\n async delete(url: URI, sthis: SuperThis) {\n return exception2Result(async () => {\n const key = getKey(url, sthis.logger);\n const store = getStore(url, sthis, joinDBName).name;\n sthis.logger.Debug().Url(url).Str(\"key\", key).Str(\"store\", store).Msg(\"deleting\");\n const tx = this._db.transaction([store], \"readwrite\");\n await tx.objectStore(store).delete(sanitzeKey(key));\n await tx.done;\n return Result.Ok(undefined);\n });\n }\n\n async getPlain(url: URI, key: string, sthis: SuperThis): Promise<Result<Uint8Array>> {\n const ic = await connectIdb(url, sthis);\n const store = getStore(ic.url, sthis, joinDBName).name;\n sthis.logger.Debug().Str(\"key\", key).Str(\"store\", store).Msg(\"getting\");\n let bytes = await ic.db.get(store, sanitzeKey(key));\n sthis.logger.Debug().Str(\"key\", key).Str(\"store\", store).Int(\"len\", bytes.length).Msg(\"got\");\n if (typeof bytes === \"string\") {\n bytes = sthis.txt.encode(bytes);\n }\n return Result.Ok(bytes as Uint8Array);\n }\n}\n","export const INDEXDB_VERSION = \"v0.19-indexdb\";\n"],"mappings":"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","names":["openDB","openDB","db"]}
@@ -1 +0,0 @@
1
- {"inputs":{"src/runtime/gateways/indexdb/key-bag-indexdb.ts":{"bytes":1514,"imports":[{"path":"idb","kind":"import-statement","external":true},{"path":"@adviser/cement","kind":"import-statement","external":true},{"path":"@fireproof/core","kind":"import-statement","external":true}],"format":"esm"},"src/runtime/gateways/indexdb-version.ts":{"bytes":48,"imports":[],"format":"esm"},"src/runtime/gateways/indexdb/gateway-impl.ts":{"bytes":6169,"imports":[{"path":"idb","kind":"import-statement","external":true},{"path":"@adviser/cement","kind":"import-statement","external":true},{"path":"src/runtime/gateways/indexdb-version.ts","kind":"import-statement","original":"../indexdb-version.js"},{"path":"@fireproof/core","kind":"import-statement","external":true}],"format":"esm"},"src/runtime/gateways/indexdb/index.ts":{"bytes":285,"imports":[{"path":"src/runtime/gateways/indexdb/key-bag-indexdb.ts","kind":"import-statement","original":"./key-bag-indexdb.js"},{"path":"src/runtime/gateways/indexdb/key-bag-indexdb.ts","kind":"import-statement","original":"./key-bag-indexdb.js"},{"path":"src/runtime/gateways/indexdb/gateway-impl.ts","kind":"import-statement","original":"./gateway-impl.js"}],"format":"esm"}},"outputs":{"dist/fireproof-core/indexdb/index.cjs.map":{"imports":[],"exports":[],"inputs":{},"bytes":14055},"dist/fireproof-core/indexdb/index.cjs":{"imports":[{"path":"idb","kind":"require-call","external":true},{"path":"@adviser/cement","kind":"require-call","external":true},{"path":"@fireproof/core","kind":"require-call","external":true},{"path":"idb","kind":"require-call","external":true},{"path":"@adviser/cement","kind":"require-call","external":true},{"path":"@fireproof/core","kind":"require-call","external":true}],"exports":[],"entryPoint":"src/runtime/gateways/indexdb/index.ts","inputs":{"src/runtime/gateways/indexdb/index.ts":{"bytesInOutput":241},"src/runtime/gateways/indexdb/key-bag-indexdb.ts":{"bytesInOutput":1142},"src/runtime/gateways/indexdb/gateway-impl.ts":{"bytesInOutput":5508},"src/runtime/gateways/indexdb-version.ts":{"bytesInOutput":39}},"bytes":7965}}}
@@ -1 +0,0 @@
1
- {"inputs":{"src/runtime/gateways/indexdb/key-bag-indexdb.ts":{"bytes":1514,"imports":[{"path":"idb","kind":"import-statement","external":true},{"path":"@adviser/cement","kind":"import-statement","external":true},{"path":"@fireproof/core","kind":"import-statement","external":true}],"format":"esm"},"src/runtime/gateways/indexdb-version.ts":{"bytes":48,"imports":[],"format":"esm"},"src/runtime/gateways/indexdb/gateway-impl.ts":{"bytes":6169,"imports":[{"path":"idb","kind":"import-statement","external":true},{"path":"@adviser/cement","kind":"import-statement","external":true},{"path":"src/runtime/gateways/indexdb-version.ts","kind":"import-statement","original":"../indexdb-version.js"},{"path":"@fireproof/core","kind":"import-statement","external":true}],"format":"esm"},"src/runtime/gateways/indexdb/index.ts":{"bytes":285,"imports":[{"path":"src/runtime/gateways/indexdb/key-bag-indexdb.ts","kind":"import-statement","original":"./key-bag-indexdb.js"},{"path":"src/runtime/gateways/indexdb/key-bag-indexdb.ts","kind":"import-statement","original":"./key-bag-indexdb.js"},{"path":"src/runtime/gateways/indexdb/gateway-impl.ts","kind":"import-statement","original":"./gateway-impl.js"}],"format":"esm"}},"outputs":{"dist/fireproof-core/indexdb/index.js.map":{"imports":[],"exports":[],"inputs":{},"bytes":13647},"dist/fireproof-core/indexdb/index.js":{"imports":[{"path":"idb","kind":"import-statement","external":true},{"path":"@adviser/cement","kind":"import-statement","external":true},{"path":"@fireproof/core","kind":"import-statement","external":true},{"path":"idb","kind":"import-statement","external":true},{"path":"@adviser/cement","kind":"import-statement","external":true},{"path":"@fireproof/core","kind":"import-statement","external":true}],"exports":["GatewayImpl","KeyBagProviderImpl","KeyBagProviderIndexDB"],"entryPoint":"src/runtime/gateways/indexdb/index.ts","inputs":{"src/runtime/gateways/indexdb/key-bag-indexdb.ts":{"bytesInOutput":1088},"src/runtime/gateways/indexdb/index.ts":{"bytesInOutput":0},"src/runtime/gateways/indexdb/gateway-impl.ts":{"bytesInOutput":5129},"src/runtime/gateways/indexdb-version.ts":{"bytesInOutput":39}},"bytes":6565}}}