jazz-tools 0.18.16 → 0.18.18

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 (112) hide show
  1. package/.svelte-kit/__package__/jazz.class.svelte.d.ts +14 -0
  2. package/.svelte-kit/__package__/jazz.class.svelte.d.ts.map +1 -1
  3. package/.svelte-kit/__package__/jazz.class.svelte.js +37 -0
  4. package/.svelte-kit/__package__/media/image.svelte +104 -98
  5. package/.svelte-kit/__package__/media/image.svelte.d.ts.map +1 -1
  6. package/.svelte-kit/__package__/testing.d.ts +1 -1
  7. package/.svelte-kit/__package__/testing.d.ts.map +1 -1
  8. package/.svelte-kit/__package__/testing.js +1 -1
  9. package/.svelte-kit/__package__/tests/TestConnectionStatus.svelte +8 -0
  10. package/.svelte-kit/__package__/tests/TestConnectionStatus.svelte.d.ts +27 -0
  11. package/.svelte-kit/__package__/tests/TestConnectionStatus.svelte.d.ts.map +1 -0
  12. package/.svelte-kit/__package__/tests/media/image.svelte.test.js +16 -2
  13. package/.svelte-kit/__package__/tests/sync-connection-status.svelte.test.d.ts +2 -0
  14. package/.svelte-kit/__package__/tests/sync-connection-status.svelte.test.d.ts.map +1 -0
  15. package/.svelte-kit/__package__/tests/sync-connection-status.svelte.test.js +47 -0
  16. package/.turbo/turbo-build.log +52 -52
  17. package/CHANGELOG.md +27 -0
  18. package/dist/browser/BrowserContextManager.d.ts +4 -0
  19. package/dist/browser/BrowserContextManager.d.ts.map +1 -1
  20. package/dist/browser/createBrowserContext.d.ts +4 -0
  21. package/dist/browser/createBrowserContext.d.ts.map +1 -1
  22. package/dist/browser/index.js +36 -4
  23. package/dist/browser/index.js.map +1 -1
  24. package/dist/{chunk-GRN6OAUX.js → chunk-FHRKDKDY.js} +80 -6
  25. package/dist/chunk-FHRKDKDY.js.map +1 -0
  26. package/dist/index.js +1 -1
  27. package/dist/react/hooks.d.ts +1 -1
  28. package/dist/react/hooks.d.ts.map +1 -1
  29. package/dist/react/index.d.ts +1 -1
  30. package/dist/react/index.d.ts.map +1 -1
  31. package/dist/react/index.js +6 -2
  32. package/dist/react/index.js.map +1 -1
  33. package/dist/react/media/image.d.ts.map +1 -1
  34. package/dist/react-core/hooks.d.ts +26 -0
  35. package/dist/react-core/hooks.d.ts.map +1 -1
  36. package/dist/react-core/index.js +16 -1
  37. package/dist/react-core/index.js.map +1 -1
  38. package/dist/react-core/testing.d.ts +1 -1
  39. package/dist/react-core/testing.d.ts.map +1 -1
  40. package/dist/react-core/testing.js +3 -1
  41. package/dist/react-core/testing.js.map +1 -1
  42. package/dist/react-core/tests/useSyncConnectionStatus.test.d.ts +2 -0
  43. package/dist/react-core/tests/useSyncConnectionStatus.test.d.ts.map +1 -0
  44. package/dist/react-native-core/ReactNativeContextManager.d.ts +4 -0
  45. package/dist/react-native-core/ReactNativeContextManager.d.ts.map +1 -1
  46. package/dist/react-native-core/hooks.d.ts +1 -1
  47. package/dist/react-native-core/hooks.d.ts.map +1 -1
  48. package/dist/react-native-core/index.js +41 -7
  49. package/dist/react-native-core/index.js.map +1 -1
  50. package/dist/react-native-core/media/image.d.ts.map +1 -1
  51. package/dist/react-native-core/platform.d.ts +4 -0
  52. package/dist/react-native-core/platform.d.ts.map +1 -1
  53. package/dist/svelte/jazz.class.svelte.d.ts +14 -0
  54. package/dist/svelte/jazz.class.svelte.d.ts.map +1 -1
  55. package/dist/svelte/jazz.class.svelte.js +37 -0
  56. package/dist/svelte/media/image.svelte +104 -98
  57. package/dist/svelte/media/image.svelte.d.ts.map +1 -1
  58. package/dist/svelte/testing.d.ts +1 -1
  59. package/dist/svelte/testing.d.ts.map +1 -1
  60. package/dist/svelte/testing.js +1 -1
  61. package/dist/svelte/tests/TestConnectionStatus.svelte +8 -0
  62. package/dist/svelte/tests/TestConnectionStatus.svelte.d.ts +27 -0
  63. package/dist/svelte/tests/TestConnectionStatus.svelte.d.ts.map +1 -0
  64. package/dist/svelte/tests/media/image.svelte.test.js +16 -2
  65. package/dist/svelte/tests/sync-connection-status.svelte.test.d.ts +2 -0
  66. package/dist/svelte/tests/sync-connection-status.svelte.test.d.ts.map +1 -0
  67. package/dist/svelte/tests/sync-connection-status.svelte.test.js +47 -0
  68. package/dist/testing.js +34 -4
  69. package/dist/testing.js.map +1 -1
  70. package/dist/tools/implementation/ContextManager.d.ts +4 -0
  71. package/dist/tools/implementation/ContextManager.d.ts.map +1 -1
  72. package/dist/tools/implementation/refs.d.ts +1 -1
  73. package/dist/tools/implementation/refs.d.ts.map +1 -1
  74. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts +4 -0
  75. package/dist/tools/subscribe/CoValueCoreSubscription.d.ts.map +1 -1
  76. package/dist/tools/subscribe/SubscriptionScope.d.ts +7 -0
  77. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
  78. package/dist/tools/subscribe/index.d.ts.map +1 -1
  79. package/dist/tools/testing.d.ts +8 -0
  80. package/dist/tools/testing.d.ts.map +1 -1
  81. package/dist/tools/types.d.ts +4 -0
  82. package/dist/tools/types.d.ts.map +1 -1
  83. package/package.json +4 -4
  84. package/src/browser/createBrowserContext.ts +34 -4
  85. package/src/react/hooks.tsx +1 -0
  86. package/src/react/index.ts +1 -0
  87. package/src/react/media/image.tsx +2 -0
  88. package/src/react/tests/media/image.test.tsx +20 -2
  89. package/src/react-core/hooks.ts +42 -0
  90. package/src/react-core/testing.tsx +1 -0
  91. package/src/react-core/tests/useAccountWithSelector.test.ts +98 -2
  92. package/src/react-core/tests/useSyncConnectionStatus.test.ts +48 -0
  93. package/src/react-native-core/hooks.tsx +1 -0
  94. package/src/react-native-core/media/image.tsx +4 -1
  95. package/src/react-native-core/platform.ts +32 -4
  96. package/src/svelte/jazz.class.svelte.ts +44 -0
  97. package/src/svelte/media/image.svelte +104 -98
  98. package/src/svelte/testing.ts +1 -0
  99. package/src/svelte/tests/TestConnectionStatus.svelte +8 -0
  100. package/src/svelte/tests/media/image.svelte.test.ts +18 -2
  101. package/src/svelte/tests/sync-connection-status.svelte.test.ts +61 -0
  102. package/src/tools/implementation/ContextManager.ts +8 -0
  103. package/src/tools/implementation/refs.ts +27 -3
  104. package/src/tools/subscribe/CoValueCoreSubscription.ts +14 -0
  105. package/src/tools/subscribe/SubscriptionScope.ts +67 -2
  106. package/src/tools/subscribe/index.ts +8 -0
  107. package/src/tools/testing.ts +29 -0
  108. package/src/tools/tests/ContextManager.test.ts +2 -2
  109. package/src/tools/tests/coMap.test.ts +42 -0
  110. package/src/tools/tests/subscribe.test.ts +1 -4
  111. package/src/tools/types.ts +4 -0
  112. package/dist/chunk-GRN6OAUX.js.map +0 -1
@@ -193,6 +193,23 @@ export async function createJazzTestGuest() {
193
193
  };
194
194
  }
195
195
 
196
+ export class MockConnectionStatus {
197
+ static connected: boolean = true;
198
+ static connectionListeners = new Set<(isConnected: boolean) => void>();
199
+ static setIsConnected(isConnected: boolean) {
200
+ MockConnectionStatus.connected = isConnected;
201
+ for (const listener of MockConnectionStatus.connectionListeners) {
202
+ listener(isConnected);
203
+ }
204
+ }
205
+ static addConnectionListener(listener: (isConnected: boolean) => void) {
206
+ MockConnectionStatus.connectionListeners.add(listener);
207
+ return () => {
208
+ MockConnectionStatus.connectionListeners.delete(listener);
209
+ };
210
+ }
211
+ }
212
+
196
213
  export type TestJazzContextManagerProps<Acc extends Account> =
197
214
  JazzContextManagerBaseProps<Acc> & {
198
215
  defaultProfileName?: string;
@@ -249,6 +266,10 @@ export class TestJazzContextManager<
249
266
  await storage.clear();
250
267
  node.gracefulShutdown();
251
268
  },
269
+ addConnectionListener: (listener) => {
270
+ return MockConnectionStatus.addConnectionListener(listener);
271
+ },
272
+ connected: () => MockConnectionStatus.connected,
252
273
  },
253
274
  {
254
275
  credentials,
@@ -274,6 +295,10 @@ export class TestJazzContextManager<
274
295
  logOut: async () => {
275
296
  node.gracefulShutdown();
276
297
  },
298
+ addConnectionListener: (listener) => {
299
+ return MockConnectionStatus.addConnectionListener(listener);
300
+ },
301
+ connected: () => MockConnectionStatus.connected,
277
302
  });
278
303
 
279
304
  return context;
@@ -309,6 +334,10 @@ export class TestJazzContextManager<
309
334
  logOut: () => {
310
335
  return context.logOut();
311
336
  },
337
+ addConnectionListener: (listener: (isConnected: boolean) => void) => {
338
+ return MockConnectionStatus.addConnectionListener(listener);
339
+ },
340
+ connected: () => MockConnectionStatus.connected,
312
341
  };
313
342
  }
314
343
  }
@@ -73,6 +73,8 @@ class TestJazzContextManager<Acc extends Account> extends JazzContextManager<
73
73
  logOut: async () => {
74
74
  await context.logOut();
75
75
  },
76
+ addConnectionListener: () => () => {},
77
+ connected: () => false,
76
78
  };
77
79
  }
78
80
  }
@@ -80,14 +82,12 @@ class TestJazzContextManager<Acc extends Account> extends JazzContextManager<
80
82
  describe("ContextManager", () => {
81
83
  let manager: TestJazzContextManager<Account>;
82
84
  let authSecretStorage: AuthSecretStorage;
83
- let storage: StorageAPI;
84
85
 
85
86
  function getCurrentValue() {
86
87
  return manager.getCurrentValue() as JazzAuthContext<Account>;
87
88
  }
88
89
 
89
90
  beforeEach(async () => {
90
- storage = await createAsyncStorage({});
91
91
  KvStoreContext.getInstance().initialize(new InMemoryKVStore());
92
92
  authSecretStorage = new AuthSecretStorage();
93
93
  await authSecretStorage.clear();
@@ -2510,6 +2510,48 @@ describe("CoMap migration", () => {
2510
2510
  expect(spy).toHaveBeenCalledTimes(1);
2511
2511
  });
2512
2512
 
2513
+ test("should run only when the value is fully loaded", async () => {
2514
+ await setupJazzTestSync({
2515
+ asyncPeers: true,
2516
+ });
2517
+ await createJazzTestAccount({
2518
+ isCurrentActiveAccount: true,
2519
+ creationProps: { name: "Hermes Puggington" },
2520
+ });
2521
+
2522
+ const migration = vi.fn();
2523
+ const Person = co
2524
+ .map({
2525
+ name: z.string(),
2526
+ update: z.number(),
2527
+ })
2528
+ .withMigration((person) => {
2529
+ migration(person.update);
2530
+ });
2531
+
2532
+ const person = Person.create({
2533
+ name: "Bob",
2534
+ update: 1,
2535
+ });
2536
+
2537
+ // Pump the value to reach streaming
2538
+ for (let i = 0; i <= 300; i++) {
2539
+ person.$jazz.raw.assign({
2540
+ name: "1".repeat(1024),
2541
+ update: i,
2542
+ });
2543
+ }
2544
+
2545
+ // Upload and unmount, to force the streaming download
2546
+ await person.$jazz.waitForSync();
2547
+ person.$jazz.raw.core.unmount();
2548
+
2549
+ // Load the value and expect the migration to run only once
2550
+ await Person.load(person.$jazz.id);
2551
+ expect(migration).toHaveBeenCalledTimes(1);
2552
+ expect(migration).toHaveBeenCalledWith(300);
2553
+ });
2554
+
2513
2555
  test("should not break recursive schemas", async () => {
2514
2556
  const PersonV1 = co.map({
2515
2557
  name: z.string(),
@@ -559,10 +559,7 @@ describe("subscribeToCoValue", () => {
559
559
  assert(result);
560
560
 
561
561
  expect(result[0]?.value).toBe("1");
562
-
563
- // expect(updateFn).toHaveBeenCalledTimes(1);
564
- // TODO: Getting an extra update here due to https://github.com/garden-co/jazz/issues/2117
565
- expect(updateFn).toHaveBeenCalledTimes(2);
562
+ expect(updateFn).toHaveBeenCalledTimes(1);
566
563
  });
567
564
 
568
565
  it("should handle undefined values in lists with required refs", async () => {
@@ -26,6 +26,8 @@ export type JazzAuthContext<Acc extends Account> = {
26
26
  logOut: () => Promise<void>;
27
27
  done: () => void;
28
28
  isAuthenticated?: boolean;
29
+ addConnectionListener: (listener: (connected: boolean) => void) => () => void;
30
+ connected: () => boolean;
29
31
  };
30
32
 
31
33
  export type JazzGuestContext = {
@@ -36,6 +38,8 @@ export type JazzGuestContext = {
36
38
  logOut: () => void;
37
39
  done: () => void;
38
40
  isAuthenticated?: boolean;
41
+ addConnectionListener: (listener: (connected: boolean) => void) => () => void;
42
+ connected: () => boolean;
39
43
  };
40
44
 
41
45
  export type JazzContextType<Acc extends Account> =