jazz-tools 0.13.7 → 0.13.10

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.
@@ -1 +1 @@
1
- {"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../src/coValues/deepLoading.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../src/coValues/deepLoading.ts"],"names":[],"mappings":"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"}
package/dist/index.js CHANGED
@@ -35,7 +35,7 @@ import {
35
35
  parseInviteLink,
36
36
  randomSessionProvider,
37
37
  subscribeToCoValue
38
- } from "./chunk-VQWUJIL4.js";
38
+ } from "./chunk-NFVKGXSH.js";
39
39
 
40
40
  // src/index.ts
41
41
  import { MAX_RECOMMENDED_TX_SIZE, cojsonInternals } from "cojson";
package/dist/testing.js CHANGED
@@ -5,7 +5,7 @@ import {
5
5
  createAnonymousJazzContext,
6
6
  createJazzContext,
7
7
  randomSessionProvider
8
- } from "./chunk-VQWUJIL4.js";
8
+ } from "./chunk-NFVKGXSH.js";
9
9
 
10
10
  // src/testing.ts
11
11
  import { LocalNode } from "cojson";
package/package.json CHANGED
@@ -17,11 +17,11 @@
17
17
  },
18
18
  "type": "module",
19
19
  "license": "MIT",
20
- "version": "0.13.7",
20
+ "version": "0.13.10",
21
21
  "dependencies": {
22
22
  "@scure/bip39": "^1.3.0",
23
23
  "fast-myers-diff": "^3.2.0",
24
- "cojson": "0.13.7"
24
+ "cojson": "0.13.10"
25
25
  },
26
26
  "devDependencies": {
27
27
  "tsup": "8.3.5",
@@ -557,7 +557,11 @@ function toRawItems<Item>(items: Item[], itemDescriptor: Schema) {
557
557
  : "encoded" in itemDescriptor
558
558
  ? items?.map((e) => itemDescriptor.encoded.encode(e))
559
559
  : isRefEncoded(itemDescriptor)
560
- ? items?.map((v) => (v as unknown as CoValue).id)
560
+ ? items?.map((v) => {
561
+ if (!v) return null;
562
+
563
+ return (v as unknown as CoValue).id;
564
+ })
561
565
  : (() => {
562
566
  throw new Error("Invalid element descriptor");
563
567
  })();
@@ -63,7 +63,7 @@ export function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult {
63
63
  for (const [key, item] of Object.entries(value)) {
64
64
  const rawValue = map._raw.get(key);
65
65
 
66
- if (rawValue !== undefined) {
66
+ if (rawValue !== undefined && rawValue !== null) {
67
67
  if (!item) {
68
68
  if (hasReadAccess(map, key)) {
69
69
  result.status = "unfulfilled";
@@ -166,8 +166,22 @@ export function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult {
166
166
  } else if (value._type === "CoList") {
167
167
  if ("$each" in depth) {
168
168
  const result: FulfillsDepthResult = { status: "fulfilled" };
169
+ const list = value as CoList;
169
170
 
170
171
  for (const [key, item] of (value as CoList).entries()) {
172
+ const rawValue = list._raw.get(key);
173
+
174
+ if (!rawValue) {
175
+ if (isOptionalField(value, ItemsSym)) {
176
+ continue;
177
+ }
178
+
179
+ // Throw an error and mark this as unavailable
180
+ throw new Error(
181
+ `The ref ${key} on ${list.constructor.name} is required but missing`,
182
+ );
183
+ }
184
+
171
185
  if (hasRefValue(value, key)) {
172
186
  if (!item) {
173
187
  if (hasReadAccess(value, key)) {
@@ -417,6 +417,211 @@ describe("subscribeToCoValue", () => {
417
417
 
418
418
  expect(updateFn).toHaveBeenCalledTimes(1);
419
419
  });
420
+
421
+ it("should emit when all the items become available", async () => {
422
+ class TestMap extends CoMap {
423
+ value = co.string;
424
+ }
425
+
426
+ class TestList extends CoList.Of(co.ref(TestMap)) {}
427
+
428
+ const reader = await createJazzTestAccount({
429
+ isCurrentActiveAccount: true,
430
+ });
431
+
432
+ const creator = await createJazzTestAccount({
433
+ isCurrentActiveAccount: true,
434
+ });
435
+
436
+ const everyone = Group.create(creator);
437
+ everyone.addMember("everyone", "reader");
438
+
439
+ const group = Group.create(creator);
440
+
441
+ const list = TestList.create(
442
+ [
443
+ TestMap.create({ value: "1" }, group),
444
+ TestMap.create({ value: "2" }, everyone),
445
+ TestMap.create({ value: "3" }, everyone),
446
+ TestMap.create({ value: "4" }, everyone),
447
+ TestMap.create({ value: "5" }, everyone),
448
+ ],
449
+ everyone,
450
+ );
451
+
452
+ let result = null as Resolved<TestList, { $each: true }> | null;
453
+
454
+ const updateFn = vi.fn().mockImplementation((value) => {
455
+ result = value;
456
+ });
457
+ const onUnauthorized = vi.fn();
458
+
459
+ const unsubscribe = subscribeToCoValue(
460
+ TestList,
461
+ list.id,
462
+ {
463
+ loadAs: reader,
464
+ resolve: {
465
+ $each: true,
466
+ },
467
+ onUnauthorized,
468
+ },
469
+ updateFn,
470
+ );
471
+
472
+ onTestFinished(unsubscribe);
473
+
474
+ await waitFor(() => {
475
+ expect(onUnauthorized).toHaveBeenCalled();
476
+ });
477
+
478
+ group.addMember("everyone", "reader");
479
+
480
+ await waitFor(() => {
481
+ expect(updateFn).toHaveBeenCalled();
482
+ });
483
+
484
+ assert(result);
485
+
486
+ expect(result[0]?.value).toBe("1");
487
+
488
+ expect(updateFn).toHaveBeenCalledTimes(1);
489
+ });
490
+
491
+ it("should handle null values in lists with required refs", async () => {
492
+ class TestMap extends CoMap {
493
+ value = co.string;
494
+ }
495
+
496
+ class TestList extends CoList.Of(co.ref(TestMap)) {}
497
+
498
+ const reader = await createJazzTestAccount({
499
+ isCurrentActiveAccount: true,
500
+ });
501
+
502
+ const creator = await createJazzTestAccount({
503
+ isCurrentActiveAccount: true,
504
+ });
505
+
506
+ const everyone = Group.create(creator);
507
+ everyone.addMember("everyone", "reader");
508
+
509
+ const list = TestList.create(
510
+ [
511
+ // TODO: This should be flagged as an error by typescript
512
+ null,
513
+ TestMap.create({ value: "2" }, everyone),
514
+ TestMap.create({ value: "3" }, everyone),
515
+ TestMap.create({ value: "4" }, everyone),
516
+ TestMap.create({ value: "5" }, everyone),
517
+ ],
518
+ everyone,
519
+ );
520
+
521
+ let result = null as Resolved<TestList, { $each: true }> | null;
522
+
523
+ const updateFn = vi.fn().mockImplementation((value) => {
524
+ result = value;
525
+ });
526
+ const onUnauthorized = vi.fn();
527
+ const onUnavailable = vi.fn();
528
+
529
+ const unsubscribe = subscribeToCoValue(
530
+ TestList,
531
+ list.id,
532
+ {
533
+ loadAs: reader,
534
+ resolve: {
535
+ $each: true,
536
+ },
537
+ onUnauthorized,
538
+ onUnavailable,
539
+ },
540
+ updateFn,
541
+ );
542
+
543
+ onTestFinished(unsubscribe);
544
+
545
+ await waitFor(() => {
546
+ expect(onUnavailable).toHaveBeenCalled();
547
+ });
548
+
549
+ list[0] = TestMap.create({ value: "1" }, everyone);
550
+
551
+ await waitFor(() => {
552
+ expect(updateFn).toHaveBeenCalled();
553
+ });
554
+
555
+ assert(result);
556
+
557
+ expect(result[0]?.value).toBe("1");
558
+
559
+ expect(updateFn).toHaveBeenCalledTimes(1);
560
+ });
561
+
562
+ it("should handle null values in lists with optional refs", async () => {
563
+ class TestMap extends CoMap {
564
+ value = co.string;
565
+ }
566
+
567
+ class TestList extends CoList.Of(co.optional.ref(TestMap)) {}
568
+
569
+ const reader = await createJazzTestAccount({
570
+ isCurrentActiveAccount: true,
571
+ });
572
+
573
+ const creator = await createJazzTestAccount({
574
+ isCurrentActiveAccount: true,
575
+ });
576
+
577
+ const everyone = Group.create(creator);
578
+ everyone.addMember("everyone", "reader");
579
+
580
+ const list = TestList.create(
581
+ [
582
+ null,
583
+ TestMap.create({ value: "2" }, everyone),
584
+ TestMap.create({ value: "3" }, everyone),
585
+ TestMap.create({ value: "4" }, everyone),
586
+ TestMap.create({ value: "5" }, everyone),
587
+ ],
588
+ everyone,
589
+ );
590
+
591
+ let result = null as Resolved<TestList, { $each: true }> | null;
592
+
593
+ const updateFn = vi.fn().mockImplementation((value) => {
594
+ result = value;
595
+ });
596
+ const onUnauthorized = vi.fn();
597
+ const onUnavailable = vi.fn();
598
+
599
+ const unsubscribe = subscribeToCoValue(
600
+ TestList,
601
+ list.id,
602
+ {
603
+ loadAs: reader,
604
+ resolve: {
605
+ $each: true,
606
+ },
607
+ onUnauthorized,
608
+ onUnavailable,
609
+ },
610
+ updateFn,
611
+ );
612
+
613
+ onTestFinished(unsubscribe);
614
+
615
+ await waitFor(() => {
616
+ expect(updateFn).toHaveBeenCalled();
617
+ });
618
+
619
+ assert(result);
620
+
621
+ expect(result[0]).toBeNull();
622
+
623
+ expect(updateFn).toHaveBeenCalledTimes(1);
624
+ });
420
625
  });
421
626
 
422
627
  describe("createCoValueObservable", () => {