@fireproof/core 0.20.0-dev-preview-14 → 0.20.0-dev-preview-16

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.d.cts CHANGED
@@ -295,6 +295,13 @@ interface SerdeGatewayInterceptor {
295
295
  subscribe(sthis: SuperThis, url: URI, callback: (meta: FPEnvelopeMeta) => Promise<void>, loader: Loadable): Promise<Result<SerdeGatewaySubscribeReturn>>;
296
296
  }
297
297
 
298
+ declare class Context {
299
+ private ctx;
300
+ set<T>(key: string, value: T): void;
301
+ get<T>(key: string): T | undefined;
302
+ delete(key: string): void;
303
+ }
304
+
298
305
  type AnyLink = Link<unknown, number, number, Version>;
299
306
  type CarGroup = AnyLink[];
300
307
  type CarLog = CarGroup[];
@@ -450,7 +457,8 @@ interface RefBlockstore {
450
457
  readonly blockstore: RefLoadable;
451
458
  }
452
459
  interface Connection {
453
- readonly loaded: Promise<void>;
460
+ loaded(): Future<void>;
461
+ readonly context: Context;
454
462
  connectStorage(ref: RefLoadable | RefBlockstore): void;
455
463
  }
456
464
  interface BaseStore {
@@ -703,10 +711,13 @@ declare function parseCarFile<T>(reader: CarReader$1, logger: Logger): Promise<C
703
711
  declare abstract class ConnectionBase implements Connection {
704
712
  private loader?;
705
713
  taskManager?: TaskManager;
706
- loaded: Promise<void>;
714
+ readonly context: Context;
707
715
  readonly url: URI;
708
716
  readonly logger: Logger;
709
717
  constructor(url: URI, logger: Logger);
718
+ private readonly _loaded;
719
+ private _metaIsLoading;
720
+ loaded(): Future<void>;
710
721
  refresh(): Promise<void>;
711
722
  connect(refl: RefLoadable | RefBlockstore): Promise<void>;
712
723
  connectMeta(refl: RefLoadable | RefBlockstore): Promise<void>;
@@ -897,13 +908,6 @@ declare class Index<K extends IndexKeyType, T extends DocTypes, R extends DocFra
897
908
  _updateIndex(): Promise<IndexTransactionMeta>;
898
909
  }
899
910
 
900
- declare class Context {
901
- private ctx;
902
- set<T>(key: string, value: T): void;
903
- get<T>(key: string): T | undefined;
904
- delete(key: string): void;
905
- }
906
-
907
911
  type Falsy = false | null | undefined;
908
912
  declare function isFalsy(value: unknown): value is Falsy;
909
913
  declare enum PARAM {
@@ -1532,19 +1536,39 @@ declare namespace index$2 {
1532
1536
  export { index$2_KeyBagProviderFile as KeyBagProviderFile, index$2_sysFileSystemFactory as sysFileSystemFactory };
1533
1537
  }
1534
1538
 
1539
+ declare class MemoryGateway implements Gateway {
1540
+ readonly memorys: Map<string, Uint8Array>;
1541
+ readonly sthis: SuperThis;
1542
+ constructor(sthis: SuperThis, memorys: Map<string, Uint8Array>);
1543
+ buildUrl(baseUrl: URI, key: string): Promise<Result<URI>>;
1544
+ start(baseUrl: URI): Promise<Result<URI>>;
1545
+ close(baseUrl: URI): Promise<VoidResult>;
1546
+ destroy(baseUrl: URI): Promise<VoidResult>;
1547
+ put(url: URI, bytes: Uint8Array): Promise<VoidResult>;
1548
+ get(url: URI): Promise<GetResult>;
1549
+ delete(url: URI): Promise<VoidResult>;
1550
+ getPlain(url: URI, key: string): Promise<Result<Uint8Array>>;
1551
+ }
1552
+
1553
+ type gateway_MemoryGateway = MemoryGateway;
1554
+ declare const gateway_MemoryGateway: typeof MemoryGateway;
1555
+ declare namespace gateway {
1556
+ export { gateway_MemoryGateway as MemoryGateway };
1557
+ }
1558
+
1535
1559
  declare class DefSerdeGateway implements SerdeGateway {
1536
1560
  readonly gw: Gateway;
1537
1561
  constructor(gw: Gateway);
1538
- start(sthis: SuperThis, baseURL: URI): Promise<Result<URI>>;
1539
- buildUrl(sthis: SuperThis, baseUrl: URI, key: string): Promise<Result<URI>>;
1540
- close(sthis: SuperThis, uri: URI): Promise<Result<void>>;
1562
+ start(sthis: SuperThis, baseURL: URI, loader?: Loadable): Promise<Result<URI>>;
1563
+ buildUrl(sthis: SuperThis, baseUrl: URI, key: string, loader?: Loadable): Promise<Result<URI>>;
1564
+ close(sthis: SuperThis, uri: URI, loader?: Loadable): Promise<Result<void>>;
1541
1565
  private subscribeFn;
1542
- put<T>(sthis: SuperThis, url: URI, env: FPEnvelope<T>): Promise<Result<void>>;
1543
- get<S>(sthis: SuperThis, url: URI): Promise<SerdeGetResult<S>>;
1544
- subscribe(sthis: SuperThis, url: URI, callback: (meta: FPEnvelopeMeta) => Promise<void>): Promise<Result<() => void>>;
1545
- delete(sthis: SuperThis, url: URI): Promise<Result<void>>;
1546
- destroy(sthis: SuperThis, baseURL: URI): Promise<Result<void>>;
1547
- getPlain(sthis: SuperThis, iurl: URI, key: string): Promise<Result<Uint8Array<ArrayBufferLike>, Error>>;
1566
+ put<T>(sthis: SuperThis, url: URI, env: FPEnvelope<T>, loader?: Loadable): Promise<Result<void>>;
1567
+ get<S>(sthis: SuperThis, url: URI, loader?: Loadable): Promise<SerdeGetResult<S>>;
1568
+ subscribe(sthis: SuperThis, url: URI, callback: (meta: FPEnvelopeMeta) => Promise<void>, loader?: Loadable): Promise<Result<() => void>>;
1569
+ delete(sthis: SuperThis, url: URI, loader?: Loadable): Promise<Result<void>>;
1570
+ destroy(sthis: SuperThis, baseURL: URI, loader?: Loadable): Promise<Result<void>>;
1571
+ getPlain(sthis: SuperThis, iurl: URI, key: string, loader?: Loadable): Promise<Result<Uint8Array<ArrayBufferLike>, Error>>;
1548
1572
  }
1549
1573
 
1550
1574
  type index$1_CARDecodeEnvelope = CARDecodeEnvelope;
@@ -1564,7 +1588,7 @@ type index$1_WALEncodeEnvelope = WALEncodeEnvelope;
1564
1588
  declare const index$1_fpDeserialize: typeof fpDeserialize;
1565
1589
  declare const index$1_fpSerialize: typeof fpSerialize;
1566
1590
  declare namespace index$1 {
1567
- export { type index$1_CARDecodeEnvelope as CARDecodeEnvelope, type index$1_CAREncodeEnvelope as CAREncodeEnvelope, type index$1_Decoder as Decoder, index$1_DefSerdeGateway as DefSerdeGateway, type index$1_Encoder as Encoder, type index$1_FILEDecodeEnvelope as FILEDecodeEnvelope, type index$1_FILEEncodeEnvelope as FILEEncodeEnvelope, type index$1_METADecodeEnvelope as METADecodeEnvelope, type index$1_METAEncodeEnvelope as METAEncodeEnvelope, type index$1_SerializedMeta as SerializedMeta, type index$1_SerializedWAL as SerializedWAL, type index$1_WALDecodeEnvelope as WALDecodeEnvelope, type index$1_WALEncodeEnvelope as WALEncodeEnvelope, index$2 as file, index$1_fpDeserialize as fpDeserialize, index$1_fpSerialize as fpSerialize };
1591
+ export { type index$1_CARDecodeEnvelope as CARDecodeEnvelope, type index$1_CAREncodeEnvelope as CAREncodeEnvelope, type index$1_Decoder as Decoder, index$1_DefSerdeGateway as DefSerdeGateway, type index$1_Encoder as Encoder, type index$1_FILEDecodeEnvelope as FILEDecodeEnvelope, type index$1_FILEEncodeEnvelope as FILEEncodeEnvelope, type index$1_METADecodeEnvelope as METADecodeEnvelope, type index$1_METAEncodeEnvelope as METAEncodeEnvelope, type index$1_SerializedMeta as SerializedMeta, type index$1_SerializedWAL as SerializedWAL, type index$1_WALDecodeEnvelope as WALDecodeEnvelope, type index$1_WALEncodeEnvelope as WALEncodeEnvelope, index$2 as file, index$1_fpDeserialize as fpDeserialize, index$1_fpSerialize as fpSerialize, gateway as memory };
1568
1592
  }
1569
1593
 
1570
1594
  declare const FILESTORE_VERSION = "v0.19-file";
package/index.d.ts CHANGED
@@ -295,6 +295,13 @@ interface SerdeGatewayInterceptor {
295
295
  subscribe(sthis: SuperThis, url: URI, callback: (meta: FPEnvelopeMeta) => Promise<void>, loader: Loadable): Promise<Result<SerdeGatewaySubscribeReturn>>;
296
296
  }
297
297
 
298
+ declare class Context {
299
+ private ctx;
300
+ set<T>(key: string, value: T): void;
301
+ get<T>(key: string): T | undefined;
302
+ delete(key: string): void;
303
+ }
304
+
298
305
  type AnyLink = Link<unknown, number, number, Version>;
299
306
  type CarGroup = AnyLink[];
300
307
  type CarLog = CarGroup[];
@@ -450,7 +457,8 @@ interface RefBlockstore {
450
457
  readonly blockstore: RefLoadable;
451
458
  }
452
459
  interface Connection {
453
- readonly loaded: Promise<void>;
460
+ loaded(): Future<void>;
461
+ readonly context: Context;
454
462
  connectStorage(ref: RefLoadable | RefBlockstore): void;
455
463
  }
456
464
  interface BaseStore {
@@ -703,10 +711,13 @@ declare function parseCarFile<T>(reader: CarReader$1, logger: Logger): Promise<C
703
711
  declare abstract class ConnectionBase implements Connection {
704
712
  private loader?;
705
713
  taskManager?: TaskManager;
706
- loaded: Promise<void>;
714
+ readonly context: Context;
707
715
  readonly url: URI;
708
716
  readonly logger: Logger;
709
717
  constructor(url: URI, logger: Logger);
718
+ private readonly _loaded;
719
+ private _metaIsLoading;
720
+ loaded(): Future<void>;
710
721
  refresh(): Promise<void>;
711
722
  connect(refl: RefLoadable | RefBlockstore): Promise<void>;
712
723
  connectMeta(refl: RefLoadable | RefBlockstore): Promise<void>;
@@ -897,13 +908,6 @@ declare class Index<K extends IndexKeyType, T extends DocTypes, R extends DocFra
897
908
  _updateIndex(): Promise<IndexTransactionMeta>;
898
909
  }
899
910
 
900
- declare class Context {
901
- private ctx;
902
- set<T>(key: string, value: T): void;
903
- get<T>(key: string): T | undefined;
904
- delete(key: string): void;
905
- }
906
-
907
911
  type Falsy = false | null | undefined;
908
912
  declare function isFalsy(value: unknown): value is Falsy;
909
913
  declare enum PARAM {
@@ -1532,19 +1536,39 @@ declare namespace index$2 {
1532
1536
  export { index$2_KeyBagProviderFile as KeyBagProviderFile, index$2_sysFileSystemFactory as sysFileSystemFactory };
1533
1537
  }
1534
1538
 
1539
+ declare class MemoryGateway implements Gateway {
1540
+ readonly memorys: Map<string, Uint8Array>;
1541
+ readonly sthis: SuperThis;
1542
+ constructor(sthis: SuperThis, memorys: Map<string, Uint8Array>);
1543
+ buildUrl(baseUrl: URI, key: string): Promise<Result<URI>>;
1544
+ start(baseUrl: URI): Promise<Result<URI>>;
1545
+ close(baseUrl: URI): Promise<VoidResult>;
1546
+ destroy(baseUrl: URI): Promise<VoidResult>;
1547
+ put(url: URI, bytes: Uint8Array): Promise<VoidResult>;
1548
+ get(url: URI): Promise<GetResult>;
1549
+ delete(url: URI): Promise<VoidResult>;
1550
+ getPlain(url: URI, key: string): Promise<Result<Uint8Array>>;
1551
+ }
1552
+
1553
+ type gateway_MemoryGateway = MemoryGateway;
1554
+ declare const gateway_MemoryGateway: typeof MemoryGateway;
1555
+ declare namespace gateway {
1556
+ export { gateway_MemoryGateway as MemoryGateway };
1557
+ }
1558
+
1535
1559
  declare class DefSerdeGateway implements SerdeGateway {
1536
1560
  readonly gw: Gateway;
1537
1561
  constructor(gw: Gateway);
1538
- start(sthis: SuperThis, baseURL: URI): Promise<Result<URI>>;
1539
- buildUrl(sthis: SuperThis, baseUrl: URI, key: string): Promise<Result<URI>>;
1540
- close(sthis: SuperThis, uri: URI): Promise<Result<void>>;
1562
+ start(sthis: SuperThis, baseURL: URI, loader?: Loadable): Promise<Result<URI>>;
1563
+ buildUrl(sthis: SuperThis, baseUrl: URI, key: string, loader?: Loadable): Promise<Result<URI>>;
1564
+ close(sthis: SuperThis, uri: URI, loader?: Loadable): Promise<Result<void>>;
1541
1565
  private subscribeFn;
1542
- put<T>(sthis: SuperThis, url: URI, env: FPEnvelope<T>): Promise<Result<void>>;
1543
- get<S>(sthis: SuperThis, url: URI): Promise<SerdeGetResult<S>>;
1544
- subscribe(sthis: SuperThis, url: URI, callback: (meta: FPEnvelopeMeta) => Promise<void>): Promise<Result<() => void>>;
1545
- delete(sthis: SuperThis, url: URI): Promise<Result<void>>;
1546
- destroy(sthis: SuperThis, baseURL: URI): Promise<Result<void>>;
1547
- getPlain(sthis: SuperThis, iurl: URI, key: string): Promise<Result<Uint8Array<ArrayBufferLike>, Error>>;
1566
+ put<T>(sthis: SuperThis, url: URI, env: FPEnvelope<T>, loader?: Loadable): Promise<Result<void>>;
1567
+ get<S>(sthis: SuperThis, url: URI, loader?: Loadable): Promise<SerdeGetResult<S>>;
1568
+ subscribe(sthis: SuperThis, url: URI, callback: (meta: FPEnvelopeMeta) => Promise<void>, loader?: Loadable): Promise<Result<() => void>>;
1569
+ delete(sthis: SuperThis, url: URI, loader?: Loadable): Promise<Result<void>>;
1570
+ destroy(sthis: SuperThis, baseURL: URI, loader?: Loadable): Promise<Result<void>>;
1571
+ getPlain(sthis: SuperThis, iurl: URI, key: string, loader?: Loadable): Promise<Result<Uint8Array<ArrayBufferLike>, Error>>;
1548
1572
  }
1549
1573
 
1550
1574
  type index$1_CARDecodeEnvelope = CARDecodeEnvelope;
@@ -1564,7 +1588,7 @@ type index$1_WALEncodeEnvelope = WALEncodeEnvelope;
1564
1588
  declare const index$1_fpDeserialize: typeof fpDeserialize;
1565
1589
  declare const index$1_fpSerialize: typeof fpSerialize;
1566
1590
  declare namespace index$1 {
1567
- export { type index$1_CARDecodeEnvelope as CARDecodeEnvelope, type index$1_CAREncodeEnvelope as CAREncodeEnvelope, type index$1_Decoder as Decoder, index$1_DefSerdeGateway as DefSerdeGateway, type index$1_Encoder as Encoder, type index$1_FILEDecodeEnvelope as FILEDecodeEnvelope, type index$1_FILEEncodeEnvelope as FILEEncodeEnvelope, type index$1_METADecodeEnvelope as METADecodeEnvelope, type index$1_METAEncodeEnvelope as METAEncodeEnvelope, type index$1_SerializedMeta as SerializedMeta, type index$1_SerializedWAL as SerializedWAL, type index$1_WALDecodeEnvelope as WALDecodeEnvelope, type index$1_WALEncodeEnvelope as WALEncodeEnvelope, index$2 as file, index$1_fpDeserialize as fpDeserialize, index$1_fpSerialize as fpSerialize };
1591
+ export { type index$1_CARDecodeEnvelope as CARDecodeEnvelope, type index$1_CAREncodeEnvelope as CAREncodeEnvelope, type index$1_Decoder as Decoder, index$1_DefSerdeGateway as DefSerdeGateway, type index$1_Encoder as Encoder, type index$1_FILEDecodeEnvelope as FILEDecodeEnvelope, type index$1_FILEEncodeEnvelope as FILEEncodeEnvelope, type index$1_METADecodeEnvelope as METADecodeEnvelope, type index$1_METAEncodeEnvelope as METAEncodeEnvelope, type index$1_SerializedMeta as SerializedMeta, type index$1_SerializedWAL as SerializedWAL, type index$1_WALDecodeEnvelope as WALDecodeEnvelope, type index$1_WALEncodeEnvelope as WALEncodeEnvelope, index$2 as file, index$1_fpDeserialize as fpDeserialize, index$1_fpSerialize as fpSerialize, gateway as memory };
1568
1592
  }
1569
1593
 
1570
1594
  declare const FILESTORE_VERSION = "v0.19-file";
package/index.js CHANGED
@@ -5,7 +5,7 @@ var __export = (target, all) => {
5
5
  };
6
6
 
7
7
  // src/ledger.ts
8
- import { BuildURI as BuildURI2, KeyedResolvOnce as KeyedResolvOnce4, ResolveOnce as ResolveOnce7, URI as URI12 } from "@adviser/cement";
8
+ import { BuildURI as BuildURI2, KeyedResolvOnce as KeyedResolvOnce4, ResolveOnce as ResolveOnce7, URI as URI13 } from "@adviser/cement";
9
9
 
10
10
  // src/utils.ts
11
11
  import {
@@ -738,7 +738,7 @@ var keyBagProviderFactories = new Map(
738
738
  {
739
739
  protocol: "indexdb:",
740
740
  factory: async (url, sthis) => {
741
- const { KeyBagProviderImpl } = await import("@fireproof/core/web");
741
+ const { KeyBagProviderImpl } = await import("@fireproof/core/indexdb");
742
742
  return new KeyBagProviderImpl(url, sthis);
743
743
  }
744
744
  },
@@ -832,7 +832,7 @@ import { BuildURI, runtimeFn as runtimeFn3 } from "@adviser/cement";
832
832
  // src/runtime/gateways/file/version.ts
833
833
  var FILESTORE_VERSION = "v0.19-file";
834
834
 
835
- // src/runtime/gateways/indexdb/version.ts
835
+ // src/runtime/gateways/indexdb-version.ts
836
836
  var INDEXDB_VERSION = "v0.19-indexdb";
837
837
 
838
838
  // src/runtime/gateways/file/gateway-impl.ts
@@ -975,6 +975,10 @@ var FileGateway = class {
975
975
  };
976
976
 
977
977
  // src/runtime/gateways/memory/gateway.ts
978
+ var gateway_exports = {};
979
+ __export(gateway_exports, {
980
+ MemoryGateway: () => MemoryGateway
981
+ });
978
982
  import { Result as Result4 } from "@adviser/cement";
979
983
 
980
984
  // src/runtime/gateways/memory/version.ts
@@ -1203,16 +1207,20 @@ var DefSerdeGateway = class {
1203
1207
  this.subscribeFn = /* @__PURE__ */ new Map();
1204
1208
  this.gw = gw;
1205
1209
  }
1206
- start(sthis, baseURL) {
1210
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1211
+ start(sthis, baseURL, loader) {
1207
1212
  return this.gw.start(baseURL, sthis);
1208
1213
  }
1209
- async buildUrl(sthis, baseUrl, key) {
1214
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1215
+ async buildUrl(sthis, baseUrl, key, loader) {
1210
1216
  return this.gw.buildUrl(baseUrl, key, sthis);
1211
1217
  }
1212
- async close(sthis, uri) {
1218
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1219
+ async close(sthis, uri, loader) {
1213
1220
  return this.gw.close(uri, sthis);
1214
1221
  }
1215
- async put(sthis, url, env) {
1222
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1223
+ async put(sthis, url, env, loader) {
1216
1224
  const rUint8 = await fpSerialize(sthis, env);
1217
1225
  if (rUint8.isErr()) return rUint8;
1218
1226
  const ret = this.gw.put(url, rUint8.Ok(), sthis);
@@ -1223,12 +1231,13 @@ var DefSerdeGateway = class {
1223
1231
  }
1224
1232
  return ret;
1225
1233
  }
1226
- async get(sthis, url) {
1234
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1235
+ async get(sthis, url, loader) {
1227
1236
  const res = await this.gw.get(url, sthis);
1228
1237
  if (res.isErr()) return Result7.Err(res.Err());
1229
1238
  return fpDeserialize(sthis, url, res);
1230
1239
  }
1231
- async subscribe(sthis, url, callback) {
1240
+ async subscribe(sthis, url, callback, loader) {
1232
1241
  if (!this.gw.subscribe) {
1233
1242
  this.subscribeFn.set(url.toString(), callback);
1234
1243
  return Result7.Ok(() => {
@@ -1247,13 +1256,16 @@ var DefSerdeGateway = class {
1247
1256
  );
1248
1257
  return unreg;
1249
1258
  }
1250
- async delete(sthis, url) {
1259
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1260
+ async delete(sthis, url, loader) {
1251
1261
  return this.gw.delete(url, sthis);
1252
1262
  }
1253
- async destroy(sthis, baseURL) {
1263
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1264
+ async destroy(sthis, baseURL, loader) {
1254
1265
  return this.gw.destroy(baseURL, sthis);
1255
1266
  }
1256
- async getPlain(sthis, iurl, key) {
1267
+ // eslint-disable-next-line @typescript-eslint/no-unused-vars
1268
+ async getPlain(sthis, iurl, key, loader) {
1257
1269
  return this.gw.getPlain(iurl, key, sthis);
1258
1270
  }
1259
1271
  };
@@ -1338,7 +1350,7 @@ if (runtimeFn3().isBrowser) {
1338
1350
  return BuildURI.from("indexdb://").pathname("fp").setParam("version" /* VERSION */, INDEXDB_VERSION).setParam("runtime" /* RUNTIME */, "browser").URI();
1339
1351
  },
1340
1352
  gateway: async () => {
1341
- const { GatewayImpl } = await import("@fireproof/core/web");
1353
+ const { GatewayImpl } = await import("@fireproof/core/indexdb");
1342
1354
  return new GatewayImpl();
1343
1355
  }
1344
1356
  });
@@ -3639,6 +3651,9 @@ function toStoreRuntime(sthis, endeOpts = {}) {
3639
3651
  };
3640
3652
  }
3641
3653
 
3654
+ // src/blockstore/connection-base.ts
3655
+ import { exception2Result as exception2Result4, Future as Future3 } from "@adviser/cement";
3656
+
3642
3657
  // src/blockstore/store-remote.ts
3643
3658
  async function RemoteDataStore(sthis, url, opts) {
3644
3659
  const ds = new DataStoreImpl(sthis, url, opts);
@@ -3651,6 +3666,22 @@ async function RemoteMetaStore(sthis, url, opts) {
3651
3666
  return ms;
3652
3667
  }
3653
3668
 
3669
+ // src/context.ts
3670
+ var Context = class {
3671
+ constructor() {
3672
+ this.ctx = /* @__PURE__ */ new Map();
3673
+ }
3674
+ set(key, value) {
3675
+ this.ctx.set(key, value);
3676
+ }
3677
+ get(key) {
3678
+ return this.ctx.get(key);
3679
+ }
3680
+ delete(key) {
3681
+ this.ctx.delete(key);
3682
+ }
3683
+ };
3684
+
3654
3685
  // src/blockstore/connection-base.ts
3655
3686
  function coerceLoader(ref) {
3656
3687
  const refl = ref;
@@ -3665,10 +3696,22 @@ function coerceLoader(ref) {
3665
3696
  }
3666
3697
  var ConnectionBase = class {
3667
3698
  constructor(url, logger) {
3668
- this.loaded = Promise.resolve();
3699
+ // loaded: Promise<void> = Promise.resolve();
3700
+ this.context = new Context();
3701
+ this._loaded = /* @__PURE__ */ new Set();
3702
+ this._metaIsLoading = false;
3669
3703
  this.logger = logger;
3670
3704
  this.url = url;
3671
3705
  }
3706
+ loaded() {
3707
+ const f = new Future3();
3708
+ if (!this._metaIsLoading) {
3709
+ f.resolve();
3710
+ } else {
3711
+ this._loaded.add(f);
3712
+ }
3713
+ return f;
3714
+ }
3672
3715
  async refresh() {
3673
3716
  await throwFalsy(throwFalsy(this.loader).remoteMetaStore).load();
3674
3717
  await (await throwFalsy(this.loader).WALStore()).process();
@@ -3696,22 +3739,34 @@ var ConnectionBase = class {
3696
3739
  loader
3697
3740
  });
3698
3741
  this.loader.remoteMetaStore = remote;
3699
- this.loaded = this.loader.ready().then(async () => {
3742
+ this._metaIsLoading = true;
3743
+ this.loader.ready().then(async () => {
3700
3744
  return remote.load().then(async () => {
3701
- return (await throwFalsy(this.loader).WALStore()).process();
3745
+ const res = await exception2Result4(async () => {
3746
+ return await (await throwFalsy(this.loader).WALStore()).process();
3747
+ });
3748
+ this._metaIsLoading = false;
3749
+ for (const f of this._loaded) {
3750
+ if (res.isErr()) {
3751
+ f.reject(res.Err());
3752
+ } else {
3753
+ f.resolve();
3754
+ }
3755
+ }
3756
+ this._loaded.clear();
3702
3757
  });
3703
3758
  });
3704
3759
  }
3705
3760
  async connectStorage(refl) {
3706
3761
  const loader = coerceLoader(refl);
3707
- if (!loader) throw this.logger.Error().Msg("connectStorage_X: loader is required").AsError();
3762
+ if (!loader) throw this.logger.Error().Msg("connectStorage: loader is required").AsError();
3708
3763
  this.loader = loader;
3709
3764
  const dataUrl = this.url.build().defParam("store" /* STORE */, "data").URI();
3710
3765
  const rgateway = await getStartedGateway(loader.sthis, dataUrl);
3711
3766
  if (rgateway.isErr())
3712
- throw this.logger.Error().Result("err", rgateway).Url(dataUrl).Msg("connectStorage_X: gateway is required").AsError();
3767
+ throw this.logger.Error().Result("err", rgateway).Url(dataUrl).Msg("connectStorage: gateway is required").AsError();
3713
3768
  const name = dataUrl.getParam("name" /* NAME */);
3714
- if (!name) throw this.logger.Error().Url(dataUrl).Msg("connectStorage_X: name is required").AsError;
3769
+ if (!name) throw this.logger.Error().Url(dataUrl).Msg("connectStorage: name is required").AsError;
3715
3770
  loader.remoteCarStore = await RemoteDataStore(loader.sthis, this.url, {
3716
3771
  gateway: rgateway.Ok().gateway,
3717
3772
  loader
@@ -4327,22 +4382,6 @@ var CRDTImpl = class {
4327
4382
  }
4328
4383
  };
4329
4384
 
4330
- // src/context.ts
4331
- var Context = class {
4332
- constructor() {
4333
- this.ctx = /* @__PURE__ */ new Map();
4334
- }
4335
- set(key, value) {
4336
- this.ctx.set(key, value);
4337
- }
4338
- get(key) {
4339
- return this.ctx.get(key);
4340
- }
4341
- delete(key) {
4342
- this.ctx.delete(key);
4343
- }
4344
- };
4345
-
4346
4385
  // src/ledger.ts
4347
4386
  var ledgers = new KeyedResolvOnce4();
4348
4387
  function keyConfigOpts(sthis, name, opts) {
@@ -4530,7 +4569,7 @@ var LedgerImpl = class {
4530
4569
  };
4531
4570
  function defaultURI2(sthis, curi, uri, store, ctx) {
4532
4571
  ctx = ctx || {};
4533
- const ret = (curi ? URI12.from(curi) : uri).build().setParam("store" /* STORE */, store);
4572
+ const ret = (curi ? URI13.from(curi) : uri).build().setParam("store" /* STORE */, store);
4534
4573
  if (!ret.hasParam("name" /* NAME */)) {
4535
4574
  const name = sthis.pathOps.basename(ret.URI().pathname);
4536
4575
  if (!name) {
@@ -4625,7 +4664,8 @@ __export(gateways_exports, {
4625
4664
  DefSerdeGateway: () => DefSerdeGateway,
4626
4665
  file: () => file_exports,
4627
4666
  fpDeserialize: () => fpDeserialize,
4628
- fpSerialize: () => fpSerialize
4667
+ fpSerialize: () => fpSerialize,
4668
+ memory: () => gateway_exports
4629
4669
  });
4630
4670
 
4631
4671
  // src/runtime/gateways/file/index.ts
@@ -4637,7 +4677,7 @@ __export(file_exports, {
4637
4677
 
4638
4678
  // src/version.ts
4639
4679
  var PACKAGE_VERSION = Object.keys({
4640
- "0.20.0-dev-preview-14": "xxxx"
4680
+ "0.20.0-dev-preview-16": "xxxx"
4641
4681
  })[0];
4642
4682
  export {
4643
4683
  CRDTImpl,