jazz-tools 0.13.31 → 0.14.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 (166) hide show
  1. package/.turbo/turbo-build.log +8 -8
  2. package/CHANGELOG.md +14 -3
  3. package/dist/auth/DemoAuth.d.ts.map +1 -1
  4. package/dist/auth/PassphraseAuth.d.ts +1 -3
  5. package/dist/auth/PassphraseAuth.d.ts.map +1 -1
  6. package/dist/{chunk-IJU4XPFS.js → chunk-2ASOGEYA.js} +3535 -3291
  7. package/dist/chunk-2ASOGEYA.js.map +1 -0
  8. package/dist/coValues/CoValueBase.d.ts +22 -0
  9. package/dist/coValues/CoValueBase.d.ts.map +1 -0
  10. package/dist/coValues/account.d.ts +12 -12
  11. package/dist/coValues/account.d.ts.map +1 -1
  12. package/dist/coValues/coFeed.d.ts +24 -25
  13. package/dist/coValues/coFeed.d.ts.map +1 -1
  14. package/dist/coValues/coList.d.ts +10 -13
  15. package/dist/coValues/coList.d.ts.map +1 -1
  16. package/dist/coValues/coMap.d.ts +32 -35
  17. package/dist/coValues/coMap.d.ts.map +1 -1
  18. package/dist/coValues/coPlainText.d.ts.map +1 -1
  19. package/dist/coValues/deepLoading.d.ts +17 -21
  20. package/dist/coValues/deepLoading.d.ts.map +1 -1
  21. package/dist/coValues/extensions/imageDef.d.ts +12 -11
  22. package/dist/coValues/extensions/imageDef.d.ts.map +1 -1
  23. package/dist/coValues/group.d.ts +5 -9
  24. package/dist/coValues/group.d.ts.map +1 -1
  25. package/dist/coValues/inbox.d.ts +2 -3
  26. package/dist/coValues/inbox.d.ts.map +1 -1
  27. package/dist/coValues/interfaces.d.ts +8 -34
  28. package/dist/coValues/interfaces.d.ts.map +1 -1
  29. package/dist/coValues/profile.d.ts +4 -14
  30. package/dist/coValues/profile.d.ts.map +1 -1
  31. package/dist/coValues/registeredSchemas.d.ts +1 -3
  32. package/dist/coValues/registeredSchemas.d.ts.map +1 -1
  33. package/dist/coValues/schemaUnion.d.ts +6 -6
  34. package/dist/exports.d.ts +12 -16
  35. package/dist/exports.d.ts.map +1 -1
  36. package/dist/implementation/ContextManager.d.ts +1 -1
  37. package/dist/implementation/ContextManager.d.ts.map +1 -1
  38. package/dist/implementation/activeAccountContext.d.ts +1 -1
  39. package/dist/implementation/activeAccountContext.d.ts.map +1 -1
  40. package/dist/implementation/createContext.d.ts +10 -10
  41. package/dist/implementation/createContext.d.ts.map +1 -1
  42. package/dist/implementation/invites.d.ts +6 -6
  43. package/dist/implementation/invites.d.ts.map +1 -1
  44. package/dist/implementation/refs.d.ts +2 -2
  45. package/dist/implementation/refs.d.ts.map +1 -1
  46. package/dist/implementation/schema.d.ts +21 -28
  47. package/dist/implementation/schema.d.ts.map +1 -1
  48. package/dist/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts +9 -0
  49. package/dist/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts.map +1 -0
  50. package/dist/implementation/zodSchema/runtimeConverters/zodSchemaToCoSchema.d.ts +28 -0
  51. package/dist/implementation/zodSchema/runtimeConverters/zodSchemaToCoSchema.d.ts.map +1 -0
  52. package/dist/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +65 -0
  53. package/dist/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -0
  54. package/dist/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +28 -0
  55. package/dist/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -0
  56. package/dist/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +24 -0
  57. package/dist/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -0
  58. package/dist/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +41 -0
  59. package/dist/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -0
  60. package/dist/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +35 -0
  61. package/dist/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -0
  62. package/dist/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +9 -0
  63. package/dist/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -0
  64. package/dist/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +20 -0
  65. package/dist/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -0
  66. package/dist/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +18 -0
  67. package/dist/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -0
  68. package/dist/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts +24 -0
  69. package/dist/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +1 -0
  70. package/dist/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts +21 -0
  71. package/dist/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts.map +1 -0
  72. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts +29 -0
  73. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +1 -0
  74. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts +29 -0
  75. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +1 -0
  76. package/dist/implementation/zodSchema/unionUtils.d.ts +6 -0
  77. package/dist/implementation/zodSchema/unionUtils.d.ts.map +1 -0
  78. package/dist/implementation/zodSchema/zodCo.d.ts +35 -0
  79. package/dist/implementation/zodSchema/zodCo.d.ts.map +1 -0
  80. package/dist/implementation/zodSchema/zodSchema.d.ts +38 -0
  81. package/dist/implementation/zodSchema/zodSchema.d.ts.map +1 -0
  82. package/dist/index.js +295 -10
  83. package/dist/index.js.map +1 -1
  84. package/dist/internal.d.ts +34 -0
  85. package/dist/internal.d.ts.map +1 -1
  86. package/dist/subscribe/SubscriptionScope.d.ts +1 -2
  87. package/dist/subscribe/SubscriptionScope.d.ts.map +1 -1
  88. package/dist/subscribe/utils.d.ts +2 -2
  89. package/dist/subscribe/utils.d.ts.map +1 -1
  90. package/dist/testing.d.ts +10 -8
  91. package/dist/testing.d.ts.map +1 -1
  92. package/dist/testing.js +1 -1
  93. package/dist/testing.js.map +1 -1
  94. package/dist/tests/utils.d.ts +6 -2
  95. package/dist/tests/utils.d.ts.map +1 -1
  96. package/dist/types.d.ts +1 -7
  97. package/dist/types.d.ts.map +1 -1
  98. package/package.json +3 -2
  99. package/src/auth/DemoAuth.ts +1 -2
  100. package/src/auth/PassphraseAuth.ts +1 -1
  101. package/src/coValues/CoValueBase.ts +83 -0
  102. package/src/coValues/account.ts +53 -43
  103. package/src/coValues/coFeed.ts +65 -83
  104. package/src/coValues/coList.ts +28 -21
  105. package/src/coValues/coMap.ts +54 -38
  106. package/src/coValues/coPlainText.ts +4 -1
  107. package/src/coValues/deepLoading.ts +35 -43
  108. package/src/coValues/extensions/imageDef.ts +21 -19
  109. package/src/coValues/group.ts +37 -38
  110. package/src/coValues/inbox.ts +24 -11
  111. package/src/coValues/interfaces.ts +29 -93
  112. package/src/coValues/profile.ts +12 -13
  113. package/src/coValues/registeredSchemas.ts +1 -3
  114. package/src/coValues/schemaUnion.ts +6 -6
  115. package/src/exports.ts +47 -25
  116. package/src/implementation/activeAccountContext.ts +1 -1
  117. package/src/implementation/createContext.ts +39 -24
  118. package/src/implementation/invites.ts +15 -12
  119. package/src/implementation/refs.ts +6 -4
  120. package/src/implementation/schema.ts +22 -34
  121. package/src/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.ts +101 -0
  122. package/src/implementation/zodSchema/runtimeConverters/zodSchemaToCoSchema.ts +191 -0
  123. package/src/implementation/zodSchema/schemaTypes/AccountSchema.ts +102 -0
  124. package/src/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +70 -0
  125. package/src/implementation/zodSchema/schemaTypes/CoListSchema.ts +59 -0
  126. package/src/implementation/zodSchema/schemaTypes/CoMapSchema.ts +126 -0
  127. package/src/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +98 -0
  128. package/src/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +9 -0
  129. package/src/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +27 -0
  130. package/src/implementation/zodSchema/schemaTypes/RichTextSchema.ts +25 -0
  131. package/src/implementation/zodSchema/typeConverters/InstanceOfSchema.ts +61 -0
  132. package/src/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.ts +77 -0
  133. package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts +90 -0
  134. package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts +103 -0
  135. package/src/implementation/zodSchema/unionUtils.ts +139 -0
  136. package/src/implementation/zodSchema/zodCo.ts +409 -0
  137. package/src/implementation/zodSchema/zodSchema.ts +116 -0
  138. package/src/internal.ts +38 -0
  139. package/src/subscribe/SubscriptionScope.ts +3 -1
  140. package/src/subscribe/utils.ts +7 -2
  141. package/src/testing.ts +14 -16
  142. package/src/tests/ContextManager.test.ts +73 -47
  143. package/src/tests/DemoAuth.test.ts +1 -1
  144. package/src/tests/account.test.ts +6 -9
  145. package/src/tests/coFeed.test.ts +102 -63
  146. package/src/tests/coList.test.ts +82 -95
  147. package/src/tests/coMap.record.test.ts +53 -87
  148. package/src/tests/coMap.test.ts +297 -312
  149. package/src/tests/coPlainText.test.ts +19 -39
  150. package/src/tests/createContext.test.ts +33 -15
  151. package/src/tests/deepLoading.test.ts +196 -179
  152. package/src/tests/groupsAndAccounts.test.ts +81 -72
  153. package/src/tests/imageDef.test.ts +22 -13
  154. package/src/tests/inbox.test.ts +36 -29
  155. package/src/tests/load.test.ts +10 -10
  156. package/src/tests/patterns/requestToJoin.test.ts +31 -31
  157. package/src/tests/schema.test.ts +37 -38
  158. package/src/tests/schemaUnion.test.ts +54 -64
  159. package/src/tests/subscribe.test.ts +118 -116
  160. package/src/tests/testing.test.ts +33 -33
  161. package/src/tests/utils.ts +3 -2
  162. package/src/types.ts +1 -8
  163. package/dist/chunk-IJU4XPFS.js.map +0 -1
  164. package/dist/tests/deepLoading.test-d.d.ts +0 -2
  165. package/dist/tests/deepLoading.test-d.d.ts.map +0 -1
  166. package/src/tests/deepLoading.test-d.ts +0 -393
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=deepLoading.test-d.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"deepLoading.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/deepLoading.test-d.ts"],"names":[],"mappings":""}
@@ -1,393 +0,0 @@
1
- import { cojsonInternals } from "cojson";
2
- import { WasmCrypto } from "cojson/crypto/WasmCrypto";
3
- import { assert, describe, expect, expectTypeOf, test, vi } from "vitest";
4
- import {
5
- Account,
6
- CoFeed,
7
- CoList,
8
- CoMap,
9
- Group,
10
- ID,
11
- Profile,
12
- SessionID,
13
- co,
14
- createJazzContextFromExistingCredentials,
15
- isControlledAccount,
16
- } from "../index.js";
17
- import { randomSessionProvider } from "../internal.js";
18
- import { createJazzTestAccount } from "../testing.js";
19
-
20
- const Crypto = await WasmCrypto.create();
21
- const { connectedPeers } = cojsonInternals;
22
-
23
- class TestMap extends CoMap {
24
- list = co.ref(TestList);
25
- optionalRef = co.ref(InnermostMap, { optional: true });
26
- }
27
-
28
- class TestList extends CoList.Of(co.ref(() => InnerMap)) {}
29
-
30
- class InnerMap extends CoMap {
31
- stream = co.ref(TestStream);
32
- }
33
-
34
- class TestStream extends CoFeed.Of(co.ref(() => InnermostMap)) {}
35
-
36
- class InnermostMap extends CoMap {
37
- value = co.string;
38
- }
39
-
40
- const me = await createJazzTestAccount({});
41
- const map = TestMap.create({
42
- list: TestList.create([], { owner: me }),
43
- });
44
-
45
- describe("Deep loading with depth arg", async () => {
46
- test("load without resolve", async () => {
47
- const map1 = await TestMap.load(map.id);
48
-
49
- function validateType(map: TestMap | null) {
50
- map;
51
- }
52
-
53
- validateType(map1);
54
- });
55
-
56
- test("load with resolve { list: true }", async () => {
57
- const map2 = await TestMap.load(map.id, {
58
- resolve: { list: true },
59
- });
60
- expectTypeOf(map2).toEqualTypeOf<
61
- | (TestMap & {
62
- list: TestList;
63
- })
64
- | null
65
- >();
66
- });
67
-
68
- test("load with resolve { list: { $each: true } }", async () => {
69
- const map3 = await TestMap.load(map.id, {
70
- resolve: { list: { $each: true } },
71
- });
72
- expectTypeOf(map3).toEqualTypeOf<
73
- | (TestMap & {
74
- list: TestList & InnerMap[];
75
- })
76
- | null
77
- >();
78
- });
79
-
80
- test("load with resolve { optionalRef: true }", async () => {
81
- const map3a = await TestMap.load(map.id, {
82
- resolve: { optionalRef: true } as const,
83
- });
84
- expectTypeOf(map3a).toEqualTypeOf<
85
- | (TestMap & {
86
- optionalRef: InnermostMap | undefined;
87
- })
88
- | null
89
- >();
90
- });
91
-
92
- test("load with resolve { list: { $each: { stream: true } } }", async () => {
93
- const map4 = await TestMap.load(map.id, {
94
- resolve: { list: { $each: { stream: true } } },
95
- });
96
- expectTypeOf(map4).toEqualTypeOf<
97
- | (TestMap & {
98
- list: TestList & (InnerMap & { stream: TestStream })[];
99
- })
100
- | null
101
- >();
102
- });
103
-
104
- test("load with resolve { list: { $each: { stream: { $each: true } } } }", async () => {
105
- const map5 = await TestMap.load(map.id, {
106
- resolve: { list: { $each: { stream: { $each: true } } } },
107
- });
108
- type ExpectedMap5 =
109
- | (TestMap & {
110
- list: TestList &
111
- (InnerMap & {
112
- stream: TestStream & {
113
- byMe?: { value: InnermostMap };
114
- inCurrentSession?: { value: InnermostMap };
115
- perSession: {
116
- [sessionID: SessionID]: {
117
- value: InnermostMap;
118
- };
119
- };
120
- } & {
121
- [key: ID<Account>]: { value: InnermostMap };
122
- };
123
- })[];
124
- })
125
- | null;
126
- expectTypeOf(map5).toEqualTypeOf<ExpectedMap5>();
127
- });
128
-
129
- test("should handle $onError on CoList items", async () => {
130
- class List extends CoList.Of(co.ref(() => InnerMap)) {}
131
-
132
- const result = await List.load("x" as ID<List>, {
133
- resolve: { $each: { $onError: null } },
134
- });
135
- function validateType(map: ((InnerMap | null)[] & List) | null) {
136
- map;
137
- }
138
-
139
- validateType(result);
140
- expectTypeOf(result).toEqualTypeOf<((InnerMap | null)[] & List) | null>();
141
- });
142
-
143
- test("should handle $onError on a child CoList", async () => {
144
- class InnerMap extends CoMap {
145
- value = co.string;
146
- }
147
- class List extends CoList.Of(co.ref(InnerMap)) {}
148
- class MyMap extends CoMap {
149
- list = co.ref(List);
150
- }
151
-
152
- const result = await MyMap.load("x" as ID<MyMap>, {
153
- resolve: { list: { $each: { $onError: null } } },
154
- });
155
-
156
- function validateType(map: (InnerMap | null)[] & List) {
157
- map;
158
- }
159
-
160
- assert(result);
161
-
162
- validateType(result.list);
163
- });
164
-
165
- test("should handle $onError on CoMap.Record", async () => {
166
- class Record extends CoMap.Record(co.ref(() => InnerMap)) {}
167
-
168
- const result = await Record.load("x" as ID<Record>, {
169
- resolve: { $each: { $onError: null } },
170
- });
171
-
172
- type ExpectedResult =
173
- | ({
174
- [key: string]: InnerMap | null;
175
- } & Record)
176
- | null;
177
-
178
- function validateType(map: ExpectedResult) {
179
- map;
180
- }
181
-
182
- validateType(result);
183
- expectTypeOf(result).toEqualTypeOf<ExpectedResult>();
184
- });
185
-
186
- test("should handle $onError on a child CoMap.Record", async () => {
187
- class Record extends CoMap.Record(co.ref(() => InnerMap)) {}
188
- class MyMap extends CoMap {
189
- record = co.ref(Record);
190
- }
191
-
192
- const result = await MyMap.load("x" as ID<MyMap>, {
193
- resolve: { record: { $each: { $onError: null } } },
194
- });
195
-
196
- type ExpectedResult = {
197
- [key: string]: InnerMap | null;
198
- } & Record &
199
- co<Record | null>;
200
-
201
- function validateType(map: ExpectedResult) {
202
- map;
203
- }
204
-
205
- assert(result);
206
-
207
- validateType(result.record);
208
- expectTypeOf(result.record).toEqualTypeOf<ExpectedResult>();
209
- });
210
-
211
- test("should handle $onError on a ref", async () => {
212
- class Person extends CoMap {
213
- name = co.string;
214
- dog = co.ref(Dog);
215
- }
216
-
217
- class Dog extends CoMap {
218
- name = co.string;
219
- }
220
-
221
- const result = await Person.load("x" as ID<Person>, {
222
- resolve: { dog: { $onError: null } },
223
- });
224
-
225
- type ExpectedResult =
226
- | (Person & {
227
- dog: Dog | null;
228
- })
229
- | null;
230
-
231
- function validateType(map: ExpectedResult) {
232
- map;
233
- }
234
-
235
- validateType(result);
236
- expectTypeOf(result).toEqualTypeOf<ExpectedResult>();
237
- });
238
- });
239
-
240
- class CustomProfile extends Profile {
241
- stream = co.ref(TestStream);
242
- }
243
-
244
- class CustomAccount extends Account {
245
- profile = co.ref(CustomProfile);
246
- root = co.ref(TestMap);
247
-
248
- async migrate(
249
- this: CustomAccount,
250
- creationProps?: { name: string } | undefined,
251
- ) {
252
- if (creationProps) {
253
- const profileGroup = Group.create(this);
254
- this.profile = CustomProfile.create(
255
- {
256
- name: creationProps.name,
257
- stream: TestStream.create([], this),
258
- },
259
- profileGroup,
260
- );
261
- this.root = TestMap.create({ list: TestList.create([], this) }, this);
262
- }
263
-
264
- const thisLoaded = await this.ensureLoaded({
265
- resolve: {
266
- profile: { stream: true },
267
- root: { list: true },
268
- },
269
- });
270
- expectTypeOf(thisLoaded).toEqualTypeOf<
271
- CustomAccount & {
272
- profile: CustomProfile & {
273
- stream: TestStream;
274
- };
275
- root: TestMap & {
276
- list: TestList;
277
- };
278
- }
279
- >();
280
- }
281
- }
282
-
283
- test("Deep loading within account", async () => {
284
- const me = await CustomAccount.create({
285
- creationProps: { name: "Hermes Puggington" },
286
- crypto: Crypto,
287
- });
288
-
289
- const meLoaded = await me.ensureLoaded({
290
- resolve: {
291
- profile: { stream: true },
292
- root: { list: true },
293
- },
294
- });
295
- expectTypeOf(meLoaded).toEqualTypeOf<
296
- CustomAccount & {
297
- profile: CustomProfile & {
298
- stream: TestStream;
299
- };
300
- root: TestMap & {
301
- list: TestList;
302
- };
303
- }
304
- >();
305
- });
306
-
307
- class RecordLike extends CoMap.Record(co.ref(TestMap)) {}
308
-
309
- test("Deep loading a record-like coMap", async () => {
310
- const me = await Account.create({
311
- creationProps: { name: "Hermes Puggington" },
312
- crypto: Crypto,
313
- });
314
-
315
- const [initialAsPeer, secondPeer] = connectedPeers("initial", "second", {
316
- peer1role: "server",
317
- peer2role: "client",
318
- });
319
-
320
- if (!isControlledAccount(me)) {
321
- throw "me is not a controlled account";
322
- }
323
-
324
- me._raw.core.node.syncManager.addPeer(secondPeer);
325
- const { account: meOnSecondPeer } =
326
- await createJazzContextFromExistingCredentials({
327
- credentials: {
328
- accountID: me.id,
329
- secret: me._raw.core.node.agentSecret,
330
- },
331
- sessionProvider: randomSessionProvider,
332
- peersToLoadFrom: [initialAsPeer],
333
- crypto: Crypto,
334
- });
335
-
336
- const record = RecordLike.create(
337
- {
338
- key1: TestMap.create(
339
- { list: TestList.create([], { owner: me }) },
340
- { owner: me },
341
- ),
342
- key2: TestMap.create(
343
- { list: TestList.create([], { owner: me }) },
344
- { owner: me },
345
- ),
346
- },
347
- { owner: me },
348
- );
349
-
350
- const recordLoaded = await RecordLike.load(record.id, {
351
- loadAs: meOnSecondPeer,
352
- resolve: {
353
- $each: { list: { $each: true } },
354
- },
355
- });
356
- expectTypeOf(recordLoaded).toEqualTypeOf<
357
- | (RecordLike & {
358
- [key: string]: TestMap & {
359
- list: TestList & InnerMap[];
360
- };
361
- })
362
- | null
363
- >();
364
- });
365
-
366
- test("The resolve type doesn't accept extra keys", async () => {
367
- const me = await CustomAccount.create({
368
- creationProps: { name: "Hermes Puggington" },
369
- crypto: Crypto,
370
- });
371
-
372
- const meLoaded = await me.ensureLoaded({
373
- resolve: {
374
- // @ts-expect-error
375
- profile: { stream: true, extraKey: true },
376
- // @ts-expect-error
377
- root: { list: true, extraKey: true },
378
- },
379
- });
380
-
381
- expectTypeOf(meLoaded).toEqualTypeOf<
382
- CustomAccount & {
383
- profile: CustomProfile & {
384
- stream: TestStream;
385
- extraKey: never;
386
- };
387
- root: TestMap & {
388
- list: TestList;
389
- extraKey: never;
390
- };
391
- }
392
- >();
393
- });