@fireproof/core 0.19.121-dev → 0.19.122

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (70) hide show
  1. package/deno.json +3 -3
  2. package/index.cjs +600 -1004
  3. package/index.cjs.map +1 -1
  4. package/index.d.cts +26 -60
  5. package/index.d.ts +26 -60
  6. package/index.js +392 -97
  7. package/index.js.map +1 -1
  8. package/metafile-cjs.json +1 -1
  9. package/metafile-esm.json +1 -1
  10. package/node/index.cjs +374 -0
  11. package/node/index.cjs.map +1 -0
  12. package/node/index.d.cts +43 -0
  13. package/node/index.d.ts +43 -0
  14. package/node/index.js +279 -0
  15. package/node/index.js.map +1 -0
  16. package/node/{mem-filesystem.js → mem-filesystem-LPPT7QV5.js} +1 -1
  17. package/node/metafile-cjs.json +1 -1
  18. package/node/metafile-esm.json +1 -1
  19. package/package.json +17 -15
  20. package/react/index.cjs +91 -26
  21. package/react/index.cjs.map +1 -1
  22. package/react/index.d.cts +16 -1
  23. package/react/index.d.ts +16 -1
  24. package/react/index.js +92 -27
  25. package/react/index.js.map +1 -1
  26. package/react/metafile-cjs.json +1 -1
  27. package/react/metafile-esm.json +1 -1
  28. package/tests/blockstore/keyed-crypto.test.ts +4 -2
  29. package/tests/fireproof/config.test.ts +133 -142
  30. package/web/{gateway-impl.cjs → index.cjs} +58 -9
  31. package/web/index.cjs.map +1 -0
  32. package/web/index.d.cts +44 -0
  33. package/web/index.d.ts +44 -0
  34. package/web/{gateway-impl.js → index.js} +52 -5
  35. package/web/index.js.map +1 -0
  36. package/web/metafile-cjs.json +1 -1
  37. package/web/metafile-esm.json +1 -1
  38. package/chunk-7EWIAXTM.js +0 -7
  39. package/chunk-7EWIAXTM.js.map +0 -1
  40. package/chunk-F4FC6B2T.js +0 -63
  41. package/chunk-F4FC6B2T.js.map +0 -1
  42. package/chunk-PZ5AY32C.js +0 -10
  43. package/chunk-PZ5AY32C.js.map +0 -1
  44. package/chunk-RXC4JGJT.js +0 -301
  45. package/chunk-RXC4JGJT.js.map +0 -1
  46. package/gateway-C62S56GY.js +0 -66
  47. package/gateway-C62S56GY.js.map +0 -1
  48. package/gateway-VVS4QWDA.js +0 -145
  49. package/gateway-VVS4QWDA.js.map +0 -1
  50. package/key-bag-file-PWZ3QE7B.js +0 -55
  51. package/key-bag-file-PWZ3QE7B.js.map +0 -1
  52. package/key-bag-indexdb-SYG3YD4D.js +0 -51
  53. package/key-bag-indexdb-SYG3YD4D.js.map +0 -1
  54. package/node/mem-filesystem.cjs +0 -72
  55. package/node/mem-filesystem.cjs.map +0 -1
  56. package/node/mem-filesystem.d.cts +0 -25
  57. package/node/mem-filesystem.d.ts +0 -25
  58. package/node/node-filesystem.cjs +0 -86
  59. package/node/node-filesystem.cjs.map +0 -1
  60. package/node/node-filesystem.d.cts +0 -35
  61. package/node/node-filesystem.d.ts +0 -35
  62. package/node/node-filesystem.js +0 -44
  63. package/node/node-filesystem.js.map +0 -1
  64. package/utils-ZVVGAXFE.js +0 -13
  65. package/utils-ZVVGAXFE.js.map +0 -1
  66. package/web/gateway-impl.cjs.map +0 -1
  67. package/web/gateway-impl.d.cts +0 -31
  68. package/web/gateway-impl.d.ts +0 -31
  69. package/web/gateway-impl.js.map +0 -1
  70. /package/node/{mem-filesystem.js.map → mem-filesystem-LPPT7QV5.js.map} +0 -0
package/node/index.cjs ADDED
@@ -0,0 +1,374 @@
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __esm = (fn, res) => function __init() {
9
+ return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res;
10
+ };
11
+ var __export = (target, all) => {
12
+ for (var name in all)
13
+ __defProp(target, name, { get: all[name], enumerable: true });
14
+ };
15
+ var __copyProps = (to, from, except, desc) => {
16
+ if (from && typeof from === "object" || typeof from === "function") {
17
+ for (let key of __getOwnPropNames(from))
18
+ if (!__hasOwnProp.call(to, key) && key !== except)
19
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
20
+ }
21
+ return to;
22
+ };
23
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
24
+ // If the importer is in node compatibility mode or this is not an ESM
25
+ // file that has been converted to a CommonJS file using a Babel-
26
+ // compatible transform (i.e. "__esModule" has not been set), then set
27
+ // "default" to the CommonJS "module.exports" for node compatibility.
28
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
29
+ mod
30
+ ));
31
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
32
+
33
+ // src/runtime/gateways/file/node/to-array-buffer.ts
34
+ function toArrayBuffer(buffer) {
35
+ if (typeof buffer === "string") {
36
+ buffer = Buffer.from(buffer);
37
+ }
38
+ const ab = new ArrayBuffer(buffer.length);
39
+ const view = new Uint8Array(ab);
40
+ for (let i = 0; i < buffer.length; ++i) {
41
+ view[i] = buffer[i];
42
+ }
43
+ return view;
44
+ }
45
+ var init_to_array_buffer = __esm({
46
+ "src/runtime/gateways/file/node/to-array-buffer.ts"() {
47
+ "use strict";
48
+ }
49
+ });
50
+
51
+ // src/runtime/gateways/file/node/mem-filesystem.ts
52
+ var mem_filesystem_exports = {};
53
+ __export(mem_filesystem_exports, {
54
+ MemFileSystem: () => MemFileSystem
55
+ });
56
+ var import_memfs, MemFileSystem;
57
+ var init_mem_filesystem = __esm({
58
+ "src/runtime/gateways/file/node/mem-filesystem.ts"() {
59
+ "use strict";
60
+ import_memfs = require("memfs");
61
+ init_to_array_buffer();
62
+ MemFileSystem = class {
63
+ async start() {
64
+ return this;
65
+ }
66
+ mkdir(path, options) {
67
+ return import_memfs.fs.promises.mkdir(path, options);
68
+ }
69
+ readdir(path, options) {
70
+ return import_memfs.fs.promises.readdir(path, options);
71
+ }
72
+ rm(path, options) {
73
+ return import_memfs.fs.promises.rm(path, options);
74
+ }
75
+ copyFile(source, destination) {
76
+ return import_memfs.fs.promises.copyFile(source, destination);
77
+ }
78
+ async readfile(path, options) {
79
+ const ret = await import_memfs.fs.promises.readFile(path, options);
80
+ return toArrayBuffer(ret);
81
+ }
82
+ stat(path) {
83
+ return import_memfs.fs.promises.stat(path);
84
+ }
85
+ unlink(path) {
86
+ return import_memfs.fs.promises.unlink(path);
87
+ }
88
+ writefile(path, data) {
89
+ return import_memfs.fs.promises.writeFile(path, Buffer.from(data));
90
+ }
91
+ };
92
+ }
93
+ });
94
+
95
+ // src/runtime/gateways/file/node/index.ts
96
+ var index_exports = {};
97
+ __export(index_exports, {
98
+ GatewayImpl: () => FileGateway,
99
+ GatewayTestImpl: () => FileTestGateway,
100
+ KeyBagProviderFile: () => KeyBagProviderFile,
101
+ KeyBagProviderImpl: () => KeyBagProviderFile,
102
+ getFileSystem: () => getFileSystem
103
+ });
104
+ module.exports = __toCommonJS(index_exports);
105
+
106
+ // src/runtime/gateways/file/node/key-bag-file.ts
107
+ var import_core = require("@fireproof/core");
108
+
109
+ // src/runtime/gateways/file/node/get-file-system.ts
110
+ var import_cement2 = require("@adviser/cement");
111
+
112
+ // src/runtime/gateways/file/node/node-filesystem.ts
113
+ init_to_array_buffer();
114
+ var import_cement = require("@adviser/cement");
115
+ var NodeFileSystem = class {
116
+ async start() {
117
+ this.fs = await import("fs/promises");
118
+ return this;
119
+ }
120
+ async mkdir(path, options) {
121
+ return this.fs?.mkdir(path, options);
122
+ }
123
+ async readdir(path, options) {
124
+ return this.fs?.readdir(path, options);
125
+ }
126
+ async rm(path, options) {
127
+ return this.fs?.rm(path, options);
128
+ }
129
+ async copyFile(source, destination) {
130
+ return this.fs?.copyFile(source, destination);
131
+ }
132
+ async readfile(path, options) {
133
+ const ret = await this.fs?.readFile(path, options);
134
+ return toArrayBuffer(ret);
135
+ }
136
+ stat(path) {
137
+ return this.fs?.stat(path);
138
+ }
139
+ async unlink(path) {
140
+ return this.fs?.unlink(path);
141
+ }
142
+ async writefile(path, data) {
143
+ if ((0, import_cement.runtimeFn)().isDeno) {
144
+ return this.fs?.writeFile(path, data);
145
+ }
146
+ return this.fs?.writeFile(path, Buffer.from(data));
147
+ }
148
+ };
149
+
150
+ // src/runtime/gateways/file/node/get-file-system.ts
151
+ var externalLoaders = new import_cement2.KeyedResolvOnce();
152
+ async function getFileSystem(url) {
153
+ const name = url.getParam("fs", "node");
154
+ let fs2;
155
+ switch (name) {
156
+ case "mem":
157
+ fs2 = await externalLoaders.get(name).once(async () => {
158
+ const { MemFileSystem: MemFileSystem2 } = await Promise.resolve().then(() => (init_mem_filesystem(), mem_filesystem_exports));
159
+ return new MemFileSystem2();
160
+ });
161
+ break;
162
+ // case 'deno': {
163
+ // const { DenoFileSystem } = await import("./deno-filesystem.js");
164
+ // fs = new DenoFileSystem();
165
+ // break;
166
+ // }
167
+ default:
168
+ fs2 = await externalLoaders.get(name).once(async () => {
169
+ return new NodeFileSystem();
170
+ });
171
+ }
172
+ return fs2.start();
173
+ }
174
+
175
+ // src/runtime/gateways/file/node/key-bag-file.ts
176
+ var KeyBagProviderFile = class {
177
+ async _prepare(id) {
178
+ await this.sthis.start();
179
+ let sysFS;
180
+ switch (this.url.protocol) {
181
+ case "file:": {
182
+ sysFS = await getFileSystem(this.url);
183
+ break;
184
+ }
185
+ default:
186
+ throw this.logger.Error().Url(this.url).Msg("unsupported protocol").AsError();
187
+ }
188
+ const dirName = this.url.pathname;
189
+ await sysFS.mkdir(dirName, { recursive: true });
190
+ return {
191
+ dirName,
192
+ sysFS,
193
+ fName: this.sthis.pathOps.join(dirName, `${id.replace(/[^a-zA-Z0-9]/g, "_")}.json`)
194
+ };
195
+ }
196
+ constructor(url, sthis) {
197
+ this.url = url;
198
+ this.sthis = sthis;
199
+ this.logger = sthis.logger;
200
+ }
201
+ async get(id) {
202
+ const ctx = await this._prepare(id);
203
+ try {
204
+ const p = await ctx.sysFS.readfile(ctx.fName);
205
+ const ki = JSON.parse(this.sthis.txt.decode(p));
206
+ return ki;
207
+ } catch (e) {
208
+ if ((0, import_core.isNotFoundError)(e)) {
209
+ return void 0;
210
+ }
211
+ throw this.logger.Error().Err(e).Str("file", ctx.dirName).Msg("read bag failed").AsError();
212
+ }
213
+ }
214
+ async set(id, item) {
215
+ const ctx = await this._prepare(id);
216
+ const p = this.sthis.txt.encode(JSON.stringify(item, null, 2));
217
+ await ctx.sysFS.writefile(ctx.fName, p);
218
+ }
219
+ };
220
+
221
+ // src/runtime/gateways/file/version.ts
222
+ var FILESTORE_VERSION = "v0.19-file";
223
+
224
+ // src/runtime/gateways/file/node/gateway-impl.ts
225
+ var import_cement3 = require("@adviser/cement");
226
+ var import_core3 = require("@fireproof/core");
227
+
228
+ // src/runtime/gateways/file/node/utils.ts
229
+ var import_core2 = require("@fireproof/core");
230
+ function getPath(url, sthis) {
231
+ const basePath = url.pathname;
232
+ const name = url.getParam("name");
233
+ if (name) {
234
+ const version = url.getParam("version");
235
+ if (!version) throw sthis.logger.Error().Url(url).Msg(`version not found`).AsError();
236
+ return sthis.pathOps.join(basePath, version, name);
237
+ }
238
+ return sthis.pathOps.join(basePath);
239
+ }
240
+ function getFileName(url, sthis) {
241
+ const key = url.getParam("key");
242
+ if (!key) throw sthis.logger.Error().Url(url).Msg(`key not found`).AsError();
243
+ const res = (0, import_core2.getStore)(url, sthis, (...a) => a.join("-"));
244
+ switch (res.store) {
245
+ case "data":
246
+ return sthis.pathOps.join(res.name, key + ".car");
247
+ case "wal":
248
+ case "meta":
249
+ return sthis.pathOps.join(res.name, key + ".json");
250
+ default:
251
+ throw sthis.logger.Error().Url(url).Msg(`unsupported store type`).AsError();
252
+ }
253
+ }
254
+
255
+ // src/runtime/gateways/file/node/gateway-impl.ts
256
+ var versionFiles = new import_cement3.KeyedResolvOnce();
257
+ var FileGateway = class {
258
+ constructor(sthis) {
259
+ this.sthis = sthis;
260
+ this.logger = sthis.logger;
261
+ }
262
+ async getVersionFromFile(fs2, path, logger) {
263
+ return versionFiles.get(path).once(async () => {
264
+ await fs2.mkdir(path, { recursive: true });
265
+ const vFile = this.sthis.pathOps.join(path, "version");
266
+ const vFileStat = await fs2.stat(vFile).catch(() => void 0);
267
+ if (!vFileStat) {
268
+ await fs2.writefile(this.sthis.pathOps.join(path, "version"), FILESTORE_VERSION);
269
+ return FILESTORE_VERSION;
270
+ } else if (!vFileStat.isFile()) {
271
+ throw logger.Error().Str("file", vFile).Msg(`version file is a directory`).AsError();
272
+ }
273
+ const v = await fs2.readfile(vFile);
274
+ const vStr = this.sthis.txt.decode(v);
275
+ if (vStr !== FILESTORE_VERSION) {
276
+ logger.Warn().Str("file", vFile).Str("from", vStr).Str("expected", FILESTORE_VERSION).Msg(`version mismatch`);
277
+ }
278
+ return vStr;
279
+ });
280
+ }
281
+ start(baseURL) {
282
+ return (0, import_cement3.exception2Result)(async () => {
283
+ const fs2 = await getFileSystem(baseURL);
284
+ const url = baseURL.build();
285
+ url.defParam("version", FILESTORE_VERSION);
286
+ const dbUrl = await this.buildUrl(url.URI(), "dummy");
287
+ const dbdirFile = this.getFilePath(dbUrl.Ok());
288
+ await fs2.mkdir(this.sthis.pathOps.dirname(dbdirFile), { recursive: true });
289
+ const dbroot = this.sthis.pathOps.dirname(dbdirFile);
290
+ this.logger.Debug().Url(url.URI()).Str("dbroot", dbroot).Msg("start");
291
+ url.setParam("version", await this.getVersionFromFile(fs2, dbroot, this.logger));
292
+ return url.URI();
293
+ });
294
+ }
295
+ async buildUrl(baseUrl, key) {
296
+ return import_cement3.Result.Ok(baseUrl.build().setParam("key", key).URI());
297
+ }
298
+ async close() {
299
+ return import_cement3.Result.Ok(void 0);
300
+ }
301
+ // abstract buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;
302
+ getFilePath(url) {
303
+ const key = url.getParam("key");
304
+ if (!key) throw this.logger.Error().Url(url).Msg(`key not found`).AsError();
305
+ return this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));
306
+ }
307
+ async put(url, body) {
308
+ return (0, import_cement3.exception2Result)(async () => {
309
+ const file = await this.getFilePath(url);
310
+ this.logger.Debug().Str("url", url.toString()).Str("file", file).Msg("put");
311
+ await getFileSystem(url).then((fs2) => fs2.writefile(file, body));
312
+ });
313
+ }
314
+ async get(url) {
315
+ return (0, import_core3.exceptionWrapper)(async () => {
316
+ const file = this.getFilePath(url);
317
+ try {
318
+ const res = await getFileSystem(url).then((fs2) => fs2.readfile(file));
319
+ this.logger.Debug().Url(url.asURL()).Str("file", file).Msg("get");
320
+ return import_cement3.Result.Ok(new Uint8Array(res));
321
+ } catch (e) {
322
+ if ((0, import_core3.isNotFoundError)(e)) {
323
+ return import_cement3.Result.Err(new import_core3.NotFoundError(`file not found: ${file}`));
324
+ }
325
+ return import_cement3.Result.Err(e);
326
+ }
327
+ });
328
+ }
329
+ async delete(url) {
330
+ return (0, import_cement3.exception2Result)(async () => {
331
+ await getFileSystem(url).then((fs2) => fs2.unlink(this.getFilePath(url)));
332
+ });
333
+ }
334
+ async destroy(baseURL) {
335
+ const url = await this.buildUrl(baseURL, "x");
336
+ if (url.isErr()) return url;
337
+ const filepath = this.sthis.pathOps.dirname(this.getFilePath(url.Ok()));
338
+ const fs2 = await getFileSystem(baseURL);
339
+ let files = [];
340
+ try {
341
+ files = await fs2.readdir(filepath);
342
+ } catch (e) {
343
+ if (!(0, import_core3.isNotFoundError)(e)) {
344
+ throw this.logger.Error().Err(e).Str("dir", filepath).Msg("destroy:readdir").AsError();
345
+ }
346
+ }
347
+ for (const file of files) {
348
+ const pathed = this.sthis.pathOps.join(filepath, file);
349
+ try {
350
+ await fs2.unlink(pathed);
351
+ } catch (e) {
352
+ if (!(0, import_core3.isNotFoundError)(e)) {
353
+ throw this.logger.Error().Err(e).Str("file", pathed).Msg("destroy:unlink").AsError();
354
+ }
355
+ }
356
+ }
357
+ return import_cement3.Result.Ok(void 0);
358
+ }
359
+ };
360
+ var FileTestGateway = class {
361
+ constructor(sthis) {
362
+ this.logger = (0, import_core3.ensureLogger)(sthis, "FileTestStore");
363
+ this.sthis = sthis;
364
+ }
365
+ async get(iurl, key) {
366
+ const url = iurl.build().setParam("key", key).URI();
367
+ const dbFile = this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));
368
+ this.logger.Debug().Url(url).Str("dbFile", dbFile).Msg("get");
369
+ const buffer = await (await getFileSystem(url)).readfile(dbFile);
370
+ this.logger.Debug().Url(url).Str("dbFile", dbFile).Len(buffer).Msg("got");
371
+ return buffer;
372
+ }
373
+ };
374
+ //# sourceMappingURL=index.cjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../../../src/runtime/gateways/file/node/to-array-buffer.ts","../../../src/runtime/gateways/file/node/mem-filesystem.ts","../../../src/runtime/gateways/file/node/index.ts","../../../src/runtime/gateways/file/node/key-bag-file.ts","../../../src/runtime/gateways/file/node/get-file-system.ts","../../../src/runtime/gateways/file/node/node-filesystem.ts","../../../src/runtime/gateways/file/version.ts","../../../src/runtime/gateways/file/node/gateway-impl.ts","../../../src/runtime/gateways/file/node/utils.ts"],"sourcesContent":["export function toArrayBuffer(buffer: Buffer | string): Uint8Array {\n if (typeof buffer === \"string\") {\n buffer = Buffer.from(buffer);\n }\n const ab = new ArrayBuffer(buffer.length);\n const view = new Uint8Array(ab);\n for (let i = 0; i < buffer.length; ++i) {\n view[i] = buffer[i];\n }\n return view;\n}\n","import type { PathLike, MakeDirectoryOptions, Stats } from \"fs\";\nimport { fs } from \"memfs\";\nimport { IReaddirOptions } from \"memfs/lib/node/types/options.js\";\nimport { toArrayBuffer } from \"./to-array-buffer.js\";\nimport type { SysFileSystem } from \"@fireproof/core\";\n\nexport class MemFileSystem implements SysFileSystem {\n async start(): Promise<SysFileSystem> {\n return this;\n }\n mkdir(path: PathLike, options?: { recursive: boolean }): Promise<string | undefined> {\n return fs.promises.mkdir(path, options);\n }\n readdir(path: PathLike, options?: IReaddirOptions): Promise<string[]> {\n return fs.promises.readdir(path, options) as Promise<string[]>;\n }\n rm(path: PathLike, options?: MakeDirectoryOptions & { recursive: boolean }): Promise<void> {\n return fs.promises.rm(path, options);\n }\n copyFile(source: PathLike, destination: PathLike): Promise<void> {\n return fs.promises.copyFile(source, destination);\n }\n async readfile(path: PathLike, options?: { encoding: BufferEncoding; flag?: string }): Promise<Uint8Array> {\n const ret = await fs.promises.readFile(path, options);\n return toArrayBuffer(ret);\n }\n stat(path: PathLike): Promise<Stats> {\n return fs.promises.stat(path) as Promise<Stats>;\n }\n unlink(path: PathLike): Promise<void> {\n return fs.promises.unlink(path);\n }\n writefile(path: PathLike, data: Uint8Array | string): Promise<void> {\n return fs.promises.writeFile(path, Buffer.from(data));\n }\n}\n","export * from \"./key-bag-file.js\";\n\n// test needs that\nexport * from \"./get-file-system.js\";\n\nimport { KeyBagProviderFile as KeyBagProviderImpl } from \"./key-bag-file.js\";\n\nexport { KeyBagProviderImpl };\n\nimport { FileGateway as GatewayImpl, FileTestGateway as GatewayTestImpl } from \"./gateway-impl.js\";\nexport { GatewayImpl, GatewayTestImpl };\n","import { URI } from \"@adviser/cement\";\nimport { isNotFoundError, Logger } from \"@fireproof/core\";\nimport type { rt, SuperThis, SysFileSystem } from \"@fireproof/core\";\nimport { getFileSystem } from \"./get-file-system.js\";\n\ninterface KeyBagCtx {\n readonly dirName: string;\n readonly sysFS: SysFileSystem;\n readonly fName: string;\n}\n\nexport class KeyBagProviderFile implements rt.kb.KeyBagProvider {\n async _prepare(id: string): Promise<KeyBagCtx> {\n await this.sthis.start();\n let sysFS: SysFileSystem;\n switch (this.url.protocol) {\n case \"file:\": {\n sysFS = await getFileSystem(this.url);\n break;\n }\n default:\n throw this.logger.Error().Url(this.url).Msg(\"unsupported protocol\").AsError();\n }\n const dirName = this.url.pathname;\n await sysFS.mkdir(dirName, { recursive: true });\n return {\n dirName,\n sysFS,\n fName: this.sthis.pathOps.join(dirName, `${id.replace(/[^a-zA-Z0-9]/g, \"_\")}.json`),\n };\n }\n\n private readonly url: URI;\n readonly logger: Logger;\n readonly sthis: SuperThis;\n constructor(url: URI, sthis: SuperThis) {\n this.url = url;\n this.sthis = sthis;\n this.logger = sthis.logger;\n }\n\n async get(id: string): Promise<rt.kb.KeyItem | undefined> {\n const ctx = await this._prepare(id);\n try {\n const p = await ctx.sysFS.readfile(ctx.fName);\n const ki = JSON.parse(this.sthis.txt.decode(p)) as rt.kb.KeyItem;\n return ki;\n } catch (e) {\n if (isNotFoundError(e)) {\n return undefined;\n }\n throw this.logger.Error().Err(e).Str(\"file\", ctx.dirName).Msg(\"read bag failed\").AsError();\n }\n }\n\n async set(id: string, item: rt.kb.KeyItem): Promise<void> {\n const ctx = await this._prepare(id);\n const p = this.sthis.txt.encode(JSON.stringify(item, null, 2));\n await ctx.sysFS.writefile(ctx.fName, p);\n }\n}\n","import { KeyedResolvOnce, type URI } from \"@adviser/cement\";\nimport type { SysFileSystem } from \"@fireproof/core\";\nimport { NodeFileSystem } from \"./node-filesystem.js\";\n\nconst externalLoaders = new KeyedResolvOnce<SysFileSystem>();\nexport async function getFileSystem(url: URI): Promise<SysFileSystem> {\n const name = url.getParam(\"fs\", \"node\");\n let fs: SysFileSystem;\n switch (name) {\n case \"mem\":\n fs = await externalLoaders.get(name).once(async () => {\n const { MemFileSystem } = await import(\"./mem-filesystem.js\");\n return new MemFileSystem();\n });\n break;\n // case 'deno': {\n // const { DenoFileSystem } = await import(\"./deno-filesystem.js\");\n // fs = new DenoFileSystem();\n // break;\n // }\n default:\n fs = await externalLoaders.get(name).once(async () => {\n return new NodeFileSystem();\n });\n }\n return fs.start();\n}\n","import type { PathLike, MakeDirectoryOptions, Stats, ObjectEncodingOptions } from \"node:fs\";\nimport type { mkdir, readdir, rm, copyFile, readFile, stat, unlink, writeFile } from \"node:fs/promises\";\nimport { toArrayBuffer } from \"./to-array-buffer.js\";\nimport type { SysFileSystem } from \"@fireproof/core\";\nimport { runtimeFn } from \"@adviser/cement\";\n\nexport class NodeFileSystem implements SysFileSystem {\n fs?: {\n mkdir: typeof mkdir;\n readdir: typeof readdir;\n rm: typeof rm;\n copyFile: typeof copyFile;\n readFile: typeof readFile;\n stat: typeof stat;\n unlink: typeof unlink;\n writeFile: typeof writeFile;\n };\n\n async start(): Promise<SysFileSystem> {\n this.fs = await import(\"node:fs/promises\");\n return this;\n }\n async mkdir(path: PathLike, options?: { recursive: boolean }): Promise<string | undefined> {\n return this.fs?.mkdir(path, options);\n }\n async readdir(path: PathLike, options?: ObjectEncodingOptions): Promise<string[]> {\n return this.fs?.readdir(path, options) as Promise<string[]>;\n }\n async rm(path: PathLike, options?: MakeDirectoryOptions & { recursive: boolean }): Promise<void> {\n return this.fs?.rm(path, options);\n }\n async copyFile(source: PathLike, destination: PathLike): Promise<void> {\n return this.fs?.copyFile(source, destination);\n }\n async readfile(path: PathLike, options?: { encoding: BufferEncoding; flag?: string }): Promise<Uint8Array> {\n const ret = (await this.fs?.readFile(path, options)) as Buffer;\n return toArrayBuffer(ret);\n }\n stat(path: PathLike): Promise<Stats> {\n return this.fs?.stat(path) as Promise<Stats>;\n }\n async unlink(path: PathLike): Promise<void> {\n return this.fs?.unlink(path);\n }\n async writefile(path: PathLike, data: Uint8Array | string): Promise<void> {\n if (runtimeFn().isDeno) {\n return this.fs?.writeFile(path, data);\n }\n return this.fs?.writeFile(path, Buffer.from(data));\n }\n}\n\n// import { type NodeMap, join } from \"../../sys-container.js\";\n// import type { ObjectEncodingOptions, PathLike } from \"fs\";\n// import * as fs from \"fs/promises\";\n// import * as path from \"path\";\n// import * as os from \"os\";\n// import * as url from \"url\";\n// import { toArrayBuffer } from \"./utils.js\";\n\n// export async function createNodeSysContainer(): Promise<NodeMap> {\n// // const nodePath = \"node:path\";\n// // const nodeOS = \"node:os\";\n// // const nodeURL = \"node:url\";\n// // const nodeFS = \"node:fs\";\n// // const fs = (await import(\"node:fs\")).promises;\n// // const assert = \"assert\";\n// // const path = await import(\"node:path\");\n// return {\n// state: \"node\",\n// ...path,\n// // ...(await import(\"node:os\")),\n// // ...(await import(\"node:url\")),\n// ...os,\n// ...url,\n// ...fs,\n// join,\n// stat: fs.stat as NodeMap[\"stat\"],\n// readdir: fs.readdir as NodeMap[\"readdir\"],\n// readfile: async (path: PathLike, options?: ObjectEncodingOptions): Promise<Uint8Array> => {\n// const rs = await fs.readFile(path, options);\n// return toArrayBuffer(rs);\n// },\n// writefile: fs.writeFile as NodeMap[\"writefile\"],\n// };\n// }\n","export const FILESTORE_VERSION = \"v0.19-file\";\n","import { FILESTORE_VERSION } from \"../version.js\";\nimport { exception2Result, KeyedResolvOnce, Logger, Result, URI } from \"@adviser/cement\";\nimport { ensureLogger, exceptionWrapper, isNotFoundError, NotFoundError, bs } from \"@fireproof/core\";\nimport { getFileName, getPath } from \"./utils.js\";\nimport type { SuperThis, SysFileSystem } from \"@fireproof/core\";\nimport { getFileSystem } from \"./get-file-system.js\";\n\nconst versionFiles = new KeyedResolvOnce<string>();\n\nexport class FileGateway implements bs.Gateway {\n // abstract readonly storeType: StoreType;\n readonly logger: Logger;\n readonly sthis: SuperThis;\n\n constructor(sthis: SuperThis) {\n this.sthis = sthis;\n this.logger = sthis.logger;\n }\n\n async getVersionFromFile(fs: SysFileSystem, path: string, logger: Logger): Promise<string> {\n return versionFiles.get(path).once(async () => {\n await fs.mkdir(path, { recursive: true });\n const vFile = this.sthis.pathOps.join(path, \"version\");\n const vFileStat = await fs.stat(vFile).catch(() => undefined);\n if (!vFileStat) {\n await fs.writefile(this.sthis.pathOps.join(path, \"version\"), FILESTORE_VERSION);\n return FILESTORE_VERSION;\n } else if (!vFileStat.isFile()) {\n throw logger.Error().Str(\"file\", vFile).Msg(`version file is a directory`).AsError();\n }\n const v = await fs.readfile(vFile);\n const vStr = this.sthis.txt.decode(v);\n if (vStr !== FILESTORE_VERSION) {\n logger.Warn().Str(\"file\", vFile).Str(\"from\", vStr).Str(\"expected\", FILESTORE_VERSION).Msg(`version mismatch`);\n }\n return vStr;\n });\n }\n\n start(baseURL: URI): Promise<Result<URI>> {\n return exception2Result(async () => {\n const fs = await getFileSystem(baseURL);\n const url = baseURL.build();\n url.defParam(\"version\", FILESTORE_VERSION);\n // url.defParam(\"store\", this.storeType);\n const dbUrl = await this.buildUrl(url.URI(), \"dummy\");\n const dbdirFile = this.getFilePath(dbUrl.Ok());\n await fs.mkdir(this.sthis.pathOps.dirname(dbdirFile), { recursive: true });\n const dbroot = this.sthis.pathOps.dirname(dbdirFile);\n this.logger.Debug().Url(url.URI()).Str(\"dbroot\", dbroot).Msg(\"start\");\n url.setParam(\"version\", await this.getVersionFromFile(fs, dbroot, this.logger));\n return url.URI();\n });\n }\n\n async buildUrl(baseUrl: URI, key: string): Promise<Result<URI>> {\n return Result.Ok(baseUrl.build().setParam(\"key\", key).URI());\n }\n\n async close(): Promise<Result<void>> {\n return Result.Ok(undefined);\n }\n // abstract buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;\n\n getFilePath(url: URI): string {\n const key = url.getParam(\"key\");\n if (!key) throw this.logger.Error().Url(url).Msg(`key not found`).AsError();\n return this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));\n }\n\n async put(url: URI, body: Uint8Array): Promise<Result<void>> {\n return exception2Result(async () => {\n const file = await this.getFilePath(url);\n this.logger.Debug().Str(\"url\", url.toString()).Str(\"file\", file).Msg(\"put\");\n await getFileSystem(url).then((fs) => fs.writefile(file, body));\n });\n }\n\n async get(url: URI): Promise<bs.GetResult> {\n return exceptionWrapper(async () => {\n const file = this.getFilePath(url);\n try {\n const res = await getFileSystem(url).then((fs) => fs.readfile(file));\n this.logger.Debug().Url(url.asURL()).Str(\"file\", file).Msg(\"get\");\n return Result.Ok(new Uint8Array(res));\n } catch (e: unknown) {\n // this.logger.Error().Err(e).Str(\"file\", file).Msg(\"get\");\n if (isNotFoundError(e)) {\n return Result.Err(new NotFoundError(`file not found: ${file}`));\n }\n return Result.Err(e as Error);\n }\n });\n }\n\n async delete(url: URI): Promise<Result<void>> {\n return exception2Result(async () => {\n await getFileSystem(url).then((fs) => fs.unlink(this.getFilePath(url)));\n });\n }\n\n async destroy(baseURL: URI): Promise<Result<void>> {\n const url = await this.buildUrl(baseURL, \"x\");\n if (url.isErr()) return url;\n const filepath = this.sthis.pathOps.dirname(this.getFilePath(url.Ok()));\n const fs = await getFileSystem(baseURL);\n let files: string[] = [];\n try {\n files = await fs.readdir(filepath);\n } catch (e: unknown) {\n if (!isNotFoundError(e)) {\n throw this.logger.Error().Err(e).Str(\"dir\", filepath).Msg(\"destroy:readdir\").AsError();\n }\n }\n for (const file of files) {\n const pathed = this.sthis.pathOps.join(filepath, file);\n try {\n await fs.unlink(pathed);\n } catch (e: unknown) {\n if (!isNotFoundError(e)) {\n throw this.logger.Error().Err(e).Str(\"file\", pathed).Msg(\"destroy:unlink\").AsError();\n }\n }\n }\n return Result.Ok(undefined);\n }\n}\n\nexport class FileTestGateway implements bs.TestGateway {\n readonly logger: Logger;\n readonly sthis: SuperThis;\n constructor(sthis: SuperThis) {\n this.logger = ensureLogger(sthis, \"FileTestStore\");\n this.sthis = sthis;\n }\n\n async get(iurl: URI, key: string) {\n const url = iurl.build().setParam(\"key\", key).URI();\n const dbFile = this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));\n this.logger.Debug().Url(url).Str(\"dbFile\", dbFile).Msg(\"get\");\n const buffer = await (await getFileSystem(url)).readfile(dbFile);\n this.logger.Debug().Url(url).Str(\"dbFile\", dbFile).Len(buffer).Msg(\"got\");\n return buffer;\n }\n}\n","import type { URI } from \"@adviser/cement\";\nimport { getStore } from \"@fireproof/core\";\nimport type { SuperThis } from \"@fireproof/core\";\n\nexport function getPath(url: URI, sthis: SuperThis): string {\n const basePath = url.pathname;\n // .toString()\n // .replace(new RegExp(`^${url.protocol}//`), \"\")\n // .replace(/\\?.*$/, \"\");\n const name = url.getParam(\"name\");\n if (name) {\n const version = url.getParam(\"version\");\n if (!version) throw sthis.logger.Error().Url(url).Msg(`version not found`).AsError();\n return sthis.pathOps.join(basePath, version, name);\n }\n return sthis.pathOps.join(basePath);\n}\n\nexport function getFileName(url: URI, sthis: SuperThis): string {\n const key = url.getParam(\"key\");\n if (!key) throw sthis.logger.Error().Url(url).Msg(`key not found`).AsError();\n const res = getStore(url, sthis, (...a: string[]) => a.join(\"-\"));\n switch (res.store) {\n case \"data\":\n return sthis.pathOps.join(res.name, key + \".car\");\n case \"wal\":\n case \"meta\":\n return sthis.pathOps.join(res.name, key + \".json\");\n default:\n throw sthis.logger.Error().Url(url).Msg(`unsupported store type`).AsError();\n }\n}\n"],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAO,SAAS,cAAc,QAAqC;AACjE,MAAI,OAAO,WAAW,UAAU;AAC9B,aAAS,OAAO,KAAK,MAAM;AAAA,EAC7B;AACA,QAAM,KAAK,IAAI,YAAY,OAAO,MAAM;AACxC,QAAM,OAAO,IAAI,WAAW,EAAE;AAC9B,WAAS,IAAI,GAAG,IAAI,OAAO,QAAQ,EAAE,GAAG;AACtC,SAAK,CAAC,IAAI,OAAO,CAAC;AAAA,EACpB;AACA,SAAO;AACT;AAVA;AAAA;AAAA;AAAA;AAAA;;;ACAA;AAAA;AAAA;AAAA;AAAA,IACA,cAKa;AANb;AAAA;AAAA;AACA,mBAAmB;AAEnB;AAGO,IAAM,gBAAN,MAA6C;AAAA,MAClD,MAAM,QAAgC;AACpC,eAAO;AAAA,MACT;AAAA,MACA,MAAM,MAAgB,SAA+D;AACnF,eAAO,gBAAG,SAAS,MAAM,MAAM,OAAO;AAAA,MACxC;AAAA,MACA,QAAQ,MAAgB,SAA8C;AACpE,eAAO,gBAAG,SAAS,QAAQ,MAAM,OAAO;AAAA,MAC1C;AAAA,MACA,GAAG,MAAgB,SAAwE;AACzF,eAAO,gBAAG,SAAS,GAAG,MAAM,OAAO;AAAA,MACrC;AAAA,MACA,SAAS,QAAkB,aAAsC;AAC/D,eAAO,gBAAG,SAAS,SAAS,QAAQ,WAAW;AAAA,MACjD;AAAA,MACA,MAAM,SAAS,MAAgB,SAA4E;AACzG,cAAM,MAAM,MAAM,gBAAG,SAAS,SAAS,MAAM,OAAO;AACpD,eAAO,cAAc,GAAG;AAAA,MAC1B;AAAA,MACA,KAAK,MAAgC;AACnC,eAAO,gBAAG,SAAS,KAAK,IAAI;AAAA,MAC9B;AAAA,MACA,OAAO,MAA+B;AACpC,eAAO,gBAAG,SAAS,OAAO,IAAI;AAAA,MAChC;AAAA,MACA,UAAU,MAAgB,MAA0C;AAClE,eAAO,gBAAG,SAAS,UAAU,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,MACtD;AAAA,IACF;AAAA;AAAA;;;ACnCA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;;;ACCA,kBAAwC;;;ACDxC,IAAAA,iBAA0C;;;ACE1C;AAEA,oBAA0B;AAEnB,IAAM,iBAAN,MAA8C;AAAA,EAYnD,MAAM,QAAgC;AACpC,SAAK,KAAK,MAAM,OAAO,aAAkB;AACzC,WAAO;AAAA,EACT;AAAA,EACA,MAAM,MAAM,MAAgB,SAA+D;AACzF,WAAO,KAAK,IAAI,MAAM,MAAM,OAAO;AAAA,EACrC;AAAA,EACA,MAAM,QAAQ,MAAgB,SAAoD;AAChF,WAAO,KAAK,IAAI,QAAQ,MAAM,OAAO;AAAA,EACvC;AAAA,EACA,MAAM,GAAG,MAAgB,SAAwE;AAC/F,WAAO,KAAK,IAAI,GAAG,MAAM,OAAO;AAAA,EAClC;AAAA,EACA,MAAM,SAAS,QAAkB,aAAsC;AACrE,WAAO,KAAK,IAAI,SAAS,QAAQ,WAAW;AAAA,EAC9C;AAAA,EACA,MAAM,SAAS,MAAgB,SAA4E;AACzG,UAAM,MAAO,MAAM,KAAK,IAAI,SAAS,MAAM,OAAO;AAClD,WAAO,cAAc,GAAG;AAAA,EAC1B;AAAA,EACA,KAAK,MAAgC;AACnC,WAAO,KAAK,IAAI,KAAK,IAAI;AAAA,EAC3B;AAAA,EACA,MAAM,OAAO,MAA+B;AAC1C,WAAO,KAAK,IAAI,OAAO,IAAI;AAAA,EAC7B;AAAA,EACA,MAAM,UAAU,MAAgB,MAA0C;AACxE,YAAI,yBAAU,EAAE,QAAQ;AACtB,aAAO,KAAK,IAAI,UAAU,MAAM,IAAI;AAAA,IACtC;AACA,WAAO,KAAK,IAAI,UAAU,MAAM,OAAO,KAAK,IAAI,CAAC;AAAA,EACnD;AACF;;;AD9CA,IAAM,kBAAkB,IAAI,+BAA+B;AAC3D,eAAsB,cAAc,KAAkC;AACpE,QAAM,OAAO,IAAI,SAAS,MAAM,MAAM;AACtC,MAAIC;AACJ,UAAQ,MAAM;AAAA,IACZ,KAAK;AACH,MAAAA,MAAK,MAAM,gBAAgB,IAAI,IAAI,EAAE,KAAK,YAAY;AACpD,cAAM,EAAE,eAAAC,eAAc,IAAI,MAAM;AAChC,eAAO,IAAIA,eAAc;AAAA,MAC3B,CAAC;AACD;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,IAMF;AACE,MAAAD,MAAK,MAAM,gBAAgB,IAAI,IAAI,EAAE,KAAK,YAAY;AACpD,eAAO,IAAI,eAAe;AAAA,MAC5B,CAAC;AAAA,EACL;AACA,SAAOA,IAAG,MAAM;AAClB;;;ADfO,IAAM,qBAAN,MAAyD;AAAA,EAC9D,MAAM,SAAS,IAAgC;AAC7C,UAAM,KAAK,MAAM,MAAM;AACvB,QAAI;AACJ,YAAQ,KAAK,IAAI,UAAU;AAAA,MACzB,KAAK,SAAS;AACZ,gBAAQ,MAAM,cAAc,KAAK,GAAG;AACpC;AAAA,MACF;AAAA,MACA;AACE,cAAM,KAAK,OAAO,MAAM,EAAE,IAAI,KAAK,GAAG,EAAE,IAAI,sBAAsB,EAAE,QAAQ;AAAA,IAChF;AACA,UAAM,UAAU,KAAK,IAAI;AACzB,UAAM,MAAM,MAAM,SAAS,EAAE,WAAW,KAAK,CAAC;AAC9C,WAAO;AAAA,MACL;AAAA,MACA;AAAA,MACA,OAAO,KAAK,MAAM,QAAQ,KAAK,SAAS,GAAG,GAAG,QAAQ,iBAAiB,GAAG,CAAC,OAAO;AAAA,IACpF;AAAA,EACF;AAAA,EAKA,YAAY,KAAU,OAAkB;AACtC,SAAK,MAAM;AACX,SAAK,QAAQ;AACb,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA,EAEA,MAAM,IAAI,IAAgD;AACxD,UAAM,MAAM,MAAM,KAAK,SAAS,EAAE;AAClC,QAAI;AACF,YAAM,IAAI,MAAM,IAAI,MAAM,SAAS,IAAI,KAAK;AAC5C,YAAM,KAAK,KAAK,MAAM,KAAK,MAAM,IAAI,OAAO,CAAC,CAAC;AAC9C,aAAO;AAAA,IACT,SAAS,GAAG;AACV,cAAI,6BAAgB,CAAC,GAAG;AACtB,eAAO;AAAA,MACT;AACA,YAAM,KAAK,OAAO,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,QAAQ,IAAI,OAAO,EAAE,IAAI,iBAAiB,EAAE,QAAQ;AAAA,IAC3F;AAAA,EACF;AAAA,EAEA,MAAM,IAAI,IAAY,MAAoC;AACxD,UAAM,MAAM,MAAM,KAAK,SAAS,EAAE;AAClC,UAAM,IAAI,KAAK,MAAM,IAAI,OAAO,KAAK,UAAU,MAAM,MAAM,CAAC,CAAC;AAC7D,UAAM,IAAI,MAAM,UAAU,IAAI,OAAO,CAAC;AAAA,EACxC;AACF;;;AG5DO,IAAM,oBAAoB;;;ACCjC,IAAAE,iBAAuE;AACvE,IAAAC,eAAmF;;;ACDnF,IAAAC,eAAyB;AAGlB,SAAS,QAAQ,KAAU,OAA0B;AAC1D,QAAM,WAAW,IAAI;AAIrB,QAAM,OAAO,IAAI,SAAS,MAAM;AAChC,MAAI,MAAM;AACR,UAAM,UAAU,IAAI,SAAS,SAAS;AACtC,QAAI,CAAC,QAAS,OAAM,MAAM,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,mBAAmB,EAAE,QAAQ;AACnF,WAAO,MAAM,QAAQ,KAAK,UAAU,SAAS,IAAI;AAAA,EACnD;AACA,SAAO,MAAM,QAAQ,KAAK,QAAQ;AACpC;AAEO,SAAS,YAAY,KAAU,OAA0B;AAC9D,QAAM,MAAM,IAAI,SAAS,KAAK;AAC9B,MAAI,CAAC,IAAK,OAAM,MAAM,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,eAAe,EAAE,QAAQ;AAC3E,QAAM,UAAM,uBAAS,KAAK,OAAO,IAAI,MAAgB,EAAE,KAAK,GAAG,CAAC;AAChE,UAAQ,IAAI,OAAO;AAAA,IACjB,KAAK;AACH,aAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,MAAM;AAAA,IAClD,KAAK;AAAA,IACL,KAAK;AACH,aAAO,MAAM,QAAQ,KAAK,IAAI,MAAM,MAAM,OAAO;AAAA,IACnD;AACE,YAAM,MAAM,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,wBAAwB,EAAE,QAAQ;AAAA,EAC9E;AACF;;;ADxBA,IAAM,eAAe,IAAI,+BAAwB;AAE1C,IAAM,cAAN,MAAwC;AAAA,EAK7C,YAAY,OAAkB;AAC5B,SAAK,QAAQ;AACb,SAAK,SAAS,MAAM;AAAA,EACtB;AAAA,EAEA,MAAM,mBAAmBC,KAAmB,MAAc,QAAiC;AACzF,WAAO,aAAa,IAAI,IAAI,EAAE,KAAK,YAAY;AAC7C,YAAMA,IAAG,MAAM,MAAM,EAAE,WAAW,KAAK,CAAC;AACxC,YAAM,QAAQ,KAAK,MAAM,QAAQ,KAAK,MAAM,SAAS;AACrD,YAAM,YAAY,MAAMA,IAAG,KAAK,KAAK,EAAE,MAAM,MAAM,MAAS;AAC5D,UAAI,CAAC,WAAW;AACd,cAAMA,IAAG,UAAU,KAAK,MAAM,QAAQ,KAAK,MAAM,SAAS,GAAG,iBAAiB;AAC9E,eAAO;AAAA,MACT,WAAW,CAAC,UAAU,OAAO,GAAG;AAC9B,cAAM,OAAO,MAAM,EAAE,IAAI,QAAQ,KAAK,EAAE,IAAI,6BAA6B,EAAE,QAAQ;AAAA,MACrF;AACA,YAAM,IAAI,MAAMA,IAAG,SAAS,KAAK;AACjC,YAAM,OAAO,KAAK,MAAM,IAAI,OAAO,CAAC;AACpC,UAAI,SAAS,mBAAmB;AAC9B,eAAO,KAAK,EAAE,IAAI,QAAQ,KAAK,EAAE,IAAI,QAAQ,IAAI,EAAE,IAAI,YAAY,iBAAiB,EAAE,IAAI,kBAAkB;AAAA,MAC9G;AACA,aAAO;AAAA,IACT,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAoC;AACxC,eAAO,iCAAiB,YAAY;AAClC,YAAMA,MAAK,MAAM,cAAc,OAAO;AACtC,YAAM,MAAM,QAAQ,MAAM;AAC1B,UAAI,SAAS,WAAW,iBAAiB;AAEzC,YAAM,QAAQ,MAAM,KAAK,SAAS,IAAI,IAAI,GAAG,OAAO;AACpD,YAAM,YAAY,KAAK,YAAY,MAAM,GAAG,CAAC;AAC7C,YAAMA,IAAG,MAAM,KAAK,MAAM,QAAQ,QAAQ,SAAS,GAAG,EAAE,WAAW,KAAK,CAAC;AACzE,YAAM,SAAS,KAAK,MAAM,QAAQ,QAAQ,SAAS;AACnD,WAAK,OAAO,MAAM,EAAE,IAAI,IAAI,IAAI,CAAC,EAAE,IAAI,UAAU,MAAM,EAAE,IAAI,OAAO;AACpE,UAAI,SAAS,WAAW,MAAM,KAAK,mBAAmBA,KAAI,QAAQ,KAAK,MAAM,CAAC;AAC9E,aAAO,IAAI,IAAI;AAAA,IACjB,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,SAAS,SAAc,KAAmC;AAC9D,WAAO,sBAAO,GAAG,QAAQ,MAAM,EAAE,SAAS,OAAO,GAAG,EAAE,IAAI,CAAC;AAAA,EAC7D;AAAA,EAEA,MAAM,QAA+B;AACnC,WAAO,sBAAO,GAAG,MAAS;AAAA,EAC5B;AAAA;AAAA,EAGA,YAAY,KAAkB;AAC5B,UAAM,MAAM,IAAI,SAAS,KAAK;AAC9B,QAAI,CAAC,IAAK,OAAM,KAAK,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,eAAe,EAAE,QAAQ;AAC1E,WAAO,KAAK,MAAM,QAAQ,KAAK,QAAQ,KAAK,KAAK,KAAK,GAAG,YAAY,KAAK,KAAK,KAAK,CAAC;AAAA,EACvF;AAAA,EAEA,MAAM,IAAI,KAAU,MAAyC;AAC3D,eAAO,iCAAiB,YAAY;AAClC,YAAM,OAAO,MAAM,KAAK,YAAY,GAAG;AACvC,WAAK,OAAO,MAAM,EAAE,IAAI,OAAO,IAAI,SAAS,CAAC,EAAE,IAAI,QAAQ,IAAI,EAAE,IAAI,KAAK;AAC1E,YAAM,cAAc,GAAG,EAAE,KAAK,CAACA,QAAOA,IAAG,UAAU,MAAM,IAAI,CAAC;AAAA,IAChE,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,IAAI,KAAiC;AACzC,eAAO,+BAAiB,YAAY;AAClC,YAAM,OAAO,KAAK,YAAY,GAAG;AACjC,UAAI;AACF,cAAM,MAAM,MAAM,cAAc,GAAG,EAAE,KAAK,CAACA,QAAOA,IAAG,SAAS,IAAI,CAAC;AACnE,aAAK,OAAO,MAAM,EAAE,IAAI,IAAI,MAAM,CAAC,EAAE,IAAI,QAAQ,IAAI,EAAE,IAAI,KAAK;AAChE,eAAO,sBAAO,GAAG,IAAI,WAAW,GAAG,CAAC;AAAA,MACtC,SAAS,GAAY;AAEnB,gBAAI,8BAAgB,CAAC,GAAG;AACtB,iBAAO,sBAAO,IAAI,IAAI,2BAAc,mBAAmB,IAAI,EAAE,CAAC;AAAA,QAChE;AACA,eAAO,sBAAO,IAAI,CAAU;AAAA,MAC9B;AAAA,IACF,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,OAAO,KAAiC;AAC5C,eAAO,iCAAiB,YAAY;AAClC,YAAM,cAAc,GAAG,EAAE,KAAK,CAACA,QAAOA,IAAG,OAAO,KAAK,YAAY,GAAG,CAAC,CAAC;AAAA,IACxE,CAAC;AAAA,EACH;AAAA,EAEA,MAAM,QAAQ,SAAqC;AACjD,UAAM,MAAM,MAAM,KAAK,SAAS,SAAS,GAAG;AAC5C,QAAI,IAAI,MAAM,EAAG,QAAO;AACxB,UAAM,WAAW,KAAK,MAAM,QAAQ,QAAQ,KAAK,YAAY,IAAI,GAAG,CAAC,CAAC;AACtE,UAAMA,MAAK,MAAM,cAAc,OAAO;AACtC,QAAI,QAAkB,CAAC;AACvB,QAAI;AACF,cAAQ,MAAMA,IAAG,QAAQ,QAAQ;AAAA,IACnC,SAAS,GAAY;AACnB,UAAI,KAAC,8BAAgB,CAAC,GAAG;AACvB,cAAM,KAAK,OAAO,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,OAAO,QAAQ,EAAE,IAAI,iBAAiB,EAAE,QAAQ;AAAA,MACvF;AAAA,IACF;AACA,eAAW,QAAQ,OAAO;AACxB,YAAM,SAAS,KAAK,MAAM,QAAQ,KAAK,UAAU,IAAI;AACrD,UAAI;AACF,cAAMA,IAAG,OAAO,MAAM;AAAA,MACxB,SAAS,GAAY;AACnB,YAAI,KAAC,8BAAgB,CAAC,GAAG;AACvB,gBAAM,KAAK,OAAO,MAAM,EAAE,IAAI,CAAC,EAAE,IAAI,QAAQ,MAAM,EAAE,IAAI,gBAAgB,EAAE,QAAQ;AAAA,QACrF;AAAA,MACF;AAAA,IACF;AACA,WAAO,sBAAO,GAAG,MAAS;AAAA,EAC5B;AACF;AAEO,IAAM,kBAAN,MAAgD;AAAA,EAGrD,YAAY,OAAkB;AAC5B,SAAK,aAAS,2BAAa,OAAO,eAAe;AACjD,SAAK,QAAQ;AAAA,EACf;AAAA,EAEA,MAAM,IAAI,MAAW,KAAa;AAChC,UAAM,MAAM,KAAK,MAAM,EAAE,SAAS,OAAO,GAAG,EAAE,IAAI;AAClD,UAAM,SAAS,KAAK,MAAM,QAAQ,KAAK,QAAQ,KAAK,KAAK,KAAK,GAAG,YAAY,KAAK,KAAK,KAAK,CAAC;AAC7F,SAAK,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,UAAU,MAAM,EAAE,IAAI,KAAK;AAC5D,UAAM,SAAS,OAAO,MAAM,cAAc,GAAG,GAAG,SAAS,MAAM;AAC/D,SAAK,OAAO,MAAM,EAAE,IAAI,GAAG,EAAE,IAAI,UAAU,MAAM,EAAE,IAAI,MAAM,EAAE,IAAI,KAAK;AACxE,WAAO;AAAA,EACT;AACF;","names":["import_cement","fs","MemFileSystem","import_cement","import_core","import_core","fs"]}
@@ -0,0 +1,43 @@
1
+ import { URI, Logger as Logger$1, Result } from '@adviser/cement';
2
+ import { rt, Logger, SuperThis, SysFileSystem, bs } from '@fireproof/core';
3
+
4
+ interface KeyBagCtx {
5
+ readonly dirName: string;
6
+ readonly sysFS: SysFileSystem;
7
+ readonly fName: string;
8
+ }
9
+ declare class KeyBagProviderFile implements rt.kb.KeyBagProvider {
10
+ _prepare(id: string): Promise<KeyBagCtx>;
11
+ private readonly url;
12
+ readonly logger: Logger;
13
+ readonly sthis: SuperThis;
14
+ constructor(url: URI, sthis: SuperThis);
15
+ get(id: string): Promise<rt.kb.KeyItem | undefined>;
16
+ set(id: string, item: rt.kb.KeyItem): Promise<void>;
17
+ }
18
+
19
+ declare function getFileSystem(url: URI): Promise<SysFileSystem>;
20
+
21
+ declare class FileGateway implements bs.Gateway {
22
+ readonly logger: Logger$1;
23
+ readonly sthis: SuperThis;
24
+ constructor(sthis: SuperThis);
25
+ getVersionFromFile(fs: SysFileSystem, path: string, logger: Logger$1): Promise<string>;
26
+ start(baseURL: URI): Promise<Result<URI>>;
27
+ buildUrl(baseUrl: URI, key: string): Promise<Result<URI>>;
28
+ close(): Promise<Result<void>>;
29
+ getFilePath(url: URI): string;
30
+ put(url: URI, body: Uint8Array): Promise<Result<void>>;
31
+ get(url: URI): Promise<bs.GetResult>;
32
+ delete(url: URI): Promise<Result<void>>;
33
+ destroy(baseURL: URI): Promise<Result<void>>;
34
+ }
35
+ declare class FileTestGateway implements bs.TestGateway {
36
+ readonly logger: Logger$1;
37
+ readonly sthis: SuperThis;
38
+ constructor(sthis: SuperThis);
39
+ get(iurl: URI, key: string): Promise<Uint8Array<ArrayBufferLike>>;
40
+ }
41
+
42
+ export { FileGateway as GatewayImpl, FileTestGateway as GatewayTestImpl, KeyBagProviderFile, KeyBagProviderFile as KeyBagProviderImpl, getFileSystem };
43
+ declare module '@fireproof/core/node'
@@ -0,0 +1,43 @@
1
+ import { URI, Logger as Logger$1, Result } from '@adviser/cement';
2
+ import { rt, Logger, SuperThis, SysFileSystem, bs } from '@fireproof/core';
3
+
4
+ interface KeyBagCtx {
5
+ readonly dirName: string;
6
+ readonly sysFS: SysFileSystem;
7
+ readonly fName: string;
8
+ }
9
+ declare class KeyBagProviderFile implements rt.kb.KeyBagProvider {
10
+ _prepare(id: string): Promise<KeyBagCtx>;
11
+ private readonly url;
12
+ readonly logger: Logger;
13
+ readonly sthis: SuperThis;
14
+ constructor(url: URI, sthis: SuperThis);
15
+ get(id: string): Promise<rt.kb.KeyItem | undefined>;
16
+ set(id: string, item: rt.kb.KeyItem): Promise<void>;
17
+ }
18
+
19
+ declare function getFileSystem(url: URI): Promise<SysFileSystem>;
20
+
21
+ declare class FileGateway implements bs.Gateway {
22
+ readonly logger: Logger$1;
23
+ readonly sthis: SuperThis;
24
+ constructor(sthis: SuperThis);
25
+ getVersionFromFile(fs: SysFileSystem, path: string, logger: Logger$1): Promise<string>;
26
+ start(baseURL: URI): Promise<Result<URI>>;
27
+ buildUrl(baseUrl: URI, key: string): Promise<Result<URI>>;
28
+ close(): Promise<Result<void>>;
29
+ getFilePath(url: URI): string;
30
+ put(url: URI, body: Uint8Array): Promise<Result<void>>;
31
+ get(url: URI): Promise<bs.GetResult>;
32
+ delete(url: URI): Promise<Result<void>>;
33
+ destroy(baseURL: URI): Promise<Result<void>>;
34
+ }
35
+ declare class FileTestGateway implements bs.TestGateway {
36
+ readonly logger: Logger$1;
37
+ readonly sthis: SuperThis;
38
+ constructor(sthis: SuperThis);
39
+ get(iurl: URI, key: string): Promise<Uint8Array<ArrayBufferLike>>;
40
+ }
41
+
42
+ export { FileGateway as GatewayImpl, FileTestGateway as GatewayTestImpl, KeyBagProviderFile, KeyBagProviderFile as KeyBagProviderImpl, getFileSystem };
43
+ declare module '@fireproof/core/node'