@fireproof/core 0.20.0-dev-preview-13 → 0.20.0-dev-preview-15

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.
package/index.cjs CHANGED
@@ -71,7 +71,7 @@ __export(index_exports, {
71
71
  module.exports = __toCommonJS(index_exports);
72
72
 
73
73
  // src/ledger.ts
74
- var import_cement19 = require("@adviser/cement");
74
+ var import_cement20 = require("@adviser/cement");
75
75
 
76
76
  // src/utils.ts
77
77
  var import_cement = require("@adviser/cement");
@@ -1077,9 +1077,6 @@ var MemoryGateway = class {
1077
1077
  // src/runtime/gateways/def-serde-gateway.ts
1078
1078
  var import_cement9 = require("@adviser/cement");
1079
1079
 
1080
- // src/runtime/gateways/fp-envelope-serialize.ts
1081
- var import_cement8 = require("@adviser/cement");
1082
-
1083
1080
  // src/blockstore/fp-envelope.ts
1084
1081
  var import_cement7 = require("@adviser/cement");
1085
1082
  var FPEnvelopeType = /* @__PURE__ */ ((FPEnvelopeType2) => {
@@ -1097,6 +1094,7 @@ function File2FPMsg(fpfile) {
1097
1094
  }
1098
1095
 
1099
1096
  // src/runtime/gateways/fp-envelope-serialize.ts
1097
+ var import_cement8 = require("@adviser/cement");
1100
1098
  var import_clock = require("@fireproof/vendor/@web3-storage/pail/clock");
1101
1099
  var import_base64 = require("multiformats/bases/base64");
1102
1100
  var import_multiformats = require("multiformats");
@@ -1250,34 +1248,68 @@ async function fpDeserialize(sthis, url, intoRaw, pdecoder) {
1250
1248
  // src/runtime/gateways/def-serde-gateway.ts
1251
1249
  var DefSerdeGateway = class {
1252
1250
  constructor(gw) {
1251
+ this.subscribeFn = /* @__PURE__ */ new Map();
1253
1252
  this.gw = gw;
1254
1253
  }
1255
- start(sthis, baseURL) {
1254
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1255
+ start(sthis, baseURL, loader) {
1256
1256
  return this.gw.start(baseURL, sthis);
1257
1257
  }
1258
- async buildUrl(sthis, baseUrl, key) {
1258
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1259
+ async buildUrl(sthis, baseUrl, key, loader) {
1259
1260
  return this.gw.buildUrl(baseUrl, key, sthis);
1260
1261
  }
1261
- async close(sthis, uri) {
1262
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1263
+ async close(sthis, uri, loader) {
1262
1264
  return this.gw.close(uri, sthis);
1263
1265
  }
1264
- async put(sthis, url, env) {
1266
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1267
+ async put(sthis, url, env, loader) {
1265
1268
  const rUint8 = await fpSerialize(sthis, env);
1266
1269
  if (rUint8.isErr()) return rUint8;
1267
- return this.gw.put(url, rUint8.Ok(), sthis);
1270
+ const ret = this.gw.put(url, rUint8.Ok(), sthis);
1271
+ if (env.type === "meta" /* META */) {
1272
+ if (this.subscribeFn.has(url.toString())) {
1273
+ this.subscribeFn.get(url.toString())(env);
1274
+ }
1275
+ }
1276
+ return ret;
1268
1277
  }
1269
- async get(sthis, url) {
1278
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1279
+ async get(sthis, url, loader) {
1270
1280
  const res = await this.gw.get(url, sthis);
1271
1281
  if (res.isErr()) return import_cement9.Result.Err(res.Err());
1272
1282
  return fpDeserialize(sthis, url, res);
1273
1283
  }
1274
- async delete(sthis, url) {
1284
+ async subscribe(sthis, url, callback, loader) {
1285
+ if (!this.gw.subscribe) {
1286
+ this.subscribeFn.set(url.toString(), callback);
1287
+ return import_cement9.Result.Ok(() => {
1288
+ this.subscribeFn.delete(url.toString());
1289
+ });
1290
+ }
1291
+ const unreg = await this.gw.subscribe(
1292
+ url,
1293
+ (raw2) => {
1294
+ fpDeserialize(sthis, url, import_cement9.Result.Ok(raw2)).then((res) => {
1295
+ if (res.isErr()) return;
1296
+ callback(res.Ok());
1297
+ });
1298
+ },
1299
+ sthis
1300
+ );
1301
+ return unreg;
1302
+ }
1303
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1304
+ async delete(sthis, url, loader) {
1275
1305
  return this.gw.delete(url, sthis);
1276
1306
  }
1277
- async destroy(sthis, baseURL) {
1307
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1308
+ async destroy(sthis, baseURL, loader) {
1278
1309
  return this.gw.destroy(baseURL, sthis);
1279
1310
  }
1280
- async getPlain(sthis, iurl, key) {
1311
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1312
+ async getPlain(sthis, iurl, key, loader) {
1281
1313
  return this.gw.getPlain(iurl, key, sthis);
1282
1314
  }
1283
1315
  };
@@ -1912,7 +1944,7 @@ var DatabaseImpl = class {
1912
1944
  };
1913
1945
 
1914
1946
  // src/crdt.ts
1915
- var import_cement18 = require("@adviser/cement");
1947
+ var import_cement19 = require("@adviser/cement");
1916
1948
 
1917
1949
  // src/blockstore/index.ts
1918
1950
  var blockstore_exports = {};
@@ -3663,6 +3695,9 @@ function toStoreRuntime(sthis, endeOpts = {}) {
3663
3695
  };
3664
3696
  }
3665
3697
 
3698
+ // src/blockstore/connection-base.ts
3699
+ var import_cement17 = require("@adviser/cement");
3700
+
3666
3701
  // src/blockstore/store-remote.ts
3667
3702
  async function RemoteDataStore(sthis, url, opts) {
3668
3703
  const ds = new DataStoreImpl(sthis, url, opts);
@@ -3675,6 +3710,22 @@ async function RemoteMetaStore(sthis, url, opts) {
3675
3710
  return ms;
3676
3711
  }
3677
3712
 
3713
+ // src/context.ts
3714
+ var Context = class {
3715
+ constructor() {
3716
+ this.ctx = /* @__PURE__ */ new Map();
3717
+ }
3718
+ set(key, value) {
3719
+ this.ctx.set(key, value);
3720
+ }
3721
+ get(key) {
3722
+ return this.ctx.get(key);
3723
+ }
3724
+ delete(key) {
3725
+ this.ctx.delete(key);
3726
+ }
3727
+ };
3728
+
3678
3729
  // src/blockstore/connection-base.ts
3679
3730
  function coerceLoader(ref) {
3680
3731
  const refl = ref;
@@ -3689,10 +3740,22 @@ function coerceLoader(ref) {
3689
3740
  }
3690
3741
  var ConnectionBase = class {
3691
3742
  constructor(url, logger) {
3692
- this.loaded = Promise.resolve();
3743
+ // loaded: Promise<void> = Promise.resolve();
3744
+ this.context = new Context();
3745
+ this._loaded = /* @__PURE__ */ new Set();
3746
+ this._metaIsLoading = false;
3693
3747
  this.logger = logger;
3694
3748
  this.url = url;
3695
3749
  }
3750
+ loaded() {
3751
+ const f = new import_cement17.Future();
3752
+ if (!this._metaIsLoading) {
3753
+ f.resolve();
3754
+ } else {
3755
+ this._loaded.add(f);
3756
+ }
3757
+ return f;
3758
+ }
3696
3759
  async refresh() {
3697
3760
  await throwFalsy(throwFalsy(this.loader).remoteMetaStore).load();
3698
3761
  await (await throwFalsy(this.loader).WALStore()).process();
@@ -3720,22 +3783,34 @@ var ConnectionBase = class {
3720
3783
  loader
3721
3784
  });
3722
3785
  this.loader.remoteMetaStore = remote;
3723
- this.loaded = this.loader.ready().then(async () => {
3786
+ this._metaIsLoading = true;
3787
+ this.loader.ready().then(async () => {
3724
3788
  return remote.load().then(async () => {
3725
- return (await throwFalsy(this.loader).WALStore()).process();
3789
+ const res = await (0, import_cement17.exception2Result)(async () => {
3790
+ return await (await throwFalsy(this.loader).WALStore()).process();
3791
+ });
3792
+ this._metaIsLoading = false;
3793
+ for (const f of this._loaded) {
3794
+ if (res.isErr()) {
3795
+ f.reject(res.Err());
3796
+ } else {
3797
+ f.resolve();
3798
+ }
3799
+ }
3800
+ this._loaded.clear();
3726
3801
  });
3727
3802
  });
3728
3803
  }
3729
3804
  async connectStorage(refl) {
3730
3805
  const loader = coerceLoader(refl);
3731
- if (!loader) throw this.logger.Error().Msg("connectStorage_X: loader is required").AsError();
3806
+ if (!loader) throw this.logger.Error().Msg("connectStorage: loader is required").AsError();
3732
3807
  this.loader = loader;
3733
3808
  const dataUrl = this.url.build().defParam("store" /* STORE */, "data").URI();
3734
3809
  const rgateway = await getStartedGateway(loader.sthis, dataUrl);
3735
3810
  if (rgateway.isErr())
3736
- throw this.logger.Error().Result("err", rgateway).Url(dataUrl).Msg("connectStorage_X: gateway is required").AsError();
3811
+ throw this.logger.Error().Result("err", rgateway).Url(dataUrl).Msg("connectStorage: gateway is required").AsError();
3737
3812
  const name = dataUrl.getParam("name" /* NAME */);
3738
- if (!name) throw this.logger.Error().Url(dataUrl).Msg("connectStorage_X: name is required").AsError;
3813
+ if (!name) throw this.logger.Error().Url(dataUrl).Msg("connectStorage: name is required").AsError;
3739
3814
  loader.remoteCarStore = await RemoteDataStore(loader.sthis, this.url, {
3740
3815
  gateway: rgateway.Ok().gateway,
3741
3816
  loader
@@ -4050,7 +4125,7 @@ async function getBlock(blocks, cidString) {
4050
4125
  // src/crdt-clock.ts
4051
4126
  var import_clock4 = require("@fireproof/vendor/@web3-storage/pail/clock");
4052
4127
  var import_crdt2 = require("@fireproof/vendor/@web3-storage/pail/crdt");
4053
- var import_cement17 = require("@adviser/cement");
4128
+ var import_cement18 = require("@adviser/cement");
4054
4129
 
4055
4130
  // src/apply-head-queue.ts
4056
4131
  function applyHeadQueue(worker, logger) {
@@ -4107,7 +4182,7 @@ var CRDTClockImpl = class {
4107
4182
  this.zoomers = /* @__PURE__ */ new Map();
4108
4183
  this.watchers = /* @__PURE__ */ new Map();
4109
4184
  this.emptyWatchers = /* @__PURE__ */ new Map();
4110
- this._ready = new import_cement17.ResolveOnce();
4185
+ this._ready = new import_cement18.ResolveOnce();
4111
4186
  this.sthis = blockstore.sthis;
4112
4187
  this.blockstore = blockstore;
4113
4188
  this.logger = ensureLogger(blockstore.sthis, "CRDTClock");
@@ -4233,7 +4308,7 @@ async function advanceBlocks(logger, newHead, tblocks, head) {
4233
4308
  var CRDTImpl = class {
4234
4309
  constructor(sthis, opts) {
4235
4310
  this.indexers = /* @__PURE__ */ new Map();
4236
- this.onceReady = new import_cement18.ResolveOnce();
4311
+ this.onceReady = new import_cement19.ResolveOnce();
4237
4312
  this.sthis = sthis;
4238
4313
  this.crdt = this;
4239
4314
  this.logger = ensureLogger(sthis, "CRDT");
@@ -4351,24 +4426,8 @@ var CRDTImpl = class {
4351
4426
  }
4352
4427
  };
4353
4428
 
4354
- // src/context.ts
4355
- var Context = class {
4356
- constructor() {
4357
- this.ctx = /* @__PURE__ */ new Map();
4358
- }
4359
- set(key, value) {
4360
- this.ctx.set(key, value);
4361
- }
4362
- get(key) {
4363
- return this.ctx.get(key);
4364
- }
4365
- delete(key) {
4366
- this.ctx.delete(key);
4367
- }
4368
- };
4369
-
4370
4429
  // src/ledger.ts
4371
- var ledgers = new import_cement19.KeyedResolvOnce();
4430
+ var ledgers = new import_cement20.KeyedResolvOnce();
4372
4431
  function keyConfigOpts(sthis, name, opts) {
4373
4432
  return JSON.stringify(
4374
4433
  toSortedArray({
@@ -4454,7 +4513,7 @@ var LedgerImpl = class {
4454
4513
  this.shells = /* @__PURE__ */ new Set();
4455
4514
  this.context = new Context();
4456
4515
  this._onClosedFns = /* @__PURE__ */ new Map();
4457
- this._ready = new import_cement19.ResolveOnce();
4516
+ this._ready = new import_cement20.ResolveOnce();
4458
4517
  this.opts = opts;
4459
4518
  this.sthis = sthis;
4460
4519
  this.id = sthis.timeOrderedNextId().str;
@@ -4554,7 +4613,7 @@ var LedgerImpl = class {
4554
4613
  };
4555
4614
  function defaultURI2(sthis, curi, uri, store, ctx) {
4556
4615
  ctx = ctx || {};
4557
- const ret = (curi ? import_cement19.URI.from(curi) : uri).build().setParam("store" /* STORE */, store);
4616
+ const ret = (curi ? import_cement20.URI.from(curi) : uri).build().setParam("store" /* STORE */, store);
4558
4617
  if (!ret.hasParam("name" /* NAME */)) {
4559
4618
  const name = sthis.pathOps.basename(ret.URI().pathname);
4560
4619
  if (!name) {
@@ -4581,12 +4640,12 @@ function toStoreURIRuntime(sthis, name, sopts) {
4581
4640
  if (!sopts.base) {
4582
4641
  const fp_env = sthis.env.get("FP_STORAGE_URL");
4583
4642
  if (fp_env) {
4584
- sopts = { ...sopts, base: import_cement19.BuildURI.from(fp_env).setParam("urlGen" /* URL_GEN */, "fromEnv") };
4643
+ sopts = { ...sopts, base: import_cement20.BuildURI.from(fp_env).setParam("urlGen" /* URL_GEN */, "fromEnv") };
4585
4644
  } else {
4586
4645
  sopts = { ...sopts, base: getDefaultURI(sthis).build().setParam("urlGen" /* URL_GEN */, "default") };
4587
4646
  }
4588
4647
  }
4589
- const bbase = import_cement19.BuildURI.from(sopts.base);
4648
+ const bbase = import_cement20.BuildURI.from(sopts.base);
4590
4649
  if (name) {
4591
4650
  bbase.setParam("name" /* NAME */, name);
4592
4651
  }
@@ -4627,7 +4686,7 @@ __export(runtime_exports, {
4627
4686
  kc: () => keyed_crypto_exports,
4628
4687
  mf: () => wait_pr_multiformats_exports,
4629
4688
  registerKeyBagProviderFactory: () => registerKeyBagProviderFactory,
4630
- runtimeFn: () => import_cement20.runtimeFn
4689
+ runtimeFn: () => import_cement21.runtimeFn
4631
4690
  });
4632
4691
 
4633
4692
  // src/runtime/wait-pr-multiformats/index.ts
@@ -4641,7 +4700,7 @@ __export(wait_pr_multiformats_exports, {
4641
4700
  var codec_interface_exports = {};
4642
4701
 
4643
4702
  // src/runtime/index.ts
4644
- var import_cement20 = require("@adviser/cement");
4703
+ var import_cement21 = require("@adviser/cement");
4645
4704
 
4646
4705
  // src/runtime/gateways/index.ts
4647
4706
  var gateways_exports = {};
@@ -4661,6 +4720,6 @@ __export(file_exports, {
4661
4720
 
4662
4721
  // src/version.ts
4663
4722
  var PACKAGE_VERSION = Object.keys({
4664
- "0.20.0-dev-preview-13": "xxxx"
4723
+ "0.20.0-dev-preview-15": "xxxx"
4665
4724
  })[0];
4666
4725
  //# sourceMappingURL=index.cjs.map