@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.
- package/index.cjs +124 -147
- package/index.cjs.map +1 -1
- package/index.d.cts +102 -97
- package/index.d.ts +102 -97
- package/index.js +124 -147
- package/index.js.map +1 -1
- package/{indexdb → indexeddb}/index.cjs +16 -16
- package/indexeddb/index.cjs.map +1 -0
- package/{indexdb → indexeddb}/index.d.cts +4 -4
- package/{indexdb → indexeddb}/index.d.ts +4 -4
- package/{indexdb → indexeddb}/index.js +15 -15
- package/indexeddb/index.js.map +1 -0
- package/indexeddb/metafile-cjs.json +1 -0
- package/indexeddb/metafile-esm.json +1 -0
- package/metafile-cjs.json +1 -1
- package/metafile-esm.json +1 -1
- package/package.json +10 -10
- package/react/index.d.cts +1 -1
- package/react/index.d.ts +1 -1
- package/tests/blockstore/interceptor-gateway.test.ts +17 -17
- package/tests/blockstore/{keyed-crypto-indexdb-file.test.ts → keyed-crypto-indexeddb-file.test.ts} +13 -12
- package/tests/blockstore/keyed-crypto.test.ts +20 -19
- package/tests/blockstore/store.test.ts +19 -11
- package/tests/fireproof/all-gateway.test.ts +67 -60
- package/tests/gateway/{indexdb → indexeddb}/loader-config.test.ts +10 -10
- package/tests/helpers.ts +1 -1
- package/indexdb/index.cjs.map +0 -1
- package/indexdb/index.js.map +0 -1
- package/indexdb/metafile-cjs.json +0 -1
- package/indexdb/metafile-esm.json +0 -1
@@ -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
|
-
|
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(
|
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
|
-
|
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(
|
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
|
-
|
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(
|
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
|
-
|
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(
|
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
|
56
|
-
metaStore = (await
|
57
|
-
fileStore = (await
|
58
|
-
walStore = (await
|
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(
|
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(
|
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(
|
126
|
-
await carGateway.start(
|
127
|
-
const carPutResult = await carGateway.put(
|
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(
|
136
|
-
await carGateway.start(
|
137
|
-
await carGateway.put(
|
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(
|
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(
|
149
|
-
await carGateway.start(
|
150
|
-
await carGateway.put(
|
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(
|
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(
|
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(
|
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(
|
169
|
+
await metaGateway.start(ctx, metaStore.url());
|
168
170
|
});
|
169
171
|
|
170
172
|
it("should close Meta Gateway", async function () {
|
171
|
-
await metaGateway.start(
|
172
|
-
await metaGateway.close(
|
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(
|
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(
|
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(
|
186
|
-
await fileGateway.start(
|
187
|
-
const filePutResult = await fileGateway.put(
|
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(
|
196
|
-
await fileGateway.start(
|
197
|
-
await fileGateway.put(
|
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(
|
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(
|
208
|
-
await fileGateway.start(
|
209
|
-
await fileGateway.put(
|
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(
|
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(
|
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(
|
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(
|
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(
|
233
|
-
await walGateway.start(
|
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(
|
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(
|
250
|
-
await walGateway.start(
|
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(
|
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(
|
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(
|
289
|
-
await walGateway.start(
|
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(
|
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(
|
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(
|
318
|
-
await walGateway.close(
|
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(
|
388
|
-
await metaGateway.start(
|
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(
|
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(
|
445
|
-
await metaGateway.start(
|
446
|
-
const metaGetResult = await metaGateway.get(
|
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(
|
457
|
-
await metaGateway.start(
|
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(
|
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
|
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("
|
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: "
|
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-
|
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: "
|
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-
|
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: "
|
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-
|
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: "
|
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-
|
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(`
|
34
|
+
merged = URI.merge(`indexeddb://fp`, old, "indexeddb:");
|
35
35
|
} else {
|
36
36
|
merged = URI.merge(`./dist/env`, old);
|
37
37
|
}
|
package/indexdb/index.cjs.map
DELETED
@@ -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"]}
|
package/indexdb/index.js.map
DELETED
@@ -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":";AAAA,SAAuB,cAAc;AACrC,SAAiB,mBAAwB;AACzC,SAAyB,UAAU;AAE5B,IAAM,wBAAN,MAA4D;AAAA,EAOjE,YAAY,KAAU,OAAkB;AANxC,SAAS,MAA0C,IAAI,YAAmC;AAOxF,SAAK,QAAQ;AACb,SAAK,SAAS,MAAM;AACpB,SAAK,MAAM;AACX,SAAK,SAAS,GAAG,QAAQ,KAAK,KAAK,KAAK,KAAK;AAAA,EAC/C;AAAA,EAEA,MAAM,WAA2C;AAC/C,WAAO,KAAK,IAAI,KAAK,YAAY;AAC/B,aAAO,MAAM,OAAO,KAAK,QAAQ,GAAG;AAAA,QAClC,QAAQ,IAAI;AAEV,WAAC,KAAK,EAAE,IAAI,CAAC,UAAU;AACrB,eAAG,kBAAkB,OAAO;AAAA,cAC1B,eAAe;AAAA,YACjB,CAAC;AAAA,UACH,CAAC;AAAA,QACH;AAAA,MACF,CAAC;AAAA,IACH,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,IAAgD;AACxD,UAAM,KAAK,MAAM,KAAK,SAAS;AAC/B,UAAM,KAAK,GAAG,YAAY,CAAC,KAAK,GAAG,UAAU;AAC7C,UAAM,UAAU,MAAM,GAAG,YAAY,KAAK,EAAE,IAAI,EAAE;AAClD,UAAM,GAAG;AACT,QAAI,CAAC,SAAS;AACZ,aAAO;AAAA,IACT;AACA,WAAO;AAAA,EACT;AAAA,EAEA,MAAM,IAAI,IAAY,MAAoC;AACxD,UAAM,KAAK,MAAM,KAAK,SAAS;AAC/B,UAAM,KAAK,GAAG,YAAY,CAAC,KAAK,GAAG,WAAW;AAC9C,UAAM,GAAG,YAAY,KAAK,EAAE,IAAI,MAAM,EAAE;AACxC,UAAM,GAAG;AAAA,EACX;AACF;;;AClDA,SAAS,UAAAA,eAA4B;AACrC,SAAS,kBAAkB,iBAAiB,cAAmB;;;ACDxD,IAAM,kBAAkB;;;ADI/B,SAAS,eAAe,OAAO,kBAAkB,QAAQ,gBAAoC;AAE7F,SAAS,cAAc,KAAe;AACpC,SAAO,IAAI,MAAM,EAAE,SAAS,MAAM,SAAS,eAAe,EAAE,IAAI;AAClE;AAQA,IAAM,cAAc,IAAI,gBAAyB;AAEjD,SAAS,WAAW,KAA2C;AAC7D,MAAI,IAAI,WAAW,GAAG;AACpB,UAAM,IAAI,CAAC;AAAA,EACb;AACA,SAAO;AACT;AAEA,eAAe,WAAW,KAAU,OAAoC;AACtE,QAAM,SAAS,eAAe,KAAK,KAAK;AACxC,QAAM,OAAO,MAAM,YAAY,IAAI,OAAO,MAAM,EAAE,KAAK,YAAY;AACjE,UAAM,KAAK,MAAMC,QAAO,OAAO,QAAQ,GAAG;AAAA,MACxC,QAAQC,KAAI;AACV,SAAC,WAAW,QAAQ,OAAO,QAAQ,YAAY,WAAW,UAAU,EAAE,IAAI,CAAC,UAAU;AACnF,UAAAA,IAAG,kBAAkB,OAAO;AAAA,YAC1B,eAAe;AAAA,UACjB,CAAC;AAAA,QACH,CAAC;AAAA,MACH;AAAA,IACF,CAAC;AACD,UAAM,QAAQ,MAAM,GAAG,IAAI,WAAW,SAAS;AAC/C,UAAM,UAAU,cAAc,GAAG,EAAE,SAAS,MAAM,OAAO;AACzD,QAAI,CAAC,OAAO;AACV,YAAM,GAAG,IAAI,WAAW,EAAE,QAAQ,GAAG,SAAS;AAAA,IAChD,WAAW,MAAM,YAAY,SAAS;AACpC,YAAM,OAAO,KAAK,EAAE,IAAI,GAAG,EAAE,IAAI,WAAW,OAAO,EAAE,IAAI,SAAS,MAAM,OAAO,EAAE,IAAI,kBAAkB;AAAA,IACzG;AACA,WAAO,EAAE,IAAI,QAAQ,SAAS,IAAI;AAAA,EACpC,CAAC;AACD,SAAO;AAAA,IACL,GAAG;AAAA,IACH,KAAK,IAAI,MAAM,EAAE,SAAS,MAAM,SAAS,KAAK,OAAO,EAAE,IAAI;AAAA,EAC7D;AACF;AASA,SAAS,cAAc,OAAyB;AAC9C,SAAO,MACJ,IAAI,CAAC,MAAM,EAAE,QAAQ,mBAAmB,EAAE,EAAE,QAAQ,mBAAmB,GAAG,CAAC,EAC3E,OAAO,CAAC,MAAM,EAAE,MAAM,EACtB,KAAK,GAAG;AACb;AAEO,SAAS,eAAe,MAAW,OAA0B;AAClE,QAAM,MAAM,cAAc,IAAI;AAC9B,QAAM,SAAS,IAAI,SAAS,QAAQ,QAAQ,EAAE,EAAE,QAAQ,SAAS,EAAE;AACnE,QAAM,SAAS,IAAI,SAAS,MAAM,IAAI;AACtC,MAAI,CAAC,OAAQ,OAAM,MAAM,OAAO,MAAM,EAAE,IAAI,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,gBAAgB,EAAE,QAAQ;AACjG,QAAM,SAAS,WAAW,QAAQ,MAAM;AACxC,QAAM,WAAW,SAAS,KAAK,OAAO,UAAU,EAAE;AAClD,QAAM,gBAAgB,CAAC,QAAQ,QAAQ,EAAE,KAAK,GAAG;AACjD,SAAO;AAAA,IACL,QAAQ;AAAA,IACR;AAAA,IACA;AAAA,IACA;AAAA,EACF;AACF;AAEO,IAAM,iBAAN,MAA2C;AAAA,EAA3C;AACL,eAA6B,CAAC;AAAA;AAAA,EAE9B,MAAM,MAAM,SAAc,OAAwC;AAChE,WAAO,iBAAiB,YAAY;AAClC,YAAM,MAAM,MAAM;AAClB,YAAM,OAAO,MAAM,EAAE,IAAI,OAAO,EAAE,IAAI,UAAU;AAChD,YAAM,KAAK,MAAM,WAAW,SAAS,KAAK;AAC1C,WAAK,MAAM,GAAG;AACd,YAAM,OAAO,MAAM,EAAE,IAAI,GAAG,GAAG,EAAE,IAAI,SAAS;AAC9C,aAAO,GAAG;AAAA,IACZ,CAAC;AAAA,EACH;AAAA,EACA,MAAM,QAA+B;AACnC,WAAO,OAAO,GAAG,MAAS;AAAA,EAC5B;AAAA,EACA,MAAM,QAAQ,SAAc,OAAyC;AACnE,WAAO,iBAAiB,YAAY;AAElC,YAAM,OAAO,SAAS,SAAS,OAAO,UAAU,EAAE;AAElD,YAAM,MAAM,KAAK;AACjB,YAAM,QAAQ,IAAI,YAAY,MAAM,WAAW;AAC/C,YAAM,eAAe,MAAM,YAAY,IAAI;AAC3C,YAAM,WAAW,CAAC;AAClB,eAAS,SAAS,MAAM,aAAa,WAAW,GAAG,QAAQ,SAAS,MAAM,OAAO,SAAS,GAAG;AAC3F,iBAAS,KAAK,OAAO,UAAU;AAAA,MACjC;AACA,iBAAW,OAAO,UAAU;AAC1B,cAAM,MAAM,GAAG,OAAO,MAAM,GAAG;AAAA,MACjC;AACA,YAAM,MAAM;AAAA,IACd,CAAC;AAAA,EACH;AAAA,EAEA,SAAS,SAAc,KAAmC;AACxD,WAAO,QAAQ,QAAQ,OAAO,GAAG,QAAQ,MAAM,EAAE,SAAS,MAAM,KAAK,GAAG,EAAE,IAAI,CAAC,CAAC;AAAA,EAClF;AAAA,EAEA,MAAM,IAAI,KAAU,OAAyC;AAC3D,WAAO,iBAAiB,YAAY;AAClC,YAAM,MAAM,OAAO,KAAK,MAAM,MAAM;AACpC,YAAM,QAAQ,SAAS,KAAK,OAAO,UAAU,EAAE;AAC/C,YAAM,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS;AAC/E,YAAM,KAAK,KAAK,IAAI,YAAY,CAAC,KAAK,GAAG,UAAU;AACnD,YAAM,QAAQ,MAAM,GAAG,YAAY,KAAK,EAAE,IAAI,WAAW,GAAG,CAAC;AAC7D,YAAM,GAAG;AACT,UAAI,CAAC,OAAO;AACV,eAAO,OAAO,IAAI,IAAI,cAAc,WAAW,GAAG,EAAE,CAAC;AAAA,MACvD;AACA,aAAO,QAAQ,QAAQ,OAAO,GAAG,KAAK,CAAC;AAAA,IACzC,CAAC;AAAA,EACH;AAAA,EACA,MAAM,IAAI,KAAU,OAAmB,OAAyC;AAC9E,WAAO,iBAAiB,YAAY;AAClC,YAAM,MAAM,OAAO,KAAK,MAAM,MAAM;AACpC,YAAM,QAAQ,SAAS,KAAK,OAAO,UAAU,EAAE;AAC/C,YAAM,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS;AAC/E,YAAM,KAAK,KAAK,IAAI,YAAY,CAAC,KAAK,GAAG,WAAW;AACpD,YAAM,GAAG,YAAY,KAAK,EAAE,IAAI,OAAO,WAAW,GAAG,CAAC;AACtD,YAAM,GAAG;AAAA,IACX,CAAC;AAAA,EACH;AAAA,EACA,MAAM,OAAO,KAAU,OAAkB;AACvC,WAAO,iBAAiB,YAAY;AAClC,YAAM,MAAM,OAAO,KAAK,MAAM,MAAM;AACpC,YAAM,QAAQ,SAAS,KAAK,OAAO,UAAU,EAAE;AAC/C,YAAM,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,SAAS,KAAK,EAAE,IAAI,UAAU;AAChF,YAAM,KAAK,KAAK,IAAI,YAAY,CAAC,KAAK,GAAG,WAAW;AACpD,YAAM,GAAG,YAAY,KAAK,EAAE,OAAO,WAAW,GAAG,CAAC;AAClD,YAAM,GAAG;AACT,aAAO,OAAO,GAAG,MAAS;AAAA,IAC5B,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,KAAU,KAAa,OAA+C;AACnF,UAAM,KAAK,MAAM,WAAW,KAAK,KAAK;AACtC,UAAM,QAAQ,SAAS,GAAG,KAAK,OAAO,UAAU,EAAE;AAClD,UAAM,OAAO,MAAM,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,SAAS,KAAK,EAAE,IAAI,SAAS;AACtE,QAAI,QAAQ,MAAM,GAAG,GAAG,IAAI,OAAO,WAAW,GAAG,CAAC;AAClD,UAAM,OAAO,MAAM,EAAE,IAAI,OAAO,GAAG,EAAE,IAAI,SAAS,KAAK,EAAE,IAAI,OAAO,MAAM,MAAM,EAAE,IAAI,KAAK;AAC3F,QAAI,OAAO,UAAU,UAAU;AAC7B,cAAQ,MAAM,IAAI,OAAO,KAAK;AAAA,IAChC;AACA,WAAO,OAAO,GAAG,KAAmB;AAAA,EACtC;AACF;","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}}}
|