@fireproof/core 0.19.111 → 0.19.112-dev-iife

Sign up to get free protection for your applications and to get access to all the features.
Files changed (67) hide show
  1. package/{chunk-OFGPKRCM.js → chunk-D4E6UX6S.js} +3 -8
  2. package/chunk-D4E6UX6S.js.map +1 -0
  3. package/{chunk-WS3YRPIA.js → chunk-OKACCIGZ.js} +15 -29
  4. package/chunk-OKACCIGZ.js.map +1 -0
  5. package/chunk-PZ5AY32C.js +10 -0
  6. package/deno.json +1 -2
  7. package/gateway-3YJXDXD3.js +59 -0
  8. package/gateway-3YJXDXD3.js.map +1 -0
  9. package/{gateway-5FCWPX5W.js → gateway-HUSQCAA7.js} +5 -4
  10. package/gateway-HUSQCAA7.js.map +1 -0
  11. package/index.cjs +64 -274
  12. package/index.cjs.map +1 -1
  13. package/index.d.cts +1 -3
  14. package/index.d.ts +1 -3
  15. package/index.global.js +575 -312
  16. package/index.global.js.map +1 -1
  17. package/index.js +19 -19
  18. package/index.js.map +1 -1
  19. package/{key-bag-file-WADZBHYG.js → key-bag-file-QCOF7UFH.js} +4 -3
  20. package/{key-bag-file-WADZBHYG.js.map → key-bag-file-QCOF7UFH.js.map} +1 -1
  21. package/{key-bag-indexdb-PGVAI3FJ.js → key-bag-indexdb-VHX3MZ66.js} +4 -3
  22. package/{key-bag-indexdb-PGVAI3FJ.js.map → key-bag-indexdb-VHX3MZ66.js.map} +1 -1
  23. package/metafile-cjs.json +1 -1
  24. package/metafile-esm.json +1 -1
  25. package/metafile-iife.json +1 -1
  26. package/node/chunk-4A4RAVNS.js +17 -0
  27. package/node/chunk-4A4RAVNS.js.map +1 -0
  28. package/node/mem-filesystem.cjs +72 -0
  29. package/node/mem-filesystem.cjs.map +1 -0
  30. package/node/mem-filesystem.d.cts +25 -0
  31. package/node/mem-filesystem.d.ts +25 -0
  32. package/{mem-filesystem-YPPJV7Q2.js → node/mem-filesystem.js} +3 -4
  33. package/node/mem-filesystem.js.map +1 -0
  34. package/node/metafile-cjs.json +1 -0
  35. package/node/metafile-esm.json +1 -0
  36. package/node/node-filesystem.cjs +86 -0
  37. package/node/node-filesystem.cjs.map +1 -0
  38. package/node/node-filesystem.d.cts +36 -0
  39. package/node/node-filesystem.d.ts +36 -0
  40. package/{node-filesystem-INX4ZTHE.js → node/node-filesystem.js} +3 -4
  41. package/node/node-filesystem.js.map +1 -0
  42. package/node/types-DARSfXlb.d.cts +23 -0
  43. package/node/types-DARSfXlb.d.ts +23 -0
  44. package/package.json +15 -6
  45. package/tests/blockstore/keyed-crypto.test.ts +2 -2
  46. package/tests/blockstore/store.test.ts +3 -5
  47. package/tests/fireproof/all-gateway.test.ts +11 -9
  48. package/utils-GYG2FMCZ.js +13 -0
  49. package/utils-GYG2FMCZ.js.map +1 -0
  50. package/web/gateway-impl.cjs +319 -0
  51. package/web/gateway-impl.cjs.map +1 -0
  52. package/web/gateway-impl.d.cts +86 -0
  53. package/web/gateway-impl.d.ts +86 -0
  54. package/{gateway-H7UD6TNB.js → web/gateway-impl.js} +165 -20
  55. package/web/gateway-impl.js.map +1 -0
  56. package/web/metafile-cjs.json +1 -0
  57. package/web/metafile-esm.json +1 -0
  58. package/chunk-OFGPKRCM.js.map +0 -1
  59. package/chunk-PB4BKL4O.js +0 -7
  60. package/chunk-PB4BKL4O.js.map +0 -1
  61. package/chunk-WS3YRPIA.js.map +0 -1
  62. package/gateway-5FCWPX5W.js.map +0 -1
  63. package/gateway-H7UD6TNB.js.map +0 -1
  64. package/mem-filesystem-YPPJV7Q2.js.map +0 -1
  65. package/node-filesystem-INX4ZTHE.js.map +0 -1
  66. package/utils-QO2HIWGI.js +0 -14
  67. /package/{utils-QO2HIWGI.js.map → chunk-PZ5AY32C.js.map} +0 -0
package/index.global.js CHANGED
@@ -34,13 +34,13 @@ var Fireproof = (() => {
34
34
  ));
35
35
  var __toCommonJS = (mod2) => __copyProps(__defProp({}, "__esModule", { value: true }), mod2);
36
36
 
37
- // node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-GES3MUGV.js
37
+ // node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-GES3MUGV.js
38
38
  function Utf8EnDecoderSingleton() {
39
39
  return utf8EnDecoder;
40
40
  }
41
41
  var __defProp2, __defProps, __getOwnPropDescs, __getOwnPropSymbols, __hasOwnProp2, __propIsEnum, __typeError, __defNormalProp, __spreadValues, __spreadProps, __export2, __accessCheck, __privateGet, __privateAdd, __privateSet, encoder, decoder, Utf8EnDecoder, utf8EnDecoder;
42
42
  var init_chunk_GES3MUGV = __esm({
43
- "node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-GES3MUGV.js"() {
43
+ "node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-GES3MUGV.js"() {
44
44
  "use strict";
45
45
  __defProp2 = Object.defineProperty;
46
46
  __defProps = Object.defineProperties;
@@ -86,7 +86,7 @@ var Fireproof = (() => {
86
86
  }
87
87
  });
88
88
 
89
- // node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-7KFVMTOS.js
89
+ // node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-USQXEZHL.js
90
90
  function streamMap(s, sm) {
91
91
  const state = { reader: s.getReader(), streamMap: sm, idx: 0 };
92
92
  return new ReadableStream({
@@ -261,8 +261,8 @@ var Fireproof = (() => {
261
261
  });
262
262
  }
263
263
  var utils_exports, ConsoleWriterStreamDefaultWriter, ConsoleWriterStream, FanoutWriteStream;
264
- var init_chunk_7KFVMTOS = __esm({
265
- "node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-7KFVMTOS.js"() {
264
+ var init_chunk_USQXEZHL = __esm({
265
+ "node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-USQXEZHL.js"() {
266
266
  "use strict";
267
267
  init_chunk_GES3MUGV();
268
268
  utils_exports = {};
@@ -302,22 +302,22 @@ var Fireproof = (() => {
302
302
  this.closed = Promise.resolve(void 0);
303
303
  }
304
304
  async write(chunk) {
305
- const str = this.decoder.decode(chunk).trimEnd();
305
+ let strObj = this.decoder.decode(chunk).trimEnd();
306
306
  let output = "log";
307
307
  try {
308
- const decode17 = JSON.parse(str);
309
- output = decode17.level;
308
+ strObj = JSON.parse(strObj);
309
+ output = strObj.level;
310
310
  } catch (e) {
311
311
  }
312
312
  switch (output) {
313
313
  case "error":
314
- console.error(str);
314
+ console.error(strObj);
315
315
  break;
316
316
  case "warn":
317
- console.warn(str);
317
+ console.warn(strObj);
318
318
  break;
319
319
  default:
320
- console.log(str);
320
+ console.log(strObj);
321
321
  }
322
322
  }
323
323
  };
@@ -370,7 +370,7 @@ var Fireproof = (() => {
370
370
  }
371
371
  });
372
372
 
373
- // node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-Q65HLCNL.js
373
+ // node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-Q65HLCNL.js
374
374
  function TimeFactory(timeMode) {
375
375
  switch (timeMode) {
376
376
  case "real":
@@ -395,7 +395,7 @@ var Fireproof = (() => {
395
395
  }
396
396
  var Time, SysTime, ConstTime, StepTime, RandomService, IdService, BaseSysAbstraction, WrapperSysAbstraction, _promise, _resolveFn, _rejectFn, Future, ResolveSeq, ResolveOnce, Keyed, KeyedResolvOnce, _node, NodeEnvActions, _deno, DenoEnvActions, BrowserEnvActions, _envFactory, EnvImpl;
397
397
  var init_chunk_Q65HLCNL = __esm({
398
- "node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-Q65HLCNL.js"() {
398
+ "node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-Q65HLCNL.js"() {
399
399
  "use strict";
400
400
  init_chunk_GES3MUGV();
401
401
  Time = class {
@@ -894,7 +894,7 @@ var Fireproof = (() => {
894
894
  }
895
895
  });
896
896
 
897
- // node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-WMMUXBDX.js
897
+ // node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-WMMUXBDX.js
898
898
  function WebSysAbstraction(param) {
899
899
  if (!my) {
900
900
  my = new BaseSysAbstraction({
@@ -907,7 +907,7 @@ var Fireproof = (() => {
907
907
  }
908
908
  var WebFileService, WebSystemService, my;
909
909
  var init_chunk_WMMUXBDX = __esm({
910
- "node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/chunk-WMMUXBDX.js"() {
910
+ "node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/chunk-WMMUXBDX.js"() {
911
911
  "use strict";
912
912
  init_chunk_Q65HLCNL();
913
913
  init_chunk_GES3MUGV();
@@ -8095,7 +8095,7 @@ ${end.comment}` : end.comment;
8095
8095
  }
8096
8096
  });
8097
8097
 
8098
- // node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/index.js
8098
+ // node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/index.js
8099
8099
  function bin2text(hex, lineFn, size = 0) {
8100
8100
  const arr = new Uint8Array(hex.buffer, hex.byteOffset, hex.byteLength);
8101
8101
  let cutted = " ";
@@ -8140,16 +8140,6 @@ ${end.comment}` : end.comment;
8140
8140
  );
8141
8141
  return collector.join("\n");
8142
8142
  }
8143
- function removeSelfRef(lineEnd) {
8144
- const cache2 = /* @__PURE__ */ new Set();
8145
- return function(key, value) {
8146
- if (typeof value === "object" && value !== null) {
8147
- if (cache2.has(value)) return "...";
8148
- cache2.add(value);
8149
- }
8150
- return lineEnd ? value + lineEnd : value;
8151
- };
8152
- }
8153
8143
  function asyncLogValue(val) {
8154
8144
  throw new Error("Not implemented");
8155
8145
  }
@@ -8176,19 +8166,31 @@ ${end.comment}` : end.comment;
8176
8166
  case "boolean":
8177
8167
  return new LogValue(() => val);
8178
8168
  case "object": {
8169
+ if (val === null) {
8170
+ return new LogValue(() => "null");
8171
+ }
8179
8172
  if (ArrayBuffer.isView(val)) {
8180
8173
  return logValue(bin2string(val, 512));
8181
8174
  }
8182
8175
  if (Array.isArray(val)) {
8183
8176
  return new LogValue(() => val.map((v) => logValue(v).value()));
8184
8177
  }
8185
- if (val === null) {
8186
- return new LogValue(() => "null");
8178
+ if (val instanceof Headers) {
8179
+ return new LogValue(() => Object.fromEntries(val.entries()));
8180
+ }
8181
+ if (val instanceof ReadableStream) {
8182
+ return new LogValue(() => ">Stream<");
8183
+ }
8184
+ if (val instanceof Promise) {
8185
+ return new LogValue(() => ">Promise<");
8187
8186
  }
8188
8187
  if (state.has(val)) {
8189
8188
  return new LogValue(() => "...");
8190
8189
  }
8191
8190
  state.add(val);
8191
+ if (typeof val.toJSON === "function") {
8192
+ return new LogValue(() => val.toJSON());
8193
+ }
8192
8194
  const res = {};
8193
8195
  const typedVal = val;
8194
8196
  for (const key in typedVal) {
@@ -8196,7 +8198,9 @@ ${end.comment}` : end.comment;
8196
8198
  if (element instanceof LogValue) {
8197
8199
  res[key] = element;
8198
8200
  } else {
8199
- res[key] = logValue(element, state);
8201
+ if (typeof element !== "function") {
8202
+ res[key] = logValue(element, state);
8203
+ }
8200
8204
  }
8201
8205
  }
8202
8206
  return new LogValue(() => res);
@@ -8239,6 +8243,72 @@ ${end.comment}` : end.comment;
8239
8243
  return Result.Err(e);
8240
8244
  }
8241
8245
  }
8246
+ function stripper(strip, obj) {
8247
+ const strips = Array.isArray(strip) ? strip : [strip];
8248
+ const restrips = strips.map((s) => {
8249
+ if (typeof s === "string") {
8250
+ const escaped = s.replace(/[-\\[\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\^\\$\\|]/g, "\\$&");
8251
+ return new RegExp(`^${escaped}$`);
8252
+ }
8253
+ return s;
8254
+ });
8255
+ return localStripper(void 0, restrips, obj);
8256
+ }
8257
+ function localStripper(path, restrips, obj) {
8258
+ if (typeof obj !== "object" || obj === null) {
8259
+ return obj;
8260
+ }
8261
+ if (Array.isArray(obj)) {
8262
+ return obj.map((i) => localStripper(path, restrips, i));
8263
+ }
8264
+ const ret = __spreadValues({}, obj);
8265
+ const matcher = (key, nextPath) => {
8266
+ for (const re of restrips) {
8267
+ if (re.test(key) || re.test(nextPath)) {
8268
+ return true;
8269
+ }
8270
+ }
8271
+ return false;
8272
+ };
8273
+ for (const key in ret) {
8274
+ if (Object.prototype.hasOwnProperty.call(ret, key)) {
8275
+ let nextPath;
8276
+ if (path) {
8277
+ nextPath = [path, key].join(".");
8278
+ } else {
8279
+ nextPath = key;
8280
+ }
8281
+ if (matcher(key, nextPath)) {
8282
+ delete ret[key];
8283
+ continue;
8284
+ }
8285
+ if (typeof ret[key] === "object") {
8286
+ if (Array.isArray(ret[key])) {
8287
+ ret[key] = ret[key].reduce((acc, v, i) => {
8288
+ const toDelete = matcher(key, `${nextPath}[${i}]`);
8289
+ if (!toDelete) {
8290
+ acc.push(localStripper(`${nextPath}[${i}]`, restrips, v));
8291
+ }
8292
+ return acc;
8293
+ }, []);
8294
+ } else {
8295
+ ret[key] = localStripper(nextPath, restrips, ret[key]);
8296
+ }
8297
+ }
8298
+ }
8299
+ }
8300
+ return ret;
8301
+ }
8302
+ function coerceKey(key, def) {
8303
+ if (typeof key === "object") {
8304
+ const keys = Object.keys(key);
8305
+ if (keys.length !== 1) {
8306
+ throw new Error(`Invalid key: ${JSON.stringify(key)}`);
8307
+ }
8308
+ return { key: keys[0], def: key[keys[0]] };
8309
+ }
8310
+ return { key, def };
8311
+ }
8242
8312
  function falsy2undef(value) {
8243
8313
  return value === void 0 || value === null ? void 0 : value;
8244
8314
  }
@@ -8278,6 +8348,49 @@ ${end.comment}` : end.comment;
8278
8348
  throw new Error(`Invalid argument: ${typeof strURLUri}`);
8279
8349
  }
8280
8350
  }
8351
+ function getParamResult(key, val, msgFn = (key2) => {
8352
+ return `missing parameter: ${key2}`;
8353
+ }) {
8354
+ if (val === void 0) {
8355
+ return Result.Err(msgFn(key));
8356
+ }
8357
+ return Result.Ok(val);
8358
+ }
8359
+ function getParamsResult(keys, getParam) {
8360
+ const keyDef = keys.flat().reduce(
8361
+ (acc, i) => {
8362
+ if (typeof i === "string") {
8363
+ acc.push({ key: i });
8364
+ } else if (typeof i === "object") {
8365
+ acc.push(...Object.keys(i).map((k) => ({ key: k, def: i[k] })));
8366
+ }
8367
+ return acc;
8368
+ },
8369
+ []
8370
+ );
8371
+ const msgFn = keys.find((k) => typeof k === "function") || ((...keys2) => {
8372
+ const msg = keys2.join(",");
8373
+ return `missing parameters: ${msg}`;
8374
+ });
8375
+ const errors = [];
8376
+ const result = {};
8377
+ for (const kd of keyDef) {
8378
+ const val = getParam.getParam(kd.key);
8379
+ if (val === void 0) {
8380
+ if (kd.def) {
8381
+ result[kd.key] = kd.def;
8382
+ } else {
8383
+ errors.push(kd.key);
8384
+ }
8385
+ } else {
8386
+ result[kd.key] = val;
8387
+ }
8388
+ }
8389
+ if (errors.length) {
8390
+ return Result.Err(msgFn(...errors));
8391
+ }
8392
+ return Result.Ok(result);
8393
+ }
8281
8394
  function isSet(value, ref = globalThis) {
8282
8395
  const [head, ...tail] = value.split(".");
8283
8396
  if (["object", "function"].includes(typeof ref) && ref && ["object", "function"].includes(typeof ref[head]) && ref[head]) {
@@ -8353,9 +8466,9 @@ ${end.comment}` : end.comment;
8353
8466
  }
8354
8467
  var LogValue, Result, ResultOK, ResultError, MutableURL, BuildURI, hasHostPartProtocols, URI, LogWriterStream, LevelHandlerImpl, levelSingleton, JSONFormatter, YAMLFormatter, LoggerImpl, WithLoggerBuilder, VERSION;
8355
8468
  var init_cement = __esm({
8356
- "node_modules/.pnpm/@adviser+cement@0.2.31_typescript@5.6.2/node_modules/@adviser/cement/index.js"() {
8469
+ "node_modules/.pnpm/@adviser+cement@0.2.36_typescript@5.6.2/node_modules/@adviser/cement/index.js"() {
8357
8470
  "use strict";
8358
- init_chunk_7KFVMTOS();
8471
+ init_chunk_USQXEZHL();
8359
8472
  init_chunk_WMMUXBDX();
8360
8473
  init_chunk_Q65HLCNL();
8361
8474
  init_chunk_GES3MUGV();
@@ -8365,7 +8478,11 @@ ${end.comment}` : end.comment;
8365
8478
  this.fn = fn;
8366
8479
  }
8367
8480
  value() {
8368
- return this.fn();
8481
+ try {
8482
+ return this.fn();
8483
+ } catch (e) {
8484
+ return `LogValue:${e.message}`;
8485
+ }
8369
8486
  }
8370
8487
  toJSON() {
8371
8488
  return this.value();
@@ -8592,6 +8709,22 @@ ${end.comment}` : end.comment;
8592
8709
  // this._url.host = h;
8593
8710
  // return this;
8594
8711
  // }
8712
+ appendRelative(p) {
8713
+ const appendUrl = URI.from(p);
8714
+ let pathname = appendUrl.pathname;
8715
+ let basePath = this._url.pathname;
8716
+ if (pathname.startsWith("/")) {
8717
+ pathname = pathname.replace(/^\//, "");
8718
+ }
8719
+ if (basePath.length > 0) {
8720
+ basePath = basePath.replace(/\/$/, "");
8721
+ }
8722
+ this.pathname(basePath + "/" + pathname);
8723
+ for (const [key, value] of appendUrl.getParams) {
8724
+ this.setParam(key, value);
8725
+ }
8726
+ return this;
8727
+ }
8595
8728
  delParam(key) {
8596
8729
  this._url.searchParams.delete(key);
8597
8730
  return this;
@@ -8609,8 +8742,22 @@ ${end.comment}` : end.comment;
8609
8742
  hasParam(key) {
8610
8743
  return this._url.searchParams.has(key);
8611
8744
  }
8612
- getParam(key) {
8613
- return falsy2undef(this._url.searchParams.get(key));
8745
+ get getParams() {
8746
+ return this._url.searchParams.entries();
8747
+ }
8748
+ getParam(key, def) {
8749
+ const { key: k, def: d } = coerceKey(key, def);
8750
+ let val = this._url.searchParams.get(k);
8751
+ if (!falsy2undef(val) && d) {
8752
+ val = d;
8753
+ }
8754
+ return falsy2undef(val);
8755
+ }
8756
+ getParamResult(key, msgFn) {
8757
+ return getParamResult(key, this.getParam(key), msgFn);
8758
+ }
8759
+ getParamsResult(...keys) {
8760
+ return getParamsResult(keys, this);
8614
8761
  }
8615
8762
  toString() {
8616
8763
  this._url.searchParams.sort();
@@ -8619,6 +8766,15 @@ ${end.comment}` : end.comment;
8619
8766
  toJSON() {
8620
8767
  return this.toString();
8621
8768
  }
8769
+ asURL() {
8770
+ return this.URI().asURL();
8771
+ }
8772
+ asObj(...strips) {
8773
+ return this.URI().asObj(...strips);
8774
+ }
8775
+ clone() {
8776
+ return _BuildURI.from(this.toString());
8777
+ }
8622
8778
  URI() {
8623
8779
  return URI.from(this._url);
8624
8780
  }
@@ -8698,8 +8854,19 @@ ${end.comment}` : end.comment;
8698
8854
  hasParam(key) {
8699
8855
  return this._url.searchParams.has(key);
8700
8856
  }
8701
- getParam(key) {
8702
- return falsy2undef(this._url.searchParams.get(key));
8857
+ getParam(key, def) {
8858
+ const { key: k, def: d } = coerceKey(key, def);
8859
+ let val = this._url.searchParams.get(k);
8860
+ if (!falsy2undef(val) && d) {
8861
+ val = d;
8862
+ }
8863
+ return falsy2undef(val);
8864
+ }
8865
+ getParamResult(key, msgFn) {
8866
+ return getParamResult(key, this.getParam(key), msgFn);
8867
+ }
8868
+ getParamsResult(...keys) {
8869
+ return getParamsResult(keys, this);
8703
8870
  }
8704
8871
  clone() {
8705
8872
  return new _URI(this._url);
@@ -8713,7 +8880,7 @@ ${end.comment}` : end.comment;
8713
8880
  toJSON() {
8714
8881
  return this.toString();
8715
8882
  }
8716
- asObj() {
8883
+ asObj(...strips) {
8717
8884
  const pathURI = {
8718
8885
  style: "path",
8719
8886
  protocol: this.protocol,
@@ -8721,13 +8888,13 @@ ${end.comment}` : end.comment;
8721
8888
  searchParams: Object.fromEntries(this.getParams)
8722
8889
  };
8723
8890
  if (hasHostPartProtocols.has(this.protocol.replace(/:$/, ""))) {
8724
- return __spreadProps(__spreadValues({}, pathURI), {
8891
+ return stripper(strips, __spreadProps(__spreadValues({}, pathURI), {
8725
8892
  style: "host",
8726
8893
  hostname: this.hostname,
8727
8894
  port: this.port
8728
- });
8895
+ }));
8729
8896
  }
8730
- return pathURI;
8897
+ return stripper(strips, pathURI);
8731
8898
  }
8732
8899
  };
8733
8900
  LogWriterStream = class {
@@ -8863,7 +9030,13 @@ ${end.comment}` : end.comment;
8863
9030
  this._space = space;
8864
9031
  }
8865
9032
  format(attr) {
8866
- return this._txtEnDe.encode(JSON.stringify(attr, removeSelfRef(), this._space) + "\n");
9033
+ let ret;
9034
+ try {
9035
+ ret = JSON.stringify(attr, null, this._space);
9036
+ } catch (e) {
9037
+ ret = JSON.stringify({ internal: { message: e.message, stack: e.stack } });
9038
+ }
9039
+ return this._txtEnDe.encode(ret + "\n");
8867
9040
  }
8868
9041
  };
8869
9042
  YAMLFormatter = class {
@@ -8872,7 +9045,7 @@ ${end.comment}` : end.comment;
8872
9045
  this._space = space;
8873
9046
  }
8874
9047
  format(attr) {
8875
- return this._txtEnDe.encode("---\n" + browser_default.stringify(attr, removeSelfRef(), this._space) + "\n");
9048
+ return this._txtEnDe.encode("---\n" + browser_default.stringify(attr, null, this._space) + "\n");
8876
9049
  }
8877
9050
  };
8878
9051
  LoggerImpl = class _LoggerImpl {
@@ -8933,7 +9106,7 @@ ${end.comment}` : end.comment;
8933
9106
  return this._txtEnDe;
8934
9107
  }
8935
9108
  Attributes() {
8936
- return JSON.parse(JSON.stringify(this._attributes, removeSelfRef()));
9109
+ return JSON.parse(JSON.stringify(this._attributes, null));
8937
9110
  }
8938
9111
  SetExposeStack(enable) {
8939
9112
  this._levelHandler.setExposeStack(enable);
@@ -9029,7 +9202,37 @@ ${end.comment}` : end.comment;
9029
9202
  return this;
9030
9203
  }
9031
9204
  Bool(key, value) {
9032
- this._attributes[key] = logValue(!!value);
9205
+ this.coerceKey(key, !!value);
9206
+ return this;
9207
+ }
9208
+ Http(res, req, key) {
9209
+ if (Result.Is(res)) {
9210
+ if (res.isErr()) {
9211
+ this.Err(res.Err());
9212
+ return this;
9213
+ }
9214
+ res = res.Ok();
9215
+ }
9216
+ let reqRes = res;
9217
+ if (req) {
9218
+ reqRes = { res, req };
9219
+ }
9220
+ this.Any(key || "Http", reqRes);
9221
+ return this;
9222
+ }
9223
+ Pair(x) {
9224
+ for (const key of Object.keys(x)) {
9225
+ const value = x[key];
9226
+ if (value instanceof LogValue) {
9227
+ this._attributes[key] = value;
9228
+ continue;
9229
+ }
9230
+ if (Result.Is(value)) {
9231
+ this.Result(key, value);
9232
+ continue;
9233
+ }
9234
+ this.Any(key, value);
9235
+ }
9033
9236
  return this;
9034
9237
  }
9035
9238
  Result(key, res) {
@@ -9052,12 +9255,19 @@ ${end.comment}` : end.comment;
9052
9255
  this.Ref(key, () => URI.from(url).toString());
9053
9256
  return this;
9054
9257
  }
9258
+ coerceKey(key, value) {
9259
+ if (typeof key === "string") {
9260
+ this._attributes[key] = logValue(value);
9261
+ } else {
9262
+ this.Pair(key);
9263
+ }
9264
+ }
9055
9265
  Str(key, value) {
9056
- this._attributes[key] = logValue(value);
9266
+ this.coerceKey(key, value);
9057
9267
  return this;
9058
9268
  }
9059
9269
  Any(key, value) {
9060
- this._attributes[key] = logValue(value);
9270
+ this.coerceKey(key, value);
9061
9271
  return this;
9062
9272
  }
9063
9273
  Dur(key, nsec) {
@@ -9065,7 +9275,7 @@ ${end.comment}` : end.comment;
9065
9275
  return this;
9066
9276
  }
9067
9277
  Uint64(key, value) {
9068
- this._attributes[key] = logValue(value);
9278
+ this.coerceKey(key, value);
9069
9279
  return this;
9070
9280
  }
9071
9281
  Int(key, value) {
@@ -9117,8 +9327,10 @@ ${end.comment}` : end.comment;
9117
9327
  }
9118
9328
  return fnRet;
9119
9329
  });
9330
+ const asError = () => new Error(this._txtEnDe.decode(fnError()));
9120
9331
  return {
9121
- AsError: () => new Error(this._txtEnDe.decode(fnError()))
9332
+ ResultError: () => Result.Err(asError()),
9333
+ AsError: asError
9122
9334
  };
9123
9335
  }
9124
9336
  };
@@ -9160,6 +9372,14 @@ ${end.comment}` : end.comment;
9160
9372
  this._li.SetDebug(...modules);
9161
9373
  return this;
9162
9374
  }
9375
+ Http(res, req, key) {
9376
+ this._li.Http(res, req, key);
9377
+ return this;
9378
+ }
9379
+ Pair(x) {
9380
+ this._li.Pair(x);
9381
+ return this;
9382
+ }
9163
9383
  Str(key, value) {
9164
9384
  this._li.Str(key, value);
9165
9385
  return this;
@@ -12095,7 +12315,9 @@ ${end.comment}` : end.comment;
12095
12315
  };
12096
12316
  pathOps = new pathOpsImpl();
12097
12317
  txtOps = {
12318
+ // eslint-disable-next-line no-restricted-globals
12098
12319
  encode: (input) => new TextEncoder().encode(input),
12320
+ // eslint-disable-next-line no-restricted-globals
12099
12321
  decode: (input) => new TextDecoder().decode(input)
12100
12322
  };
12101
12323
  NotFoundError2 = class extends Error {
@@ -12204,6 +12426,128 @@ ${end.comment}` : end.comment;
12204
12426
  }
12205
12427
  });
12206
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
+ });
12436
+ async function getFileSystem(url) {
12437
+ const name6 = url.getParam("fs", "node");
12438
+ let fs;
12439
+ switch (name6) {
12440
+ case "mem":
12441
+ fs = await externalLoaders.get(name6).once(async () => {
12442
+ const { MemFileSystem } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
12443
+ return new MemFileSystem();
12444
+ });
12445
+ break;
12446
+ // case 'deno': {
12447
+ // const { DenoFileSystem } = await import("./deno-filesystem.js");
12448
+ // fs = new DenoFileSystem();
12449
+ // break;
12450
+ // }
12451
+ default:
12452
+ fs = await externalLoaders.get(name6).once(async () => {
12453
+ const { NodeFileSystem } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
12454
+ return new NodeFileSystem();
12455
+ });
12456
+ }
12457
+ return fs.start();
12458
+ }
12459
+ function getPath(url, sthis) {
12460
+ const basePath = url.pathname;
12461
+ const name6 = url.getParam("name");
12462
+ if (name6) {
12463
+ const version = url.getParam("version");
12464
+ if (!version) throw sthis.logger.Error().Url(url).Msg(`version not found`).AsError();
12465
+ return sthis.pathOps.join(basePath, version, name6);
12466
+ }
12467
+ return sthis.pathOps.join(basePath);
12468
+ }
12469
+ function getFileName(url, sthis) {
12470
+ const key = url.getParam("key");
12471
+ if (!key) throw sthis.logger.Error().Url(url).Msg(`key not found`).AsError();
12472
+ const res = getStore(url, sthis, (...a) => a.join("-"));
12473
+ switch (res.store) {
12474
+ case "data":
12475
+ return sthis.pathOps.join(res.name, key + ".car");
12476
+ case "wal":
12477
+ case "meta":
12478
+ return sthis.pathOps.join(res.name, key + ".json");
12479
+ default:
12480
+ throw sthis.logger.Error().Url(url).Msg(`unsupported store type`).AsError();
12481
+ }
12482
+ }
12483
+ var externalLoaders;
12484
+ var init_utils2 = __esm({
12485
+ "src/runtime/gateways/file/utils.ts"() {
12486
+ "use strict";
12487
+ init_cement();
12488
+ init_utils();
12489
+ externalLoaders = new KeyedResolvOnce();
12490
+ }
12491
+ });
12492
+
12493
+ // src/runtime/key-bag-file.ts
12494
+ var key_bag_file_exports = {};
12495
+ __export(key_bag_file_exports, {
12496
+ KeyBagProviderFile: () => KeyBagProviderFile
12497
+ });
12498
+ var KeyBagProviderFile;
12499
+ var init_key_bag_file = __esm({
12500
+ "src/runtime/key-bag-file.ts"() {
12501
+ "use strict";
12502
+ init_utils();
12503
+ KeyBagProviderFile = class {
12504
+ async _prepare(id) {
12505
+ await this.sthis.start();
12506
+ let sysFS;
12507
+ switch (this.url.protocol) {
12508
+ case "file:": {
12509
+ const { getFileSystem: getFileSystem2 } = await Promise.resolve().then(() => (init_utils2(), utils_exports2));
12510
+ sysFS = await getFileSystem2(this.url);
12511
+ break;
12512
+ }
12513
+ default:
12514
+ throw this.logger.Error().Url(this.url).Msg("unsupported protocol").AsError();
12515
+ }
12516
+ const dirName = this.url.pathname;
12517
+ await sysFS.mkdir(dirName, { recursive: true });
12518
+ return {
12519
+ dirName,
12520
+ sysFS,
12521
+ fName: this.sthis.pathOps.join(dirName, `${id.replace(/[^a-zA-Z0-9]/g, "_")}.json`)
12522
+ };
12523
+ }
12524
+ constructor(url, sthis) {
12525
+ this.url = url;
12526
+ this.sthis = sthis;
12527
+ this.logger = sthis.logger;
12528
+ }
12529
+ async get(id) {
12530
+ const ctx = await this._prepare(id);
12531
+ try {
12532
+ const p = await ctx.sysFS.readfile(ctx.fName);
12533
+ const ki = JSON.parse(this.sthis.txt.decode(p));
12534
+ return ki;
12535
+ } catch (e) {
12536
+ if (isNotFoundError(e)) {
12537
+ return void 0;
12538
+ }
12539
+ throw this.logger.Error().Err(e).Str("file", ctx.dirName).Msg("read bag failed").AsError();
12540
+ }
12541
+ }
12542
+ async set(id, item) {
12543
+ const ctx = await this._prepare(id);
12544
+ const p = this.sthis.txt.encode(JSON.stringify(item, null, 2));
12545
+ await ctx.sysFS.writefile(ctx.fName, p);
12546
+ }
12547
+ };
12548
+ }
12549
+ });
12550
+
12207
12551
  // node_modules/.pnpm/idb@8.0.0/node_modules/idb/build/index.js
12208
12552
  function getIdbProxyableTypes() {
12209
12553
  return idbProxyableTypes || (idbProxyableTypes = [
@@ -12443,124 +12787,6 @@ ${end.comment}` : end.comment;
12443
12787
  }
12444
12788
  });
12445
12789
 
12446
- // src/runtime/gateways/file/node-filesystem.ts
12447
- var node_filesystem_exports = {};
12448
- __export(node_filesystem_exports, {
12449
- NodeFileSystem: () => NodeFileSystem
12450
- });
12451
- var NodeFileSystem;
12452
- var init_node_filesystem = __esm({
12453
- "src/runtime/gateways/file/node-filesystem.ts"() {
12454
- "use strict";
12455
- init_utils2();
12456
- init_cement();
12457
- NodeFileSystem = class {
12458
- async start() {
12459
- this.fs = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
12460
- return this;
12461
- }
12462
- async mkdir(path, options) {
12463
- return this.fs?.mkdir(path, options);
12464
- }
12465
- async readdir(path, options) {
12466
- return this.fs?.readdir(path, options);
12467
- }
12468
- async rm(path, options) {
12469
- return this.fs?.rm(path, options);
12470
- }
12471
- async copyFile(source, destination) {
12472
- return this.fs?.copyFile(source, destination);
12473
- }
12474
- async readfile(path, options) {
12475
- const ret = await this.fs?.readFile(path, options);
12476
- return toArrayBuffer(ret);
12477
- }
12478
- stat(path) {
12479
- return this.fs?.stat(path);
12480
- }
12481
- async unlink(path) {
12482
- return this.fs?.unlink(path);
12483
- }
12484
- async writefile(path, data) {
12485
- if (runtimeFn().isDeno) {
12486
- return this.fs?.writeFile(path, data);
12487
- }
12488
- return this.fs?.writeFile(path, Buffer.from(data));
12489
- }
12490
- };
12491
- }
12492
- });
12493
-
12494
- // src/runtime/gateways/file/utils.ts
12495
- async function getFileSystem(url) {
12496
- const name6 = url.getParam("fs");
12497
- let fs;
12498
- switch (name6) {
12499
- case "mem":
12500
- {
12501
- const { MemFileSystem } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
12502
- fs = new MemFileSystem();
12503
- }
12504
- break;
12505
- // case 'deno': {
12506
- // const { DenoFileSystem } = await import("./deno-filesystem.js");
12507
- // fs = new DenoFileSystem();
12508
- // break;
12509
- // }
12510
- case "node": {
12511
- const { NodeFileSystem: NodeFileSystem2 } = await Promise.resolve().then(() => (init_node_filesystem(), node_filesystem_exports));
12512
- fs = new NodeFileSystem2();
12513
- break;
12514
- }
12515
- case "sys":
12516
- default: {
12517
- return getFileSystem(url.build().setParam("fs", "node").URI());
12518
- }
12519
- }
12520
- return fs.start();
12521
- }
12522
- function getPath(url, sthis) {
12523
- const basePath = url.pathname;
12524
- const name6 = url.getParam("name");
12525
- if (name6) {
12526
- const version = url.getParam("version");
12527
- if (!version) throw sthis.logger.Error().Url(url).Msg(`version not found`).AsError();
12528
- return sthis.pathOps.join(basePath, version, name6);
12529
- }
12530
- return sthis.pathOps.join(basePath);
12531
- }
12532
- function getFileName(url, sthis) {
12533
- const key = url.getParam("key");
12534
- if (!key) throw sthis.logger.Error().Url(url).Msg(`key not found`).AsError();
12535
- const res = getStore(url, sthis, (...a) => a.join("-"));
12536
- switch (res.store) {
12537
- case "data":
12538
- return sthis.pathOps.join(res.name, key + ".car");
12539
- case "wal":
12540
- case "meta":
12541
- return sthis.pathOps.join(res.name, key + ".json");
12542
- default:
12543
- throw sthis.logger.Error().Url(url).Msg(`unsupported store type`).AsError();
12544
- }
12545
- }
12546
- function toArrayBuffer(buffer2) {
12547
- if (typeof buffer2 === "string") {
12548
- buffer2 = Buffer.from(buffer2);
12549
- }
12550
- const ab = new ArrayBuffer(buffer2.length);
12551
- const view = new Uint8Array(ab);
12552
- for (let i = 0; i < buffer2.length; ++i) {
12553
- view[i] = buffer2[i];
12554
- }
12555
- return view;
12556
- }
12557
- var init_utils2 = __esm({
12558
- "src/runtime/gateways/file/utils.ts"() {
12559
- "use strict";
12560
- init_utils();
12561
- }
12562
- });
12563
-
12564
12790
  // src/runtime/key-bag-indexdb.ts
12565
12791
  var key_bag_indexdb_exports = {};
12566
12792
  __export(key_bag_indexdb_exports, {
@@ -12845,173 +13071,213 @@ ${end.comment}` : end.comment;
12845
13071
  }
12846
13072
  });
12847
13073
 
12848
- // src/runtime/gateways/indexdb/version.ts
12849
- var INDEXDB_VERSION;
13074
+ // src/runtime/gateways/file/version.ts
13075
+ var FILESTORE_VERSION;
12850
13076
  var init_version = __esm({
12851
- "src/runtime/gateways/indexdb/version.ts"() {
13077
+ "src/runtime/gateways/file/version.ts"() {
12852
13078
  "use strict";
12853
- INDEXDB_VERSION = "v0.19-indexdb";
13079
+ FILESTORE_VERSION = "v0.19-file";
12854
13080
  }
12855
13081
  });
12856
13082
 
12857
- // src/runtime/gateways/indexdb/gateway.ts
13083
+ // src/runtime/gateways/file/gateway.ts
12858
13084
  var gateway_exports = {};
12859
13085
  __export(gateway_exports, {
12860
- IndexDBGateway: () => IndexDBGateway,
12861
- IndexDBTestStore: () => IndexDBTestStore,
12862
- getIndexDBName: () => getIndexDBName
13086
+ FileGateway: () => FileGateway,
13087
+ FileTestStore: () => FileTestStore
12863
13088
  });
12864
- function ensureVersion(url) {
12865
- return url.build().defParam("version", INDEXDB_VERSION).URI();
12866
- }
12867
- function sanitzeKey(key) {
12868
- if (key.length === 1) {
12869
- key = key[0];
12870
- }
12871
- return key;
12872
- }
12873
- async function connectIdb(url, sthis) {
12874
- const dbName = getIndexDBName(url, sthis);
12875
- const once = await onceIndexDB.get(dbName.fullDb).once(async () => {
12876
- const db = await openDB(dbName.fullDb, 1, {
12877
- upgrade(db2) {
12878
- ["version", "data", "wal", "meta", "idx.data", "idx.wal", "idx.meta"].map((store) => {
12879
- db2.createObjectStore(store, {
12880
- autoIncrement: false
12881
- });
12882
- });
12883
- }
12884
- });
12885
- const found = await db.get("version", "version");
12886
- const version = ensureVersion(url).getParam("version");
12887
- if (!found) {
12888
- await db.put("version", { version }, "version");
12889
- } else if (found.version !== version) {
12890
- sthis.logger.Warn().Str("url", url.toString()).Str("version", version).Str("found", found.version).Msg("version mismatch");
12891
- }
12892
- return { db, dbName, version, url };
12893
- });
12894
- return {
12895
- ...once,
12896
- url: url.build().setParam("version", once.version).URI()
12897
- };
12898
- }
12899
- function joinDBName(...names) {
12900
- return names.map((i) => i.replace(/^[^a-zA-Z0-9]+/g, "").replace(/[^a-zA-Z0-9]+/g, "_")).filter((i) => i.length).join(".");
12901
- }
12902
- function getIndexDBName(iurl, sthis) {
12903
- const url = ensureVersion(iurl);
12904
- const fullDb = url.pathname.replace(/^\/+/, "").replace(/\?.*$/, "");
12905
- const dbName = url.getParam("name");
12906
- if (!dbName) throw sthis.logger.Error().Str("url", url.toString()).Msg(`name not found`).AsError();
12907
- const result = joinDBName(fullDb, dbName);
12908
- const objStore = getStore(url, sthis, joinDBName).name;
12909
- const connectionKey = [result, objStore].join(":");
12910
- return {
12911
- fullDb: result,
12912
- objStore,
12913
- connectionKey,
12914
- dbName
12915
- };
12916
- }
12917
- var onceIndexDB, IndexDBGateway, IndexDBTestStore;
13089
+ var versionFiles, FileGateway, FileTestStore;
12918
13090
  var init_gateway = __esm({
12919
- "src/runtime/gateways/indexdb/gateway.ts"() {
13091
+ "src/runtime/gateways/file/gateway.ts"() {
12920
13092
  "use strict";
12921
- init_build();
12922
- init_cement();
12923
13093
  init_version();
13094
+ init_cement();
12924
13095
  init_utils();
12925
- onceIndexDB = new KeyedResolvOnce();
12926
- IndexDBGateway = class {
13096
+ init_utils2();
13097
+ versionFiles = new KeyedResolvOnce();
13098
+ FileGateway = class {
13099
+ get fs() {
13100
+ if (!this._fs) throw this.logger.Error().Msg("fs not initialized").AsError();
13101
+ return this._fs;
13102
+ }
12927
13103
  constructor(sthis) {
12928
- this._db = {};
12929
- this.logger = ensureLogger(sthis, "IndexDBGateway");
12930
13104
  this.sthis = sthis;
13105
+ this.logger = sthis.logger;
12931
13106
  }
12932
- async start(baseURL) {
13107
+ async getVersionFromFile(path, logger) {
13108
+ return versionFiles.get(path).once(async () => {
13109
+ await this.fs.mkdir(path, { recursive: true });
13110
+ const vFile = this.sthis.pathOps.join(path, "version");
13111
+ const vFileStat = await this.fs.stat(vFile).catch(() => void 0);
13112
+ if (!vFileStat) {
13113
+ await this.fs.writefile(this.sthis.pathOps.join(path, "version"), FILESTORE_VERSION);
13114
+ return FILESTORE_VERSION;
13115
+ } else if (!vFileStat.isFile()) {
13116
+ throw logger.Error().Str("file", vFile).Msg(`version file is a directory`).AsError();
13117
+ }
13118
+ const v = await this.fs.readfile(vFile);
13119
+ const vStr = this.sthis.txt.decode(v);
13120
+ if (vStr !== FILESTORE_VERSION) {
13121
+ logger.Warn().Str("file", vFile).Str("from", vStr).Str("expected", FILESTORE_VERSION).Msg(`version mismatch`);
13122
+ }
13123
+ return vStr;
13124
+ });
13125
+ }
13126
+ start(baseURL) {
12933
13127
  return exception2Result(async () => {
12934
- this.logger.Debug().Url(baseURL).Msg("starting");
12935
- await this.sthis.start();
12936
- const ic = await connectIdb(baseURL, this.sthis);
12937
- this._db = ic.db;
12938
- this.logger.Debug().Url(ic.url).Msg("started");
12939
- return ic.url;
13128
+ this._fs = await getFileSystem(baseURL);
13129
+ await this.fs.start();
13130
+ const url = baseURL.build();
13131
+ url.defParam("version", FILESTORE_VERSION);
13132
+ const dbUrl = await this.buildUrl(url.URI(), "dummy");
13133
+ const dbdirFile = this.getFilePath(dbUrl.Ok());
13134
+ await this.fs.mkdir(this.sthis.pathOps.dirname(dbdirFile), { recursive: true });
13135
+ const dbroot = this.sthis.pathOps.dirname(dbdirFile);
13136
+ this.logger.Debug().Url(url.URI()).Str("dbroot", dbroot).Msg("start");
13137
+ url.setParam("version", await this.getVersionFromFile(dbroot, this.logger));
13138
+ return url.URI();
12940
13139
  });
12941
13140
  }
13141
+ async buildUrl(baseUrl, key) {
13142
+ return Result.Ok(baseUrl.build().setParam("key", key).URI());
13143
+ }
12942
13144
  async close() {
12943
13145
  return Result.Ok(void 0);
12944
13146
  }
12945
- async destroy(baseUrl) {
13147
+ // abstract buildUrl(baseUrl: URL, key: string): Promise<Result<URL>>;
13148
+ getFilePath(url) {
13149
+ const key = url.getParam("key");
13150
+ if (!key) throw this.logger.Error().Url(url).Msg(`key not found`).AsError();
13151
+ return this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));
13152
+ }
13153
+ async put(url, body) {
12946
13154
  return exception2Result(async () => {
12947
- const type2 = getStore(baseUrl, this.sthis, joinDBName).name;
12948
- const idb = this._db;
12949
- const trans = idb.transaction(type2, "readwrite");
12950
- const object_store = trans.objectStore(type2);
12951
- const toDelete = [];
12952
- for (let cursor = await object_store.openCursor(); cursor; cursor = await cursor.continue()) {
12953
- toDelete.push(cursor.primaryKey);
12954
- }
12955
- for (const key of toDelete) {
12956
- await trans.db.delete(type2, key);
12957
- }
12958
- await trans.done;
13155
+ const file = await this.getFilePath(url);
13156
+ this.logger.Debug().Str("url", url.toString()).Str("file", file).Msg("put");
13157
+ await this.fs.writefile(file, body);
12959
13158
  });
12960
13159
  }
12961
- buildUrl(baseUrl, key) {
12962
- return Promise.resolve(Result.Ok(baseUrl.build().setParam("key", key).URI()));
12963
- }
12964
13160
  async get(url) {
12965
13161
  return exceptionWrapper(async () => {
12966
- const key = getKey(url, this.logger);
12967
- const store = getStore(url, this.sthis, joinDBName).name;
12968
- this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("getting");
12969
- const tx = this._db.transaction([store], "readonly");
12970
- const bytes = await tx.objectStore(store).get(sanitzeKey(key));
12971
- await tx.done;
12972
- if (!bytes) {
12973
- return Result.Err(new NotFoundError2(`missing ${key}`));
13162
+ const file = this.getFilePath(url);
13163
+ try {
13164
+ const res = await this.fs.readfile(file);
13165
+ this.logger.Debug().Url(url.asURL()).Str("file", file).Msg("get");
13166
+ return Result.Ok(new Uint8Array(res));
13167
+ } catch (e) {
13168
+ if (isNotFoundError(e)) {
13169
+ return Result.Err(new NotFoundError2(`file not found: ${file}`));
13170
+ }
13171
+ return Result.Err(e);
12974
13172
  }
12975
- return Result.Ok(bytes);
12976
13173
  });
12977
13174
  }
12978
- async put(url, value) {
13175
+ async delete(url) {
12979
13176
  return exception2Result(async () => {
12980
- const key = getKey(url, this.logger);
12981
- const store = getStore(url, this.sthis, joinDBName).name;
12982
- this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("putting");
12983
- const tx = this._db.transaction([store], "readwrite");
12984
- await tx.objectStore(store).put(value, sanitzeKey(key));
12985
- await tx.done;
13177
+ await this.fs.unlink(this.getFilePath(url));
12986
13178
  });
12987
13179
  }
12988
- async delete(url) {
12989
- return exception2Result(async () => {
12990
- const key = getKey(url, this.logger);
12991
- const store = getStore(url, this.sthis, joinDBName).name;
12992
- this.logger.Debug().Url(url).Str("key", key).Str("store", store).Msg("deleting");
12993
- const tx = this._db.transaction([store], "readwrite");
12994
- await tx.objectStore(store).delete(sanitzeKey(key));
12995
- await tx.done;
12996
- return Result.Ok(void 0);
13180
+ async destroy(baseURL) {
13181
+ const url = await this.buildUrl(baseURL, "x");
13182
+ if (url.isErr()) return url;
13183
+ const filepath = this.sthis.pathOps.dirname(this.getFilePath(url.Ok()));
13184
+ let files = [];
13185
+ try {
13186
+ files = await this.fs.readdir(filepath);
13187
+ } catch (e) {
13188
+ if (!isNotFoundError(e)) {
13189
+ throw this.logger.Error().Err(e).Str("dir", filepath).Msg("destroy:readdir").AsError();
13190
+ }
13191
+ }
13192
+ for (const file of files) {
13193
+ const pathed = this.sthis.pathOps.join(filepath, file);
13194
+ try {
13195
+ await this.fs.unlink(pathed);
13196
+ } catch (e) {
13197
+ if (!isNotFoundError(e)) {
13198
+ throw this.logger.Error().Err(e).Str("file", pathed).Msg("destroy:unlink").AsError();
13199
+ }
13200
+ }
13201
+ }
13202
+ return Result.Ok(void 0);
13203
+ }
13204
+ };
13205
+ FileTestStore = class {
13206
+ constructor(sthis) {
13207
+ this.logger = ensureLogger(sthis, "FileTestStore");
13208
+ this.sthis = sthis;
13209
+ }
13210
+ async get(iurl, key) {
13211
+ const url = iurl.build().setParam("key", key).URI();
13212
+ const dbFile = this.sthis.pathOps.join(getPath(url, this.sthis), getFileName(url, this.sthis));
13213
+ this.logger.Debug().Url(url).Str("dbFile", dbFile).Msg("get");
13214
+ const buffer2 = await (await getFileSystem(url)).readfile(dbFile);
13215
+ this.logger.Debug().Url(url).Str("dbFile", dbFile).Len(buffer2).Msg("got");
13216
+ return buffer2;
13217
+ }
13218
+ };
13219
+ }
13220
+ });
13221
+
13222
+ // src/runtime/gateways/indexdb/gateway.ts
13223
+ var gateway_exports2 = {};
13224
+ __export(gateway_exports2, {
13225
+ IndexDBGateway: () => IndexDBGateway,
13226
+ IndexDBTestStore: () => IndexDBTestStore
13227
+ });
13228
+ var loadExternal, IndexDBGateway, IndexDBTestStore;
13229
+ var init_gateway2 = __esm({
13230
+ "src/runtime/gateways/indexdb/gateway.ts"() {
13231
+ "use strict";
13232
+ init_cement();
13233
+ loadExternal = new ResolveOnce();
13234
+ IndexDBGateway = class {
13235
+ constructor(sthis) {
13236
+ this.sthis = sthis;
13237
+ }
13238
+ getGateway() {
13239
+ return loadExternal.once(() => {
13240
+ return Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1)).then(({ IndexDBGatewayImpl }) => new IndexDBGatewayImpl(this.sthis));
12997
13241
  });
12998
13242
  }
13243
+ buildUrl(baseUrl, key) {
13244
+ return this.getGateway().then((gw) => gw.buildUrl(baseUrl, key));
13245
+ }
13246
+ start(baseUrl) {
13247
+ return this.getGateway().then((gw) => gw.start(baseUrl));
13248
+ }
13249
+ close(baseUrl) {
13250
+ return this.getGateway().then((gw) => gw.close(baseUrl));
13251
+ }
13252
+ destroy(baseUrl) {
13253
+ return this.getGateway().then((gw) => gw.destroy(baseUrl));
13254
+ }
13255
+ put(url, body) {
13256
+ return this.getGateway().then((gw) => gw.put(url, body));
13257
+ }
13258
+ get(url) {
13259
+ return this.getGateway().then((gw) => gw.get(url));
13260
+ }
13261
+ delete(url) {
13262
+ return this.getGateway().then((gw) => gw.delete(url));
13263
+ }
13264
+ // subscribe?(url: URI, callback: (meta: Uint8Array) => void): Promise<UnsubscribeResult> {
13265
+ // // eslint-disable-next-line @typescript-eslint/no-non-null-assertion
13266
+ // return this.getGateway().then(gw => gw.subscribe!(url, callback));
13267
+ // }
12999
13268
  };
13000
13269
  IndexDBTestStore = class {
13001
13270
  constructor(sthis) {
13271
+ this.loadExternal = new ResolveOnce();
13002
13272
  this.sthis = sthis;
13003
- this.logger = ensureLogger(sthis, "IndexDBTestStore", {});
13004
13273
  }
13005
- async get(url, key) {
13006
- const ic = await connectIdb(url, this.sthis);
13007
- const store = getStore(ic.url, this.sthis, joinDBName).name;
13008
- this.logger.Debug().Str("key", key).Str("store", store).Msg("getting");
13009
- let bytes = await ic.db.get(store, sanitzeKey(key));
13010
- this.logger.Debug().Str("key", key).Str("store", store).Int("len", bytes.length).Msg("got");
13011
- if (typeof bytes === "string") {
13012
- bytes = this.sthis.txt.encode(bytes);
13013
- }
13014
- return bytes;
13274
+ getGateway() {
13275
+ return this.loadExternal.once(() => {
13276
+ return Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1)).then(({ IndexDBTestStore: IndexDBTestStore2 }) => new IndexDBTestStore2(this.sthis));
13277
+ });
13278
+ }
13279
+ get(url, key) {
13280
+ return this.getGateway().then((gw) => gw.get(url, key));
13015
13281
  }
13016
13282
  };
13017
13283
  }
@@ -26371,8 +26637,8 @@ You can use close({ resize: true }) to resize header`);
26371
26637
  {
26372
26638
  protocol: "file:",
26373
26639
  factory: async (url, sthis) => {
26374
- const { KeyBagProviderFile } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
26375
- return new KeyBagProviderFile(url, sthis);
26640
+ const { KeyBagProviderFile: KeyBagProviderFile2 } = await Promise.resolve().then(() => (init_key_bag_file(), key_bag_file_exports));
26641
+ return new KeyBagProviderFile2(url, sthis);
26376
26642
  }
26377
26643
  },
26378
26644
  {
@@ -27261,7 +27527,7 @@ You can use close({ resize: true }) to resize header`);
27261
27527
  async function decodeGatewayMetaBytesToDbMeta(sthis, byteHeads) {
27262
27528
  const crdtEntries = JSON.parse(sthis.txt.decode(byteHeads));
27263
27529
  if (!crdtEntries.length) {
27264
- sthis.logger.Debug().Str("byteHeads", new TextDecoder().decode(byteHeads)).Msg("No CRDT entries found");
27530
+ sthis.logger.Debug().Any("byteHeads", byteHeads).Msg("No CRDT entries found");
27265
27531
  return [];
27266
27532
  }
27267
27533
  if (!crdtEntries.map) {
@@ -27298,7 +27564,7 @@ You can use close({ resize: true }) to resize header`);
27298
27564
  sthis.logger.Debug().Str("dbMeta.key", dbMeta.key).Str("uri", uri.toString()).Msg("Set crypto key from gateway meta payload");
27299
27565
  return Result.Ok(dbMeta);
27300
27566
  }
27301
- sthis.logger.Debug().Str("data", new TextDecoder().decode(data)).Msg("No crypto in gateway meta payload");
27567
+ sthis.logger.Debug().Any("data", data).Msg("No crypto in gateway meta payload");
27302
27568
  return Result.Ok(void 0);
27303
27569
  } catch (error) {
27304
27570
  sthis.logger.Debug().Err(error).Msg("Failed to set crypto key from gateway meta payload");
@@ -28131,22 +28397,22 @@ You can use close({ resize: true }) to resize header`);
28131
28397
  registerStoreProtocol({
28132
28398
  protocol: "file:",
28133
28399
  gateway: async (sthis) => {
28134
- const { FileGateway } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
28135
- return new FileGateway(sthis);
28400
+ const { FileGateway: FileGateway2 } = await Promise.resolve().then(() => (init_gateway(), gateway_exports));
28401
+ return new FileGateway2(sthis);
28136
28402
  },
28137
28403
  test: async (sthis) => {
28138
- const { FileTestStore } = await Promise.resolve().then(() => __toESM(require_bundle_not_impl(), 1));
28139
- return new FileTestStore(sthis);
28404
+ const { FileTestStore: FileTestStore2 } = await Promise.resolve().then(() => (init_gateway(), gateway_exports));
28405
+ return new FileTestStore2(sthis);
28140
28406
  }
28141
28407
  });
28142
28408
  registerStoreProtocol({
28143
28409
  protocol: "indexdb:",
28144
28410
  gateway: async (sthis) => {
28145
- const { IndexDBGateway: IndexDBGateway2 } = await Promise.resolve().then(() => (init_gateway(), gateway_exports));
28411
+ const { IndexDBGateway: IndexDBGateway2 } = await Promise.resolve().then(() => (init_gateway2(), gateway_exports2));
28146
28412
  return new IndexDBGateway2(sthis);
28147
28413
  },
28148
28414
  test: async (sthis) => {
28149
- const { IndexDBTestStore: IndexDBTestStore2 } = await Promise.resolve().then(() => (init_gateway(), gateway_exports));
28415
+ const { IndexDBTestStore: IndexDBTestStore2 } = await Promise.resolve().then(() => (init_gateway2(), gateway_exports2));
28150
28416
  return new IndexDBTestStore2(sthis);
28151
28417
  }
28152
28418
  });
@@ -30519,8 +30785,7 @@ You can use close({ resize: true }) to resize header`);
30519
30785
  kb: () => key_bag_exports,
30520
30786
  kc: () => keyed_crypto_exports,
30521
30787
  mf: () => wait_pr_multiformats_exports,
30522
- runtimeFn: () => runtimeFn,
30523
- toArrayBuffer: () => toArrayBuffer
30788
+ runtimeFn: () => runtimeFn
30524
30789
  });
30525
30790
  init_utils2();
30526
30791
 
@@ -30536,19 +30801,17 @@ You can use close({ resize: true }) to resize header`);
30536
30801
 
30537
30802
  // src/runtime/index.ts
30538
30803
  init_cement();
30539
-
30540
- // src/runtime/gateways/file/version.ts
30541
- var FILESTORE_VERSION = "v0.19-file";
30542
-
30543
- // src/runtime/index.ts
30544
30804
  init_version();
30545
30805
 
30806
+ // src/runtime/gateways/indexdb/version.ts
30807
+ var INDEXDB_VERSION = "v0.19-indexdb";
30808
+
30546
30809
  // src/index.ts
30547
30810
  init_utils();
30548
30811
 
30549
30812
  // src/version.ts
30550
30813
  var PACKAGE_VERSION = Object.keys({
30551
- "0.19.111": "xxxx"
30814
+ "0.19.112-dev-iife": "xxxx"
30552
30815
  })[0];
30553
30816
  return __toCommonJS(src_exports6);
30554
30817
  })();