jazz-tools 0.13.0 → 0.13.3
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.
- package/.turbo/turbo-build.log +5 -5
- package/CHANGELOG.md +14 -0
- package/dist/{chunk-FKK4CPZZ.js → chunk-YZW2QELD.js} +90 -42
- package/dist/chunk-YZW2QELD.js.map +1 -0
- package/dist/coValues/deepLoading.d.ts +8 -2
- package/dist/coValues/deepLoading.d.ts.map +1 -1
- package/dist/coValues/interfaces.d.ts +1 -1
- package/dist/coValues/interfaces.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/testing.js +1 -1
- package/package.json +2 -2
- package/src/coValues/deepLoading.ts +89 -39
- package/src/coValues/interfaces.ts +17 -5
- package/src/tests/deepLoading.test.ts +104 -4
- package/vitest.config.ts +10 -0
- package/dist/chunk-FKK4CPZZ.js.map +0 -1
@@ -1,10 +1,16 @@
|
|
1
|
-
import { SessionID } from "cojson";
|
1
|
+
import { JsonValue, SessionID } from "cojson";
|
2
2
|
import { ItemsSym, UnCo } from "../internal.js";
|
3
3
|
import { type Account } from "./account.js";
|
4
4
|
import { CoFeedEntry } from "./coFeed.js";
|
5
5
|
import { type CoKeys } from "./coMap.js";
|
6
6
|
import { type CoValue, type ID } from "./interfaces.js";
|
7
|
-
type FulfillsDepthResult =
|
7
|
+
type FulfillsDepthResult = {
|
8
|
+
status: "fulfilled" | "unfulfilled";
|
9
|
+
} | {
|
10
|
+
status: "unauthorized";
|
11
|
+
path: string[];
|
12
|
+
id: JsonValue;
|
13
|
+
};
|
8
14
|
export declare function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult;
|
9
15
|
type UnCoNotNull<T> = UnCo<Exclude<T, null>>;
|
10
16
|
export type Clean<T> = UnCo<NonNullable<T>>;
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../src/coValues/deepLoading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;
|
1
|
+
{"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../src/coValues/deepLoading.ts"],"names":[],"mappings":"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"}
|
@@ -93,7 +93,7 @@ export declare function subscribeToCoValue<V extends CoValue, const R extends Re
|
|
93
93
|
resolve?: RefsToResolveStrict<V, R>;
|
94
94
|
loadAs: Account | AnonymousJazzAgent;
|
95
95
|
onUnavailable?: () => void;
|
96
|
-
onUnauthorized?: () => void;
|
96
|
+
onUnauthorized?: (errorPath: string[]) => void;
|
97
97
|
syncResolution?: boolean;
|
98
98
|
}, listener: SubscribeListener<V, R>): () => void;
|
99
99
|
export declare function createCoValueObservable<V extends CoValue, const R extends RefsToResolve<V>>(initialValue?: undefined | null): {
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/coValues/interfaces.ts"],"names":[],"mappings":"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
|
1
|
+
{"version":3,"file":"interfaces.d.ts","sourceRoot":"","sources":["../../src/coValues/interfaces.ts"],"names":[],"mappings":"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"}
|
package/dist/index.js
CHANGED
package/dist/testing.js
CHANGED
package/package.json
CHANGED
@@ -17,11 +17,11 @@
|
|
17
17
|
},
|
18
18
|
"type": "module",
|
19
19
|
"license": "MIT",
|
20
|
-
"version": "0.13.
|
20
|
+
"version": "0.13.3",
|
21
21
|
"dependencies": {
|
22
22
|
"@scure/bip39": "^1.3.0",
|
23
23
|
"fast-myers-diff": "^3.2.0",
|
24
|
-
"cojson": "0.13.
|
24
|
+
"cojson": "0.13.2"
|
25
25
|
},
|
26
26
|
"devDependencies": {
|
27
27
|
"tsup": "8.3.5",
|
@@ -1,4 +1,4 @@
|
|
1
|
-
import { SessionID } from "cojson";
|
1
|
+
import { JsonValue, RawCoList, SessionID } from "cojson";
|
2
2
|
import { ItemsSym, type Ref, RefEncoded, UnCo } from "../internal.js";
|
3
3
|
import { type Account } from "./account.js";
|
4
4
|
import { type CoFeed, CoFeedEntry } from "./coFeed.js";
|
@@ -32,12 +32,22 @@ function isOptionalField(value: CoValue, key: string): boolean {
|
|
32
32
|
);
|
33
33
|
}
|
34
34
|
|
35
|
-
type FulfillsDepthResult =
|
35
|
+
type FulfillsDepthResult =
|
36
|
+
| {
|
37
|
+
status: "fulfilled" | "unfulfilled";
|
38
|
+
}
|
39
|
+
| {
|
40
|
+
status: "unauthorized";
|
41
|
+
path: string[];
|
42
|
+
id: JsonValue;
|
43
|
+
};
|
36
44
|
|
37
45
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
38
46
|
export function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult {
|
39
47
|
if (depth === true || depth === undefined) {
|
40
|
-
return
|
48
|
+
return {
|
49
|
+
status: "fulfilled",
|
50
|
+
};
|
41
51
|
}
|
42
52
|
|
43
53
|
if (
|
@@ -48,40 +58,52 @@ export function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult {
|
|
48
58
|
const map = value as CoMap;
|
49
59
|
|
50
60
|
if ("$each" in depth) {
|
51
|
-
|
61
|
+
const result: FulfillsDepthResult = { status: "fulfilled" };
|
52
62
|
|
53
63
|
for (const [key, item] of Object.entries(value)) {
|
54
|
-
|
64
|
+
const rawValue = map._raw.get(key);
|
65
|
+
|
66
|
+
if (rawValue !== undefined) {
|
55
67
|
if (!item) {
|
56
68
|
if (hasReadAccess(map, key)) {
|
57
|
-
result = "unfulfilled";
|
69
|
+
result.status = "unfulfilled";
|
58
70
|
continue;
|
59
71
|
} else {
|
60
|
-
return
|
72
|
+
return {
|
73
|
+
status: "unauthorized",
|
74
|
+
path: [key],
|
75
|
+
id: rawValue,
|
76
|
+
};
|
61
77
|
}
|
62
78
|
}
|
63
79
|
|
64
80
|
const innerResult = fulfillsDepth(depth.$each, item);
|
65
81
|
|
66
|
-
if (innerResult === "unfulfilled") {
|
67
|
-
result = "unfulfilled";
|
82
|
+
if (innerResult.status === "unfulfilled") {
|
83
|
+
result.status = "unfulfilled";
|
68
84
|
} else if (
|
69
|
-
innerResult === "unauthorized" &&
|
85
|
+
innerResult.status === "unauthorized" &&
|
70
86
|
!isOptionalField(value, ItemsSym)
|
71
87
|
) {
|
72
|
-
|
88
|
+
innerResult.path.unshift(key);
|
89
|
+
|
90
|
+
return innerResult; // If any item is unauthorized, the whole thing is unauthorized
|
73
91
|
}
|
74
92
|
} else if (!isOptionalField(value, ItemsSym)) {
|
75
|
-
return
|
93
|
+
return {
|
94
|
+
status: "unfulfilled",
|
95
|
+
};
|
76
96
|
}
|
77
97
|
}
|
78
98
|
|
79
99
|
return result;
|
80
100
|
} else {
|
81
|
-
|
101
|
+
const result: FulfillsDepthResult = { status: "fulfilled" };
|
82
102
|
|
83
103
|
for (const key of Object.keys(depth)) {
|
84
|
-
|
104
|
+
const rawValue = map._raw.get(key);
|
105
|
+
|
106
|
+
if (rawValue === undefined || rawValue === null) {
|
85
107
|
if (!map._schema?.[key]) {
|
86
108
|
// Field not defined in schema
|
87
109
|
if (map._schema?.[ItemsSym]) {
|
@@ -113,22 +135,28 @@ export function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult {
|
|
113
135
|
|
114
136
|
if (!item) {
|
115
137
|
if (hasReadAccess(map, key)) {
|
116
|
-
result = "unfulfilled";
|
138
|
+
result.status = "unfulfilled";
|
117
139
|
continue;
|
118
140
|
} else {
|
119
|
-
return
|
141
|
+
return {
|
142
|
+
status: "unauthorized",
|
143
|
+
path: [key],
|
144
|
+
id: rawValue,
|
145
|
+
};
|
120
146
|
}
|
121
147
|
}
|
122
148
|
|
123
149
|
const innerResult = fulfillsDepth(depth[key], item);
|
124
150
|
|
125
|
-
if (innerResult === "unfulfilled") {
|
126
|
-
result = "unfulfilled";
|
151
|
+
if (innerResult.status === "unfulfilled") {
|
152
|
+
result.status = "unfulfilled";
|
127
153
|
} else if (
|
128
|
-
innerResult === "unauthorized" &&
|
154
|
+
innerResult.status === "unauthorized" &&
|
129
155
|
!isOptionalField(value, key)
|
130
156
|
) {
|
131
|
-
|
157
|
+
innerResult.path.unshift(key);
|
158
|
+
|
159
|
+
return innerResult; // If any item is unauthorized, the whole thing is unauthorized
|
132
160
|
}
|
133
161
|
}
|
134
162
|
}
|
@@ -137,77 +165,99 @@ export function fulfillsDepth(depth: any, value: CoValue): FulfillsDepthResult {
|
|
137
165
|
}
|
138
166
|
} else if (value._type === "CoList") {
|
139
167
|
if ("$each" in depth) {
|
140
|
-
|
168
|
+
const result: FulfillsDepthResult = { status: "fulfilled" };
|
141
169
|
|
142
170
|
for (const [key, item] of (value as CoList).entries()) {
|
143
171
|
if (hasRefValue(value, key)) {
|
144
172
|
if (!item) {
|
145
173
|
if (hasReadAccess(value, key)) {
|
146
|
-
result = "unfulfilled";
|
174
|
+
result.status = "unfulfilled";
|
147
175
|
continue;
|
148
176
|
} else {
|
149
|
-
return
|
177
|
+
return {
|
178
|
+
status: "unauthorized",
|
179
|
+
path: [key.toString()],
|
180
|
+
id: (value._raw as RawCoList).get(key) ?? "undefined",
|
181
|
+
};
|
150
182
|
}
|
151
183
|
}
|
152
184
|
|
153
185
|
const innerResult = fulfillsDepth(depth.$each, item);
|
154
186
|
|
155
|
-
if (innerResult === "unfulfilled") {
|
156
|
-
result = "unfulfilled";
|
187
|
+
if (innerResult.status === "unfulfilled") {
|
188
|
+
result.status = "unfulfilled";
|
157
189
|
} else if (
|
158
|
-
innerResult === "unauthorized" &&
|
190
|
+
innerResult.status === "unauthorized" &&
|
159
191
|
!isOptionalField(value, ItemsSym)
|
160
192
|
) {
|
161
|
-
|
193
|
+
innerResult.path.unshift(key.toString());
|
194
|
+
|
195
|
+
return innerResult; // If any item is unauthorized, the whole thing is unauthorized
|
162
196
|
}
|
163
197
|
} else if (!isOptionalField(value, ItemsSym)) {
|
164
|
-
return
|
198
|
+
return {
|
199
|
+
status: "unfulfilled",
|
200
|
+
};
|
165
201
|
}
|
166
202
|
}
|
167
203
|
|
168
204
|
return result;
|
169
205
|
}
|
170
206
|
|
171
|
-
return
|
207
|
+
return {
|
208
|
+
status: "fulfilled",
|
209
|
+
};
|
172
210
|
} else if (value._type === "CoStream") {
|
173
211
|
if ("$each" in depth) {
|
174
|
-
|
212
|
+
const result: FulfillsDepthResult = { status: "fulfilled" };
|
175
213
|
|
176
214
|
for (const item of Object.values((value as CoFeed).perSession)) {
|
177
215
|
if (item.ref) {
|
178
216
|
if (!item.value) {
|
179
217
|
if (item.ref.hasReadAccess()) {
|
180
|
-
result = "unfulfilled";
|
218
|
+
result.status = "unfulfilled";
|
181
219
|
continue;
|
182
220
|
} else {
|
183
|
-
return
|
221
|
+
return {
|
222
|
+
status: "unauthorized",
|
223
|
+
path: [item.ref.id],
|
224
|
+
id: item.ref.id,
|
225
|
+
};
|
184
226
|
}
|
185
227
|
}
|
186
228
|
|
187
229
|
const innerResult = fulfillsDepth(depth.$each, item.value);
|
188
230
|
|
189
|
-
if (innerResult === "unfulfilled") {
|
190
|
-
result = "unfulfilled";
|
231
|
+
if (innerResult.status === "unfulfilled") {
|
232
|
+
result.status = "unfulfilled";
|
191
233
|
} else if (
|
192
|
-
innerResult === "unauthorized" &&
|
234
|
+
innerResult.status === "unauthorized" &&
|
193
235
|
!isOptionalField(value, ItemsSym)
|
194
236
|
) {
|
195
|
-
|
237
|
+
innerResult.path.unshift(item.ref.id);
|
238
|
+
|
239
|
+
return innerResult; // If any item is unauthorized, the whole thing is unauthorized
|
196
240
|
}
|
197
241
|
} else if (!isOptionalField(value, ItemsSym)) {
|
198
|
-
return
|
242
|
+
return {
|
243
|
+
status: "unfulfilled",
|
244
|
+
};
|
199
245
|
}
|
200
246
|
}
|
201
247
|
|
202
248
|
return result;
|
203
249
|
}
|
204
250
|
|
205
|
-
return
|
251
|
+
return {
|
252
|
+
status: "fulfilled",
|
253
|
+
};
|
206
254
|
} else if (
|
207
255
|
value._type === "BinaryCoStream" ||
|
208
256
|
value._type === "CoPlainText"
|
209
257
|
) {
|
210
|
-
return
|
258
|
+
return {
|
259
|
+
status: "fulfilled",
|
260
|
+
};
|
211
261
|
} else {
|
212
262
|
console.error(value);
|
213
263
|
throw new Error("Unexpected value type: " + value._type);
|
@@ -317,7 +317,7 @@ export function subscribeToCoValue<
|
|
317
317
|
resolve?: RefsToResolveStrict<V, R>;
|
318
318
|
loadAs: Account | AnonymousJazzAgent;
|
319
319
|
onUnavailable?: () => void;
|
320
|
-
onUnauthorized?: () => void;
|
320
|
+
onUnauthorized?: (errorPath: string[]) => void;
|
321
321
|
syncResolution?: boolean;
|
322
322
|
},
|
323
323
|
listener: SubscribeListener<V, R>,
|
@@ -344,7 +344,11 @@ export function subscribeToCoValue<
|
|
344
344
|
if (subscription.syncResolution) return;
|
345
345
|
|
346
346
|
if (!ref.hasReadAccess()) {
|
347
|
-
|
347
|
+
console.error(
|
348
|
+
"Not enough permissions to load / subscribe to CoValue",
|
349
|
+
id,
|
350
|
+
);
|
351
|
+
options.onUnauthorized?.([]);
|
348
352
|
return;
|
349
353
|
}
|
350
354
|
|
@@ -365,12 +369,20 @@ export function subscribeToCoValue<
|
|
365
369
|
subscription.syncResolution = false;
|
366
370
|
}
|
367
371
|
|
368
|
-
if (result === "unauthorized") {
|
369
|
-
|
372
|
+
if (result.status === "unauthorized") {
|
373
|
+
console.error(
|
374
|
+
"Not enough permissions to load / subscribe to CoValue",
|
375
|
+
id,
|
376
|
+
"on path",
|
377
|
+
result.path.join("."),
|
378
|
+
"unaccessible value:",
|
379
|
+
result.id,
|
380
|
+
);
|
381
|
+
options.onUnauthorized?.(result.path);
|
370
382
|
return;
|
371
383
|
}
|
372
384
|
|
373
|
-
if (result === "fulfilled") {
|
385
|
+
if (result.status === "fulfilled") {
|
374
386
|
listener(update as Resolved<V, R>, subscription.unsubscribeAll);
|
375
387
|
}
|
376
388
|
},
|
@@ -392,14 +392,25 @@ describe("Deep loading with unauthorized account", async () => {
|
|
392
392
|
group.addMember(alice, "reader");
|
393
393
|
|
394
394
|
test("unaccessible root", async () => {
|
395
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
396
|
+
|
395
397
|
const map = TestMap.create({ list: TestList.create([], group) }, onlyBob);
|
396
398
|
|
397
399
|
const mapOnAlice = await TestMap.load(map.id, { loadAs: alice });
|
398
400
|
|
399
401
|
expect(mapOnAlice).toBe(null);
|
402
|
+
|
403
|
+
expect(errorSpy).toHaveBeenCalledWith(
|
404
|
+
"Not enough permissions to load / subscribe to CoValue",
|
405
|
+
map.id,
|
406
|
+
);
|
407
|
+
|
408
|
+
errorSpy.mockReset();
|
400
409
|
});
|
401
410
|
|
402
411
|
test("unaccessible list", async () => {
|
412
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
413
|
+
|
403
414
|
const map = TestMap.create({ list: TestList.create([], onlyBob) }, group);
|
404
415
|
|
405
416
|
const mapOnAlice = await TestMap.load(map.id, { loadAs: alice });
|
@@ -411,9 +422,22 @@ describe("Deep loading with unauthorized account", async () => {
|
|
411
422
|
});
|
412
423
|
|
413
424
|
expect(mapWithListOnAlice).toBe(null);
|
425
|
+
|
426
|
+
expect(errorSpy).toHaveBeenCalledWith(
|
427
|
+
"Not enough permissions to load / subscribe to CoValue",
|
428
|
+
map.id,
|
429
|
+
"on path",
|
430
|
+
"list",
|
431
|
+
"unaccessible value:",
|
432
|
+
map.list?.id,
|
433
|
+
);
|
434
|
+
|
435
|
+
errorSpy.mockReset();
|
414
436
|
});
|
415
437
|
|
416
438
|
test("unaccessible list element", async () => {
|
439
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
440
|
+
|
417
441
|
const map = TestMap.create(
|
418
442
|
{
|
419
443
|
list: TestList.create(
|
@@ -437,9 +461,22 @@ describe("Deep loading with unauthorized account", async () => {
|
|
437
461
|
});
|
438
462
|
|
439
463
|
expect(mapOnAlice).toBe(null);
|
464
|
+
|
465
|
+
expect(errorSpy).toHaveBeenCalledWith(
|
466
|
+
"Not enough permissions to load / subscribe to CoValue",
|
467
|
+
map.id,
|
468
|
+
"on path",
|
469
|
+
"list.0",
|
470
|
+
"unaccessible value:",
|
471
|
+
map.list?.[0]?.id,
|
472
|
+
);
|
473
|
+
|
474
|
+
errorSpy.mockReset();
|
440
475
|
});
|
441
476
|
|
442
477
|
test("unaccessible optional element", async () => {
|
478
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
479
|
+
|
443
480
|
const map = TestMap.create(
|
444
481
|
{
|
445
482
|
list: TestList.create([], group),
|
@@ -456,6 +493,17 @@ describe("Deep loading with unauthorized account", async () => {
|
|
456
493
|
|
457
494
|
expect(mapOnAlice?.optionalRef).toBe(undefined);
|
458
495
|
expect(mapOnAlice?.optionalRef?.value).toBe(undefined);
|
496
|
+
|
497
|
+
expect(errorSpy).toHaveBeenCalledWith(
|
498
|
+
"Not enough permissions to load / subscribe to CoValue",
|
499
|
+
map.id,
|
500
|
+
"on path",
|
501
|
+
"optionalRef",
|
502
|
+
"unaccessible value:",
|
503
|
+
map.optionalRef?.id,
|
504
|
+
);
|
505
|
+
|
506
|
+
errorSpy.mockReset();
|
459
507
|
});
|
460
508
|
|
461
509
|
test("unaccessible optional element via autoload", async () => {
|
@@ -485,6 +533,7 @@ describe("Deep loading with unauthorized account", async () => {
|
|
485
533
|
});
|
486
534
|
|
487
535
|
test("unaccessible stream", async () => {
|
536
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
488
537
|
const map = TestMap.create(
|
489
538
|
{
|
490
539
|
list: TestList.create(
|
@@ -508,19 +557,31 @@ describe("Deep loading with unauthorized account", async () => {
|
|
508
557
|
});
|
509
558
|
|
510
559
|
expect(mapOnAlice).toBe(null);
|
560
|
+
|
561
|
+
expect(errorSpy).toHaveBeenCalledWith(
|
562
|
+
"Not enough permissions to load / subscribe to CoValue",
|
563
|
+
map.id,
|
564
|
+
"on path",
|
565
|
+
"list.0.stream",
|
566
|
+
"unaccessible value:",
|
567
|
+
map.list?.[0]?.stream?.id,
|
568
|
+
);
|
569
|
+
|
570
|
+
errorSpy.mockReset();
|
511
571
|
});
|
512
572
|
|
513
573
|
test("unaccessible stream element", async () => {
|
574
|
+
const errorSpy = vi.spyOn(console, "error").mockImplementation(() => {});
|
575
|
+
|
576
|
+
const value = InnermostMap.create({ value: "hello" }, onlyBob);
|
577
|
+
|
514
578
|
const map = TestMap.create(
|
515
579
|
{
|
516
580
|
list: TestList.create(
|
517
581
|
[
|
518
582
|
InnerMap.create(
|
519
583
|
{
|
520
|
-
stream: TestStream.create(
|
521
|
-
[InnermostMap.create({ value: "hello" }, onlyBob)],
|
522
|
-
group,
|
523
|
-
),
|
584
|
+
stream: TestStream.create([value], group),
|
524
585
|
},
|
525
586
|
group,
|
526
587
|
),
|
@@ -537,6 +598,45 @@ describe("Deep loading with unauthorized account", async () => {
|
|
537
598
|
});
|
538
599
|
|
539
600
|
expect(mapOnAlice).toBe(null);
|
601
|
+
|
602
|
+
expect(errorSpy).toHaveBeenCalledWith(
|
603
|
+
"Not enough permissions to load / subscribe to CoValue",
|
604
|
+
map.id,
|
605
|
+
"on path",
|
606
|
+
"list.0.stream." + value.id,
|
607
|
+
"unaccessible value:",
|
608
|
+
value.id,
|
609
|
+
);
|
610
|
+
|
611
|
+
errorSpy.mockReset();
|
612
|
+
});
|
613
|
+
|
614
|
+
test("setting null via proxy", async () => {
|
615
|
+
class Lv1 extends CoMap {
|
616
|
+
lv2 = co.ref(Lv2);
|
617
|
+
}
|
618
|
+
|
619
|
+
class Lv2 extends CoMap {
|
620
|
+
lv3 = co.optional.ref(Lv3);
|
621
|
+
}
|
622
|
+
|
623
|
+
class Lv3 extends CoMap {
|
624
|
+
string = co.string;
|
625
|
+
}
|
626
|
+
|
627
|
+
const map = Lv1.create(
|
628
|
+
{ lv2: Lv2.create({ lv3: Lv3.create({ string: "hello" }, bob) }, bob) },
|
629
|
+
bob,
|
630
|
+
);
|
631
|
+
|
632
|
+
map.lv2!.lv3 = null;
|
633
|
+
|
634
|
+
const loadedMap = await Lv1.load(map.id, {
|
635
|
+
resolve: { lv2: { lv3: true } },
|
636
|
+
loadAs: bob,
|
637
|
+
});
|
638
|
+
|
639
|
+
expect(loadedMap?.id).toBe(map.id);
|
540
640
|
});
|
541
641
|
});
|
542
642
|
|