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

Sign up to get free protection for your applications and to get access to all the features.
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