jazz-tools 0.17.13 → 0.18.0

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 (228) hide show
  1. package/.svelte-kit/__package__/jazz.class.svelte.js +1 -1
  2. package/.svelte-kit/__package__/media/image.svelte +3 -9
  3. package/.svelte-kit/__package__/media/image.svelte.d.ts +1 -6
  4. package/.svelte-kit/__package__/media/image.svelte.d.ts.map +1 -1
  5. package/.svelte-kit/__package__/media/image.types.d.ts +7 -0
  6. package/.svelte-kit/__package__/media/image.types.d.ts.map +1 -0
  7. package/.svelte-kit/__package__/media/image.types.js +1 -0
  8. package/.svelte-kit/__package__/tests/media/image.svelte.test.js +31 -31
  9. package/.turbo/turbo-build.log +49 -49
  10. package/CHANGELOG.md +42 -0
  11. package/dist/browser/index.js +2 -2
  12. package/dist/browser/index.js.map +1 -1
  13. package/dist/{chunk-SFP5PBPX.js → chunk-HJ3GTGY7.js} +1325 -1001
  14. package/dist/chunk-HJ3GTGY7.js.map +1 -0
  15. package/dist/index.js +18 -18
  16. package/dist/index.js.map +1 -1
  17. package/dist/inspector/{custom-element-ZSNTCECD.js → custom-element-WCY6D3QJ.js} +3 -3
  18. package/dist/inspector/{custom-element-ZSNTCECD.js.map → custom-element-WCY6D3QJ.js.map} +1 -1
  19. package/dist/inspector/index.js +1 -1
  20. package/dist/inspector/index.js.map +1 -1
  21. package/dist/inspector/register-custom-element.js +1 -1
  22. package/dist/media/{chunk-E5J3WLQW.js → chunk-KR2V6X2N.js} +14 -9
  23. package/dist/media/chunk-KR2V6X2N.js.map +1 -0
  24. package/dist/media/create-image.d.ts +6 -6
  25. package/dist/media/index.browser.d.ts +6 -6
  26. package/dist/media/index.browser.js +1 -1
  27. package/dist/media/index.d.ts +1 -1
  28. package/dist/media/index.js +1 -1
  29. package/dist/media/index.native.d.ts +6 -6
  30. package/dist/media/index.native.js +1 -1
  31. package/dist/media/utils.d.ts.map +1 -1
  32. package/dist/prosemirror/index.js +2 -2
  33. package/dist/prosemirror/index.js.map +1 -1
  34. package/dist/react/index.js +7 -5
  35. package/dist/react/index.js.map +1 -1
  36. package/dist/react-core/hooks.d.ts.map +1 -1
  37. package/dist/react-core/index.js +4658 -23
  38. package/dist/react-core/index.js.map +1 -1
  39. package/dist/react-native-core/index.js +1 -1
  40. package/dist/react-native-core/index.js.map +1 -1
  41. package/dist/svelte/jazz.class.svelte.js +1 -1
  42. package/dist/svelte/media/image.svelte +3 -9
  43. package/dist/svelte/media/image.svelte.d.ts +1 -6
  44. package/dist/svelte/media/image.svelte.d.ts.map +1 -1
  45. package/dist/svelte/media/image.types.d.ts +7 -0
  46. package/dist/svelte/media/image.types.d.ts.map +1 -0
  47. package/dist/svelte/media/image.types.js +1 -0
  48. package/dist/svelte/tests/media/image.svelte.test.js +31 -31
  49. package/dist/testing.js +18 -14
  50. package/dist/testing.js.map +1 -1
  51. package/dist/tools/coValues/CoFieldInit.d.ts +13 -0
  52. package/dist/tools/coValues/CoFieldInit.d.ts.map +1 -0
  53. package/dist/tools/coValues/CoValueBase.d.ts +18 -15
  54. package/dist/tools/coValues/CoValueBase.d.ts.map +1 -1
  55. package/dist/tools/coValues/account.d.ts +100 -46
  56. package/dist/tools/coValues/account.d.ts.map +1 -1
  57. package/dist/tools/coValues/coFeed.d.ts +78 -62
  58. package/dist/tools/coValues/coFeed.d.ts.map +1 -1
  59. package/dist/tools/coValues/coList.d.ts +212 -99
  60. package/dist/tools/coValues/coList.d.ts.map +1 -1
  61. package/dist/tools/coValues/coMap.d.ts +200 -192
  62. package/dist/tools/coValues/coMap.d.ts.map +1 -1
  63. package/dist/tools/coValues/coPlainText.d.ts +30 -22
  64. package/dist/tools/coValues/coPlainText.d.ts.map +1 -1
  65. package/dist/tools/coValues/deepLoading.d.ts +13 -13
  66. package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
  67. package/dist/tools/coValues/extensions/imageDef.d.ts +1 -1
  68. package/dist/tools/coValues/group.d.ts +32 -32
  69. package/dist/tools/coValues/group.d.ts.map +1 -1
  70. package/dist/tools/coValues/inbox.d.ts.map +1 -1
  71. package/dist/tools/coValues/interfaces.d.ts +18 -17
  72. package/dist/tools/coValues/interfaces.d.ts.map +1 -1
  73. package/dist/tools/coValues/profile.d.ts +6 -5
  74. package/dist/tools/coValues/profile.d.ts.map +1 -1
  75. package/dist/tools/coValues/schemaUnion.d.ts +3 -3
  76. package/dist/tools/coValues/schemaUnion.d.ts.map +1 -1
  77. package/dist/tools/exports.d.ts +1 -1
  78. package/dist/tools/exports.d.ts.map +1 -1
  79. package/dist/tools/implementation/anonymousJazzAgent.d.ts +2 -1
  80. package/dist/tools/implementation/anonymousJazzAgent.d.ts.map +1 -1
  81. package/dist/tools/implementation/schema.d.ts +5 -5
  82. package/dist/tools/implementation/schema.d.ts.map +1 -1
  83. package/dist/tools/implementation/symbols.d.ts +2 -0
  84. package/dist/tools/implementation/symbols.d.ts.map +1 -1
  85. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +2 -2
  86. package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
  87. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +6 -2
  88. package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
  89. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +8 -3
  90. package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
  91. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +12 -7
  92. package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
  93. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +13 -7
  94. package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -1
  95. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +11 -2
  96. package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
  97. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +4 -0
  98. package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
  99. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +4 -0
  100. package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
  101. package/dist/tools/implementation/zodSchema/typeConverters/{CoFieldInit.d.ts → CoFieldSchemaInit.d.ts} +7 -7
  102. package/dist/tools/implementation/zodSchema/typeConverters/CoFieldSchemaInit.d.ts.map +1 -0
  103. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts +4 -4
  104. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +1 -1
  105. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts +4 -4
  106. package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts.map +1 -1
  107. package/dist/tools/implementation/zodSchema/zodCo.d.ts +2 -2
  108. package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
  109. package/dist/tools/internal.d.ts +2 -1
  110. package/dist/tools/internal.d.ts.map +1 -1
  111. package/dist/tools/lib/migration.d.ts +1 -1
  112. package/dist/tools/lib/migration.d.ts.map +1 -1
  113. package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
  114. package/dist/tools/subscribe/index.d.ts +1 -1
  115. package/dist/tools/subscribe/index.d.ts.map +1 -1
  116. package/dist/tools/subscribe/utils.d.ts +2 -2
  117. package/dist/tools/subscribe/utils.d.ts.map +1 -1
  118. package/dist/tools/testing.d.ts.map +1 -1
  119. package/dist/tools/tests/utils.d.ts +2 -6
  120. package/dist/tools/tests/utils.d.ts.map +1 -1
  121. package/dist/worker/index.js +3 -3
  122. package/dist/worker/index.js.map +1 -1
  123. package/package.json +4 -4
  124. package/src/browser/auth/PasskeyAuth.ts +2 -2
  125. package/src/browser/createBrowserContext.ts +2 -2
  126. package/src/browser/tests/PasskeyAuth.test.ts +2 -2
  127. package/src/inspector/custom-element.tsx +2 -2
  128. package/src/inspector/viewer/new-app.tsx +1 -1
  129. package/src/media/create-image.test.ts +7 -7
  130. package/src/media/create-image.ts +5 -3
  131. package/src/media/index.ts +1 -1
  132. package/src/media/utils.test.ts +72 -66
  133. package/src/media/utils.ts +9 -6
  134. package/src/prosemirror/lib/plugin.ts +1 -1
  135. package/src/prosemirror/lib/sync.ts +1 -1
  136. package/src/prosemirror/tests/plugin.test.ts +4 -4
  137. package/src/react/media/image.tsx +2 -2
  138. package/src/react/tests/media/image.test.tsx +52 -32
  139. package/src/react-core/hooks.ts +11 -5
  140. package/src/react-core/tests/useAccount.test.ts +16 -22
  141. package/src/react-core/tests/useCoState.test.ts +19 -19
  142. package/src/react-core/tests/useInboxSender.test.ts +5 -2
  143. package/src/react-core/tests/usePassPhraseAuth.test.ts +6 -6
  144. package/src/react-native-core/media/image.tsx +1 -1
  145. package/src/svelte/jazz.class.svelte.ts +1 -1
  146. package/src/svelte/media/image.svelte +3 -9
  147. package/src/svelte/media/image.types.ts +7 -0
  148. package/src/svelte/tests/media/image.svelte.test.ts +34 -32
  149. package/src/tools/auth/DemoAuth.ts +2 -2
  150. package/src/tools/auth/PassphraseAuth.ts +2 -2
  151. package/src/tools/auth/clerk/index.ts +2 -2
  152. package/src/tools/auth/clerk/tests/JazzClerkAuth.test.ts +1 -1
  153. package/src/tools/coValues/CoFieldInit.ts +20 -0
  154. package/src/tools/coValues/CoValueBase.ts +40 -60
  155. package/src/tools/coValues/account.ts +306 -232
  156. package/src/tools/coValues/coFeed.ts +185 -153
  157. package/src/tools/coValues/coList.ts +507 -334
  158. package/src/tools/coValues/coMap.ts +420 -286
  159. package/src/tools/coValues/coPlainText.ts +94 -110
  160. package/src/tools/coValues/deepLoading.ts +13 -13
  161. package/src/tools/coValues/group.ts +100 -114
  162. package/src/tools/coValues/inbox.ts +16 -14
  163. package/src/tools/coValues/interfaces.ts +49 -31
  164. package/src/tools/coValues/profile.ts +8 -6
  165. package/src/tools/coValues/request.ts +9 -9
  166. package/src/tools/coValues/schemaUnion.ts +11 -5
  167. package/src/tools/exports.ts +1 -1
  168. package/src/tools/implementation/ContextManager.ts +4 -4
  169. package/src/tools/implementation/anonymousJazzAgent.ts +2 -1
  170. package/src/tools/implementation/createContext.ts +1 -1
  171. package/src/tools/implementation/devtoolsFormatters.ts +9 -9
  172. package/src/tools/implementation/invites.ts +2 -2
  173. package/src/tools/implementation/schema.ts +7 -7
  174. package/src/tools/implementation/symbols.ts +3 -0
  175. package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +2 -2
  176. package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +11 -2
  177. package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +18 -7
  178. package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +17 -7
  179. package/src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +20 -11
  180. package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +19 -2
  181. package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +6 -0
  182. package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +6 -0
  183. package/src/tools/implementation/zodSchema/typeConverters/{CoFieldInit.ts → CoFieldSchemaInit.ts} +11 -11
  184. package/src/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.ts +4 -4
  185. package/src/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.ts +4 -4
  186. package/src/tools/implementation/zodSchema/zodCo.ts +47 -10
  187. package/src/tools/internal.ts +2 -1
  188. package/src/tools/lib/migration.ts +5 -5
  189. package/src/tools/subscribe/SubscriptionScope.ts +32 -24
  190. package/src/tools/subscribe/index.ts +4 -4
  191. package/src/tools/subscribe/utils.ts +11 -11
  192. package/src/tools/testing.ts +17 -13
  193. package/src/tools/tests/ContextManager.test.ts +68 -57
  194. package/src/tools/tests/PassphraseAuth.test.ts +2 -2
  195. package/src/tools/tests/account.test.ts +154 -74
  196. package/src/tools/tests/coDiscriminatedUnion.test-d.ts +12 -6
  197. package/src/tools/tests/coDiscriminatedUnion.test.ts +26 -17
  198. package/src/tools/tests/coFeed.test-d.ts +18 -17
  199. package/src/tools/tests/coFeed.test.ts +108 -97
  200. package/src/tools/tests/coList.test-d.ts +18 -23
  201. package/src/tools/tests/coList.test.ts +350 -165
  202. package/src/tools/tests/coMap.record.test-d.ts +9 -13
  203. package/src/tools/tests/coMap.record.test.ts +37 -23
  204. package/src/tools/tests/coMap.test-d.ts +43 -21
  205. package/src/tools/tests/coMap.test.ts +368 -182
  206. package/src/tools/tests/coOptional.test.ts +28 -13
  207. package/src/tools/tests/coPlainText.test.ts +15 -15
  208. package/src/tools/tests/createContext.test.ts +14 -14
  209. package/src/tools/tests/deepLoading.test.ts +95 -94
  210. package/src/tools/tests/exportImport.test.ts +61 -41
  211. package/src/tools/tests/groupsAndAccounts.test.ts +333 -116
  212. package/src/tools/tests/inbox.test.ts +22 -17
  213. package/src/tools/tests/interfaces.test.ts +12 -11
  214. package/src/tools/tests/invites.test.ts +6 -4
  215. package/src/tools/tests/load.test.ts +20 -18
  216. package/src/tools/tests/patterns/notifications.test.ts +6 -6
  217. package/src/tools/tests/patterns/quest.test.ts +3 -3
  218. package/src/tools/tests/patterns/requestToJoin.test.ts +22 -22
  219. package/src/tools/tests/request.test.ts +38 -39
  220. package/src/tools/tests/schemaUnion.test.ts +64 -10
  221. package/src/tools/tests/subscribe.test.ts +64 -64
  222. package/src/tools/tests/testing.test.ts +5 -9
  223. package/src/tools/tests/utils.ts +3 -3
  224. package/src/tools/tests/zod.test.ts +3 -3
  225. package/src/worker/index.ts +3 -3
  226. package/dist/chunk-SFP5PBPX.js.map +0 -1
  227. package/dist/media/chunk-E5J3WLQW.js.map +0 -1
  228. package/dist/tools/implementation/zodSchema/typeConverters/CoFieldInit.d.ts.map +0 -1
@@ -24,12 +24,12 @@ describe("CoMap.Record", () => {
24
24
  matches(person);
25
25
  });
26
26
 
27
- test("has the _owner property", () => {
27
+ test("has the owner property", () => {
28
28
  const Person = co.record(z.string(), z.string());
29
29
 
30
30
  const person = Person.create({ name: "John" }, Account.getMe());
31
31
 
32
- expectTypeOf(person._owner).toEqualTypeOf<Account | Group>();
32
+ expectTypeOf(person.$jazz.owner).toEqualTypeOf<Group>();
33
33
  });
34
34
 
35
35
  test("Record with reference", () => {
@@ -128,7 +128,7 @@ describe("CoMap.Record", () => {
128
128
  pet1: Dog.create({ name: "Rex" }),
129
129
  });
130
130
 
131
- person.pet1!.owner = person;
131
+ person.pet1!.$jazz.set("owner", person);
132
132
 
133
133
  type ExpectedType = {
134
134
  [key: string]: Loaded<typeof Dog> | undefined;
@@ -156,7 +156,7 @@ describe("CoMap.Record", () => {
156
156
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
157
157
  });
158
158
 
159
- const loadedPerson = await Person.load(person.id, {
159
+ const loadedPerson = await Person.load(person.$jazz.id, {
160
160
  resolve: {
161
161
  $each: true,
162
162
  },
@@ -186,7 +186,7 @@ describe("CoMap.Record", () => {
186
186
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
187
187
  });
188
188
 
189
- const loadedPerson = await Person.load(person.id, {
189
+ const loadedPerson = await Person.load(person.$jazz.id, {
190
190
  resolve: {
191
191
  pet1: true,
192
192
  },
@@ -222,7 +222,7 @@ describe("CoMap.Record", () => {
222
222
  const userId: string = "pet1";
223
223
  const userId2: string = "pet3";
224
224
 
225
- const loadedPerson = await Person.load(person.id, {
225
+ const loadedPerson = await Person.load(person.$jazz.id, {
226
226
  resolve: {
227
227
  [userId]: true,
228
228
  pet2: true,
@@ -262,7 +262,7 @@ describe("CoMap.Record", () => {
262
262
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
263
263
  });
264
264
 
265
- const loadedPerson = await Person.load(person.id);
265
+ const loadedPerson = await Person.load(person.$jazz.id);
266
266
 
267
267
  type Expect = NonNullable<typeof loadedPerson> extends never
268
268
  ? "error: is never"
@@ -291,18 +291,14 @@ describe("CoMap.Record", () => {
291
291
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
292
292
  });
293
293
 
294
- const loadedPerson = await Person.load(person.id, {
294
+ const loadedPerson = await Person.load(person.$jazz.id, {
295
295
  resolve: {
296
296
  $each: { $onError: null },
297
297
  },
298
298
  });
299
299
 
300
300
  type ExpectedType = {
301
- [key: string]:
302
- | (Loaded<typeof Dog> & {
303
- $onError: never;
304
- })
305
- | null;
301
+ [key: string]: Loaded<typeof Dog> | null;
306
302
  } | null;
307
303
 
308
304
  function matches(value: ExpectedType) {
@@ -13,6 +13,7 @@ import { Loaded } from "../implementation/zodSchema/zodSchema.js";
13
13
  import { Account } from "../index.js";
14
14
  import { createJazzTestAccount, setupJazzTestSync } from "../testing.js";
15
15
  import { waitFor } from "./utils.js";
16
+ import { TypeSym } from "../internal.js";
16
17
 
17
18
  const Crypto = await WasmCrypto.create();
18
19
 
@@ -54,7 +55,7 @@ describe("CoMap.Record", async () => {
54
55
  test("create a Record with nullable values", () => {
55
56
  const Person = co.record(z.string(), z.string().nullable());
56
57
  const person = Person.create({ name: "John", age: null });
57
- person.bio = null;
58
+ person.$jazz.set("bio", null);
58
59
  expect(person.name).toEqual("John");
59
60
  expect(person.age).toEqual(null);
60
61
  expect(person.bio).toEqual(null);
@@ -75,7 +76,7 @@ describe("CoMap.Record", async () => {
75
76
  const person = Person.create({ name: "John" }, Account.getMe());
76
77
 
77
78
  expect(person.name).toEqual("John");
78
- expect(person._raw.get("name")).toEqual("John");
79
+ expect(person.$jazz.raw.get("name")).toEqual("John");
79
80
  });
80
81
 
81
82
  test("create a Record with a group as owner", () => {
@@ -84,7 +85,7 @@ describe("CoMap.Record", async () => {
84
85
  const person = Person.create({ name: "John" }, Group.create());
85
86
 
86
87
  expect(person.name).toEqual("John");
87
- expect(person._raw.get("name")).toEqual("John");
88
+ expect(person.$jazz.raw.get("name")).toEqual("John");
88
89
  });
89
90
 
90
91
  test("Empty schema", () => {
@@ -120,7 +121,7 @@ describe("CoMap.Record", async () => {
120
121
 
121
122
  const person = Person.create({ name: "John" });
122
123
 
123
- person.name = "Jane";
124
+ person.$jazz.set("name", "Jane");
124
125
 
125
126
  expect(person.name).toEqual("Jane");
126
127
  });
@@ -130,14 +131,15 @@ describe("CoMap.Record", async () => {
130
131
 
131
132
  const person = Person.create({ name: "John", age: "20" });
132
133
 
133
- delete person.age;
134
+ // Deleting a non-existent property does nothing
135
+ person.$jazz.delete("nonExistentProperty");
136
+
137
+ person.$jazz.delete("age");
134
138
 
135
139
  expect(person.name).toEqual("John");
136
140
  expect("age" in person).toEqual(false);
137
141
 
138
142
  expect(person.toJSON()).toEqual({
139
- _type: "CoMap",
140
- id: person.id,
141
143
  name: "John",
142
144
  });
143
145
  });
@@ -153,21 +155,21 @@ describe("CoMap.Record", async () => {
153
155
  pet1: Dog.create({ name: "Rex" }),
154
156
  });
155
157
 
156
- person.pet1 = Dog.create({ name: "Fido" });
158
+ person.$jazz.set("pet1", Dog.create({ name: "Fido" }));
157
159
 
158
160
  expect(person.pet1?.name).toEqual("Fido");
159
161
  });
160
162
 
161
- test("changes should be listed in _edits", () => {
163
+ test("changes should be listed in getEdits()", () => {
162
164
  const Person = co.record(z.string(), z.string());
163
165
 
164
166
  const person = Person.create({ name: "John" });
165
167
 
166
168
  const me = Account.getMe();
167
169
 
168
- person.name = "Jane";
170
+ person.$jazz.set("name", "Jane");
169
171
 
170
- const edits = person._edits.name?.all;
172
+ const edits = person.$jazz.getEdits().name?.all;
171
173
  expect(edits).toEqual([
172
174
  expect.objectContaining({
173
175
  value: "John",
@@ -182,8 +184,14 @@ describe("CoMap.Record", async () => {
182
184
  madeAt: expect.any(Date),
183
185
  }),
184
186
  ]);
185
- expect(edits?.[0]?.by).toMatchObject({ _type: "Account", id: me.id });
186
- expect(edits?.[1]?.by).toMatchObject({ _type: "Account", id: me.id });
187
+ expect(edits?.[0]?.by).toMatchObject({
188
+ [TypeSym]: "Account",
189
+ $jazz: expect.objectContaining({ id: me.$jazz.id }),
190
+ });
191
+ expect(edits?.[1]?.by).toMatchObject({
192
+ [TypeSym]: "Account",
193
+ $jazz: expect.objectContaining({ id: me.$jazz.id }),
194
+ });
187
195
  });
188
196
  });
189
197
 
@@ -201,7 +209,7 @@ describe("CoMap.Record", async () => {
201
209
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
202
210
  });
203
211
 
204
- const loadedPerson = await Person.load(person.id, {
212
+ const loadedPerson = await Person.load(person.$jazz.id, {
205
213
  resolve: {
206
214
  $each: true,
207
215
  },
@@ -225,7 +233,7 @@ describe("CoMap.Record", async () => {
225
233
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
226
234
  });
227
235
 
228
- const loadedPerson = await Person.load(person.id, {
236
+ const loadedPerson = await Person.load(person.$jazz.id, {
229
237
  resolve: {
230
238
  pet1: true,
231
239
  },
@@ -248,7 +256,7 @@ describe("CoMap.Record", async () => {
248
256
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
249
257
  });
250
258
 
251
- const loadedPerson = await Person.load(person.id, {
259
+ const loadedPerson = await Person.load(person.$jazz.id, {
252
260
  resolve: {
253
261
  pet3: true,
254
262
  },
@@ -270,7 +278,7 @@ describe("CoMap.Record", async () => {
270
278
  pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
271
279
  });
272
280
 
273
- const loadedPerson = await Person.load(person.id);
281
+ const loadedPerson = await Person.load(person.$jazz.id);
274
282
 
275
283
  assert(loadedPerson);
276
284
  expect(loadedPerson.pet1?.name).toEqual("Rex");
@@ -293,7 +301,7 @@ describe("CoMap.Record", async () => {
293
301
  const spy = vi.fn((person) => updates.push(person));
294
302
 
295
303
  Person.subscribe(
296
- person.id,
304
+ person.$jazz.id,
297
305
  {
298
306
  resolve: {
299
307
  $each: true,
@@ -310,7 +318,7 @@ describe("CoMap.Record", async () => {
310
318
 
311
319
  expect(updates[0]?.pet1?.name).toEqual("Rex");
312
320
 
313
- person.pet1 = Dog.create({ name: "Fido", breed: "Poodle" });
321
+ person.$jazz.set("pet1", Dog.create({ name: "Fido", breed: "Poodle" }));
314
322
 
315
323
  await waitFor(() => expect(spy).toHaveBeenCalledTimes(2));
316
324
 
@@ -471,7 +479,10 @@ describe("CoRecord unique methods", () => {
471
479
  { owner: group, unique: "test-record" },
472
480
  );
473
481
 
474
- const foundRecord = await ItemRecord.loadUnique("test-record", group.id);
482
+ const foundRecord = await ItemRecord.loadUnique(
483
+ "test-record",
484
+ group.$jazz.id,
485
+ );
475
486
  expect(foundRecord).toEqual(originalRecord);
476
487
  expect(foundRecord?.item1).toBe(1);
477
488
  expect(foundRecord?.item2).toBe(2);
@@ -481,7 +492,10 @@ describe("CoRecord unique methods", () => {
481
492
  const ItemRecord = co.record(z.string(), z.number());
482
493
  const group = Group.create();
483
494
 
484
- const foundRecord = await ItemRecord.loadUnique("non-existent", group.id);
495
+ const foundRecord = await ItemRecord.loadUnique(
496
+ "non-existent",
497
+ group.$jazz.id,
498
+ );
485
499
  expect(foundRecord).toBeNull();
486
500
  });
487
501
 
@@ -560,7 +574,7 @@ describe("CoRecord unique methods", () => {
560
574
  { owner: group, unique: "find-test" },
561
575
  );
562
576
 
563
- const foundId = ItemRecord.findUnique("find-test", group.id);
564
- expect(foundId).toBe(originalRecord.id);
577
+ const foundId = ItemRecord.findUnique("find-test", group.$jazz.id);
578
+ expect(foundId).toBe(originalRecord.$jazz.id);
565
579
  });
566
580
  });
@@ -45,14 +45,14 @@ describe("CoMap", async () => {
45
45
  matches(john);
46
46
  });
47
47
 
48
- test("has the _owner property", () => {
48
+ test("has the owner property", () => {
49
49
  const Person = co.map({
50
50
  name: z.string(),
51
51
  });
52
52
 
53
53
  const john = Person.create({ name: "John" }, Account.getMe());
54
54
 
55
- expectTypeOf(john._owner).toEqualTypeOf<Account | Group>();
55
+ expectTypeOf(john.$jazz.owner).toEqualTypeOf<Group>();
56
56
  });
57
57
 
58
58
  test("create CoMap with reference using CoValue", () => {
@@ -99,10 +99,10 @@ describe("CoMap", async () => {
99
99
  },
100
100
  });
101
101
 
102
+ // @ts-expect-error - Object literal may only specify known properties
102
103
  const person = Person.create({
103
104
  // @ts-expect-error - breed is missing
104
105
  dog1: { name: "Rex", items },
105
- // @ts-expect-error - Object literal may only specify known properties
106
106
  dog2: { name: "Fido", breed: "Labrador", extra: "extra" },
107
107
  friend: {
108
108
  dog1: {
@@ -278,7 +278,29 @@ describe("CoMap", async () => {
278
278
  dog: Dog.create({ name: "Rex" }),
279
279
  });
280
280
 
281
- john.dog = Dog.create({ name: "Fido" });
281
+ john.$jazz.set("dog", Dog.create({ name: "Fido" }));
282
+ });
283
+
284
+ test("cannot update a non-existing key", () => {
285
+ const Person = co.map({
286
+ name: z.string(),
287
+ });
288
+
289
+ const john = Person.create({ name: "John" });
290
+
291
+ // @ts-expect-error - Argument of type '"non-existing-key"' is not assignable to parameter of type '"name"'
292
+ john.$jazz.set("non-existing-key", "Jane");
293
+ });
294
+
295
+ test("cannot set a value with an incorrect type", () => {
296
+ const Person = co.map({
297
+ name: z.string(),
298
+ });
299
+
300
+ const john = Person.create({ name: "John" });
301
+
302
+ // @ts-expect-error - Argument of type 'number' is not assignable to parameter of type 'string'
303
+ john.$jazz.set("name", 12);
282
304
  });
283
305
 
284
306
  test("update a reference on a loaded value", () => {
@@ -301,10 +323,13 @@ describe("CoMap", async () => {
301
323
  dog: Dog.create({ name: "Rex", siblings: co.list(Dog).create([]) }),
302
324
  }) as Loaded<typeof Person, { dog: { siblings: true } }>;
303
325
 
304
- john.dog = Dog.create({
305
- name: "Fido",
306
- siblings: co.list(Dog).create([]),
307
- });
326
+ john.$jazz.set(
327
+ "dog",
328
+ Dog.create({
329
+ name: "Fido",
330
+ siblings: co.list(Dog).create([]),
331
+ }),
332
+ );
308
333
  });
309
334
  });
310
335
 
@@ -516,7 +541,7 @@ describe("CoMap resolution", async () => {
516
541
  dog2: Dog.create({ name: "Fido", breed: "Poodle" }),
517
542
  });
518
543
 
519
- const loadedPerson = await Person.load(person.id, {
544
+ const loadedPerson = await Person.load(person.$jazz.id, {
520
545
  resolve: {
521
546
  dog1: true,
522
547
  },
@@ -564,7 +589,7 @@ describe("CoMap resolution", async () => {
564
589
 
565
590
  const userId: string = "dog1";
566
591
 
567
- const loadedPerson = await Person.load(person.id, {
592
+ const loadedPerson = await Person.load(person.$jazz.id, {
568
593
  resolve: {
569
594
  [userId]: true,
570
595
  },
@@ -612,7 +637,7 @@ describe("CoMap resolution", async () => {
612
637
  dog2: Dog.create({ name: "Fido", breed: "Poodle" }),
613
638
  });
614
639
 
615
- const loadedPerson = await Person.load(person.id, {
640
+ const loadedPerson = await Person.load(person.$jazz.id, {
616
641
  resolve: {
617
642
  dog1: true,
618
643
  dog2: { $onError: null },
@@ -634,12 +659,9 @@ describe("CoMap resolution", async () => {
634
659
 
635
660
  assert(loadedPerson);
636
661
  expectTypeOf<typeof loadedPerson.dog1.name>().toEqualTypeOf<string>();
637
- expectTypeOf<typeof loadedPerson.dog2>().toEqualTypeOf<
638
- | (Loaded<typeof Dog> & {
639
- $onError: never; // TODO: Clean the $onError from the type
640
- })
641
- | null
642
- >();
662
+ expectTypeOf<typeof loadedPerson.dog2>().branded.toEqualTypeOf<Loaded<
663
+ typeof Dog
664
+ > | null>();
643
665
  });
644
666
 
645
667
  test("loading a map with a nullable field", async () => {
@@ -659,13 +681,13 @@ describe("CoMap resolution", async () => {
659
681
  dog: Dog.create({ name: "Rex", breed: "Labrador" }),
660
682
  });
661
683
 
662
- const loadedPerson = await Person.load(person.id);
684
+ const loadedPerson = await Person.load(person.$jazz.id);
663
685
 
664
686
  expectTypeOf(loadedPerson!).toEqualTypeOf<
665
687
  {
666
- name: string;
667
- age: number | null;
668
- dog: Loaded<typeof Dog> | null;
688
+ readonly name: string;
689
+ readonly age: number | null;
690
+ readonly dog: Loaded<typeof Dog> | null;
669
691
  } & CoMap
670
692
  >();
671
693
  });