jazz-tools 0.7.21 → 0.7.24

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.
Files changed (40) hide show
  1. package/.turbo/turbo-build.log +2 -2
  2. package/.turbo/turbo-lint.log +1 -1
  3. package/.turbo/turbo-test.log +33 -33
  4. package/CHANGELOG.md +14 -0
  5. package/dist/coValues/account.js +1 -9
  6. package/dist/coValues/account.js.map +1 -1
  7. package/dist/coValues/coList.js +1 -21
  8. package/dist/coValues/coList.js.map +1 -1
  9. package/dist/coValues/coMap.js +1 -21
  10. package/dist/coValues/coMap.js.map +1 -1
  11. package/dist/coValues/coStream.js +1 -17
  12. package/dist/coValues/coStream.js.map +1 -1
  13. package/dist/coValues/group.js +1 -9
  14. package/dist/coValues/group.js.map +1 -1
  15. package/dist/coValues/interfaces.js +36 -20
  16. package/dist/coValues/interfaces.js.map +1 -1
  17. package/dist/implementation/refs.js +0 -17
  18. package/dist/implementation/refs.js.map +1 -1
  19. package/dist/implementation/schema.js +31 -0
  20. package/dist/implementation/schema.js.map +1 -1
  21. package/dist/index.js +1 -1
  22. package/dist/index.js.map +1 -1
  23. package/dist/tests/coList.test.js +8 -2
  24. package/dist/tests/coList.test.js.map +1 -1
  25. package/dist/tests/coMap.test.js +5 -2
  26. package/dist/tests/coMap.test.js.map +1 -1
  27. package/dist/tests/deepLoading.test.js.map +1 -1
  28. package/package.json +2 -2
  29. package/src/coValues/account.ts +8 -27
  30. package/src/coValues/coList.ts +0 -35
  31. package/src/coValues/coMap.ts +0 -35
  32. package/src/coValues/coStream.ts +0 -41
  33. package/src/coValues/group.ts +0 -23
  34. package/src/coValues/interfaces.ts +49 -77
  35. package/src/implementation/refs.ts +0 -18
  36. package/src/implementation/schema.ts +41 -0
  37. package/src/index.ts +1 -6
  38. package/src/tests/coList.test.ts +12 -10
  39. package/src/tests/coMap.test.ts +5 -2
  40. package/src/tests/deepLoading.test.ts +12 -8
@@ -11,8 +11,6 @@ import type {
11
11
  RefIfCoValue,
12
12
  DepthsIn,
13
13
  DeeplyLoaded,
14
- UnavailableError,
15
- AccountCtx,
16
14
  CoValueClass,
17
15
  } from "../internal.js";
18
16
  import {
@@ -26,13 +24,10 @@ import {
26
24
  ItemsSym,
27
25
  isRefEncoded,
28
26
  loadCoValue,
29
- loadCoValueEf,
30
27
  subscribeToCoValue,
31
- subscribeToCoValueEf,
32
28
  ensureCoValueLoaded,
33
29
  subscribeToExistingCoValue,
34
30
  } from "../internal.js";
35
- import { Effect, Stream } from "effect";
36
31
 
37
32
  type CoMapEdit<V> = {
38
33
  value?: V;
@@ -391,21 +386,6 @@ export class CoMap extends CoValueBase implements CoValue {
391
386
  return loadCoValue(this, id, as, depth);
392
387
  }
393
388
 
394
- /**
395
- * Effectful version of `CoMap.load()`.
396
- *
397
- * Needs to be run inside an `AccountCtx` context.
398
- *
399
- * @category Subscription & Loading
400
- */
401
- static loadEf<M extends CoMap, Depth>(
402
- this: CoValueClass<M>,
403
- id: ID<M>,
404
- depth: Depth & DepthsIn<M>,
405
- ): Effect.Effect<DeeplyLoaded<M, Depth>, UnavailableError, AccountCtx> {
406
- return loadCoValueEf<M, Depth>(this, id, depth);
407
- }
408
-
409
389
  /**
410
390
  * Load and subscribe to a `CoMap` with a given ID, as a given account.
411
391
  *
@@ -444,21 +424,6 @@ export class CoMap extends CoValueBase implements CoValue {
444
424
  return subscribeToCoValue<M, Depth>(this, id, as, depth, listener);
445
425
  }
446
426
 
447
- /**
448
- * Effectful version of `CoMap.subscribe()` that returns a stream of updates.
449
- *
450
- * Needs to be run inside an `AccountCtx` context.
451
- *
452
- * @category Subscription & Loading
453
- */
454
- static subscribeEf<M extends CoMap, Depth>(
455
- this: CoValueClass<M>,
456
- id: ID<M>,
457
- depth: Depth & DepthsIn<M>,
458
- ): Stream.Stream<DeeplyLoaded<M, Depth>, UnavailableError, AccountCtx> {
459
- return subscribeToCoValueEf<M, Depth>(this, id, depth);
460
- }
461
-
462
427
  /**
463
428
  * Given an already loaded `CoMap`, ensure that the specified fields are loaded to the specified depth.
464
429
  *
@@ -17,11 +17,9 @@ import type {
17
17
  ID,
18
18
  IfCo,
19
19
  UnCo,
20
- AccountCtx,
21
20
  CoValueClass,
22
21
  DeeplyLoaded,
23
22
  DepthsIn,
24
- UnavailableError,
25
23
  } from "../internal.js";
26
24
  import {
27
25
  ItemsSym,
@@ -33,14 +31,11 @@ import {
33
31
  SchemaInit,
34
32
  isRefEncoded,
35
33
  loadCoValue,
36
- loadCoValueEf,
37
34
  subscribeToCoValue,
38
- subscribeToCoValueEf,
39
35
  ensureCoValueLoaded,
40
36
  subscribeToExistingCoValue,
41
37
  } from "../internal.js";
42
38
  import { encodeSync, decodeSync } from "@effect/schema/Schema";
43
- import { Effect, Stream } from "effect";
44
39
 
45
40
  export type CoStreamEntry<Item> = SingleCoStreamEntry<Item> & {
46
41
  all: IterableIterator<SingleCoStreamEntry<Item>>;
@@ -202,15 +197,6 @@ export class CoStream<Item = any> extends CoValueBase implements CoValue {
202
197
  return loadCoValue(this, id, as, depth);
203
198
  }
204
199
 
205
- /** @category Subscription & Loading */
206
- static loadEf<S extends CoStream, Depth>(
207
- this: CoValueClass<S>,
208
- id: ID<S>,
209
- depth: Depth & DepthsIn<S>,
210
- ): Effect.Effect<DeeplyLoaded<S, Depth>, UnavailableError, AccountCtx> {
211
- return loadCoValueEf<S, Depth>(this, id, depth);
212
- }
213
-
214
200
  /** @category Subscription & Loading */
215
201
  static subscribe<S extends CoStream, Depth>(
216
202
  this: CoValueClass<S>,
@@ -222,15 +208,6 @@ export class CoStream<Item = any> extends CoValueBase implements CoValue {
222
208
  return subscribeToCoValue<S, Depth>(this, id, as, depth, listener);
223
209
  }
224
210
 
225
- /** @category Subscription & Loading */
226
- static subscribeEf<S extends CoStream, Depth>(
227
- this: CoValueClass<S>,
228
- id: ID<S>,
229
- depth: Depth & DepthsIn<S>,
230
- ): Stream.Stream<DeeplyLoaded<S, Depth>, UnavailableError, AccountCtx> {
231
- return subscribeToCoValueEf<S, Depth>(this, id, depth);
232
- }
233
-
234
211
  /** @category Subscription & Loading */
235
212
  ensureLoaded<S extends CoStream, Depth>(
236
213
  this: S,
@@ -638,15 +615,6 @@ export class BinaryCoStream extends CoValueBase implements CoValue {
638
615
  return loadCoValue(this, id, as, depth);
639
616
  }
640
617
 
641
- /** @category Subscription & Loading */
642
- static loadEf<B extends BinaryCoStream, Depth>(
643
- this: CoValueClass<B>,
644
- id: ID<B>,
645
- depth: Depth & DepthsIn<B>,
646
- ): Effect.Effect<DeeplyLoaded<B, Depth>, UnavailableError, AccountCtx> {
647
- return loadCoValueEf<B, Depth>(this, id, depth);
648
- }
649
-
650
618
  /** @category Subscription & Loading */
651
619
  static subscribe<B extends BinaryCoStream, Depth>(
652
620
  this: CoValueClass<B>,
@@ -658,15 +626,6 @@ export class BinaryCoStream extends CoValueBase implements CoValue {
658
626
  return subscribeToCoValue<B, Depth>(this, id, as, depth, listener);
659
627
  }
660
628
 
661
- /** @category Subscription & Loading */
662
- static subscribeEf<B extends BinaryCoStream, Depth>(
663
- this: CoValueClass<B>,
664
- id: ID<B>,
665
- depth: Depth & DepthsIn<B>,
666
- ): Stream.Stream<DeeplyLoaded<B, Depth>, UnavailableError, AccountCtx> {
667
- return subscribeToCoValueEf<B, Depth>(this, id, depth);
668
- }
669
-
670
629
  /** @category Subscription & Loading */
671
630
  ensureLoaded<B extends BinaryCoStream, Depth>(
672
631
  this: B,
@@ -4,11 +4,9 @@ import type {
4
4
  ID,
5
5
  RefEncoded,
6
6
  Schema,
7
- AccountCtx,
8
7
  CoValueClass,
9
8
  DeeplyLoaded,
10
9
  DepthsIn,
11
- UnavailableError,
12
10
  } from "../internal.js";
13
11
  import {
14
12
  Account,
@@ -20,13 +18,10 @@ import {
20
18
  AccountAndGroupProxyHandler,
21
19
  MembersSym,
22
20
  loadCoValue,
23
- loadCoValueEf,
24
21
  subscribeToCoValue,
25
- subscribeToCoValueEf,
26
22
  ensureCoValueLoaded,
27
23
  subscribeToExistingCoValue,
28
24
  } from "../internal.js";
29
- import { Effect, Stream } from "effect";
30
25
 
31
26
  /** @category Identity & Permissions */
32
27
  export class Profile extends CoMap {
@@ -198,15 +193,6 @@ export class Group extends CoValueBase implements CoValue {
198
193
  return loadCoValue(this, id, as, depth);
199
194
  }
200
195
 
201
- /** @category Subscription & Loading */
202
- static loadEf<G extends Group, Depth>(
203
- this: CoValueClass<G>,
204
- id: ID<G>,
205
- depth: Depth & DepthsIn<G>,
206
- ): Effect.Effect<DeeplyLoaded<G, Depth>, UnavailableError, AccountCtx> {
207
- return loadCoValueEf<G, Depth>(this, id, depth);
208
- }
209
-
210
196
  /** @category Subscription & Loading */
211
197
  static subscribe<G extends Group, Depth>(
212
198
  this: CoValueClass<G>,
@@ -218,15 +204,6 @@ export class Group extends CoValueBase implements CoValue {
218
204
  return subscribeToCoValue<G, Depth>(this, id, as, depth, listener);
219
205
  }
220
206
 
221
- /** @category Subscription & Loading */
222
- static subscribeEf<G extends Group, Depth>(
223
- this: CoValueClass<G>,
224
- id: ID<G>,
225
- depth: Depth & DepthsIn<G>,
226
- ): Stream.Stream<DeeplyLoaded<G, Depth>, UnavailableError, AccountCtx> {
227
- return subscribeToCoValueEf<G, Depth>(this, id, depth);
228
- }
229
-
230
207
  /** @category Subscription & Loading */
231
208
  ensureLoaded<G extends Group, Depth>(
232
209
  this: G,
@@ -1,10 +1,8 @@
1
- import { Effect, Option, Sink, Stream } from "effect";
2
1
  import type { CojsonInternalTypes, RawCoValue } from "cojson";
3
2
  import { RawAccount } from "cojson";
4
- import type { DeeplyLoaded, DepthsIn, UnavailableError } from "../internal.js";
3
+ import type { DeeplyLoaded, DepthsIn } from "../internal.js";
5
4
  import {
6
5
  Account,
7
- AccountCtx,
8
6
  Group,
9
7
  SubscriptionScope,
10
8
  Ref,
@@ -134,13 +132,22 @@ export function loadCoValue<V extends CoValue, Depth>(
134
132
  as: Account,
135
133
  depth: Depth & DepthsIn<V>,
136
134
  ): Promise<DeeplyLoaded<V, Depth> | undefined> {
137
- return Effect.runPromise(
138
- loadCoValueEf(cls, id, depth).pipe(
139
- Effect.mapError(() => undefined),
140
- Effect.merge,
141
- Effect.provideService(AccountCtx, as),
142
- ),
143
- );
135
+ return new Promise((resolve) => {
136
+ const unsubscribe = subscribeToCoValue(
137
+ cls,
138
+ id,
139
+ as,
140
+ depth,
141
+ (value) => {
142
+ resolve(value);
143
+ unsubscribe();
144
+ },
145
+ () => {
146
+ resolve(undefined);
147
+ unsubscribe();
148
+ },
149
+ );
150
+ });
144
151
  }
145
152
 
146
153
  export function ensureCoValueLoaded<V extends CoValue, Depth>(
@@ -155,41 +162,46 @@ export function ensureCoValueLoaded<V extends CoValue, Depth>(
155
162
  );
156
163
  }
157
164
 
158
- export function loadCoValueEf<V extends CoValue, Depth>(
159
- cls: CoValueClass<V>,
160
- id: ID<V>,
161
- depth: Depth & DepthsIn<V>,
162
- ): Effect.Effect<DeeplyLoaded<V, Depth>, UnavailableError, AccountCtx> {
163
- return subscribeToCoValueEf(cls, id, depth).pipe(
164
- Stream.runHead,
165
- Effect.andThen(
166
- Effect.mapError((_noSuchElem) => "unavailable" as const),
167
- ),
168
- );
169
- }
170
-
171
165
  export function subscribeToCoValue<V extends CoValue, Depth>(
172
166
  cls: CoValueClass<V>,
173
167
  id: ID<V>,
174
168
  as: Account,
175
169
  depth: Depth & DepthsIn<V>,
176
170
  listener: (value: DeeplyLoaded<V, Depth>) => void,
171
+ onUnavailable?: () => void,
177
172
  ): () => void {
178
- void Effect.runPromise(
179
- Effect.provideService(
180
- subscribeToCoValueEf(cls, id, depth).pipe(
181
- Stream.run(
182
- Sink.forEach((update) =>
183
- Effect.sync(() => listener(update)),
184
- ),
185
- ),
186
- ),
187
- AccountCtx,
188
- as,
189
- ),
190
- );
173
+ const ref = new Ref(id, as, { ref: cls, optional: false });
174
+
175
+ let unsubscribed = false;
176
+ let unsubscribe: (() => void) | undefined;
177
+
178
+ ref.load()
179
+ .then((value) => {
180
+ if (!value) {
181
+ onUnavailable && onUnavailable();
182
+ return;
183
+ }
184
+ if (unsubscribed) return;
185
+ const subscription = new SubscriptionScope(
186
+ value,
187
+ cls as CoValueClass<V> & CoValueFromRaw<V>,
188
+ (update) => {
189
+ if (fulfillsDepth(depth, update)) {
190
+ listener(update as DeeplyLoaded<V, Depth>);
191
+ }
192
+ },
193
+ );
194
+
195
+ unsubscribe = () => subscription.unsubscribeAll();
196
+ })
197
+ .catch((e) => {
198
+ console.error("Failed to load / subscribe to CoValue", e);
199
+ });
191
200
 
192
- return function unsubscribe() {};
201
+ return function unsubscribeAtAnyPoint() {
202
+ unsubscribed = true;
203
+ unsubscribe && unsubscribe();
204
+ };
193
205
  }
194
206
 
195
207
  export function subscribeToExistingCoValue<V extends CoValue, Depth>(
@@ -205,43 +217,3 @@ export function subscribeToExistingCoValue<V extends CoValue, Depth>(
205
217
  listener,
206
218
  );
207
219
  }
208
-
209
- export function subscribeToCoValueEf<V extends CoValue, Depth>(
210
- cls: CoValueClass<V>,
211
- id: ID<V>,
212
- depth: Depth & DepthsIn<V>,
213
- ): Stream.Stream<DeeplyLoaded<V, Depth>, UnavailableError, AccountCtx> {
214
- return AccountCtx.pipe(
215
- Effect.andThen((account) =>
216
- new Ref(id, account, {
217
- ref: cls,
218
- optional: false,
219
- }).loadEf(),
220
- ),
221
- Stream.fromEffect,
222
- Stream.flatMap((value: V) =>
223
- Stream.asyncScoped<V, UnavailableError>((emit) =>
224
- Effect.gen(function* (_) {
225
- const subscription = new SubscriptionScope(
226
- value,
227
- cls as CoValueClass<V> & CoValueFromRaw<V>,
228
- (update) => void emit.single(update as V),
229
- );
230
-
231
- yield* _(
232
- Effect.addFinalizer(() =>
233
- Effect.sync(() => subscription.unsubscribeAll()),
234
- ),
235
- );
236
- }),
237
- ),
238
- ),
239
- Stream.filterMap((update: V) =>
240
- Option.fromNullable(
241
- fulfillsDepth(depth, update)
242
- ? (update as DeeplyLoaded<V, Depth>)
243
- : undefined,
244
- ),
245
- ),
246
- );
247
- }
@@ -1,4 +1,3 @@
1
- import { Effect } from "effect";
2
1
  import type { CoID, RawCoValue } from "cojson";
3
2
  import type {
4
3
  Account,
@@ -6,7 +5,6 @@ import type {
6
5
  ID,
7
6
  RefEncoded,
8
7
  UnCo,
9
- UnavailableError,
10
8
  } from "../internal.js";
11
9
  import {
12
10
  instantiateRefEncoded,
@@ -47,22 +45,6 @@ export class Ref<out V extends CoValue> {
47
45
  }
48
46
  }
49
47
 
50
- loadEf() {
51
- return Effect.async<V, UnavailableError>((fulfill) => {
52
- this.loadHelper()
53
- .then((value) => {
54
- if (value === "unavailable") {
55
- fulfill(Effect.fail<UnavailableError>("unavailable"));
56
- } else {
57
- fulfill(Effect.succeed(value));
58
- }
59
- })
60
- .catch((e) => {
61
- fulfill(Effect.die(e));
62
- });
63
- });
64
- }
65
-
66
48
  private async loadHelper(options?: {
67
49
  onProgress: (p: number) => void;
68
50
  }): Promise<V | "unavailable"> {
@@ -17,6 +17,36 @@ export type IfCo<C, R> = C extends infer _A | infer B
17
17
  : never;
18
18
  export type UnCo<T> = T extends co<infer A> ? A : T;
19
19
 
20
+ const optional = {
21
+ ref: optionalRef,
22
+ json<T extends JsonValue>(): co<T | undefined> {
23
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
24
+ return { [SchemaInit]: "json" satisfies Schema } as any;
25
+ },
26
+ encoded<T>(arg: OptionalEncoder<T>): co<T | undefined> {
27
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
28
+ return { [SchemaInit]: { encoded: arg } satisfies Schema } as any;
29
+ },
30
+ string: {
31
+ [SchemaInit]: "json" satisfies Schema,
32
+ } as unknown as co<string | undefined>,
33
+ number: {
34
+ [SchemaInit]: "json" satisfies Schema,
35
+ } as unknown as co<number | undefined>,
36
+ boolean: {
37
+ [SchemaInit]: "json" satisfies Schema,
38
+ } as unknown as co<boolean | undefined>,
39
+ null: {
40
+ [SchemaInit]: "json" satisfies Schema,
41
+ } as unknown as co<null | undefined>,
42
+ literal<T extends (string | number | boolean)[]>(
43
+ ..._lit: T
44
+ ): co<T[number] | undefined> {
45
+ // eslint-disable-next-line @typescript-eslint/no-explicit-any
46
+ return { [SchemaInit]: "json" satisfies Schema } as any;
47
+ },
48
+ };
49
+
20
50
  /** @category Schema definition */
21
51
  export const co = {
22
52
  string: {
@@ -48,8 +78,15 @@ export const co = {
48
78
  ref,
49
79
  items: ItemsSym as ItemsSym,
50
80
  members: MembersSym as MembersSym,
81
+ optional,
51
82
  };
52
83
 
84
+ function optionalRef<C extends CoValueClass>(
85
+ arg: C | ((_raw: InstanceType<C>["_raw"]) => C),
86
+ ): co<InstanceType<C> | null | undefined> {
87
+ return ref(arg, { optional: true });
88
+ }
89
+
53
90
  function ref<C extends CoValueClass>(
54
91
  arg: C | ((_raw: InstanceType<C>["_raw"]) => C),
55
92
  ): co<InstanceType<C> | null>;
@@ -131,6 +168,10 @@ export type EffectSchemaWithInputAndOutput<A, I = A> = EffectSchema<
131
168
  };
132
169
 
133
170
  export type Encoder<V> = EffectSchemaWithInputAndOutput<V, JsonValue>;
171
+ export type OptionalEncoder<V> = EffectSchemaWithInputAndOutput<
172
+ V,
173
+ JsonValue | undefined
174
+ >;
134
175
 
135
176
  import { Date } from "@effect/schema/Schema";
136
177
  import { SchemaInit, ItemsSym, MembersSym } from "./symbols.js";
package/src/index.ts CHANGED
@@ -26,9 +26,4 @@ export { ImageDefinition } from "./internal.js";
26
26
  export { CoValueBase, type CoValueClass } from "./internal.js";
27
27
  export type { DepthsIn, DeeplyLoaded } from "./internal.js";
28
28
 
29
- export {
30
- loadCoValue,
31
- loadCoValueEf,
32
- subscribeToCoValue,
33
- subscribeToCoValueEf,
34
- } from "./internal.js";
29
+ export { loadCoValue, subscribeToCoValue } from "./internal.js";
@@ -157,11 +157,12 @@ describe("CoList resolution", async () => {
157
157
  test("Loading and availability", async () => {
158
158
  const { me, list } = await initNodeAndList();
159
159
 
160
- const [initialAsPeer, secondPeer] = await Effect.runPromise(connectedPeers(
161
- "initial",
162
- "second",
163
- { peer1role: "server", peer2role: "client" },
164
- ));
160
+ const [initialAsPeer, secondPeer] = await Effect.runPromise(
161
+ connectedPeers("initial", "second", {
162
+ peer1role: "server",
163
+ peer2role: "client",
164
+ }),
165
+ );
165
166
  if (!isControlledAccount(me)) {
166
167
  throw "me is not a controlled account";
167
168
  }
@@ -216,11 +217,12 @@ describe("CoList resolution", async () => {
216
217
  test("Subscription & auto-resolution", async () => {
217
218
  const { me, list } = await initNodeAndList();
218
219
 
219
- const [initialAsPeer, secondPeer] = await Effect.runPromise(connectedPeers(
220
- "initial",
221
- "second",
222
- { peer1role: "server", peer2role: "client" },
223
- ));
220
+ const [initialAsPeer, secondPeer] = await Effect.runPromise(
221
+ connectedPeers("initial", "second", {
222
+ peer1role: "server",
223
+ peer2role: "client",
224
+ }),
225
+ );
224
226
  if (!isControlledAccount(me)) {
225
227
  throw "me is not a controlled account";
226
228
  }
@@ -25,7 +25,8 @@ describe("Simple CoMap operations", async () => {
25
25
  _height = co.number;
26
26
  birthday = co.encoded(Encoders.Date);
27
27
  name? = co.string;
28
- nullable = co.encoded(Schema.NullOr(Schema.String));
28
+ nullable = co.optional.encoded(Schema.NullishOr(Schema.String));
29
+ optionalDate = co.optional.encoded(Encoders.Date);
29
30
 
30
31
  get roughColor() {
31
32
  return this.color + "ish";
@@ -94,6 +95,8 @@ describe("Simple CoMap operations", async () => {
94
95
 
95
96
  map.nullable = "not null";
96
97
  map.nullable = null;
98
+ delete map.nullable;
99
+ map.nullable = undefined;
97
100
 
98
101
  map.name = "Secret name";
99
102
  expect(map.name).toEqual("Secret name");
@@ -442,7 +445,7 @@ describe("CoMap resolution", async () => {
442
445
 
443
446
  class TestMapWithOptionalRef extends CoMap {
444
447
  color = co.string;
445
- nested = co.ref(NestedMap, { optional: true });
448
+ nested = co.optional.ref(NestedMap);
446
449
  }
447
450
 
448
451
  test("Construction with optional", async () => {
@@ -39,10 +39,12 @@ describe("Deep loading with depth arg", async () => {
39
39
  crypto: Crypto,
40
40
  });
41
41
 
42
- const [initialAsPeer, secondPeer] = await Effect.runPromise(connectedPeers("initial", "second", {
43
- peer1role: "server",
44
- peer2role: "client",
45
- }));
42
+ const [initialAsPeer, secondPeer] = await Effect.runPromise(
43
+ connectedPeers("initial", "second", {
44
+ peer1role: "server",
45
+ peer2role: "client",
46
+ }),
47
+ );
46
48
  if (!isControlledAccount(me)) {
47
49
  throw "me is not a controlled account";
48
50
  }
@@ -252,10 +254,12 @@ test("Deep loading a record-like coMap", async () => {
252
254
  crypto: Crypto,
253
255
  });
254
256
 
255
- const [initialAsPeer, secondPeer] = await Effect.runPromise(connectedPeers("initial", "second", {
256
- peer1role: "server",
257
- peer2role: "client",
258
- }));
257
+ const [initialAsPeer, secondPeer] = await Effect.runPromise(
258
+ connectedPeers("initial", "second", {
259
+ peer1role: "server",
260
+ peer2role: "client",
261
+ }),
262
+ );
259
263
  if (!isControlledAccount(me)) {
260
264
  throw "me is not a controlled account";
261
265
  }