jazz-tools 0.15.13 → 0.15.14
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 +41 -41
- package/CHANGELOG.md +11 -0
- package/dist/tools/coValues/deepLoading.d.ts +8 -1
- package/dist/tools/coValues/deepLoading.d.ts.map +1 -1
- package/dist/tools/exports.d.ts +1 -1
- package/dist/tools/exports.d.ts.map +1 -1
- package/package.json +5 -5
- package/src/tools/coValues/deepLoading.ts +55 -41
- package/src/tools/exports.ts +1 -0
- package/src/tools/tests/deepLoading.test.ts +58 -0
- package/vitest.config.ts +15 -14
package/.turbo/turbo-build.log
CHANGED
@@ -1,5 +1,5 @@
|
|
1
1
|
|
2
|
-
> jazz-tools@0.15.
|
2
|
+
> jazz-tools@0.15.14 build /home/runner/_work/jazz/jazz/packages/jazz-tools
|
3
3
|
> tsup && pnpm types && pnpm build:svelte
|
4
4
|
|
5
5
|
[34mCLI[39m Building entry: {"index":"src/index.ts","testing":"src/testing.ts"}
|
@@ -107,85 +107,85 @@
|
|
107
107
|
[34mESM[39m Build start
|
108
108
|
[34mCLI[39m Cleaning output folder
|
109
109
|
[34mESM[39m Build start
|
110
|
+
[32mESM[39m [1mdist/react-native-media-images/index.js [22m[32m6.19 KB[39m
|
111
|
+
[32mESM[39m [1mdist/react-native-media-images/index.js.map [22m[32m10.96 KB[39m
|
112
|
+
[32mESM[39m ⚡️ Build success in 16ms
|
113
|
+
[32mESM[39m [1mdist/browser-media-images/index.js [22m[32m2.55 KB[39m
|
114
|
+
[32mESM[39m [1mdist/browser-media-images/index.js.map [22m[32m5.44 KB[39m
|
115
|
+
[32mESM[39m ⚡️ Build success in 20ms
|
110
116
|
[32mESM[39m [1mdist/worker/index.js [22m[32m2.34 KB[39m
|
111
117
|
[32mESM[39m [1mdist/worker/index.js.map [22m[32m4.82 KB[39m
|
112
118
|
[32mESM[39m ⚡️ Build success in 15ms
|
113
119
|
[32mESM[39m [1mdist/tiptap/index.js [22m[32m564.00 B[39m
|
114
120
|
[32mESM[39m [1mdist/tiptap/index.js.map [22m[32m1.21 KB[39m
|
115
|
-
[32mESM[39m ⚡️ Build success in
|
116
|
-
[32mESM[39m [1mdist/browser-media-images/index.js [22m[32m2.55 KB[39m
|
117
|
-
[32mESM[39m [1mdist/browser-media-images/index.js.map [22m[32m5.44 KB[39m
|
118
|
-
[32mESM[39m ⚡️ Build success in 22ms
|
119
|
-
[32mESM[39m [1mdist/react-native-media-images/index.js [22m[32m6.19 KB[39m
|
120
|
-
[32mESM[39m [1mdist/react-native-media-images/index.js.map [22m[32m10.96 KB[39m
|
121
|
-
[32mESM[39m ⚡️ Build success in 19ms
|
122
|
-
[32mESM[39m [1mdist/react-core/testing.js [22m[32m1.17 KB[39m
|
123
|
-
[32mESM[39m [1mdist/react-core/index.js [22m[32m8.37 KB[39m
|
124
|
-
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js [22m[32m279.00 B[39m
|
125
|
-
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.82 KB[39m
|
126
|
-
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m16.39 KB[39m
|
127
|
-
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js.map [22m[32m533.00 B[39m
|
128
|
-
[32mESM[39m ⚡️ Build success in 22ms
|
121
|
+
[32mESM[39m ⚡️ Build success in 16ms
|
129
122
|
[32mESM[39m [1mdist/react-native/index.js [22m[32m2.53 KB[39m
|
130
|
-
[32mESM[39m [1mdist/react-native/crypto.js [22m[32m117.00 B[39m
|
131
123
|
[32mESM[39m [1mdist/react-native/testing.js [22m[32m120.00 B[39m
|
124
|
+
[32mESM[39m [1mdist/react-native/crypto.js [22m[32m117.00 B[39m
|
132
125
|
[32mESM[39m [1mdist/react-native/index.js.map [22m[32m5.68 KB[39m
|
133
|
-
[32mESM[39m [1mdist/react-native/crypto.js.map [22m[32m174.00 B[39m
|
134
126
|
[32mESM[39m [1mdist/react-native/testing.js.map [22m[32m176.00 B[39m
|
135
|
-
[32mESM[39m
|
127
|
+
[32mESM[39m [1mdist/react-native/crypto.js.map [22m[32m174.00 B[39m
|
128
|
+
[32mESM[39m ⚡️ Build success in 26ms
|
129
|
+
[32mESM[39m [1mdist/react/index.js [22m[32m20.68 KB[39m
|
130
|
+
[32mESM[39m [1mdist/react/testing.js [22m[32m107.00 B[39m
|
131
|
+
[32mESM[39m [1mdist/react/ssr.js [22m[32m688.00 B[39m
|
132
|
+
[32mESM[39m [1mdist/react/index.js.map [22m[32m34.13 KB[39m
|
133
|
+
[32mESM[39m [1mdist/react/testing.js.map [22m[32m163.00 B[39m
|
134
|
+
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.12 KB[39m
|
135
|
+
[32mESM[39m ⚡️ Build success in 30ms
|
136
136
|
[32mESM[39m [1mdist/browser/index.js [22m[32m13.43 KB[39m
|
137
137
|
[32mESM[39m [1mdist/browser/index.js.map [22m[32m28.67 KB[39m
|
138
|
-
[32mESM[39m ⚡️ Build success in
|
138
|
+
[32mESM[39m ⚡️ Build success in 32ms
|
139
|
+
[32mESM[39m [1mdist/react-core/index.js [22m[32m8.37 KB[39m
|
140
|
+
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js [22m[32m279.00 B[39m
|
141
|
+
[32mESM[39m [1mdist/react-core/testing.js [22m[32m1.17 KB[39m
|
142
|
+
[32mESM[39m [1mdist/react-core/index.js.map [22m[32m16.39 KB[39m
|
143
|
+
[32mESM[39m [1mdist/react-core/chunk-7DYMJ74I.js.map [22m[32m533.00 B[39m
|
144
|
+
[32mESM[39m [1mdist/react-core/testing.js.map [22m[32m1.82 KB[39m
|
145
|
+
[32mESM[39m ⚡️ Build success in 30ms
|
139
146
|
[32mESM[39m [1mdist/expo/index.js [22m[32m4.65 KB[39m
|
140
147
|
[32mESM[39m [1mdist/expo/testing.js [22m[32m112.00 B[39m
|
141
148
|
[32mESM[39m [1mdist/expo/crypto.js [22m[32m109.00 B[39m
|
142
149
|
[32mESM[39m [1mdist/expo/index.js.map [22m[32m10.17 KB[39m
|
143
150
|
[32mESM[39m [1mdist/expo/testing.js.map [22m[32m168.00 B[39m
|
144
151
|
[32mESM[39m [1mdist/expo/crypto.js.map [22m[32m166.00 B[39m
|
145
|
-
[32mESM[39m ⚡️ Build success in
|
146
|
-
[32mESM[39m [1mdist/
|
147
|
-
[32mESM[39m [1mdist/
|
148
|
-
[32mESM[39m
|
149
|
-
[32mESM[39m [1mdist/react/index.js.map [22m[32m34.13 KB[39m
|
150
|
-
[32mESM[39m [1mdist/react/testing.js.map [22m[32m163.00 B[39m
|
151
|
-
[32mESM[39m [1mdist/react/ssr.js.map [22m[32m1.12 KB[39m
|
152
|
-
[32mESM[39m ⚡️ Build success in 41ms
|
153
|
-
[32mESM[39m [1mdist/react-native-core/index.js [22m[32m16.95 KB[39m
|
152
|
+
[32mESM[39m ⚡️ Build success in 32ms
|
153
|
+
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m76.90 KB[39m
|
154
|
+
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m305.53 KB[39m
|
155
|
+
[32mESM[39m ⚡️ Build success in 44ms
|
154
156
|
[32mESM[39m [1mdist/react-native-core/testing.js [22m[32m119.00 B[39m
|
157
|
+
[32mESM[39m [1mdist/react-native-core/index.js [22m[32m16.95 KB[39m
|
155
158
|
[32mESM[39m [1mdist/react-native-core/crypto.js [22m[32m2.10 KB[39m
|
156
|
-
[32mESM[39m [1mdist/react-native-core/index.js.map [22m[32m33.57 KB[39m
|
157
159
|
[32mESM[39m [1mdist/react-native-core/testing.js.map [22m[32m175.00 B[39m
|
160
|
+
[32mESM[39m [1mdist/react-native-core/index.js.map [22m[32m33.57 KB[39m
|
158
161
|
[32mESM[39m [1mdist/react-native-core/crypto.js.map [22m[32m4.25 KB[39m
|
159
|
-
[32mESM[39m ⚡️ Build success in
|
160
|
-
[32mESM[39m [1mdist/prosemirror/index.js [22m[32m76.90 KB[39m
|
161
|
-
[32mESM[39m [1mdist/prosemirror/index.js.map [22m[32m305.53 KB[39m
|
162
|
-
[32mESM[39m ⚡️ Build success in 50ms
|
162
|
+
[32mESM[39m ⚡️ Build success in 43ms
|
163
163
|
[32mESM[39m [1mdist/react/index.js [22m[32m20.70 KB[39m
|
164
164
|
[32mESM[39m [1mdist/react/testing.js [22m[32m122.00 B[39m
|
165
165
|
[32mESM[39m [1mdist/react/index.js.map [22m[32m34.13 KB[39m
|
166
166
|
[32mESM[39m [1mdist/react/testing.js.map [22m[32m165.00 B[39m
|
167
|
-
[32mESM[39m ⚡️ Build success in
|
167
|
+
[32mESM[39m ⚡️ Build success in 44ms
|
168
168
|
[32mESM[39m [1mdist/inspector/index.js [22m[32m60.37 KB[39m
|
169
169
|
[32mESM[39m [1mdist/inspector/index.js.map [22m[32m107.85 KB[39m
|
170
|
-
[32mESM[39m ⚡️ Build success in
|
171
|
-
[32mESM[39m [1mdist/index.js [22m[32m16.19 KB[39m
|
170
|
+
[32mESM[39m ⚡️ Build success in 56ms
|
172
171
|
[32mESM[39m [1mdist/testing.js [22m[32m6.72 KB[39m
|
172
|
+
[32mESM[39m [1mdist/index.js [22m[32m16.19 KB[39m
|
173
173
|
[32mESM[39m [1mdist/chunk-6CCJYSYQ.js [22m[32m146.58 KB[39m
|
174
|
-
[32mESM[39m [1mdist/index.js.map [22m[32m29.03 KB[39m
|
175
174
|
[32mESM[39m [1mdist/testing.js.map [22m[32m13.03 KB[39m
|
175
|
+
[32mESM[39m [1mdist/index.js.map [22m[32m29.03 KB[39m
|
176
176
|
[32mESM[39m [1mdist/chunk-6CCJYSYQ.js.map [22m[32m356.50 KB[39m
|
177
|
-
[32mESM[39m ⚡️ Build success in
|
177
|
+
[32mESM[39m ⚡️ Build success in 67ms
|
178
178
|
[32mESM[39m [1mdist/inspector/register-custom-element.js [22m[32m218.00 B[39m
|
179
179
|
[32mESM[39m [1mdist/inspector/register-custom-element.js.map [22m[32m314.00 B[39m
|
180
180
|
[32mESM[39m [1mdist/inspector/custom-element-TUXKXSZU.js [22m[32m1.53 MB[39m
|
181
181
|
[32mESM[39m [1mdist/inspector/custom-element-TUXKXSZU.js.map [22m[32m2.35 MB[39m
|
182
|
-
[32mESM[39m ⚡️ Build success in
|
182
|
+
[32mESM[39m ⚡️ Build success in 108ms
|
183
183
|
|
184
|
-
> jazz-tools@0.15.
|
184
|
+
> jazz-tools@0.15.14 types /home/runner/_work/jazz/jazz/packages/jazz-tools
|
185
185
|
> tsc --outDir dist
|
186
186
|
|
187
187
|
|
188
|
-
> jazz-tools@0.15.
|
188
|
+
> jazz-tools@0.15.14 build:svelte /home/runner/_work/jazz/jazz/packages/jazz-tools
|
189
189
|
> rm -rf dist/svelte && svelte-package -i src/svelte -o dist/svelte --tsconfig tsconfig.svelte.json
|
190
190
|
|
191
191
|
src/svelte -> dist/svelte
|
package/CHANGELOG.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
1
|
# jazz-tools
|
2
2
|
|
3
|
+
## 0.15.14
|
4
|
+
|
5
|
+
### Patch Changes
|
6
|
+
|
7
|
+
- a584590: Prevent resolving discriminated union fields
|
8
|
+
- 9acccb5: Export `WithHelpers` type used in CoValue schemas
|
9
|
+
- Updated dependencies [70ce7c5]
|
10
|
+
- cojson-transport-ws@0.15.14
|
11
|
+
- cojson@0.15.14
|
12
|
+
- cojson-storage-indexeddb@0.15.14
|
13
|
+
|
3
14
|
## 0.15.13
|
4
15
|
|
5
16
|
### Patch Changes
|
@@ -5,7 +5,14 @@ import { CoFeedEntry } from "./coFeed.js";
|
|
5
5
|
import { type CoKeys } from "./coMap.js";
|
6
6
|
import { type CoValue, type ID } from "./interfaces.js";
|
7
7
|
type NotNull<T> = Exclude<T, null>;
|
8
|
-
|
8
|
+
/**
|
9
|
+
* Used to check if T is a union type.
|
10
|
+
*
|
11
|
+
* If T is a union type, the left hand side of the extends becomes a union of function types.
|
12
|
+
* The right hand side is always a single function type.
|
13
|
+
*/
|
14
|
+
type IsUnion<T, U = T> = (T extends any ? (x: T) => void : never) extends (x: U) => void ? false : true;
|
15
|
+
export type RefsToResolve<V, DepthLimit extends number = 10, CurrentDepth extends number[] = []> = boolean | (DepthLimit extends CurrentDepth["length"] ? any : IsUnion<NonNullable<V>> extends true ? true : V extends Array<infer Item> ? {
|
9
16
|
$each: RefsToResolve<NotNull<Item>, DepthLimit, [
|
10
17
|
0,
|
11
18
|
...CurrentDepth
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/deepLoading.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,MAAM,QAAQ,CAAC;AACnC,OAAO,EAAE,QAAQ,EAAE,MAAM,gBAAgB,CAAC;AAC1C,OAAO,EAAE,KAAK,OAAO,EAAE,MAAM,cAAc,CAAC;AAC5C,OAAO,EAAE,WAAW,EAAE,MAAM,aAAa,CAAC;AAC1C,OAAO,EAAE,KAAK,MAAM,
|
1
|
+
{"version":3,"file":"deepLoading.d.ts","sourceRoot":"","sources":["../../../src/tools/coValues/deepLoading.ts"],"names":[],"mappings":"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"}
|
package/dist/tools/exports.d.ts
CHANGED
@@ -8,7 +8,7 @@ export { CoValueBase } from "./internal.js";
|
|
8
8
|
export { Profile } from "./internal.js";
|
9
9
|
export { SchemaUnion } from "./internal.js";
|
10
10
|
export { co } from "./internal.js";
|
11
|
-
export type { CoValueClass, CoValueFromRaw, DeeplyLoaded, Resolved, RefsToResolve, RefsToResolveStrict, CoMapInit, CoFeedEntry, TextPos, AccountClass, AccountCreationProps, } from "./internal.js";
|
11
|
+
export type { CoValueClass, CoValueFromRaw, DeeplyLoaded, Resolved, RefsToResolve, RefsToResolveStrict, CoMapInit, CoFeedEntry, TextPos, AccountClass, AccountCreationProps, WithHelpers, } from "./internal.js";
|
12
12
|
export { CoMap, CoList, BinaryCoStream, CoFeed, CoStream, FileStream, CoPlainText, CoRichText, Account, isControlledAccount, createCoValueObservable, loadCoValue, subscribeToCoValue, ImageDefinition, SubscriptionScope, } from "./internal.js";
|
13
13
|
export { JazzContextManager, type JazzContextManagerAuthProps, } from "./internal.js";
|
14
14
|
export { AuthSecretStorage, type AuthSetPayload, } from "./auth/AuthSecretStorage.js";
|
@@ -1 +1 @@
|
|
1
|
-
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/tools/exports.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,CAAC,MAAM,2CAA2C,CAAC;AAE/D,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEnC,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,oBAAoB,
|
1
|
+
{"version":3,"file":"exports.d.ts","sourceRoot":"","sources":["../../src/tools/exports.ts"],"names":[],"mappings":"AAAA,YAAY,EACV,OAAO,EACP,iBAAiB,EACjB,cAAc,EACd,YAAY,EACZ,IAAI,EACJ,SAAS,EACT,WAAW,GACZ,MAAM,QAAQ,CAAC;AAEhB,OAAO,KAAK,CAAC,MAAM,2CAA2C,CAAC;AAE/D,YAAY,EAAE,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEjD,OAAO,EAAE,QAAQ,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AAElD,OAAO,EAAE,KAAK,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAEnD,OAAO,EAAE,KAAK,EAAE,MAAM,eAAe,CAAC;AACtC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAC5C,OAAO,EAAE,OAAO,EAAE,MAAM,eAAe,CAAC;AACxC,OAAO,EAAE,WAAW,EAAE,MAAM,eAAe,CAAC;AAE5C,OAAO,EAAE,EAAE,EAAE,MAAM,eAAe,CAAC;AAEnC,YAAY,EACV,YAAY,EACZ,cAAc,EACd,YAAY,EACZ,QAAQ,EACR,aAAa,EACb,mBAAmB,EACnB,SAAS,EACT,WAAW,EACX,OAAO,EACP,YAAY,EACZ,oBAAoB,EACpB,WAAW,GACZ,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,KAAK,EACL,MAAM,EACN,cAAc,EACd,MAAM,EACN,QAAQ,EACR,UAAU,EACV,WAAW,EACX,UAAU,EACV,OAAO,EACP,mBAAmB,EACnB,uBAAuB,EACvB,WAAW,EACX,kBAAkB,EAClB,eAAe,EACf,iBAAiB,GAClB,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,kBAAkB,EAClB,KAAK,2BAA2B,GACjC,MAAM,eAAe,CAAC;AAEvB,OAAO,EACL,iBAAiB,EACjB,KAAK,cAAc,GACpB,MAAM,6BAA6B,CAAC;AACrC,OAAO,EACL,aAAa,EACb,kBAAkB,EAClB,kBAAkB,EAClB,gBAAgB,GACjB,MAAM,uBAAuB,CAAC;AAC/B,OAAO,EAAE,cAAc,EAAE,KAAK,OAAO,EAAE,MAAM,0BAA0B,CAAC;AACxE,OAAO,EAAE,eAAe,EAAE,MAAM,2BAA2B,CAAC;AAC5D,OAAO,EAAE,QAAQ,EAAE,MAAM,oBAAoB,CAAC;AAC9C,OAAO,EAAE,cAAc,EAAE,MAAM,0BAA0B,CAAC;AAE1D,OAAO,EACL,gBAAgB,EAChB,eAAe,EACf,iBAAiB,GAClB,MAAM,6BAA6B,CAAC;AAErC,OAAO,EACL,kBAAkB,EAClB,0BAA0B,EAC1B,wCAAwC,EACxC,8BAA8B,EAC9B,iBAAiB,EACjB,qBAAqB,EACrB,KAAK,UAAU,EACf,KAAK,WAAW,EAChB,KAAK,sBAAsB,GAC5B,MAAM,eAAe,CAAC;AAEvB,mBAAmB,YAAY,CAAC;AAEhC,OAAO,EACL,mBAAmB,EACnB,mBAAmB,EACnB,KAAK,gBAAgB,EACrB,KAAK,gCAAgC,EACrC,KAAK,kBAAkB,EACvB,KAAK,MAAM,EACX,KAAK,gBAAgB,EACrB,KAAK,mBAAmB,EACxB,KAAK,aAAa,EAClB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,WAAW,EAChB,KAAK,YAAY,EACjB,KAAK,eAAe,EACpB,KAAK,gBAAgB,EACrB,KAAK,YAAY,EACjB,KAAK,kBAAkB,EACvB,KAAK,OAAO,EACZ,KAAK,cAAc,EACnB,KAAK,eAAe,GACrB,MAAM,eAAe,CAAC"}
|
package/package.json
CHANGED
@@ -139,7 +139,7 @@
|
|
139
139
|
},
|
140
140
|
"type": "module",
|
141
141
|
"license": "MIT",
|
142
|
-
"version": "0.15.
|
142
|
+
"version": "0.15.14",
|
143
143
|
"dependencies": {
|
144
144
|
"@manuscripts/prosemirror-recreate-steps": "^0.1.4",
|
145
145
|
"@scure/base": "1.2.1",
|
@@ -158,9 +158,9 @@
|
|
158
158
|
"prosemirror-state": "^1.4.3",
|
159
159
|
"prosemirror-transform": "^1.9.0",
|
160
160
|
"zod": "3.25.28",
|
161
|
-
"cojson": "0.15.
|
162
|
-
"cojson-storage-indexeddb": "0.15.
|
163
|
-
"cojson-transport-ws": "0.15.
|
161
|
+
"cojson": "0.15.14",
|
162
|
+
"cojson-storage-indexeddb": "0.15.14",
|
163
|
+
"cojson-transport-ws": "0.15.14"
|
164
164
|
},
|
165
165
|
"devDependencies": {
|
166
166
|
"@scure/bip39": "^1.3.0",
|
@@ -175,7 +175,7 @@
|
|
175
175
|
"playwright": "^1.50.1",
|
176
176
|
"tsup": "8.5.0",
|
177
177
|
"typescript": "5.6.2",
|
178
|
-
"vitest": "3.
|
178
|
+
"vitest": "3.2.4",
|
179
179
|
"ws": "^8.14.2"
|
180
180
|
},
|
181
181
|
"peerDependencies": {
|
@@ -2,11 +2,23 @@ import { SessionID } from "cojson";
|
|
2
2
|
import { ItemsSym } from "../internal.js";
|
3
3
|
import { type Account } from "./account.js";
|
4
4
|
import { CoFeedEntry } from "./coFeed.js";
|
5
|
-
import { type CoKeys
|
5
|
+
import { type CoKeys } from "./coMap.js";
|
6
6
|
import { type CoValue, type ID } from "./interfaces.js";
|
7
7
|
|
8
8
|
type NotNull<T> = Exclude<T, null>;
|
9
9
|
|
10
|
+
/**
|
11
|
+
* Used to check if T is a union type.
|
12
|
+
*
|
13
|
+
* If T is a union type, the left hand side of the extends becomes a union of function types.
|
14
|
+
* The right hand side is always a single function type.
|
15
|
+
*/
|
16
|
+
type IsUnion<T, U = T> = (T extends any ? (x: T) => void : never) extends (
|
17
|
+
x: U,
|
18
|
+
) => void
|
19
|
+
? false
|
20
|
+
: true;
|
21
|
+
|
10
22
|
export type RefsToResolve<
|
11
23
|
V,
|
12
24
|
DepthLimit extends number = 10,
|
@@ -16,56 +28,58 @@ export type RefsToResolve<
|
|
16
28
|
| (DepthLimit extends CurrentDepth["length"]
|
17
29
|
? // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
18
30
|
any
|
19
|
-
:
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
$each: RefsToResolve<
|
24
|
-
NotNull<Item>,
|
25
|
-
DepthLimit,
|
26
|
-
[0, ...CurrentDepth]
|
27
|
-
>;
|
28
|
-
$onError?: null;
|
29
|
-
}
|
30
|
-
| boolean
|
31
|
-
: // Basically V extends CoMap | Group | Account - but if we used that we'd introduce circularity into the definition of CoMap itself
|
32
|
-
V extends { _type: "CoMap" | "Group" | "Account" }
|
31
|
+
: IsUnion<NonNullable<V>> extends true
|
32
|
+
? true
|
33
|
+
: // Basically V extends CoList - but if we used that we'd introduce circularity into the definition of CoList itself
|
34
|
+
V extends Array<infer Item>
|
33
35
|
?
|
34
|
-
|
|
35
|
-
|
36
|
-
|
37
|
-
: never]?: RefsToResolve<
|
38
|
-
NonNullable<V[Key]>,
|
36
|
+
| {
|
37
|
+
$each: RefsToResolve<
|
38
|
+
NotNull<Item>,
|
39
39
|
DepthLimit,
|
40
40
|
[0, ...CurrentDepth]
|
41
41
|
>;
|
42
|
-
|
43
|
-
|
44
|
-
? {
|
45
|
-
$each: RefsToResolve<
|
46
|
-
NonNullable<V[ItemsSym]>,
|
47
|
-
DepthLimit,
|
48
|
-
[0, ...CurrentDepth]
|
49
|
-
>;
|
50
|
-
$onError?: null;
|
51
|
-
}
|
52
|
-
: never)
|
42
|
+
$onError?: null;
|
43
|
+
}
|
53
44
|
| boolean
|
54
|
-
: V extends
|
55
|
-
|
56
|
-
byMe: CoFeedEntry<infer Item> | undefined;
|
57
|
-
}
|
45
|
+
: // Basically V extends CoMap | Group | Account - but if we used that we'd introduce circularity into the definition of CoMap itself
|
46
|
+
V extends { _type: "CoMap" | "Group" | "Account" }
|
58
47
|
?
|
59
|
-
| {
|
60
|
-
|
61
|
-
|
48
|
+
| ({
|
49
|
+
[Key in CoKeys<V> as NonNullable<V[Key]> extends CoValue
|
50
|
+
? Key
|
51
|
+
: never]?: RefsToResolve<
|
52
|
+
NonNullable<V[Key]>,
|
62
53
|
DepthLimit,
|
63
54
|
[0, ...CurrentDepth]
|
64
55
|
>;
|
65
|
-
|
66
|
-
|
56
|
+
} & { $onError?: null })
|
57
|
+
| (ItemsSym extends keyof V
|
58
|
+
? {
|
59
|
+
$each: RefsToResolve<
|
60
|
+
NonNullable<V[ItemsSym]>,
|
61
|
+
DepthLimit,
|
62
|
+
[0, ...CurrentDepth]
|
63
|
+
>;
|
64
|
+
$onError?: null;
|
65
|
+
}
|
66
|
+
: never)
|
67
67
|
| boolean
|
68
|
-
:
|
68
|
+
: V extends {
|
69
|
+
_type: "CoStream";
|
70
|
+
byMe: CoFeedEntry<infer Item> | undefined;
|
71
|
+
}
|
72
|
+
?
|
73
|
+
| {
|
74
|
+
$each: RefsToResolve<
|
75
|
+
NotNull<Item>,
|
76
|
+
DepthLimit,
|
77
|
+
[0, ...CurrentDepth]
|
78
|
+
>;
|
79
|
+
$onError?: null;
|
80
|
+
}
|
81
|
+
| boolean
|
82
|
+
: boolean);
|
69
83
|
|
70
84
|
export type RefsToResolveStrict<T, V> = V extends RefsToResolve<T>
|
71
85
|
? RefsToResolve<T>
|
package/src/tools/exports.ts
CHANGED
@@ -381,6 +381,64 @@ test("The resolve type doesn't accept extra keys", async () => {
|
|
381
381
|
}
|
382
382
|
});
|
383
383
|
|
384
|
+
test("The resolve type accepts keys from optional fields", async () => {
|
385
|
+
const Person = co.map({
|
386
|
+
name: z.string(),
|
387
|
+
});
|
388
|
+
const Dog = co.map({
|
389
|
+
type: z.literal("dog"),
|
390
|
+
owner: Person.optional(),
|
391
|
+
});
|
392
|
+
const Pets = co.list(Dog);
|
393
|
+
|
394
|
+
const pets = await Pets.create([
|
395
|
+
Dog.create({ type: "dog", owner: Person.create({ name: "Rex" }) }),
|
396
|
+
]);
|
397
|
+
|
398
|
+
await pets.ensureLoaded({
|
399
|
+
resolve: {
|
400
|
+
$each: { owner: true },
|
401
|
+
},
|
402
|
+
});
|
403
|
+
|
404
|
+
expect(pets[0]?.owner?.name).toEqual("Rex");
|
405
|
+
});
|
406
|
+
|
407
|
+
test("The resolve type doesn't accept keys from discriminated unions", async () => {
|
408
|
+
const Person = co.map({
|
409
|
+
name: z.string(),
|
410
|
+
});
|
411
|
+
const Dog = co.map({
|
412
|
+
type: z.literal("dog"),
|
413
|
+
owner: Person,
|
414
|
+
});
|
415
|
+
const Cat = co.map({
|
416
|
+
type: z.literal("cat"),
|
417
|
+
});
|
418
|
+
const Pet = co.discriminatedUnion("type", [Dog, Cat]);
|
419
|
+
const Pets = co.list(Pet);
|
420
|
+
|
421
|
+
const pets = await Pets.create([
|
422
|
+
Dog.create({ type: "dog", owner: Person.create({ name: "Rex" }) }),
|
423
|
+
]);
|
424
|
+
|
425
|
+
await pets.ensureLoaded({
|
426
|
+
resolve: {
|
427
|
+
$each: true,
|
428
|
+
},
|
429
|
+
});
|
430
|
+
|
431
|
+
await pets.ensureLoaded({
|
432
|
+
// @ts-expect-error cannot resolve owner
|
433
|
+
resolve: { $each: { owner: true } },
|
434
|
+
});
|
435
|
+
|
436
|
+
expect(pets).toBeTruthy();
|
437
|
+
if (pets?.[0]?.type === "dog") {
|
438
|
+
expect(pets[0].owner?.name).toEqual("Rex");
|
439
|
+
}
|
440
|
+
});
|
441
|
+
|
384
442
|
describe("Deep loading with unauthorized account", async () => {
|
385
443
|
const bob = await createJazzTestAccount({
|
386
444
|
creationProps: { name: "Bob" },
|
package/vitest.config.ts
CHANGED
@@ -1,22 +1,16 @@
|
|
1
|
-
import {
|
1
|
+
import { defineProject } from "vitest/config";
|
2
2
|
|
3
|
-
export default
|
3
|
+
export default defineProject({
|
4
4
|
test: {
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
},
|
12
|
-
include: ["src/**/*.test.ts"],
|
13
|
-
name: "unit",
|
14
|
-
},
|
15
|
-
},
|
5
|
+
name: "jazz-tools",
|
6
|
+
typecheck: {
|
7
|
+
enabled: true,
|
8
|
+
checker: "tsc",
|
9
|
+
},
|
10
|
+
projects: [
|
16
11
|
{
|
17
12
|
test: {
|
18
13
|
include: ["src/**/*.test.browser.ts"],
|
19
|
-
name: "browser",
|
20
14
|
browser: {
|
21
15
|
enabled: true,
|
22
16
|
provider: "playwright",
|
@@ -24,6 +18,13 @@ export default defineConfig({
|
|
24
18
|
screenshotFailures: false,
|
25
19
|
instances: [{ browser: "chromium" }],
|
26
20
|
},
|
21
|
+
name: "browser",
|
22
|
+
},
|
23
|
+
},
|
24
|
+
{
|
25
|
+
test: {
|
26
|
+
include: ["src/**/*.test.{js,ts,svelte}"],
|
27
|
+
name: "unit",
|
27
28
|
},
|
28
29
|
},
|
29
30
|
],
|