@fireproof/core 0.19.112-dev-web → 0.19.112-dev-dyn

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. package/{chunk-GZANCVTS.js → chunk-D4E6UX6S.js} +1 -8
  2. package/{chunk-GZANCVTS.js.map → chunk-D4E6UX6S.js.map} +1 -1
  3. package/{web/chunk-S4HRSKEO.js → chunk-PWEDYV5H.js} +26 -30
  4. package/chunk-PWEDYV5H.js.map +1 -0
  5. package/chunk-PZ5AY32C.js +10 -0
  6. package/{gateway@skip-iife-OZ2V32XH.js → gateway-72EUHYEL.js} +5 -4
  7. package/gateway-72EUHYEL.js.map +1 -0
  8. package/gateway-SK2ERWD3.js +70 -0
  9. package/gateway-SK2ERWD3.js.map +1 -0
  10. package/index.cjs +105 -286
  11. package/index.cjs.map +1 -1
  12. package/index.d.cts +2 -3
  13. package/index.d.ts +2 -3
  14. package/index.global.js +233 -188
  15. package/index.global.js.map +1 -1
  16. package/index.js +17 -17
  17. package/index.js.map +1 -1
  18. package/{key-bag-file-4TYN2H7F.js → key-bag-file-VP6Y7N26.js} +4 -3
  19. package/{key-bag-file-4TYN2H7F.js.map → key-bag-file-VP6Y7N26.js.map} +1 -1
  20. package/{key-bag-indexdb-JEOAS4WM.js → key-bag-indexdb-N5GQ5GSH.js} +4 -3
  21. package/{key-bag-indexdb-JEOAS4WM.js.map → key-bag-indexdb-N5GQ5GSH.js.map} +1 -1
  22. package/metafile-cjs.json +1 -1
  23. package/metafile-esm.json +1 -1
  24. package/metafile-iife.json +1 -1
  25. package/node/chunk-4A4RAVNS.js +17 -0
  26. package/node/chunk-4A4RAVNS.js.map +1 -0
  27. package/node/mem-filesystem.cjs +72 -0
  28. package/node/mem-filesystem.cjs.map +1 -0
  29. package/node/mem-filesystem.d.cts +25 -0
  30. package/node/mem-filesystem.d.ts +25 -0
  31. package/{mem-filesystem@skip-iife-CJI7IIKV.js → node/mem-filesystem.js} +3 -4
  32. package/node/mem-filesystem.js.map +1 -0
  33. package/node/metafile-cjs.json +1 -0
  34. package/node/metafile-esm.json +1 -0
  35. package/node/node-filesystem.cjs +86 -0
  36. package/node/node-filesystem.cjs.map +1 -0
  37. package/node/node-filesystem.d.cts +36 -0
  38. package/node/node-filesystem.d.ts +36 -0
  39. package/{node-filesystem@skip-iife-O74VAABQ.js → node/node-filesystem.js} +3 -4
  40. package/node/node-filesystem.js.map +1 -0
  41. package/node/types-DARSfXlb.d.cts +23 -0
  42. package/node/types-DARSfXlb.d.ts +23 -0
  43. package/package.json +1 -1
  44. package/utils-WS4AZWA7.js +13 -0
  45. package/web/gateway-impl.cjs +319 -0
  46. package/web/gateway-impl.cjs.map +1 -0
  47. package/web/gateway-impl.d.cts +86 -0
  48. package/web/gateway-impl.d.ts +86 -0
  49. package/{gateway@skip-esm-O655UEIP.js → web/gateway-impl.js} +165 -20
  50. package/web/gateway-impl.js.map +1 -0
  51. package/web/metafile-cjs.json +1 -1
  52. package/web/metafile-esm.json +1 -1
  53. package/chunk-LNFBDD6E.js +0 -75
  54. package/chunk-LNFBDD6E.js.map +0 -1
  55. package/chunk-PB4BKL4O.js +0 -7
  56. package/chunk-PB4BKL4O.js.map +0 -1
  57. package/gateway@skip-esm-O655UEIP.js.map +0 -1
  58. package/gateway@skip-iife-OZ2V32XH.js.map +0 -1
  59. package/mem-filesystem@skip-iife-CJI7IIKV.js.map +0 -1
  60. package/node-filesystem@skip-iife-O74VAABQ.js.map +0 -1
  61. package/utils-L7MUZUJX.js +0 -14
  62. package/web/bundle-not-impl-UH74NK5L.js +0 -5
  63. package/web/bundle-not-impl-UH74NK5L.js.map +0 -1
  64. package/web/chunk-2DC5ZIR4.js +0 -7
  65. package/web/chunk-2DC5ZIR4.js.map +0 -1
  66. package/web/chunk-Q5W7UNMP.js +0 -292
  67. package/web/chunk-Q5W7UNMP.js.map +0 -1
  68. package/web/chunk-S4HRSKEO.js.map +0 -1
  69. package/web/gateway@skip-esm-GI5PRACF.js +0 -165
  70. package/web/gateway@skip-esm-GI5PRACF.js.map +0 -1
  71. package/web/index.cjs +0 -4138
  72. package/web/index.cjs.map +0 -1
  73. package/web/index.d.cts +0 -1139
  74. package/web/index.d.ts +0 -1139
  75. package/web/index.js +0 -3478
  76. package/web/index.js.map +0 -1
  77. package/web/key-bag-file-4SJQGORQ.js +0 -54
  78. package/web/key-bag-file-4SJQGORQ.js.map +0 -1
  79. package/web/key-bag-indexdb-GSQOUUVQ.js +0 -50
  80. package/web/key-bag-indexdb-GSQOUUVQ.js.map +0 -1
  81. package/web/utils-EFZJNXH5.js +0 -14
  82. /package/{utils-L7MUZUJX.js.map → chunk-PZ5AY32C.js.map} +0 -0
  83. /package/{web/utils-EFZJNXH5.js.map → utils-WS4AZWA7.js.map} +0 -0
package/index.d.cts CHANGED
@@ -1035,9 +1035,9 @@ declare class Database<DT extends DocTypes = NonNullable<unknown>> implements Co
1035
1035
  declare function fireproof(name: string, opts?: ConfigOpts): Database;
1036
1036
 
1037
1037
  declare function getFileSystem(url: URI): Promise<SysFileSystem>;
1038
+
1038
1039
  declare function getPath(url: URI, sthis: SuperThis): string;
1039
1040
  declare function getFileName(url: URI, sthis: SuperThis): string;
1040
- declare function toArrayBuffer(buffer: Buffer | string): Uint8Array;
1041
1041
 
1042
1042
  declare function encodeFile(blob: BlobLike): Promise<{
1043
1043
  cid: AnyLink;
@@ -1128,9 +1128,8 @@ declare const index_getFileName: typeof getFileName;
1128
1128
  declare const index_getFileSystem: typeof getFileSystem;
1129
1129
  declare const index_getPath: typeof getPath;
1130
1130
  declare const index_runtimeFn: typeof runtimeFn;
1131
- declare const index_toArrayBuffer: typeof toArrayBuffer;
1132
1131
  declare namespace index {
1133
- export { index_FILESTORE_VERSION as FILESTORE_VERSION, index_INDEXDB_VERSION as INDEXDB_VERSION, index_files as files, index_getFileName as getFileName, index_getFileSystem as getFileSystem, index_getPath as getPath, keyBag as kb, keyedCrypto as kc, index$1 as mf, index_runtimeFn as runtimeFn, index_toArrayBuffer as toArrayBuffer };
1132
+ export { index_FILESTORE_VERSION as FILESTORE_VERSION, index_INDEXDB_VERSION as INDEXDB_VERSION, index_files as files, index_getFileName as getFileName, index_getFileSystem as getFileSystem, index_getPath as getPath, keyBag as kb, keyedCrypto as kc, index$1 as mf, index_runtimeFn as runtimeFn };
1134
1133
  }
1135
1134
 
1136
1135
  declare const PACKAGE_VERSION: string;
package/index.d.ts CHANGED
@@ -1035,9 +1035,9 @@ declare class Database<DT extends DocTypes = NonNullable<unknown>> implements Co
1035
1035
  declare function fireproof(name: string, opts?: ConfigOpts): Database;
1036
1036
 
1037
1037
  declare function getFileSystem(url: URI): Promise<SysFileSystem>;
1038
+
1038
1039
  declare function getPath(url: URI, sthis: SuperThis): string;
1039
1040
  declare function getFileName(url: URI, sthis: SuperThis): string;
1040
- declare function toArrayBuffer(buffer: Buffer | string): Uint8Array;
1041
1041
 
1042
1042
  declare function encodeFile(blob: BlobLike): Promise<{
1043
1043
  cid: AnyLink;
@@ -1128,9 +1128,8 @@ declare const index_getFileName: typeof getFileName;
1128
1128
  declare const index_getFileSystem: typeof getFileSystem;
1129
1129
  declare const index_getPath: typeof getPath;
1130
1130
  declare const index_runtimeFn: typeof runtimeFn;
1131
- declare const index_toArrayBuffer: typeof toArrayBuffer;
1132
1131
  declare namespace index {
1133
- export { index_FILESTORE_VERSION as FILESTORE_VERSION, index_INDEXDB_VERSION as INDEXDB_VERSION, index_files as files, index_getFileName as getFileName, index_getFileSystem as getFileSystem, index_getPath as getPath, keyBag as kb, keyedCrypto as kc, index$1 as mf, index_runtimeFn as runtimeFn, index_toArrayBuffer as toArrayBuffer };
1132
+ export { index_FILESTORE_VERSION as FILESTORE_VERSION, index_INDEXDB_VERSION as INDEXDB_VERSION, index_files as files, index_getFileName as getFileName, index_getFileSystem as getFileSystem, index_getPath as getPath, keyBag as kb, keyedCrypto as kc, index$1 as mf, index_runtimeFn as runtimeFn };
1134
1133
  }
1135
1134
 
1136
1135
  declare const PACKAGE_VERSION: string;
package/index.global.js CHANGED
@@ -12416,51 +12416,54 @@ ${end.comment}` : end.comment;
12416
12416
  }
12417
12417
  });
12418
12418
 
12419
- // src/bundle-not-impl.ts
12420
- var require_bundle_not_impl = __commonJS({
12421
- "src/bundle-not-impl.ts"() {
12422
- "use strict";
12423
- var err = new Error("store-file not implemented");
12424
- console.error(err.stack);
12425
- throw err;
12426
- }
12427
- });
12428
-
12429
- // src/runtime/gateways/file/utils.ts
12430
- var utils_exports2 = {};
12431
- __export(utils_exports2, {
12432
- getFileName: () => getFileName,
12433
- getFileSystem: () => getFileSystem,
12434
- getPath: () => getPath,
12435
- toArrayBuffer: () => toArrayBuffer
12436
- });
12419
+ // src/runtime/gateways/file/get-file-system-dynamic.ts
12437
12420
  async function getFileSystem(url) {
12438
- const name6 = url.getParam("fs");
12421
+ const name6 = url.getParam("fs", "node");
12439
12422
  let fs;
12440
12423
  switch (name6) {
12441
12424
  case "mem":
12442
- {
12443
- const { MemFileSystem } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
12444
- fs = new MemFileSystem();
12445
- }
12425
+ fs = await externalLoaders.get(name6).once(async () => {
12426
+ const memjs = "./node/mem-filesystem.js";
12427
+ const { MemFileSystem } = await import(
12428
+ /* @vite-ignore */
12429
+ memjs
12430
+ );
12431
+ return new MemFileSystem();
12432
+ });
12446
12433
  break;
12447
12434
  // case 'deno': {
12448
12435
  // const { DenoFileSystem } = await import("./deno-filesystem.js");
12449
12436
  // fs = new DenoFileSystem();
12450
12437
  // break;
12451
12438
  // }
12452
- case "node": {
12453
- const { NodeFileSystem } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
12454
- fs = new NodeFileSystem();
12455
- break;
12456
- }
12457
- case "sys":
12458
- default: {
12459
- return getFileSystem(url.build().setParam("fs", "node").URI());
12460
- }
12439
+ default:
12440
+ fs = await externalLoaders.get(name6).once(async () => {
12441
+ const nodejs = "./node/node-filesystem.js";
12442
+ const { NodeFileSystem } = await import(
12443
+ /* @vite-ignore */
12444
+ nodejs
12445
+ );
12446
+ return new NodeFileSystem();
12447
+ });
12461
12448
  }
12462
12449
  return fs.start();
12463
12450
  }
12451
+ var externalLoaders;
12452
+ var init_get_file_system_dynamic = __esm({
12453
+ "src/runtime/gateways/file/get-file-system-dynamic.ts"() {
12454
+ "use strict";
12455
+ init_cement();
12456
+ externalLoaders = new KeyedResolvOnce();
12457
+ }
12458
+ });
12459
+
12460
+ // src/runtime/gateways/file/utils.ts
12461
+ var utils_exports2 = {};
12462
+ __export(utils_exports2, {
12463
+ getFileName: () => getFileName,
12464
+ getFileSystem: () => getFileSystem,
12465
+ getPath: () => getPath
12466
+ });
12464
12467
  function getPath(url, sthis) {
12465
12468
  const basePath = url.pathname;
12466
12469
  const name6 = url.getParam("name");
@@ -12485,21 +12488,11 @@ ${end.comment}` : end.comment;
12485
12488
  throw sthis.logger.Error().Url(url).Msg(`unsupported store type`).AsError();
12486
12489
  }
12487
12490
  }
12488
- function toArrayBuffer(buffer2) {
12489
- if (typeof buffer2 === "string") {
12490
- buffer2 = Buffer.from(buffer2);
12491
- }
12492
- const ab = new ArrayBuffer(buffer2.length);
12493
- const view = new Uint8Array(ab);
12494
- for (let i = 0; i < buffer2.length; ++i) {
12495
- view[i] = buffer2[i];
12496
- }
12497
- return view;
12498
- }
12499
12491
  var init_utils2 = __esm({
12500
12492
  "src/runtime/gateways/file/utils.ts"() {
12501
12493
  "use strict";
12502
12494
  init_utils();
12495
+ init_get_file_system_dynamic();
12503
12496
  }
12504
12497
  });
12505
12498
 
@@ -13084,173 +13077,228 @@ ${end.comment}` : end.comment;
13084
13077
  }
13085
13078
  });
13086
13079
 
13087
- // src/runtime/gateways/indexdb/version.ts
13088
- var INDEXDB_VERSION;
13080
+ // src/runtime/gateways/file/version.ts
13081
+ var FILESTORE_VERSION;
13089
13082
  var init_version = __esm({
13090
- "src/runtime/gateways/indexdb/version.ts"() {
13083
+ "src/runtime/gateways/file/version.ts"() {
13091
13084
  "use strict";
13092
- INDEXDB_VERSION = "v0.19-indexdb";
13085
+ FILESTORE_VERSION = "v0.19-file";
13093
13086
  }
13094
13087
  });
13095
13088
 
13096
- // src/runtime/gateways/indexdb/gateway@skip-esm.ts
13097
- var gateway_skip_esm_exports = {};
13098
- __export(gateway_skip_esm_exports, {
13099
- IndexDBGateway: () => IndexDBGateway,
13100
- IndexDBTestStore: () => IndexDBTestStore,
13101
- getIndexDBName: () => getIndexDBName
13089
+ // src/runtime/gateways/file/gateway.ts
13090
+ var gateway_exports = {};
13091
+ __export(gateway_exports, {
13092
+ FileGateway: () => FileGateway,
13093
+ FileTestStore: () => FileTestStore
13102
13094
  });
13103
- function ensureVersion(url) {
13104
- return url.build().defParam("version", INDEXDB_VERSION).URI();
13105
- }
13106
- function sanitzeKey(key) {
13107
- if (key.length === 1) {
13108
- key = key[0];
13109
- }
13110
- return key;
13111
- }
13112
- async function connectIdb(url, sthis) {
13113
- const dbName = getIndexDBName(url, sthis);
13114
- const once = await onceIndexDB.get(dbName.fullDb).once(async () => {
13115
- const db = await openDB(dbName.fullDb, 1, {
13116
- upgrade(db2) {
13117
- ["version", "data", "wal", "meta", "idx.data", "idx.wal", "idx.meta"].map((store) => {
13118
- db2.createObjectStore(store, {
13119
- autoIncrement: false
13120
- });
13121
- });
13122
- }
13123
- });
13124
- const found = await db.get("version", "version");
13125
- const version = ensureVersion(url).getParam("version");
13126
- if (!found) {
13127
- await db.put("version", { version }, "version");
13128
- } else if (found.version !== version) {
13129
- sthis.logger.Warn().Str("url", url.toString()).Str("version", version).Str("found", found.version).Msg("version mismatch");
13130
- }
13131
- return { db, dbName, version, url };
13132
- });
13133
- return {
13134
- ...once,
13135
- url: url.build().setParam("version", once.version).URI()
13136
- };
13137
- }
13138
- function joinDBName(...names) {
13139
- return names.map((i) => i.replace(/^[^a-zA-Z0-9]+/g, "").replace(/[^a-zA-Z0-9]+/g, "_")).filter((i) => i.length).join(".");
13140
- }
13141
- function getIndexDBName(iurl, sthis) {
13142
- const url = ensureVersion(iurl);
13143
- const fullDb = url.pathname.replace(/^\/+/, "").replace(/\?.*$/, "");
13144
- const dbName = url.getParam("name");
13145
- if (!dbName) throw sthis.logger.Error().Str("url", url.toString()).Msg(`name not found`).AsError();
13146
- const result = joinDBName(fullDb, dbName);
13147
- const objStore = getStore(url, sthis, joinDBName).name;
13148
- const connectionKey = [result, objStore].join(":");
13149
- return {
13150
- fullDb: result,
13151
- objStore,
13152
- connectionKey,
13153
- dbName
13154
- };
13155
- }
13156
- var onceIndexDB, IndexDBGateway, IndexDBTestStore;
13157
- var init_gateway_skip_esm = __esm({
13158
- "src/runtime/gateways/indexdb/gateway@skip-esm.ts"() {
13095
+ var versionFiles, FileGateway, FileTestStore;
13096
+ var init_gateway = __esm({
13097
+ "src/runtime/gateways/file/gateway.ts"() {
13159
13098
  "use strict";
13160
- init_build();
13161
- init_cement();
13162
13099
  init_version();
13100
+ init_cement();
13163
13101
  init_utils();
13164
- onceIndexDB = new KeyedResolvOnce();
13165
- IndexDBGateway = class {
13102
+ init_utils2();
13103
+ versionFiles = new KeyedResolvOnce();
13104
+ FileGateway = class {
13105
+ get fs() {
13106
+ if (!this._fs) throw this.logger.Error().Msg("fs not initialized").AsError();
13107
+ return this._fs;
13108
+ }
13166
13109
  constructor(sthis) {
13167
- this._db = {};
13168
- this.logger = ensureLogger(sthis, "IndexDBGateway");
13169
13110
  this.sthis = sthis;
13111
+ this.logger = sthis.logger;
13112
+ }
13113
+ async getVersionFromFile(path, logger) {
13114
+ return versionFiles.get(path).once(async () => {
13115
+ await this.fs.mkdir(path, { recursive: true });
13116
+ const vFile = this.sthis.pathOps.join(path, "version");
13117
+ const vFileStat = await this.fs.stat(vFile).catch(() => void 0);
13118
+ if (!vFileStat) {
13119
+ await this.fs.writefile(this.sthis.pathOps.join(path, "version"), FILESTORE_VERSION);
13120
+ return FILESTORE_VERSION;
13121
+ } else if (!vFileStat.isFile()) {
13122
+ throw logger.Error().Str("file", vFile).Msg(`version file is a directory`).AsError();
13123
+ }
13124
+ const v = await this.fs.readfile(vFile);
13125
+ const vStr = this.sthis.txt.decode(v);
13126
+ if (vStr !== FILESTORE_VERSION) {
13127
+ logger.Warn().Str("file", vFile).Str("from", vStr).Str("expected", FILESTORE_VERSION).Msg(`version mismatch`);
13128
+ }
13129
+ return vStr;
13130
+ });
13170
13131
  }
13171
- async start(baseURL) {
13132
+ start(baseURL) {
13172
13133
  return exception2Result(async () => {
13173
- this.logger.Debug().Url(baseURL).Msg("starting");
13174
- await this.sthis.start();
13175
- const ic = await connectIdb(baseURL, this.sthis);
13176
- this._db = ic.db;
13177
- this.logger.Debug().Url(ic.url).Msg("started");
13178
- return ic.url;
13134
+ this._fs = await getFileSystem(baseURL);
13135
+ await this.fs.start();
13136
+ const url = baseURL.build();
13137
+ url.defParam("version", FILESTORE_VERSION);
13138
+ const dbUrl = await this.buildUrl(url.URI(), "dummy");
13139
+ const dbdirFile = this.getFilePath(dbUrl.Ok());
13140
+ await this.fs.mkdir(this.sthis.pathOps.dirname(dbdirFile), { recursive: true });
13141
+ const dbroot = this.sthis.pathOps.dirname(dbdirFile);
13142
+ this.logger.Debug().Url(url.URI()).Str("dbroot", dbroot).Msg("start");
13143
+ url.setParam("version", await this.getVersionFromFile(dbroot, this.logger));
13144
+ return url.URI();
13179
13145
  });
13180
13146
  }
13147
+ async buildUrl(baseUrl, key) {
13148
+ return Result.Ok(baseUrl.build().setParam("key", key).URI());
13149
+ }
13181
13150
  async close() {
13182
13151
  return Result.Ok(void 0);
13183
13152
  }
13184
- async destroy(baseUrl) {
13153
+ // abstract buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;
13154
+ getFilePath(url) {
13155
+ const key = url.getParam("key");
13156
+ if (!key) throw this.logger.Error().Url(url).Msg(`key not found`).AsError();
13157
+ return this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));
13158
+ }
13159
+ async put(url, body) {
13185
13160
  return exception2Result(async () => {
13186
- const type2 = getStore(baseUrl, this.sthis, joinDBName).name;
13187
- const idb = this._db;
13188
- const trans = idb.transaction(type2, "readwrite");
13189
- const object_store = trans.objectStore(type2);
13190
- const toDelete = [];
13191
- for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {
13192
- toDelete.push(cursor.primaryKey);
13193
- }
13194
- for (const key of toDelete) {
13195
- await trans.db.delete(type2, key);
13196
- }
13197
- await trans.done;
13161
+ const file = await this.getFilePath(url);
13162
+ this.logger.Debug().Str("url", url.toString()).Str("file", file).Msg("put");
13163
+ await this.fs.writefile(file, body);
13198
13164
  });
13199
13165
  }
13200
- buildUrl(baseUrl, key) {
13201
- return Promise.resolve(Result.Ok(baseUrl.build().setParam("key", key).URI()));
13202
- }
13203
13166
  async get(url) {
13204
13167
  return exceptionWrapper(async () => {
13205
- const key = getKey(url, this.logger);
13206
- const store = getStore(url, this.sthis, joinDBName).name;
13207
- this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("getting");
13208
- const tx = this._db.transaction([store], "readonly");
13209
- const bytes = await tx.objectStore(store).get(sanitzeKey(key));
13210
- await tx.done;
13211
- if (!bytes) {
13212
- return Result.Err(new NotFoundError2(`missing ${key}`));
13168
+ const file = this.getFilePath(url);
13169
+ try {
13170
+ const res = await this.fs.readfile(file);
13171
+ this.logger.Debug().Url(url.asURL()).Str("file", file).Msg("get");
13172
+ return Result.Ok(new Uint8Array(res));
13173
+ } catch (e) {
13174
+ if (isNotFoundError(e)) {
13175
+ return Result.Err(new NotFoundError2(`file not found: ${file}`));
13176
+ }
13177
+ return Result.Err(e);
13213
13178
  }
13214
- return Result.Ok(bytes);
13215
13179
  });
13216
13180
  }
13217
- async put(url, value) {
13181
+ async delete(url) {
13218
13182
  return exception2Result(async () => {
13219
- const key = getKey(url, this.logger);
13220
- const store = getStore(url, this.sthis, joinDBName).name;
13221
- this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("putting");
13222
- const tx = this._db.transaction([store], "readwrite");
13223
- await tx.objectStore(store).put(value, sanitzeKey(key));
13224
- await tx.done;
13183
+ await this.fs.unlink(this.getFilePath(url));
13225
13184
  });
13226
13185
  }
13227
- async delete(url) {
13228
- return exception2Result(async () => {
13229
- const key = getKey(url, this.logger);
13230
- const store = getStore(url, this.sthis, joinDBName).name;
13231
- this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("deleting");
13232
- const tx = this._db.transaction([store], "readwrite");
13233
- await tx.objectStore(store).delete(sanitzeKey(key));
13234
- await tx.done;
13235
- return Result.Ok(void 0);
13186
+ async destroy(baseURL) {
13187
+ const url = await this.buildUrl(baseURL, "x");
13188
+ if (url.isErr()) return url;
13189
+ const filepath = this.sthis.pathOps.dirname(this.getFilePath(url.Ok()));
13190
+ let files = [];
13191
+ try {
13192
+ files = await this.fs.readdir(filepath);
13193
+ } catch (e) {
13194
+ if (!isNotFoundError(e)) {
13195
+ throw this.logger.Error().Err(e).Str("dir", filepath).Msg("destroy:readdir").AsError();
13196
+ }
13197
+ }
13198
+ for (const file of files) {
13199
+ const pathed = this.sthis.pathOps.join(filepath, file);
13200
+ try {
13201
+ await this.fs.unlink(pathed);
13202
+ } catch (e) {
13203
+ if (!isNotFoundError(e)) {
13204
+ throw this.logger.Error().Err(e).Str("file", pathed).Msg("destroy:unlink").AsError();
13205
+ }
13206
+ }
13207
+ }
13208
+ return Result.Ok(void 0);
13209
+ }
13210
+ };
13211
+ FileTestStore = class {
13212
+ constructor(sthis) {
13213
+ this.logger = ensureLogger(sthis, "FileTestStore");
13214
+ this.sthis = sthis;
13215
+ }
13216
+ async get(iurl, key) {
13217
+ const url = iurl.build().setParam("key", key).URI();
13218
+ const dbFile = this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));
13219
+ this.logger.Debug().Url(url).Str("dbFile", dbFile).Msg("get");
13220
+ const buffer2 = await (await getFileSystem(url)).readfile(dbFile);
13221
+ this.logger.Debug().Url(url).Str("dbFile", dbFile).Len(buffer2).Msg("got");
13222
+ return buffer2;
13223
+ }
13224
+ };
13225
+ }
13226
+ });
13227
+
13228
+ // src/runtime/gateways/indexdb/gateway-import-dynamic.ts
13229
+ function gatewayImport() {
13230
+ const gwimpl = "./web/gateway-impl.js";
13231
+ return import(
13232
+ /* @vite-ignore */
13233
+ gwimpl
13234
+ );
13235
+ }
13236
+ var init_gateway_import_dynamic = __esm({
13237
+ "src/runtime/gateways/indexdb/gateway-import-dynamic.ts"() {
13238
+ "use strict";
13239
+ }
13240
+ });
13241
+
13242
+ // src/runtime/gateways/indexdb/gateway.ts
13243
+ var gateway_exports2 = {};
13244
+ __export(gateway_exports2, {
13245
+ IndexDBGateway: () => IndexDBGateway,
13246
+ IndexDBTestStore: () => IndexDBTestStore
13247
+ });
13248
+ var loadExternal, IndexDBGateway, IndexDBTestStore;
13249
+ var init_gateway2 = __esm({
13250
+ "src/runtime/gateways/indexdb/gateway.ts"() {
13251
+ "use strict";
13252
+ init_cement();
13253
+ init_gateway_import_dynamic();
13254
+ loadExternal = new ResolveOnce();
13255
+ IndexDBGateway = class {
13256
+ constructor(sthis) {
13257
+ this.sthis = sthis;
13258
+ }
13259
+ getGateway() {
13260
+ return loadExternal.once(() => {
13261
+ return gatewayImport().then(({ IndexDBGatewayImpl }) => new IndexDBGatewayImpl(this.sthis));
13236
13262
  });
13237
13263
  }
13264
+ buildUrl(baseUrl, key) {
13265
+ return this.getGateway().then((gw) => gw.buildUrl(baseUrl, key));
13266
+ }
13267
+ start(baseUrl) {
13268
+ return this.getGateway().then((gw) => gw.start(baseUrl));
13269
+ }
13270
+ close(baseUrl) {
13271
+ return this.getGateway().then((gw) => gw.close(baseUrl));
13272
+ }
13273
+ destroy(baseUrl) {
13274
+ return this.getGateway().then((gw) => gw.destroy(baseUrl));
13275
+ }
13276
+ put(url, body) {
13277
+ return this.getGateway().then((gw) => gw.put(url, body));
13278
+ }
13279
+ get(url) {
13280
+ return this.getGateway().then((gw) => gw.get(url));
13281
+ }
13282
+ delete(url) {
13283
+ return this.getGateway().then((gw) => gw.delete(url));
13284
+ }
13285
+ // subscribe?(url: URI, callback: (meta: Uint8Array) => void): Promise<UnsubscribeResult> {
13286
+ // // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13287
+ // return this.getGateway().then(gw => gw.subscribe!(url, callback));
13288
+ // }
13238
13289
  };
13239
13290
  IndexDBTestStore = class {
13240
13291
  constructor(sthis) {
13292
+ this.loadExternal = new ResolveOnce();
13241
13293
  this.sthis = sthis;
13242
- this.logger = ensureLogger(sthis, "IndexDBTestStore", {});
13243
13294
  }
13244
- async get(url, key) {
13245
- const ic = await connectIdb(url, this.sthis);
13246
- const store = getStore(ic.url, this.sthis, joinDBName).name;
13247
- this.logger.Debug().Str("key", key).Str("store", store).Msg("getting");
13248
- let bytes = await ic.db.get(store, sanitzeKey(key));
13249
- this.logger.Debug().Str("key", key).Str("store", store).Int("len", bytes.length).Msg("got");
13250
- if (typeof bytes === "string") {
13251
- bytes = this.sthis.txt.encode(bytes);
13252
- }
13253
- return bytes;
13295
+ getGateway() {
13296
+ return this.loadExternal.once(() => {
13297
+ return gatewayImport().then(({ IndexDBTestStore: IndexDBTestStore2 }) => new IndexDBTestStore2(this.sthis));
13298
+ });
13299
+ }
13300
+ get(url, key) {
13301
+ return this.getGateway().then((gw) => gw.get(url, key));
13254
13302
  }
13255
13303
  };
13256
13304
  }
@@ -28370,22 +28418,22 @@ You can use close({ resize: true }) to resize header`);
28370
28418
  registerStoreProtocol({
28371
28419
  protocol: "file:",
28372
28420
  gateway: async (sthis) => {
28373
- const { FileGateway } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
28374
- return new FileGateway(sthis);
28421
+ const { FileGateway: FileGateway2 } = await Promise.resolve().then(() => (init_gateway(), gateway_exports));
28422
+ return new FileGateway2(sthis);
28375
28423
  },
28376
28424
  test: async (sthis) => {
28377
- const { FileTestStore } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
28378
- return new FileTestStore(sthis);
28425
+ const { FileTestStore: FileTestStore2 } = await Promise.resolve().then(() => (init_gateway(), gateway_exports));
28426
+ return new FileTestStore2(sthis);
28379
28427
  }
28380
28428
  });
28381
28429
  registerStoreProtocol({
28382
28430
  protocol: "indexdb:",
28383
28431
  gateway: async (sthis) => {
28384
- const { IndexDBGateway: IndexDBGateway2 } = await Promise.resolve().then(() => (init_gateway_skip_esm(), gateway_skip_esm_exports));
28432
+ const { IndexDBGateway: IndexDBGateway2 } = await Promise.resolve().then(() => (init_gateway2(), gateway_exports2));
28385
28433
  return new IndexDBGateway2(sthis);
28386
28434
  },
28387
28435
  test: async (sthis) => {
28388
- const { IndexDBTestStore: IndexDBTestStore2 } = await Promise.resolve().then(() => (init_gateway_skip_esm(), gateway_skip_esm_exports));
28436
+ const { IndexDBTestStore: IndexDBTestStore2 } = await Promise.resolve().then(() => (init_gateway2(), gateway_exports2));
28389
28437
  return new IndexDBTestStore2(sthis);
28390
28438
  }
28391
28439
  });
@@ -30758,8 +30806,7 @@ You can use close({ resize: true }) to resize header`);
30758
30806
  kb: () => key_bag_exports,
30759
30807
  kc: () => keyed_crypto_exports,
30760
30808
  mf: () => wait_pr_multiformats_exports,
30761
- runtimeFn: () => runtimeFn,
30762
- toArrayBuffer: () => toArrayBuffer
30809
+ runtimeFn: () => runtimeFn
30763
30810
  });
30764
30811
  init_utils2();
30765
30812
 
@@ -30775,19 +30822,17 @@ You can use close({ resize: true }) to resize header`);
30775
30822
 
30776
30823
  // src/runtime/index.ts
30777
30824
  init_cement();
30778
-
30779
- // src/runtime/gateways/file/version.ts
30780
- var FILESTORE_VERSION = "v0.19-file";
30781
-
30782
- // src/runtime/index.ts
30783
30825
  init_version();
30784
30826
 
30827
+ // src/runtime/gateways/indexdb/version.ts
30828
+ var INDEXDB_VERSION = "v0.19-indexdb";
30829
+
30785
30830
  // src/index.ts
30786
30831
  init_utils();
30787
30832
 
30788
30833
  // src/version.ts
30789
30834
  var PACKAGE_VERSION = Object.keys({
30790
- "0.19.112-dev-web": "xxxx"
30835
+ "0.19.112-dev-dyn": "xxxx"
30791
30836
  })[0];
30792
30837
  return __toCommonJS(src_exports6);
30793
30838
  })();