jazz-tools 0.18.38 → 0.19.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.
- package/.svelte-kit/__package__/jazz.class.svelte.d.ts +8 -8
- package/.svelte-kit/__package__/jazz.class.svelte.d.ts.map +1 -1
- package/.svelte-kit/__package__/jazz.class.svelte.js +39 -14
- package/.svelte-kit/__package__/media/image.svelte +6 -5
- package/.svelte-kit/__package__/media/image.svelte.d.ts.map +1 -1
- package/.svelte-kit/__package__/tests/AccountCoState.svelte.test-d.d.ts +2 -0
- package/.svelte-kit/__package__/tests/AccountCoState.svelte.test-d.d.ts.map +1 -0
- package/.svelte-kit/__package__/tests/AccountCoState.svelte.test-d.js +19 -0
- package/.svelte-kit/__package__/tests/CoState.svelte.test-d.d.ts +2 -0
- package/.svelte-kit/__package__/tests/CoState.svelte.test-d.d.ts.map +1 -0
- package/.svelte-kit/__package__/tests/CoState.svelte.test-d.js +16 -0
- package/.svelte-kit/__package__/tests/CoState.svelte.test.d.ts +2 -0
- package/.svelte-kit/__package__/tests/CoState.svelte.test.d.ts.map +1 -0
- package/.svelte-kit/__package__/tests/CoState.svelte.test.js +42 -0
- package/.svelte-kit/__package__/tests/TestCoStateWrapper.svelte +23 -0
- package/.svelte-kit/__package__/tests/TestCoStateWrapper.svelte.d.ts +12 -0
- package/.svelte-kit/__package__/tests/TestCoStateWrapper.svelte.d.ts.map +1 -0
- package/.turbo/turbo-build.log +57 -57
- package/CHANGELOG.md +22 -0
- package/dist/better-auth/database-adapter/index.js +14 -11
- package/dist/better-auth/database-adapter/index.js.map +1 -1
- package/dist/better-auth/database-adapter/repository/generic.d.ts +1 -1
- package/dist/better-auth/database-adapter/repository/generic.d.ts.map +1 -1
- package/dist/better-auth/database-adapter/repository/user.d.ts.map +1 -1
- package/dist/{chunk-OSQ7S47Q.js → chunk-P3YLNFN4.js} +504 -232
- package/dist/chunk-P3YLNFN4.js.map +1 -0
- package/dist/index.js +14 -6
- package/dist/index.js.map +1 -1
- package/dist/media/{chunk-K6GCHLQU.js → chunk-3LKBM3G3.js} +23 -15
- package/dist/media/chunk-3LKBM3G3.js.map +1 -0
- package/dist/media/create-image/browser.d.ts +2 -2
- package/dist/media/create-image/react-native.d.ts +2 -2
- package/dist/media/create-image/server.d.ts +2 -2
- package/dist/media/create-image-factory.d.ts +2 -2
- package/dist/media/index.browser.js +1 -1
- package/dist/media/index.js +1 -1
- package/dist/media/index.native.js +1 -1
- package/dist/media/index.server.js +1 -1
- package/dist/media/utils.d.ts.map +1 -1
- package/dist/react/hooks.d.ts +1 -1
- package/dist/react/hooks.d.ts.map +1 -1
- package/dist/react/index.d.ts +1 -1
- package/dist/react/index.d.ts.map +1 -1
- package/dist/react/index.js +31 -15
- package/dist/react/index.js.map +1 -1
- package/dist/react/media/image.d.ts.map +1 -1
- package/dist/react-core/hooks.d.ts +126 -224
- package/dist/react-core/hooks.d.ts.map +1 -1
- package/dist/react-core/index.js +65 -63
- package/dist/react-core/index.js.map +1 -1
- package/dist/react-core/subscription-provider.d.ts.map +1 -1
- package/dist/react-core/tests/createCoValueSubscriptionContext.test.d.ts +2 -0
- package/dist/react-core/tests/createCoValueSubscriptionContext.test.d.ts.map +1 -0
- package/dist/react-core/tests/useAccount.selector.test.d.ts +2 -0
- package/dist/react-core/tests/useAccount.selector.test.d.ts.map +1 -0
- package/dist/react-core/tests/useCoState.selector.test.d.ts +2 -0
- package/dist/react-core/tests/useCoState.selector.test.d.ts.map +1 -0
- package/dist/react-native-core/hooks.d.ts +1 -1
- package/dist/react-native-core/hooks.d.ts.map +1 -1
- package/dist/react-native-core/index.js +7 -5
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/react-native-core/media/image.d.ts.map +1 -1
- package/dist/svelte/jazz.class.svelte.d.ts +8 -8
- package/dist/svelte/jazz.class.svelte.d.ts.map +1 -1
- package/dist/svelte/jazz.class.svelte.js +39 -14
- package/dist/svelte/media/image.svelte +6 -5
- package/dist/svelte/media/image.svelte.d.ts.map +1 -1
- package/dist/svelte/tests/AccountCoState.svelte.test-d.d.ts +2 -0
- package/dist/svelte/tests/AccountCoState.svelte.test-d.d.ts.map +1 -0
- package/dist/svelte/tests/AccountCoState.svelte.test-d.js +19 -0
- package/dist/svelte/tests/CoState.svelte.test-d.d.ts +2 -0
- package/dist/svelte/tests/CoState.svelte.test-d.d.ts.map +1 -0
- package/dist/svelte/tests/CoState.svelte.test-d.js +16 -0
- package/dist/svelte/tests/CoState.svelte.test.d.ts +2 -0
- package/dist/svelte/tests/CoState.svelte.test.d.ts.map +1 -0
- package/dist/svelte/tests/CoState.svelte.test.js +42 -0
- package/dist/svelte/tests/TestCoStateWrapper.svelte +23 -0
- package/dist/svelte/tests/TestCoStateWrapper.svelte.d.ts +12 -0
- package/dist/svelte/tests/TestCoStateWrapper.svelte.d.ts.map +1 -0
- package/dist/testing.js +3 -1
- package/dist/testing.js.map +1 -1
- package/dist/tools/coValues/CoValueBase.d.ts +4 -1
- package/dist/tools/coValues/CoValueBase.d.ts.map +1 -1
- package/dist/tools/coValues/account.d.ts +6 -6
- package/dist/tools/coValues/account.d.ts.map +1 -1
- package/dist/tools/coValues/coFeed.d.ts +5 -5
- package/dist/tools/coValues/coFeed.d.ts.map +1 -1
- package/dist/tools/coValues/coList.d.ts +9 -8
- package/dist/tools/coValues/coList.d.ts.map +1 -1
- package/dist/tools/coValues/coMap.d.ts +17 -17
- package/dist/tools/coValues/coMap.d.ts.map +1 -1
- package/dist/tools/coValues/coPlainText.d.ts +3 -3
- package/dist/tools/coValues/coPlainText.d.ts.map +1 -1
- package/dist/tools/coValues/coVector.d.ts +3 -3
- package/dist/tools/coValues/coVector.d.ts.map +1 -1
- package/dist/tools/coValues/deepLoading.d.ts +66 -36
- package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
- package/dist/tools/coValues/extensions/imageDef.d.ts +1 -1
- package/dist/tools/coValues/extensions/imageDef.d.ts.map +1 -1
- package/dist/tools/coValues/group.d.ts +2 -2
- package/dist/tools/coValues/group.d.ts.map +1 -1
- package/dist/tools/coValues/inbox.d.ts.map +1 -1
- package/dist/tools/coValues/interfaces.d.ts +14 -6
- package/dist/tools/coValues/interfaces.d.ts.map +1 -1
- package/dist/tools/coValues/request.d.ts.map +1 -1
- package/dist/tools/coValues/schemaUnion.d.ts +2 -2
- package/dist/tools/coValues/schemaUnion.d.ts.map +1 -1
- package/dist/tools/exports.d.ts +3 -3
- package/dist/tools/exports.d.ts.map +1 -1
- package/dist/tools/implementation/refs.d.ts +3 -3
- package/dist/tools/implementation/refs.d.ts.map +1 -1
- package/dist/tools/implementation/schema.d.ts +2 -2
- package/dist/tools/implementation/schema.d.ts.map +1 -1
- package/dist/tools/implementation/schemaUtils.d.ts +8 -0
- package/dist/tools/implementation/schemaUtils.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts +33 -18
- package/dist/tools/implementation/zodSchema/schemaTypes/AccountSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts +5 -4
- package/dist/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +23 -12
- package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +29 -18
- package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +39 -22
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts +1 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +30 -19
- package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts +5 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoValueSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts +6 -5
- package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +3 -2
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts +3 -2
- package/dist/tools/implementation/zodSchema/schemaTypes/GroupSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +3 -2
- package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +3 -2
- package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts +3 -0
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.d.ts +22 -0
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesMaybeLoaded.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts +4 -0
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded.d.ts +9 -0
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/zodCo.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/zodSchema.d.ts +7 -6
- package/dist/tools/implementation/zodSchema/zodSchema.d.ts.map +1 -1
- package/dist/tools/internal.d.ts +3 -3
- package/dist/tools/internal.d.ts.map +1 -1
- package/dist/tools/lib/utils.d.ts +14 -0
- package/dist/tools/lib/utils.d.ts.map +1 -0
- package/dist/tools/lib/utils.test.d.ts +2 -0
- package/dist/tools/lib/utils.test.d.ts.map +1 -0
- package/dist/tools/subscribe/CoValueCoreSubscription.d.ts +3 -2
- package/dist/tools/subscribe/CoValueCoreSubscription.d.ts.map +1 -1
- package/dist/tools/subscribe/JazzError.d.ts +4 -3
- package/dist/tools/subscribe/JazzError.d.ts.map +1 -1
- package/dist/tools/subscribe/SubscriptionScope.d.ts +6 -5
- package/dist/tools/subscribe/SubscriptionScope.d.ts.map +1 -1
- package/dist/tools/subscribe/index.d.ts.map +1 -1
- package/dist/tools/subscribe/types.d.ts +23 -3
- package/dist/tools/subscribe/types.d.ts.map +1 -1
- package/dist/tools/subscribe/utils.d.ts.map +1 -1
- package/dist/tools/testing.d.ts +3 -2
- package/dist/tools/testing.d.ts.map +1 -1
- package/dist/tools/tests/schema.resolved.test.d.ts +2 -0
- package/dist/tools/tests/schema.resolved.test.d.ts.map +1 -0
- package/dist/tools/tests/utils.d.ts +2 -1
- package/dist/tools/tests/utils.d.ts.map +1 -1
- package/package.json +4 -4
- package/src/better-auth/database-adapter/index.ts +2 -2
- package/src/better-auth/database-adapter/repository/account.ts +3 -3
- package/src/better-auth/database-adapter/repository/generic.ts +9 -6
- package/src/better-auth/database-adapter/repository/user.ts +6 -2
- package/src/better-auth/database-adapter/schema.ts +1 -1
- package/src/better-auth/database-adapter/tests/index.test.ts +3 -4
- package/src/inspector/tests/viewer/history-view.test.tsx +6 -2
- package/src/media/utils.test.ts +5 -0
- package/src/media/utils.ts +25 -16
- package/src/react/hooks.tsx +2 -2
- package/src/react/index.ts +2 -2
- package/src/react/media/image.tsx +10 -2
- package/src/react/tests/useAcceptInvite.test.ts +3 -1
- package/src/react-core/hooks.ts +226 -304
- package/src/react-core/subscription-provider.tsx +14 -7
- package/src/react-core/tests/createCoValueSubscriptionContext.test.tsx +233 -0
- package/src/react-core/tests/subscription.bench.tsx +32 -15
- package/src/react-core/tests/{useAccountWithSelector.test.ts → useAccount.selector.test.ts} +72 -24
- package/src/react-core/tests/useAccount.test.ts +92 -106
- package/src/react-core/tests/{useCoStateWithSelector.test.ts → useCoState.selector.test.ts} +23 -8
- package/src/react-core/tests/useCoState.test.ts +173 -49
- package/src/react-core/tests/useInboxSender.test.ts +3 -1
- package/src/react-core/tests/usePassPhraseAuth.test.ts +11 -82
- package/src/react-core/tests/useSubscriptionSelector.test.ts +48 -14
- package/src/react-native-core/hooks.tsx +2 -2
- package/src/react-native-core/media/image.tsx +3 -1
- package/src/svelte/jazz.class.svelte.ts +103 -27
- package/src/svelte/media/image.svelte +6 -5
- package/src/svelte/tests/AccountCoState.svelte.test-d.ts +23 -0
- package/src/svelte/tests/CoState.svelte.test-d.ts +20 -0
- package/src/svelte/tests/CoState.svelte.test.ts +57 -0
- package/src/svelte/tests/TestCoStateWrapper.svelte +23 -0
- package/src/tools/coValues/CoValueBase.ts +12 -0
- package/src/tools/coValues/account.ts +17 -12
- package/src/tools/coValues/coFeed.ts +38 -15
- package/src/tools/coValues/coList.ts +16 -11
- package/src/tools/coValues/coMap.ts +15 -14
- package/src/tools/coValues/coPlainText.ts +6 -3
- package/src/tools/coValues/coVector.ts +6 -5
- package/src/tools/coValues/deepLoading.ts +98 -51
- package/src/tools/coValues/group.ts +3 -2
- package/src/tools/coValues/inbox.ts +11 -10
- package/src/tools/coValues/interfaces.ts +49 -27
- package/src/tools/coValues/request.ts +8 -6
- package/src/tools/coValues/schemaUnion.ts +2 -1
- package/src/tools/exports.ts +11 -1
- package/src/tools/implementation/refs.ts +19 -13
- package/src/tools/implementation/schema.ts +5 -4
- package/src/tools/implementation/schemaUtils.ts +15 -0
- package/src/tools/implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.ts +4 -4
- package/src/tools/implementation/zodSchema/schemaTypes/AccountSchema.ts +131 -95
- package/src/tools/implementation/zodSchema/schemaTypes/CoDiscriminatedUnionSchema.ts +19 -9
- package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +73 -22
- package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +86 -28
- package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +204 -148
- package/src/tools/implementation/zodSchema/schemaTypes/CoOptionalSchema.ts +1 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +71 -27
- package/src/tools/implementation/zodSchema/schemaTypes/CoValueSchema.ts +7 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.ts +8 -6
- package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +4 -1
- package/src/tools/implementation/zodSchema/schemaTypes/GroupSchema.ts +4 -1
- package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +4 -1
- package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +4 -1
- package/src/tools/implementation/zodSchema/typeConverters/InstanceOfSchema.ts +3 -0
- package/src/tools/implementation/zodSchema/typeConverters/{InstanceOfSchemaCoValuesNullable.ts → InstanceOfSchemaCoValuesMaybeLoaded.ts} +47 -39
- package/src/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts +4 -0
- package/src/tools/implementation/zodSchema/typeConverters/{InstanceOrPrimitiveOfSchemaCoValuesNullable.ts → InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded.ts} +7 -3
- package/src/tools/implementation/zodSchema/zodSchema.ts +15 -7
- package/src/tools/internal.ts +3 -3
- package/src/tools/lib/utils.test.ts +56 -0
- package/src/tools/lib/utils.ts +32 -0
- package/src/tools/subscribe/CoValueCoreSubscription.ts +13 -8
- package/src/tools/subscribe/JazzError.ts +8 -2
- package/src/tools/subscribe/SubscriptionScope.ts +55 -44
- package/src/tools/subscribe/index.ts +12 -4
- package/src/tools/subscribe/types.ts +36 -2
- package/src/tools/subscribe/utils.ts +2 -1
- package/src/tools/testing.ts +5 -0
- package/src/tools/tests/CoValueCoreSubscription.test.ts +10 -4
- package/src/tools/tests/ContextManager.test.ts +12 -5
- package/src/tools/tests/account.test.ts +22 -12
- package/src/tools/tests/coDiscriminatedUnion.test.ts +8 -4
- package/src/tools/tests/coFeed.branch.test.ts +48 -32
- package/src/tools/tests/coFeed.test-d.ts +17 -10
- package/src/tools/tests/coFeed.test.ts +52 -30
- package/src/tools/tests/coList.branch.test.ts +21 -21
- package/src/tools/tests/coList.test-d.ts +39 -23
- package/src/tools/tests/coList.test.ts +51 -25
- package/src/tools/tests/coList.unique.test.ts +34 -29
- package/src/tools/tests/coMap.branch.test.ts +20 -21
- package/src/tools/tests/coMap.record.test-d.ts +28 -26
- package/src/tools/tests/coMap.record.test.ts +30 -20
- package/src/tools/tests/coMap.test-d.ts +31 -29
- package/src/tools/tests/coMap.test.ts +67 -40
- package/src/tools/tests/coMap.unique.test.ts +25 -24
- package/src/tools/tests/coVector.test.ts +29 -15
- package/src/tools/tests/createContext.test.ts +5 -3
- package/src/tools/tests/deepLoading.test.ts +314 -117
- package/src/tools/tests/exportImport.test.ts +16 -15
- package/src/tools/tests/groupsAndAccounts.test.ts +39 -16
- package/src/tools/tests/inbox.test.ts +3 -1
- package/src/tools/tests/load.test.ts +29 -23
- package/src/tools/tests/patterns/quest.test.ts +3 -2
- package/src/tools/tests/patterns/requestToJoin.test.ts +17 -17
- package/src/tools/tests/request.test.ts +12 -2
- package/src/tools/tests/schema.resolved.test.ts +723 -0
- package/src/tools/tests/schemaUnion.test.ts +7 -3
- package/src/tools/tests/subscribe.test.ts +39 -21
- package/src/tools/tests/testing.test.ts +3 -2
- package/src/tools/tests/utils.ts +15 -2
- package/dist/chunk-OSQ7S47Q.js.map +0 -1
- package/dist/media/chunk-K6GCHLQU.js.map +0 -1
- package/dist/react-core/tests/useAccountWithSelector.test.d.ts +0 -2
- package/dist/react-core/tests/useAccountWithSelector.test.d.ts.map +0 -1
- package/dist/react-core/tests/useCoStateWithSelector.test.d.ts +0 -2
- package/dist/react-core/tests/useCoStateWithSelector.test.d.ts.map +0 -1
- package/dist/tools/implementation/errors.d.ts +0 -2
- package/dist/tools/implementation/errors.d.ts.map +0 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts +0 -19
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOfSchemaCoValuesNullable.d.ts.map +0 -1
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts +0 -5
- package/dist/tools/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +0 -1
- package/dist/tools/lib/id.d.ts +0 -2
- package/dist/tools/lib/id.d.ts.map +0 -1
- package/src/tools/implementation/errors.ts +0 -1
- package/src/tools/lib/id.ts +0 -3
|
@@ -9,9 +9,19 @@ import {
|
|
|
9
9
|
isControlledAccount,
|
|
10
10
|
z,
|
|
11
11
|
} from "../index.js";
|
|
12
|
-
import {
|
|
12
|
+
import {
|
|
13
|
+
Account,
|
|
14
|
+
CoList,
|
|
15
|
+
Loaded,
|
|
16
|
+
MaybeLoaded,
|
|
17
|
+
NotLoaded,
|
|
18
|
+
co,
|
|
19
|
+
randomSessionProvider,
|
|
20
|
+
CoValueLoadingState,
|
|
21
|
+
NotLoadedCoValueState,
|
|
22
|
+
} from "../internal.js";
|
|
13
23
|
import { createJazzTestAccount, linkAccounts } from "../testing.js";
|
|
14
|
-
import { waitFor } from "./utils.js";
|
|
24
|
+
import { assertLoaded, waitFor } from "./utils.js";
|
|
15
25
|
|
|
16
26
|
const Crypto = await WasmCrypto.create();
|
|
17
27
|
const { connectedPeers } = cojsonInternals;
|
|
@@ -83,11 +93,16 @@ describe("Deep loading with depth arg", async () => {
|
|
|
83
93
|
|
|
84
94
|
test("load without resolve", async () => {
|
|
85
95
|
const map1 = await TestMap.load(map.$jazz.id, { loadAs: meOnSecondPeer });
|
|
86
|
-
expectTypeOf(map1).branded.toEqualTypeOf<Loaded<typeof TestMap> | null>();
|
|
87
96
|
|
|
88
|
-
|
|
97
|
+
type ExpectedType = MaybeLoaded<Loaded<typeof TestMap>>;
|
|
98
|
+
function matches(value: ExpectedType) {
|
|
99
|
+
return value;
|
|
100
|
+
}
|
|
101
|
+
matches(map1);
|
|
102
|
+
|
|
103
|
+
assertLoaded(map1);
|
|
89
104
|
|
|
90
|
-
expect(map1.list).toBe(
|
|
105
|
+
expect(map1.list.$jazz.loadingState).toBe(CoValueLoadingState.LOADING);
|
|
91
106
|
});
|
|
92
107
|
|
|
93
108
|
test("load with resolve { list: true }", async () => {
|
|
@@ -95,15 +110,18 @@ describe("Deep loading with depth arg", async () => {
|
|
|
95
110
|
loadAs: meOnSecondPeer,
|
|
96
111
|
resolve: { list: true },
|
|
97
112
|
});
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
113
|
+
type ExpectedType = MaybeLoaded<
|
|
114
|
+
Loaded<typeof TestMap> & {
|
|
115
|
+
readonly list: Loaded<typeof TestList>;
|
|
116
|
+
}
|
|
117
|
+
>;
|
|
118
|
+
function matches(value: ExpectedType) {
|
|
119
|
+
return value;
|
|
120
|
+
}
|
|
121
|
+
matches(map2);
|
|
122
|
+
assertLoaded(map2);
|
|
123
|
+
assertLoaded(map2.list);
|
|
124
|
+
expect(map2.list[0]?.$jazz.loadingState).toBe(CoValueLoadingState.LOADING);
|
|
107
125
|
});
|
|
108
126
|
|
|
109
127
|
test("load with resolve { list: { $each: true } }", async () => {
|
|
@@ -111,16 +129,21 @@ describe("Deep loading with depth arg", async () => {
|
|
|
111
129
|
loadAs: meOnSecondPeer,
|
|
112
130
|
resolve: { list: { $each: true } },
|
|
113
131
|
});
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
132
|
+
type ExpectedType = MaybeLoaded<
|
|
133
|
+
Loaded<typeof TestMap> & {
|
|
134
|
+
readonly list: Loaded<typeof TestList> &
|
|
135
|
+
ReadonlyArray<Loaded<typeof InnerMap>>;
|
|
136
|
+
}
|
|
137
|
+
>;
|
|
138
|
+
function matches(value: ExpectedType) {
|
|
139
|
+
return value;
|
|
140
|
+
}
|
|
141
|
+
matches(map3);
|
|
142
|
+
assertLoaded(map3);
|
|
143
|
+
assert(map3.list[0]);
|
|
144
|
+
expect(map3.list[0].stream.$jazz.loadingState).toBe(
|
|
145
|
+
CoValueLoadingState.LOADING,
|
|
146
|
+
);
|
|
124
147
|
});
|
|
125
148
|
|
|
126
149
|
test("load with resolve { optionalRef: true }", async () => {
|
|
@@ -128,14 +151,16 @@ describe("Deep loading with depth arg", async () => {
|
|
|
128
151
|
loadAs: meOnSecondPeer,
|
|
129
152
|
resolve: { optionalRef: true } as const,
|
|
130
153
|
});
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
154
|
+
type ExpectedType = MaybeLoaded<
|
|
155
|
+
Loaded<typeof TestMap> & {
|
|
156
|
+
readonly optionalRef: Loaded<typeof InnermostMap> | undefined;
|
|
157
|
+
}
|
|
158
|
+
>;
|
|
159
|
+
function matches(value: ExpectedType) {
|
|
160
|
+
return value;
|
|
161
|
+
}
|
|
162
|
+
matches(map3a);
|
|
163
|
+
assertLoaded(map3a);
|
|
139
164
|
});
|
|
140
165
|
|
|
141
166
|
test("load with resolve { list: { $each: { stream: true } } }", async () => {
|
|
@@ -143,21 +168,26 @@ describe("Deep loading with depth arg", async () => {
|
|
|
143
168
|
loadAs: meOnSecondPeer,
|
|
144
169
|
resolve: { list: { $each: { stream: true } } },
|
|
145
170
|
});
|
|
146
|
-
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
|
|
171
|
+
type ExpectedType = MaybeLoaded<
|
|
172
|
+
Loaded<typeof TestMap> & {
|
|
173
|
+
readonly list: Loaded<typeof TestList> &
|
|
174
|
+
ReadonlyArray<
|
|
175
|
+
Loaded<typeof InnerMap> & {
|
|
176
|
+
readonly stream: Loaded<typeof TestFeed>;
|
|
177
|
+
}
|
|
178
|
+
>;
|
|
179
|
+
}
|
|
180
|
+
>;
|
|
181
|
+
function matches(value: ExpectedType) {
|
|
182
|
+
return value;
|
|
183
|
+
}
|
|
184
|
+
matches(map4);
|
|
185
|
+
assertLoaded(map4);
|
|
158
186
|
expect(map4.list[0]?.stream).toBeTruthy();
|
|
159
187
|
expect(map4.list[0]?.stream?.perAccount[me.$jazz.id]).toBeTruthy();
|
|
160
|
-
expect(map4.list[0]?.stream?.byMe?.value).toBe(
|
|
188
|
+
expect(map4.list[0]?.stream?.byMe?.value.$jazz.loadingState).toBe(
|
|
189
|
+
CoValueLoadingState.LOADING,
|
|
190
|
+
);
|
|
161
191
|
});
|
|
162
192
|
|
|
163
193
|
test("load with resolve { list: { $each: { stream: { $each: true } } } }", async () => {
|
|
@@ -165,28 +195,31 @@ describe("Deep loading with depth arg", async () => {
|
|
|
165
195
|
loadAs: meOnSecondPeer,
|
|
166
196
|
resolve: { list: { $each: { stream: { $each: true } } } },
|
|
167
197
|
});
|
|
168
|
-
type ExpectedMap5 =
|
|
169
|
-
|
|
170
|
-
|
|
171
|
-
|
|
172
|
-
|
|
173
|
-
|
|
174
|
-
|
|
175
|
-
|
|
176
|
-
|
|
177
|
-
|
|
178
|
-
|
|
179
|
-
};
|
|
198
|
+
type ExpectedMap5 = MaybeLoaded<
|
|
199
|
+
Loaded<typeof TestMap> & {
|
|
200
|
+
readonly list: Loaded<typeof TestList> &
|
|
201
|
+
ReadonlyArray<
|
|
202
|
+
Loaded<typeof InnerMap> & {
|
|
203
|
+
readonly stream: Loaded<typeof TestFeed> & {
|
|
204
|
+
byMe?: { value: Loaded<typeof InnermostMap> };
|
|
205
|
+
inCurrentSession?: { value: Loaded<typeof InnermostMap> };
|
|
206
|
+
perSession: {
|
|
207
|
+
[sessionID: SessionID]: {
|
|
208
|
+
value: Loaded<typeof InnermostMap>;
|
|
180
209
|
};
|
|
181
|
-
} & {
|
|
182
|
-
[key: ID<Account>]: { value: Loaded<typeof InnermostMap> };
|
|
183
210
|
};
|
|
184
|
-
}
|
|
185
|
-
|
|
186
|
-
|
|
187
|
-
|
|
188
|
-
|
|
189
|
-
|
|
211
|
+
} & {
|
|
212
|
+
[key: ID<Account>]: { value: Loaded<typeof InnermostMap> };
|
|
213
|
+
};
|
|
214
|
+
}
|
|
215
|
+
>;
|
|
216
|
+
}
|
|
217
|
+
>;
|
|
218
|
+
function matches(value: ExpectedMap5) {
|
|
219
|
+
return value;
|
|
220
|
+
}
|
|
221
|
+
matches(map5);
|
|
222
|
+
assertLoaded(map5);
|
|
190
223
|
|
|
191
224
|
expect(map5.list[0]?.stream?.perAccount[me.$jazz.id]?.value).toBeTruthy();
|
|
192
225
|
expect(map5.list[0]?.stream?.byMe?.value).toBeTruthy();
|
|
@@ -311,16 +344,17 @@ test("Deep loading a record-like coMap", async () => {
|
|
|
311
344
|
$each: { list: { $each: true } },
|
|
312
345
|
},
|
|
313
346
|
});
|
|
314
|
-
expectTypeOf(recordLoaded).toEqualTypeOf<
|
|
315
|
-
|
|
347
|
+
expectTypeOf(recordLoaded).branded.toEqualTypeOf<
|
|
348
|
+
MaybeLoaded<
|
|
349
|
+
Loaded<typeof RecordLike> & {
|
|
316
350
|
readonly [key: string]: Loaded<typeof TestMap> & {
|
|
317
351
|
readonly list: Loaded<typeof TestList> &
|
|
318
352
|
ReadonlyArray<Loaded<typeof InnerMap>>;
|
|
319
353
|
};
|
|
320
|
-
}
|
|
321
|
-
|
|
354
|
+
}
|
|
355
|
+
>
|
|
322
356
|
>();
|
|
323
|
-
|
|
357
|
+
assertLoaded(recordLoaded);
|
|
324
358
|
expect(recordLoaded.key1?.list).not.toBe(null);
|
|
325
359
|
expect(recordLoaded.key1?.list).toBeTruthy();
|
|
326
360
|
expect(recordLoaded.key2?.list).not.toBe(null);
|
|
@@ -461,7 +495,9 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
461
495
|
|
|
462
496
|
const mapOnAlice = await TestMap.load(map.$jazz.id, { loadAs: alice });
|
|
463
497
|
|
|
464
|
-
expect(mapOnAlice).toBe(
|
|
498
|
+
expect(mapOnAlice.$jazz.loadingState).toBe(
|
|
499
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
500
|
+
);
|
|
465
501
|
|
|
466
502
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
467
503
|
`The current user (${alice.$jazz.id}) is not authorized to access this value from ${map.$jazz.id}`,
|
|
@@ -483,7 +519,9 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
483
519
|
loadAs: alice,
|
|
484
520
|
});
|
|
485
521
|
|
|
486
|
-
expect(mapWithListOnAlice).toBe(
|
|
522
|
+
expect(mapWithListOnAlice.$jazz.loadingState).toBe(
|
|
523
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
524
|
+
);
|
|
487
525
|
|
|
488
526
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
489
527
|
`The current user (${alice.$jazz.id}) is not authorized to access this value from ${map.$jazz.id} on path list`,
|
|
@@ -517,7 +555,9 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
517
555
|
loadAs: alice,
|
|
518
556
|
});
|
|
519
557
|
|
|
520
|
-
expect(mapOnAlice).toBe(
|
|
558
|
+
expect(mapOnAlice.$jazz.loadingState).toBe(
|
|
559
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
560
|
+
);
|
|
521
561
|
|
|
522
562
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
523
563
|
`The current user (${alice.$jazz.id}) is not authorized to access this value from ${map.$jazz.id} on path list.0`,
|
|
@@ -541,11 +581,9 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
541
581
|
loadAs: alice,
|
|
542
582
|
resolve: { optionalRef: true } as const,
|
|
543
583
|
});
|
|
544
|
-
expect(mapOnAlice).toBe(
|
|
545
|
-
|
|
546
|
-
|
|
547
|
-
expect(mapOnAlice?.optionalRef?.value).toBe(undefined);
|
|
548
|
-
|
|
584
|
+
expect(mapOnAlice.$jazz.loadingState).toBe(
|
|
585
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
586
|
+
);
|
|
549
587
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
550
588
|
`The current user (${alice.$jazz.id}) is not authorized to access this value from ${map.$jazz.id} on path optionalRef`,
|
|
551
589
|
);
|
|
@@ -567,16 +605,17 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
567
605
|
resolve: { list: true } as const,
|
|
568
606
|
});
|
|
569
607
|
|
|
570
|
-
|
|
608
|
+
assertLoaded(mapOnAlice);
|
|
571
609
|
|
|
572
|
-
const result
|
|
573
|
-
|
|
574
|
-
|
|
575
|
-
|
|
610
|
+
const result: MaybeLoaded<Loaded<typeof InnermostMap>> | undefined =
|
|
611
|
+
await new Promise((resolve) => {
|
|
612
|
+
const unsub = mapOnAlice.$jazz.subscribe((value) => {
|
|
613
|
+
resolve(value.optionalRef);
|
|
614
|
+
unsub();
|
|
615
|
+
});
|
|
576
616
|
});
|
|
577
|
-
});
|
|
578
617
|
|
|
579
|
-
expect(result).toBe(
|
|
618
|
+
expect(result?.$jazz.loadingState).toBe(CoValueLoadingState.UNAUTHORIZED);
|
|
580
619
|
});
|
|
581
620
|
|
|
582
621
|
test("unaccessible stream", async () => {
|
|
@@ -603,7 +642,9 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
603
642
|
loadAs: alice,
|
|
604
643
|
});
|
|
605
644
|
|
|
606
|
-
expect(mapOnAlice).toBe(
|
|
645
|
+
expect(mapOnAlice.$jazz.loadingState).toBe(
|
|
646
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
647
|
+
);
|
|
607
648
|
|
|
608
649
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
609
650
|
`The current user (${alice.$jazz.id}) is not authorized to access this value from ${map.$jazz.id} on path list.0.stream`,
|
|
@@ -639,7 +680,9 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
639
680
|
loadAs: alice,
|
|
640
681
|
});
|
|
641
682
|
|
|
642
|
-
expect(mapOnAlice).toBe(
|
|
683
|
+
expect(mapOnAlice.$jazz.loadingState).toBe(
|
|
684
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
685
|
+
);
|
|
643
686
|
|
|
644
687
|
expect(errorSpy).toHaveBeenCalledWith(
|
|
645
688
|
`The current user (${alice.$jazz.id}) is not authorized to access this value from ${map.$jazz.id} on path list.0.stream.${value.$jazz.id}`,
|
|
@@ -691,14 +734,18 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
691
734
|
);
|
|
692
735
|
|
|
693
736
|
const friendsOnAlice = await Friends.load(map.$jazz.id, {
|
|
694
|
-
resolve: { $each: { $onError:
|
|
737
|
+
resolve: { $each: { $onError: "catch" } },
|
|
695
738
|
loadAs: alice,
|
|
696
739
|
});
|
|
697
740
|
|
|
698
|
-
|
|
741
|
+
assertLoaded(friendsOnAlice);
|
|
699
742
|
|
|
700
|
-
expect(friendsOnAlice.jane).
|
|
701
|
-
|
|
743
|
+
expect(friendsOnAlice.jane?.$jazz.loadingState).toBe(
|
|
744
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
745
|
+
);
|
|
746
|
+
assert(friendsOnAlice.alice);
|
|
747
|
+
assertLoaded(friendsOnAlice.alice);
|
|
748
|
+
expect(friendsOnAlice.alice.name).toBe("Alice");
|
|
702
749
|
});
|
|
703
750
|
|
|
704
751
|
test("unaccessible nested record element with $onError", async () => {
|
|
@@ -727,14 +774,18 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
727
774
|
);
|
|
728
775
|
|
|
729
776
|
const user = await User.load(map.$jazz.id, {
|
|
730
|
-
resolve: { friends: { $each: { $onError:
|
|
777
|
+
resolve: { friends: { $each: { $onError: "catch" } } },
|
|
731
778
|
loadAs: alice,
|
|
732
779
|
});
|
|
733
780
|
|
|
734
|
-
|
|
781
|
+
assertLoaded(user);
|
|
735
782
|
|
|
736
|
-
expect(user.friends.jane).
|
|
737
|
-
|
|
783
|
+
expect(user.friends.jane?.$jazz.loadingState).toBe(
|
|
784
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
785
|
+
);
|
|
786
|
+
assert(user.friends.alice);
|
|
787
|
+
assertLoaded(user.friends.alice);
|
|
788
|
+
expect(user.friends.alice.name).toBe("Alice");
|
|
738
789
|
});
|
|
739
790
|
|
|
740
791
|
test("unaccessible element down the chain with $onError on a record", async () => {
|
|
@@ -778,14 +829,20 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
778
829
|
);
|
|
779
830
|
|
|
780
831
|
const user = await User.load(map.$jazz.id, {
|
|
781
|
-
resolve: { friends: { $each: { dog: true, $onError:
|
|
832
|
+
resolve: { friends: { $each: { dog: true, $onError: "catch" } } },
|
|
782
833
|
loadAs: alice,
|
|
783
834
|
});
|
|
784
835
|
|
|
785
|
-
|
|
836
|
+
assertLoaded(user);
|
|
786
837
|
|
|
787
|
-
|
|
788
|
-
expect(user.friends.
|
|
838
|
+
// jane is not loaded because her dog is inaccessible
|
|
839
|
+
expect(user.friends.jane?.$jazz.loadingState).toBe(
|
|
840
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
841
|
+
);
|
|
842
|
+
// alice is loaded because we have read access to her and her dog
|
|
843
|
+
assert(user.friends.alice);
|
|
844
|
+
assertLoaded(user.friends.alice);
|
|
845
|
+
expect(user.friends.alice.dog.name).toBe("Giggino");
|
|
789
846
|
});
|
|
790
847
|
|
|
791
848
|
test("unaccessible list element with $onError and $each with depth", async () => {
|
|
@@ -795,7 +852,7 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
795
852
|
return co.optional(Friends);
|
|
796
853
|
},
|
|
797
854
|
});
|
|
798
|
-
const Friends
|
|
855
|
+
const Friends = co.list(Person);
|
|
799
856
|
|
|
800
857
|
const list = Friends.create(
|
|
801
858
|
[
|
|
@@ -826,17 +883,19 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
826
883
|
// The error List -> Jane -> Bob should be propagated to the list element Jane
|
|
827
884
|
// and we should have [null, Alice]
|
|
828
885
|
const listOnAlice = await Friends.load(list.$jazz.id, {
|
|
829
|
-
resolve: { $each: { friends: { $each: true }, $onError:
|
|
886
|
+
resolve: { $each: { friends: { $each: true }, $onError: "catch" } },
|
|
830
887
|
loadAs: alice,
|
|
831
888
|
});
|
|
832
889
|
|
|
833
|
-
|
|
890
|
+
assertLoaded(listOnAlice);
|
|
834
891
|
|
|
835
|
-
expect(listOnAlice[0]).
|
|
836
|
-
|
|
837
|
-
|
|
838
|
-
|
|
839
|
-
|
|
892
|
+
expect(listOnAlice[0]?.$jazz.loadingState).toBe(
|
|
893
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
894
|
+
);
|
|
895
|
+
assert(listOnAlice[1]);
|
|
896
|
+
assertLoaded(listOnAlice[1]);
|
|
897
|
+
expect(listOnAlice[1].name).toBe("Alice");
|
|
898
|
+
expect(listOnAlice[1].friends?.[0]?.name).toBe("Bob");
|
|
840
899
|
expect(listOnAlice).toHaveLength(2);
|
|
841
900
|
});
|
|
842
901
|
|
|
@@ -855,14 +914,18 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
855
914
|
);
|
|
856
915
|
|
|
857
916
|
const friendsOnAlice = await Friend.load(map.$jazz.id, {
|
|
858
|
-
resolve: { $each: { $onError:
|
|
917
|
+
resolve: { $each: { $onError: "catch" } },
|
|
859
918
|
loadAs: alice,
|
|
860
919
|
});
|
|
861
920
|
|
|
862
|
-
|
|
921
|
+
assertLoaded(friendsOnAlice);
|
|
863
922
|
|
|
864
|
-
expect(friendsOnAlice.jane).
|
|
865
|
-
|
|
923
|
+
expect(friendsOnAlice.jane?.$jazz.loadingState).toBe(
|
|
924
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
925
|
+
);
|
|
926
|
+
assert(friendsOnAlice.alice);
|
|
927
|
+
assertLoaded(friendsOnAlice.alice);
|
|
928
|
+
expect(friendsOnAlice.alice.name).toBe("Alice");
|
|
866
929
|
});
|
|
867
930
|
|
|
868
931
|
test("unaccessible ref catched with $onError", async () => {
|
|
@@ -906,14 +969,21 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
906
969
|
);
|
|
907
970
|
|
|
908
971
|
const user = await User.load(map.$jazz.id, {
|
|
909
|
-
resolve: { friends: { $each: { dog: { $onError:
|
|
972
|
+
resolve: { friends: { $each: { dog: { $onError: "catch" } } } },
|
|
910
973
|
loadAs: alice,
|
|
911
974
|
});
|
|
912
975
|
|
|
913
|
-
|
|
976
|
+
assertLoaded(user);
|
|
914
977
|
|
|
915
|
-
|
|
916
|
-
expect(user.friends.
|
|
978
|
+
// jane's dog is not loaded because it is inaccessible
|
|
979
|
+
expect(user.friends.jane?.dog.$jazz.loadingState).toBe(
|
|
980
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
981
|
+
);
|
|
982
|
+
// we have read access to alice and her dog
|
|
983
|
+
const aliceDog = user.friends.alice?.dog;
|
|
984
|
+
assert(aliceDog);
|
|
985
|
+
assertLoaded(aliceDog);
|
|
986
|
+
expect(aliceDog.name).toBe("Giggino");
|
|
917
987
|
});
|
|
918
988
|
|
|
919
989
|
test("using $onError on the resolve root", async () => {
|
|
@@ -923,11 +993,55 @@ describe("Deep loading with unauthorized account", async () => {
|
|
|
923
993
|
|
|
924
994
|
const map = Person.create({ name: "John" }, onlyBob);
|
|
925
995
|
const user = await Person.load(map.$jazz.id, {
|
|
926
|
-
resolve: { $onError:
|
|
996
|
+
resolve: { $onError: "catch" },
|
|
927
997
|
loadAs: alice,
|
|
928
998
|
});
|
|
929
999
|
|
|
930
|
-
expect(user).
|
|
1000
|
+
expect(user.$jazz.loadingState).toBe(CoValueLoadingState.UNAUTHORIZED);
|
|
1001
|
+
});
|
|
1002
|
+
|
|
1003
|
+
test("using $onError on a plain text value", async () => {
|
|
1004
|
+
const Person = co.map({
|
|
1005
|
+
name: co.plainText(),
|
|
1006
|
+
});
|
|
1007
|
+
|
|
1008
|
+
const person = Person.create(
|
|
1009
|
+
{ name: Person.shape.name.create("John", onlyBob) },
|
|
1010
|
+
group,
|
|
1011
|
+
);
|
|
1012
|
+
|
|
1013
|
+
const loadedPerson = await Person.load(person.$jazz.id, {
|
|
1014
|
+
resolve: { name: { $onError: "catch" } },
|
|
1015
|
+
loadAs: alice,
|
|
1016
|
+
});
|
|
1017
|
+
|
|
1018
|
+
expect(loadedPerson.$isLoaded).toBe(true);
|
|
1019
|
+
assertLoaded(loadedPerson);
|
|
1020
|
+
expect(loadedPerson.name.$jazz.loadingState).toBe(
|
|
1021
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
1022
|
+
);
|
|
1023
|
+
});
|
|
1024
|
+
|
|
1025
|
+
test("using $onError on a file stream", async () => {
|
|
1026
|
+
const Person = co.map({
|
|
1027
|
+
avatar: co.fileStream(),
|
|
1028
|
+
});
|
|
1029
|
+
|
|
1030
|
+
const person = Person.create(
|
|
1031
|
+
{ avatar: Person.shape.avatar.create(onlyBob) },
|
|
1032
|
+
group,
|
|
1033
|
+
);
|
|
1034
|
+
|
|
1035
|
+
const loadedPerson = await Person.load(person.$jazz.id, {
|
|
1036
|
+
resolve: { avatar: { $onError: "catch" } },
|
|
1037
|
+
loadAs: alice,
|
|
1038
|
+
});
|
|
1039
|
+
|
|
1040
|
+
expect(loadedPerson.$isLoaded).toBe(true);
|
|
1041
|
+
assertLoaded(loadedPerson);
|
|
1042
|
+
expect(loadedPerson.avatar.$jazz.loadingState).toBe(
|
|
1043
|
+
CoValueLoadingState.UNAUTHORIZED,
|
|
1044
|
+
);
|
|
931
1045
|
});
|
|
932
1046
|
});
|
|
933
1047
|
|
|
@@ -1058,3 +1172,86 @@ test("should not throw when calling ensureLoaded a record with a deleted ref", a
|
|
|
1058
1172
|
|
|
1059
1173
|
unsub();
|
|
1060
1174
|
});
|
|
1175
|
+
|
|
1176
|
+
// This was a regression that ocurred when we migrated `DeeplyLoaded` to use explicit loading states.
|
|
1177
|
+
// Keeping this test to prevent it from happening again.
|
|
1178
|
+
test("deep loaded CoList nested inside another CoValue can be iterated over", async () => {
|
|
1179
|
+
const TestMap = co.map({ list: co.list(z.number()) });
|
|
1180
|
+
|
|
1181
|
+
const me = await Account.create({
|
|
1182
|
+
creationProps: { name: "Hermes Puggington" },
|
|
1183
|
+
crypto: Crypto,
|
|
1184
|
+
});
|
|
1185
|
+
|
|
1186
|
+
const map = TestMap.create({ list: [1, 2, 3] }, { owner: me });
|
|
1187
|
+
|
|
1188
|
+
const loadedMap = await TestMap.load(map.$jazz.id, {
|
|
1189
|
+
resolve: {
|
|
1190
|
+
list: true,
|
|
1191
|
+
},
|
|
1192
|
+
loadAs: me,
|
|
1193
|
+
});
|
|
1194
|
+
assertLoaded(loadedMap);
|
|
1195
|
+
|
|
1196
|
+
const list = loadedMap.list;
|
|
1197
|
+
|
|
1198
|
+
let expectedValue = 1;
|
|
1199
|
+
// @ts-expect-error - https://github.com/microsoft/TypeScript/issues/62621
|
|
1200
|
+
for (const item of list) {
|
|
1201
|
+
expect(item).toEqual(expectedValue);
|
|
1202
|
+
expectedValue++;
|
|
1203
|
+
}
|
|
1204
|
+
});
|
|
1205
|
+
|
|
1206
|
+
describe("$isLoaded", async () => {
|
|
1207
|
+
const me = await Account.create({
|
|
1208
|
+
creationProps: { name: "Hermes Puggington" },
|
|
1209
|
+
crypto: Crypto,
|
|
1210
|
+
});
|
|
1211
|
+
|
|
1212
|
+
const map = TestMap.create({ list: [] }, { owner: me });
|
|
1213
|
+
|
|
1214
|
+
test("$isLoaded narrows MaybeLoaded to loaded CoValue", async () => {
|
|
1215
|
+
const maybeLoadedMap = await TestMap.load(map.$jazz.id, {
|
|
1216
|
+
loadAs: me,
|
|
1217
|
+
});
|
|
1218
|
+
|
|
1219
|
+
expect(maybeLoadedMap.$isLoaded).toBe(true);
|
|
1220
|
+
if (maybeLoadedMap.$isLoaded) {
|
|
1221
|
+
expect(maybeLoadedMap.$jazz.loadingState).toBe(
|
|
1222
|
+
CoValueLoadingState.LOADED,
|
|
1223
|
+
);
|
|
1224
|
+
expect(maybeLoadedMap.$jazz.id).toBe(map.$jazz.id);
|
|
1225
|
+
expect(maybeLoadedMap.list).toEqual([]);
|
|
1226
|
+
} else {
|
|
1227
|
+
expectTypeOf(
|
|
1228
|
+
maybeLoadedMap.$jazz.loadingState,
|
|
1229
|
+
).toEqualTypeOf<NotLoadedCoValueState>();
|
|
1230
|
+
}
|
|
1231
|
+
});
|
|
1232
|
+
|
|
1233
|
+
test("$isLoaded narrows MaybeLoaded to not loaded CoValue", async () => {
|
|
1234
|
+
const otherAccount = await Account.create({
|
|
1235
|
+
creationProps: { name: "Other Account" },
|
|
1236
|
+
crypto: Crypto,
|
|
1237
|
+
});
|
|
1238
|
+
const unloadedMap: MaybeLoaded<Loaded<typeof TestMap>> = await TestMap.load(
|
|
1239
|
+
map.$jazz.id,
|
|
1240
|
+
{ loadAs: otherAccount },
|
|
1241
|
+
);
|
|
1242
|
+
|
|
1243
|
+
expect(unloadedMap.$isLoaded).toBe(false);
|
|
1244
|
+
if (!unloadedMap.$isLoaded) {
|
|
1245
|
+
expect(unloadedMap.$jazz.loadingState).toBe(
|
|
1246
|
+
CoValueLoadingState.UNAVAILABLE,
|
|
1247
|
+
);
|
|
1248
|
+
expect(unloadedMap.$jazz.id).toBe(map.$jazz.id);
|
|
1249
|
+
// @ts-expect-error - list should not be accessible on NotLoaded
|
|
1250
|
+
unloadedMap.list;
|
|
1251
|
+
} else {
|
|
1252
|
+
expectTypeOf(unloadedMap.$jazz.loadingState).toEqualTypeOf<
|
|
1253
|
+
typeof CoValueLoadingState.LOADED
|
|
1254
|
+
>();
|
|
1255
|
+
}
|
|
1256
|
+
});
|
|
1257
|
+
});
|