jazz-tools 0.19.12 → 0.19.13
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 +50 -50
- package/CHANGELOG.md +10 -0
- package/dist/browser/createBrowserContext.d.ts +1 -5
- package/dist/browser/createBrowserContext.d.ts.map +1 -1
- package/dist/browser/index.js +124 -47
- package/dist/browser/index.js.map +1 -1
- package/dist/browser/provideBrowserLockSession/BrowserSessionProvider.d.ts +12 -0
- package/dist/browser/provideBrowserLockSession/BrowserSessionProvider.d.ts.map +1 -0
- package/dist/browser/provideBrowserLockSession/BrowserSessionProvider.test.d.ts +2 -0
- package/dist/browser/provideBrowserLockSession/BrowserSessionProvider.test.d.ts.map +1 -0
- package/dist/browser/provideBrowserLockSession/SessionIDStorage.d.ts +6 -0
- package/dist/browser/provideBrowserLockSession/SessionIDStorage.d.ts.map +1 -0
- package/dist/browser/provideBrowserLockSession/index.d.ts +4 -0
- package/dist/browser/provideBrowserLockSession/index.d.ts.map +1 -0
- package/dist/{chunk-AGF4HEDH.js → chunk-GAPMDNJY.js} +437 -82
- package/dist/chunk-GAPMDNJY.js.map +1 -0
- package/dist/index.js +5 -3
- package/dist/index.js.map +1 -1
- package/dist/react-native/index.js +41 -12
- package/dist/react-native/index.js.map +1 -1
- package/dist/react-native-core/ReactNativeSessionProvider.d.ts +11 -0
- package/dist/react-native-core/ReactNativeSessionProvider.d.ts.map +1 -0
- package/dist/react-native-core/index.js +41 -12
- package/dist/react-native-core/index.js.map +1 -1
- package/dist/react-native-core/platform.d.ts +2 -8
- package/dist/react-native-core/platform.d.ts.map +1 -1
- package/dist/react-native-core/tests/ReactNativeSessionProvider.test.d.ts +2 -0
- package/dist/react-native-core/tests/ReactNativeSessionProvider.test.d.ts.map +1 -0
- package/dist/testing.js +4 -3
- package/dist/testing.js.map +1 -1
- package/dist/tools/coValues/account.d.ts.map +1 -1
- package/dist/tools/coValues/coFeed.d.ts +2 -2
- package/dist/tools/coValues/coFeed.d.ts.map +1 -1
- package/dist/tools/coValues/coList.d.ts +1 -2
- package/dist/tools/coValues/coList.d.ts.map +1 -1
- package/dist/tools/coValues/coMap.d.ts.map +1 -1
- package/dist/tools/coValues/coVector.d.ts.map +1 -1
- package/dist/tools/coValues/group.d.ts +5 -1
- package/dist/tools/coValues/group.d.ts.map +1 -1
- package/dist/tools/coValues/interfaces.d.ts +2 -1
- package/dist/tools/coValues/interfaces.d.ts.map +1 -1
- package/dist/tools/exports.d.ts +2 -2
- package/dist/tools/exports.d.ts.map +1 -1
- package/dist/tools/implementation/createContext.d.ts +21 -11
- package/dist/tools/implementation/createContext.d.ts.map +1 -1
- package/dist/tools/implementation/schema.d.ts +14 -6
- package/dist/tools/implementation/schema.d.ts.map +1 -1
- package/dist/tools/implementation/schemaUtils.d.ts +1 -1
- package/dist/tools/implementation/schemaUtils.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts +99 -0
- package/dist/tools/implementation/zodSchema/schemaPermissions.d.ts.map +1 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts +11 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts +11 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoListSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts +15 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoMapSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts +10 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts +9 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts +13 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts +10 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts +6 -0
- package/dist/tools/implementation/zodSchema/schemaTypes/RichTextSchema.d.ts.map +1 -1
- package/dist/tools/implementation/zodSchema/unionUtils.d.ts +12 -1
- package/dist/tools/implementation/zodSchema/unionUtils.d.ts.map +1 -1
- package/dist/tools/internal.d.ts +1 -0
- package/dist/tools/internal.d.ts.map +1 -1
- package/dist/tools/testing.d.ts.map +1 -1
- package/dist/tools/tests/schema.withPermissions.test.d.ts +2 -0
- package/dist/tools/tests/schema.withPermissions.test.d.ts.map +1 -0
- package/dist/worker/index.js +2 -2
- package/dist/worker/index.js.map +1 -1
- package/package.json +4 -4
- package/src/browser/createBrowserContext.ts +3 -62
- package/src/browser/provideBrowserLockSession/BrowserSessionProvider.test.ts +406 -0
- package/src/browser/provideBrowserLockSession/BrowserSessionProvider.ts +132 -0
- package/src/browser/provideBrowserLockSession/SessionIDStorage.ts +33 -0
- package/src/browser/provideBrowserLockSession/index.ts +11 -0
- package/src/react-native-core/ReactNativeSessionProvider.ts +52 -0
- package/src/react-native-core/platform.ts +5 -30
- package/src/react-native-core/tests/ReactNativeSessionProvider.test.ts +124 -0
- package/src/tools/coValues/account.ts +4 -0
- package/src/tools/coValues/coFeed.ts +8 -3
- package/src/tools/coValues/coList.ts +6 -3
- package/src/tools/coValues/coMap.ts +10 -0
- package/src/tools/coValues/coVector.ts +2 -1
- package/src/tools/coValues/group.ts +6 -4
- package/src/tools/coValues/interfaces.ts +19 -7
- package/src/tools/exports.ts +3 -1
- package/src/tools/implementation/createContext.ts +43 -15
- package/src/tools/implementation/schema.ts +23 -13
- package/src/tools/implementation/schemaUtils.ts +1 -1
- package/src/tools/implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.ts +105 -4
- package/src/tools/implementation/zodSchema/schemaPermissions.ts +188 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoFeedSchema.ts +46 -3
- package/src/tools/implementation/zodSchema/schemaTypes/CoListSchema.ts +46 -3
- package/src/tools/implementation/zodSchema/schemaTypes/CoMapSchema.ts +50 -13
- package/src/tools/implementation/zodSchema/schemaTypes/CoRecordSchema.ts +14 -0
- package/src/tools/implementation/zodSchema/schemaTypes/CoVectorSchema.ts +24 -1
- package/src/tools/implementation/zodSchema/schemaTypes/FileStreamSchema.ts +51 -4
- package/src/tools/implementation/zodSchema/schemaTypes/PlainTextSchema.ts +25 -1
- package/src/tools/implementation/zodSchema/schemaTypes/RichTextSchema.ts +21 -1
- package/src/tools/implementation/zodSchema/unionUtils.ts +72 -20
- package/src/tools/internal.ts +1 -0
- package/src/tools/testing.ts +3 -1
- package/src/tools/tests/ContextManager.test.ts +2 -1
- package/src/tools/tests/coPlainText.test.ts +2 -2
- package/src/tools/tests/createContext.test.ts +79 -1
- package/src/tools/tests/deepLoading.test.ts +25 -2
- package/src/tools/tests/schema.resolved.test.ts +10 -0
- package/src/tools/tests/schema.withPermissions.test.ts +859 -0
- package/src/tools/tests/utils.ts +2 -2
- package/src/worker/index.ts +2 -2
- package/dist/chunk-AGF4HEDH.js.map +0 -1
|
@@ -3,6 +3,7 @@ import {
|
|
|
3
3
|
BranchDefinition,
|
|
4
4
|
CoList,
|
|
5
5
|
Group,
|
|
6
|
+
hydrateCoreCoValueSchema,
|
|
6
7
|
ID,
|
|
7
8
|
Settled,
|
|
8
9
|
RefsToResolve,
|
|
@@ -11,6 +12,7 @@ import {
|
|
|
11
12
|
SubscribeListenerOptions,
|
|
12
13
|
coOptionalDefiner,
|
|
13
14
|
unstable_mergeBranchWithResolve,
|
|
15
|
+
withSchemaPermissions,
|
|
14
16
|
} from "../../../internal.js";
|
|
15
17
|
import { CoValueUniqueness } from "cojson";
|
|
16
18
|
import { AnonymousJazzAgent } from "../../anonymousJazzAgent.js";
|
|
@@ -21,6 +23,10 @@ import { AnyZodOrCoValueSchema } from "../zodSchema.js";
|
|
|
21
23
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
22
24
|
import { CoreCoValueSchema, CoreResolveQuery } from "./CoValueSchema.js";
|
|
23
25
|
import { withSchemaResolveQuery } from "../../schemaUtils.js";
|
|
26
|
+
import {
|
|
27
|
+
DEFAULT_SCHEMA_PERMISSIONS,
|
|
28
|
+
SchemaPermissions,
|
|
29
|
+
} from "../schemaPermissions.js";
|
|
24
30
|
|
|
25
31
|
export class CoListSchema<
|
|
26
32
|
T extends AnyZodOrCoValueSchema,
|
|
@@ -37,6 +43,12 @@ export class CoListSchema<
|
|
|
37
43
|
*/
|
|
38
44
|
resolveQuery: DefaultResolveQuery = true as DefaultResolveQuery;
|
|
39
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Permissions to be used when creating or composing CoValues
|
|
48
|
+
* @internal
|
|
49
|
+
*/
|
|
50
|
+
permissions: SchemaPermissions = DEFAULT_SCHEMA_PERMISSIONS;
|
|
51
|
+
|
|
40
52
|
constructor(
|
|
41
53
|
public element: T,
|
|
42
54
|
private coValueClass: typeof CoList,
|
|
@@ -63,7 +75,14 @@ export class CoListSchema<
|
|
|
63
75
|
| Account
|
|
64
76
|
| Group,
|
|
65
77
|
): CoListInstance<T> {
|
|
66
|
-
|
|
78
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
79
|
+
options,
|
|
80
|
+
this.permissions,
|
|
81
|
+
);
|
|
82
|
+
return this.coValueClass.create(
|
|
83
|
+
items as any,
|
|
84
|
+
optionsWithPermissions,
|
|
85
|
+
) as CoListInstance<T>;
|
|
67
86
|
}
|
|
68
87
|
|
|
69
88
|
load<
|
|
@@ -189,8 +208,32 @@ export class CoListSchema<
|
|
|
189
208
|
>(
|
|
190
209
|
resolveQuery: RefsToResolveStrict<CoListInstanceCoValuesMaybeLoaded<T>, R>,
|
|
191
210
|
): CoListSchema<T, R> {
|
|
192
|
-
|
|
193
|
-
|
|
211
|
+
return this.copy({ resolveQuery: resolveQuery as R });
|
|
212
|
+
}
|
|
213
|
+
|
|
214
|
+
/**
|
|
215
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
216
|
+
*/
|
|
217
|
+
withPermissions(
|
|
218
|
+
permissions: SchemaPermissions,
|
|
219
|
+
): CoListSchema<T, DefaultResolveQuery> {
|
|
220
|
+
return this.copy({ permissions });
|
|
221
|
+
}
|
|
222
|
+
|
|
223
|
+
private copy<ResolveQuery extends CoreResolveQuery = DefaultResolveQuery>({
|
|
224
|
+
permissions,
|
|
225
|
+
resolveQuery,
|
|
226
|
+
}: {
|
|
227
|
+
permissions?: SchemaPermissions;
|
|
228
|
+
resolveQuery?: ResolveQuery;
|
|
229
|
+
}): CoListSchema<T, ResolveQuery> {
|
|
230
|
+
const coreSchema = createCoreCoListSchema(this.element);
|
|
231
|
+
// @ts-expect-error
|
|
232
|
+
const copy: CoListSchema<T, ResolveQuery> =
|
|
233
|
+
hydrateCoreCoValueSchema(coreSchema);
|
|
234
|
+
// @ts-expect-error TS cannot infer that the resolveQuery type is valid
|
|
235
|
+
copy.resolveQuery = resolveQuery ?? this.resolveQuery;
|
|
236
|
+
copy.permissions = permissions ?? this.permissions;
|
|
194
237
|
return copy;
|
|
195
238
|
}
|
|
196
239
|
}
|
|
@@ -17,6 +17,7 @@ import {
|
|
|
17
17
|
hydrateCoreCoValueSchema,
|
|
18
18
|
isAnyCoValueSchema,
|
|
19
19
|
unstable_mergeBranchWithResolve,
|
|
20
|
+
withSchemaPermissions,
|
|
20
21
|
} from "../../../internal.js";
|
|
21
22
|
import { AnonymousJazzAgent } from "../../anonymousJazzAgent.js";
|
|
22
23
|
import { removeGetters, withSchemaResolveQuery } from "../../schemaUtils.js";
|
|
@@ -27,6 +28,10 @@ import { z } from "../zodReExport.js";
|
|
|
27
28
|
import { AnyZodOrCoValueSchema, AnyZodSchema } from "../zodSchema.js";
|
|
28
29
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
29
30
|
import { CoreCoValueSchema, CoreResolveQuery } from "./CoValueSchema.js";
|
|
31
|
+
import {
|
|
32
|
+
DEFAULT_SCHEMA_PERMISSIONS,
|
|
33
|
+
SchemaPermissions,
|
|
34
|
+
} from "../schemaPermissions.js";
|
|
30
35
|
|
|
31
36
|
export class CoMapSchema<
|
|
32
37
|
Shape extends z.core.$ZodLooseShape,
|
|
@@ -48,6 +53,12 @@ export class CoMapSchema<
|
|
|
48
53
|
*/
|
|
49
54
|
resolveQuery: DefaultResolveQuery = true as DefaultResolveQuery;
|
|
50
55
|
|
|
56
|
+
/**
|
|
57
|
+
* Permissions to be used when creating or composing CoValues
|
|
58
|
+
* @internal
|
|
59
|
+
*/
|
|
60
|
+
permissions: SchemaPermissions = DEFAULT_SCHEMA_PERMISSIONS;
|
|
61
|
+
|
|
51
62
|
constructor(
|
|
52
63
|
coreSchema: CoreCoMapSchema<Shape, CatchAll>,
|
|
53
64
|
private coValueClass: typeof CoMap,
|
|
@@ -76,8 +87,12 @@ export class CoMapSchema<
|
|
|
76
87
|
}
|
|
77
88
|
| Owner,
|
|
78
89
|
): CoMapInstanceShape<Shape, CatchAll> & CoMap;
|
|
79
|
-
create(
|
|
80
|
-
|
|
90
|
+
create(init: any, options?: any) {
|
|
91
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
92
|
+
options,
|
|
93
|
+
this.permissions,
|
|
94
|
+
);
|
|
95
|
+
return this.coValueClass.create(init, optionsWithPermissions);
|
|
81
96
|
}
|
|
82
97
|
|
|
83
98
|
load<
|
|
@@ -254,8 +269,8 @@ export class CoMapSchema<
|
|
|
254
269
|
true
|
|
255
270
|
>,
|
|
256
271
|
) => undefined,
|
|
257
|
-
):
|
|
258
|
-
// @ts-expect-error
|
|
272
|
+
): this {
|
|
273
|
+
// @ts-expect-error avoid exposing 'migrate' at the type level
|
|
259
274
|
this.coValueClass.prototype.migrate = migration;
|
|
260
275
|
return this;
|
|
261
276
|
}
|
|
@@ -340,15 +355,37 @@ export class CoMapSchema<
|
|
|
340
355
|
R
|
|
341
356
|
>,
|
|
342
357
|
): CoMapSchema<Shape, CatchAll, Owner, R> {
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
|
|
349
|
-
|
|
350
|
-
|
|
351
|
-
|
|
358
|
+
return this.copy({ resolveQuery: resolveQuery as R });
|
|
359
|
+
}
|
|
360
|
+
|
|
361
|
+
/**
|
|
362
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
363
|
+
*/
|
|
364
|
+
withPermissions(
|
|
365
|
+
permissions: SchemaPermissions,
|
|
366
|
+
): CoMapSchema<Shape, CatchAll, Owner, DefaultResolveQuery> {
|
|
367
|
+
return this.copy({ permissions });
|
|
368
|
+
}
|
|
369
|
+
|
|
370
|
+
/**
|
|
371
|
+
* Creates a copy of this schema, preserving all previous configuration
|
|
372
|
+
*/
|
|
373
|
+
private copy<ResolveQuery extends CoreResolveQuery = DefaultResolveQuery>({
|
|
374
|
+
permissions,
|
|
375
|
+
resolveQuery,
|
|
376
|
+
}: {
|
|
377
|
+
permissions?: SchemaPermissions;
|
|
378
|
+
resolveQuery?: ResolveQuery;
|
|
379
|
+
}): CoMapSchema<Shape, CatchAll, Owner, ResolveQuery> {
|
|
380
|
+
const coreSchema = createCoreCoMapSchema(this.shape, this.catchAll);
|
|
381
|
+
// @ts-expect-error
|
|
382
|
+
const copy: CoMapSchema<Shape, CatchAll, Owner, ResolveQuery> =
|
|
383
|
+
hydrateCoreCoValueSchema(coreSchema);
|
|
384
|
+
// @ts-expect-error avoid exposing 'migrate' at the type level
|
|
385
|
+
copy.coValueClass.prototype.migrate = this.coValueClass.prototype.migrate;
|
|
386
|
+
// @ts-expect-error TS cannot infer that the resolveQuery type is valid
|
|
387
|
+
copy.resolveQuery = resolveQuery ?? this.resolveQuery;
|
|
388
|
+
copy.permissions = permissions ?? this.permissions;
|
|
352
389
|
return copy;
|
|
353
390
|
}
|
|
354
391
|
}
|
|
@@ -21,6 +21,7 @@ import { z } from "../zodReExport.js";
|
|
|
21
21
|
import { AnyZodOrCoValueSchema } from "../zodSchema.js";
|
|
22
22
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
23
23
|
import { CoreCoValueSchema, CoreResolveQuery } from "./CoValueSchema.js";
|
|
24
|
+
import { SchemaPermissions } from "../schemaPermissions.js";
|
|
24
25
|
|
|
25
26
|
type CoRecordInit<
|
|
26
27
|
K extends z.core.$ZodString<string>,
|
|
@@ -161,6 +162,19 @@ export interface CoRecordSchema<
|
|
|
161
162
|
R
|
|
162
163
|
>,
|
|
163
164
|
): CoRecordSchema<K, V, R>;
|
|
165
|
+
|
|
166
|
+
/**
|
|
167
|
+
* Permissions to be used when creating or composing CoValues
|
|
168
|
+
* @internal
|
|
169
|
+
*/
|
|
170
|
+
permissions: SchemaPermissions;
|
|
171
|
+
|
|
172
|
+
/**
|
|
173
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
174
|
+
*/
|
|
175
|
+
withPermissions(
|
|
176
|
+
permissions: SchemaPermissions,
|
|
177
|
+
): CoRecordSchema<K, V, DefaultResolveQuery>;
|
|
164
178
|
}
|
|
165
179
|
|
|
166
180
|
type CoRecordSchemaDefinition<
|
|
@@ -6,9 +6,14 @@ import {
|
|
|
6
6
|
InstanceOrPrimitiveOfSchema,
|
|
7
7
|
InstanceOrPrimitiveOfSchemaCoValuesMaybeLoaded,
|
|
8
8
|
coOptionalDefiner,
|
|
9
|
+
withSchemaPermissions,
|
|
9
10
|
} from "../../../internal.js";
|
|
10
11
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
11
12
|
import { CoreCoValueSchema } from "./CoValueSchema.js";
|
|
13
|
+
import {
|
|
14
|
+
DEFAULT_SCHEMA_PERMISSIONS,
|
|
15
|
+
SchemaPermissions,
|
|
16
|
+
} from "../schemaPermissions.js";
|
|
12
17
|
|
|
13
18
|
export interface CoreCoVectorSchema extends CoreCoValueSchema {
|
|
14
19
|
builtin: "CoVector";
|
|
@@ -31,6 +36,11 @@ export class CoVectorSchema implements CoreCoVectorSchema {
|
|
|
31
36
|
readonly builtin = "CoVector" as const;
|
|
32
37
|
readonly resolveQuery = true as const;
|
|
33
38
|
|
|
39
|
+
/**
|
|
40
|
+
* Permissions to be used when creating or composing CoValues
|
|
41
|
+
*/
|
|
42
|
+
permissions: SchemaPermissions = DEFAULT_SCHEMA_PERMISSIONS;
|
|
43
|
+
|
|
34
44
|
constructor(
|
|
35
45
|
public dimensions: number,
|
|
36
46
|
private coValueClass: typeof CoVector,
|
|
@@ -56,7 +66,11 @@ export class CoVectorSchema implements CoreCoVectorSchema {
|
|
|
56
66
|
vector: number[] | Float32Array,
|
|
57
67
|
options?: { owner: Account | Group } | Account | Group,
|
|
58
68
|
): CoVectorInstance {
|
|
59
|
-
|
|
69
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
70
|
+
options,
|
|
71
|
+
this.permissions,
|
|
72
|
+
);
|
|
73
|
+
return this.coValueClass.create(vector, optionsWithPermissions);
|
|
60
74
|
}
|
|
61
75
|
|
|
62
76
|
/**
|
|
@@ -99,6 +113,15 @@ export class CoVectorSchema implements CoreCoVectorSchema {
|
|
|
99
113
|
optional(): CoOptionalSchema<this> {
|
|
100
114
|
return coOptionalDefiner(this);
|
|
101
115
|
}
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
119
|
+
*/
|
|
120
|
+
withPermissions(permissions: SchemaPermissions): CoVectorSchema {
|
|
121
|
+
const copy = new CoVectorSchema(this.dimensions, this.coValueClass);
|
|
122
|
+
copy.permissions = permissions;
|
|
123
|
+
return copy;
|
|
124
|
+
}
|
|
102
125
|
}
|
|
103
126
|
|
|
104
127
|
export type CoVectorInstance = InstanceOrPrimitiveOfSchema<CoVectorSchema>;
|
|
@@ -6,9 +6,14 @@ import {
|
|
|
6
6
|
Settled,
|
|
7
7
|
coOptionalDefiner,
|
|
8
8
|
unstable_mergeBranchWithResolve,
|
|
9
|
+
withSchemaPermissions,
|
|
9
10
|
} from "../../../internal.js";
|
|
10
11
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
11
12
|
import { CoreCoValueSchema } from "./CoValueSchema.js";
|
|
13
|
+
import {
|
|
14
|
+
DEFAULT_SCHEMA_PERMISSIONS,
|
|
15
|
+
SchemaPermissions,
|
|
16
|
+
} from "../schemaPermissions.js";
|
|
12
17
|
|
|
13
18
|
export interface CoreFileStreamSchema extends CoreCoValueSchema {
|
|
14
19
|
builtin: "FileStream";
|
|
@@ -27,13 +32,22 @@ export class FileStreamSchema implements CoreFileStreamSchema {
|
|
|
27
32
|
readonly builtin = "FileStream" as const;
|
|
28
33
|
readonly resolveQuery = true as const;
|
|
29
34
|
|
|
35
|
+
/**
|
|
36
|
+
* Permissions to be used when creating or composing CoValues
|
|
37
|
+
*/
|
|
38
|
+
permissions: SchemaPermissions = DEFAULT_SCHEMA_PERMISSIONS;
|
|
39
|
+
|
|
30
40
|
constructor(private coValueClass: typeof FileStream) {}
|
|
31
41
|
|
|
32
42
|
create(options?: { owner: Group } | Group): FileStream;
|
|
33
43
|
/** @deprecated Creating CoValues with an Account as owner is deprecated. Use a Group instead. */
|
|
34
44
|
create(options?: { owner: Account | Group } | Account | Group): FileStream;
|
|
35
45
|
create(options?: { owner: Account | Group } | Account | Group): FileStream {
|
|
36
|
-
|
|
46
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
47
|
+
options,
|
|
48
|
+
this.permissions,
|
|
49
|
+
);
|
|
50
|
+
return this.coValueClass.create(optionsWithPermissions);
|
|
37
51
|
}
|
|
38
52
|
|
|
39
53
|
createFromBlob(
|
|
@@ -60,13 +74,35 @@ export class FileStreamSchema implements CoreFileStreamSchema {
|
|
|
60
74
|
| Account
|
|
61
75
|
| Group,
|
|
62
76
|
): Promise<FileStream> {
|
|
63
|
-
|
|
77
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
78
|
+
options,
|
|
79
|
+
this.permissions,
|
|
80
|
+
);
|
|
81
|
+
return this.coValueClass.createFromBlob(blob, optionsWithPermissions);
|
|
64
82
|
}
|
|
65
83
|
|
|
66
84
|
createFromArrayBuffer(
|
|
67
|
-
|
|
85
|
+
arrayBuffer: ArrayBuffer,
|
|
86
|
+
mimeType: string,
|
|
87
|
+
fileName: string | undefined,
|
|
88
|
+
options?:
|
|
89
|
+
| {
|
|
90
|
+
owner?: Account | Group;
|
|
91
|
+
onProgress?: (progress: number) => void;
|
|
92
|
+
}
|
|
93
|
+
| Account
|
|
94
|
+
| Group,
|
|
68
95
|
) {
|
|
69
|
-
|
|
96
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
97
|
+
options,
|
|
98
|
+
this.permissions,
|
|
99
|
+
);
|
|
100
|
+
return this.coValueClass.createFromArrayBuffer(
|
|
101
|
+
arrayBuffer,
|
|
102
|
+
mimeType,
|
|
103
|
+
fileName,
|
|
104
|
+
optionsWithPermissions,
|
|
105
|
+
);
|
|
70
106
|
}
|
|
71
107
|
|
|
72
108
|
loadAsBlob(
|
|
@@ -115,4 +151,15 @@ export class FileStreamSchema implements CoreFileStreamSchema {
|
|
|
115
151
|
optional(): CoOptionalSchema<this> {
|
|
116
152
|
return coOptionalDefiner(this);
|
|
117
153
|
}
|
|
154
|
+
|
|
155
|
+
/**
|
|
156
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
157
|
+
*/
|
|
158
|
+
withPermissions(
|
|
159
|
+
permissions: Omit<SchemaPermissions, "onInlineCreate">,
|
|
160
|
+
): FileStreamSchema {
|
|
161
|
+
const copy = new FileStreamSchema(this.coValueClass);
|
|
162
|
+
copy.permissions = permissions;
|
|
163
|
+
return copy;
|
|
164
|
+
}
|
|
118
165
|
}
|
|
@@ -7,10 +7,15 @@ import {
|
|
|
7
7
|
Settled,
|
|
8
8
|
coOptionalDefiner,
|
|
9
9
|
unstable_mergeBranchWithResolve,
|
|
10
|
+
withSchemaPermissions,
|
|
10
11
|
} from "../../../internal.js";
|
|
11
12
|
import { AnonymousJazzAgent } from "../../anonymousJazzAgent.js";
|
|
12
13
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
13
14
|
import { CoreCoValueSchema } from "./CoValueSchema.js";
|
|
15
|
+
import {
|
|
16
|
+
DEFAULT_SCHEMA_PERMISSIONS,
|
|
17
|
+
SchemaPermissions,
|
|
18
|
+
} from "../schemaPermissions.js";
|
|
14
19
|
|
|
15
20
|
export interface CorePlainTextSchema extends CoreCoValueSchema {
|
|
16
21
|
builtin: "CoPlainText";
|
|
@@ -29,6 +34,12 @@ export class PlainTextSchema implements CorePlainTextSchema {
|
|
|
29
34
|
readonly builtin = "CoPlainText" as const;
|
|
30
35
|
readonly resolveQuery = true as const;
|
|
31
36
|
|
|
37
|
+
/**
|
|
38
|
+
* Permissions to be used when creating or composing CoValues
|
|
39
|
+
* @internal
|
|
40
|
+
*/
|
|
41
|
+
permissions: SchemaPermissions = DEFAULT_SCHEMA_PERMISSIONS;
|
|
42
|
+
|
|
32
43
|
constructor(private coValueClass: typeof CoPlainText) {}
|
|
33
44
|
|
|
34
45
|
create(text: string, options?: { owner: Group } | Group): CoPlainText;
|
|
@@ -41,7 +52,11 @@ export class PlainTextSchema implements CorePlainTextSchema {
|
|
|
41
52
|
text: string,
|
|
42
53
|
options?: { owner: Account | Group } | Account | Group,
|
|
43
54
|
): CoPlainText {
|
|
44
|
-
|
|
55
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
56
|
+
options,
|
|
57
|
+
this.permissions,
|
|
58
|
+
);
|
|
59
|
+
return this.coValueClass.create(text, optionsWithPermissions);
|
|
45
60
|
}
|
|
46
61
|
|
|
47
62
|
load(
|
|
@@ -90,4 +105,13 @@ export class PlainTextSchema implements CorePlainTextSchema {
|
|
|
90
105
|
optional(): CoOptionalSchema<this> {
|
|
91
106
|
return coOptionalDefiner(this);
|
|
92
107
|
}
|
|
108
|
+
|
|
109
|
+
/**
|
|
110
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
111
|
+
*/
|
|
112
|
+
withPermissions(permissions: SchemaPermissions): PlainTextSchema {
|
|
113
|
+
const copy = new PlainTextSchema(this.coValueClass);
|
|
114
|
+
copy.permissions = permissions;
|
|
115
|
+
return copy;
|
|
116
|
+
}
|
|
93
117
|
}
|
|
@@ -6,10 +6,15 @@ import {
|
|
|
6
6
|
Settled,
|
|
7
7
|
coOptionalDefiner,
|
|
8
8
|
unstable_mergeBranchWithResolve,
|
|
9
|
+
withSchemaPermissions,
|
|
9
10
|
} from "../../../internal.js";
|
|
10
11
|
import { AnonymousJazzAgent } from "../../anonymousJazzAgent.js";
|
|
11
12
|
import { CoOptionalSchema } from "./CoOptionalSchema.js";
|
|
12
13
|
import { CoreCoValueSchema } from "./CoValueSchema.js";
|
|
14
|
+
import {
|
|
15
|
+
DEFAULT_SCHEMA_PERMISSIONS,
|
|
16
|
+
SchemaPermissions,
|
|
17
|
+
} from "../schemaPermissions.js";
|
|
13
18
|
|
|
14
19
|
export interface CoreRichTextSchema extends CoreCoValueSchema {
|
|
15
20
|
builtin: "CoRichText";
|
|
@@ -28,6 +33,8 @@ export class RichTextSchema implements CoreRichTextSchema {
|
|
|
28
33
|
readonly builtin = "CoRichText" as const;
|
|
29
34
|
readonly resolveQuery = true as const;
|
|
30
35
|
|
|
36
|
+
permissions: SchemaPermissions = DEFAULT_SCHEMA_PERMISSIONS;
|
|
37
|
+
|
|
31
38
|
constructor(private coValueClass: typeof CoRichText) {}
|
|
32
39
|
|
|
33
40
|
create(text: string, options?: { owner: Group } | Group): CoRichText;
|
|
@@ -40,7 +47,11 @@ export class RichTextSchema implements CoreRichTextSchema {
|
|
|
40
47
|
text: string,
|
|
41
48
|
options?: { owner: Account | Group } | Account | Group,
|
|
42
49
|
): CoRichText {
|
|
43
|
-
|
|
50
|
+
const optionsWithPermissions = withSchemaPermissions(
|
|
51
|
+
options,
|
|
52
|
+
this.permissions,
|
|
53
|
+
);
|
|
54
|
+
return this.coValueClass.create(text, optionsWithPermissions);
|
|
44
55
|
}
|
|
45
56
|
|
|
46
57
|
load(
|
|
@@ -85,4 +96,13 @@ export class RichTextSchema implements CoreRichTextSchema {
|
|
|
85
96
|
optional(): CoOptionalSchema<this> {
|
|
86
97
|
return coOptionalDefiner(this);
|
|
87
98
|
}
|
|
99
|
+
|
|
100
|
+
/**
|
|
101
|
+
* Configure permissions to be used when creating or composing CoValues
|
|
102
|
+
*/
|
|
103
|
+
withPermissions(permissions: SchemaPermissions): RichTextSchema {
|
|
104
|
+
const copy = new RichTextSchema(this.coValueClass);
|
|
105
|
+
copy.permissions = permissions;
|
|
106
|
+
return copy;
|
|
107
|
+
}
|
|
88
108
|
}
|
|
@@ -1,3 +1,4 @@
|
|
|
1
|
+
import { JsonValue, RawCoMap } from "cojson";
|
|
1
2
|
import {
|
|
2
3
|
AnyZodOrCoValueSchema,
|
|
3
4
|
CoDiscriminatedUnionSchema,
|
|
@@ -37,25 +38,7 @@ export function schemaUnionDiscriminatorFor(
|
|
|
37
38
|
}
|
|
38
39
|
}
|
|
39
40
|
|
|
40
|
-
const availableOptions
|
|
41
|
-
|
|
42
|
-
for (const option of options) {
|
|
43
|
-
if (option.builtin === "CoMap") {
|
|
44
|
-
availableOptions.push(option);
|
|
45
|
-
} else if (option.builtin === "CoDiscriminatedUnion") {
|
|
46
|
-
for (const subOption of (
|
|
47
|
-
option as CoDiscriminatedUnionSchema<any>
|
|
48
|
-
).getDefinition().options) {
|
|
49
|
-
if (!options.includes(subOption)) {
|
|
50
|
-
options.push(subOption);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
} else {
|
|
54
|
-
throw new Error(
|
|
55
|
-
"Unsupported zod type in co.discriminatedUnion() of collaborative types",
|
|
56
|
-
);
|
|
57
|
-
}
|
|
58
|
-
}
|
|
41
|
+
const availableOptions = getFlattenedUnionOptions(schema);
|
|
59
42
|
|
|
60
43
|
const determineSchema: SchemaUnionDiscriminator<CoMap> = (
|
|
61
44
|
discriminable,
|
|
@@ -77,7 +60,10 @@ export function schemaUnionDiscriminatorFor(
|
|
|
77
60
|
|
|
78
61
|
for (const key of Object.keys(discriminatorMap)) {
|
|
79
62
|
const discriminatorDef = optionDef.shape[key];
|
|
80
|
-
const discriminatorValue =
|
|
63
|
+
const discriminatorValue = resolveDiscriminantValue(
|
|
64
|
+
discriminable,
|
|
65
|
+
key,
|
|
66
|
+
);
|
|
81
67
|
|
|
82
68
|
if (discriminatorValue && typeof discriminatorValue === "object") {
|
|
83
69
|
throw new Error("Discriminator must be a primitive value");
|
|
@@ -175,3 +161,69 @@ function isCoDiscriminatedUnion(
|
|
|
175
161
|
): def is CoreCoDiscriminatedUnionSchema<any> {
|
|
176
162
|
return def.builtin === "CoDiscriminatedUnion";
|
|
177
163
|
}
|
|
164
|
+
|
|
165
|
+
/**
|
|
166
|
+
* Flattens all options from a discriminated union schema, including nested unions.
|
|
167
|
+
* Returns all options in a flat array.
|
|
168
|
+
*/
|
|
169
|
+
export function getFlattenedUnionOptions(
|
|
170
|
+
schema: CoreCoDiscriminatedUnionSchema<DiscriminableCoValueSchemas>,
|
|
171
|
+
): DiscriminableCoreCoValueSchema[] {
|
|
172
|
+
const definition = schema.getDefinition();
|
|
173
|
+
const options = definition.options;
|
|
174
|
+
const availableOptions: DiscriminableCoreCoValueSchema[] = [];
|
|
175
|
+
|
|
176
|
+
for (const option of options) {
|
|
177
|
+
if (option.builtin === "CoMap") {
|
|
178
|
+
availableOptions.push(option);
|
|
179
|
+
} else if (option.builtin === "CoDiscriminatedUnion") {
|
|
180
|
+
const nestedOptions = getFlattenedUnionOptions(
|
|
181
|
+
option as CoreCoDiscriminatedUnionSchema<DiscriminableCoValueSchemas>,
|
|
182
|
+
);
|
|
183
|
+
for (const subOption of nestedOptions) {
|
|
184
|
+
if (!availableOptions.includes(subOption)) {
|
|
185
|
+
availableOptions.push(subOption);
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
} else {
|
|
189
|
+
throw new Error(
|
|
190
|
+
"Unsupported zod type in co.discriminatedUnion() of collaborative types",
|
|
191
|
+
);
|
|
192
|
+
}
|
|
193
|
+
}
|
|
194
|
+
|
|
195
|
+
return availableOptions;
|
|
196
|
+
}
|
|
197
|
+
|
|
198
|
+
/**
|
|
199
|
+
* Gets the discriminator values for a given option and discriminator key
|
|
200
|
+
*/
|
|
201
|
+
export function getDiscriminatorValuesForOption(
|
|
202
|
+
option: DiscriminableCoreCoValueSchema,
|
|
203
|
+
discriminatorKey: string,
|
|
204
|
+
): Set<unknown> | undefined {
|
|
205
|
+
const optionDefinition = option.getDefinition();
|
|
206
|
+
return optionDefinition.discriminatorMap?.[discriminatorKey];
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
export function resolveDiscriminantValue(
|
|
210
|
+
init: unknown,
|
|
211
|
+
discriminatorKey: string,
|
|
212
|
+
): JsonValue | undefined {
|
|
213
|
+
if (init == null) {
|
|
214
|
+
return undefined;
|
|
215
|
+
}
|
|
216
|
+
|
|
217
|
+
if (init instanceof Map || init instanceof RawCoMap) {
|
|
218
|
+
return init.get(discriminatorKey);
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
if (typeof init === "object") {
|
|
222
|
+
const record = init as Record<string, JsonValue>;
|
|
223
|
+
if (discriminatorKey in record) {
|
|
224
|
+
return record[discriminatorKey];
|
|
225
|
+
}
|
|
226
|
+
}
|
|
227
|
+
|
|
228
|
+
return undefined;
|
|
229
|
+
}
|
package/src/tools/internal.ts
CHANGED
|
@@ -53,6 +53,7 @@ export * from "./implementation/zodSchema/typeConverters/InstanceOfSchemaCoValue
|
|
|
53
53
|
export * from "./implementation/zodSchema/typeConverters/CoFieldSchemaInit.js";
|
|
54
54
|
export * from "./implementation/zodSchema/runtimeConverters/coValueSchemaTransformation.js";
|
|
55
55
|
export * from "./implementation/zodSchema/runtimeConverters/schemaFieldToCoFieldDef.js";
|
|
56
|
+
export * from "./implementation/zodSchema/schemaPermissions.js";
|
|
56
57
|
export * from "./coValues/extensions/imageDef.js";
|
|
57
58
|
|
|
58
59
|
export * from "./implementation/ContextManager.js";
|
package/src/tools/testing.ts
CHANGED
|
@@ -16,9 +16,11 @@ import {
|
|
|
16
16
|
coValueClassFromCoValueClassOrSchema,
|
|
17
17
|
createAnonymousJazzContext,
|
|
18
18
|
createJazzContext,
|
|
19
|
-
|
|
19
|
+
MockSessionProvider,
|
|
20
20
|
} from "./internal.js";
|
|
21
21
|
|
|
22
|
+
const randomSessionProvider = new MockSessionProvider();
|
|
23
|
+
|
|
22
24
|
export { assertLoaded } from "./lib/utils.js";
|
|
23
25
|
|
|
24
26
|
const syncServer: { current: LocalNode | null; asyncPeers: boolean } = {
|
|
@@ -19,7 +19,7 @@ import {
|
|
|
19
19
|
} from "../implementation/ContextManager";
|
|
20
20
|
import {
|
|
21
21
|
createJazzContext,
|
|
22
|
-
|
|
22
|
+
MockSessionProvider,
|
|
23
23
|
} from "../implementation/createContext";
|
|
24
24
|
import {
|
|
25
25
|
CoValueFromRaw,
|
|
@@ -37,6 +37,7 @@ import { SubscriptionCache } from "../subscribe/SubscriptionCache";
|
|
|
37
37
|
import { createAsyncStorage, getDbPath } from "./testStorage";
|
|
38
38
|
|
|
39
39
|
const Crypto = await WasmCrypto.create();
|
|
40
|
+
const randomSessionProvider = new MockSessionProvider();
|
|
40
41
|
|
|
41
42
|
class TestJazzContextManager<Acc extends Account> extends JazzContextManager<
|
|
42
43
|
Acc,
|
|
@@ -7,10 +7,10 @@ import {
|
|
|
7
7
|
createJazzContextFromExistingCredentials,
|
|
8
8
|
isControlledAccount,
|
|
9
9
|
} from "../index.js";
|
|
10
|
-
import { co,
|
|
10
|
+
import { co, MockSessionProvider } from "../internal.js";
|
|
11
11
|
|
|
12
12
|
const Crypto = await WasmCrypto.create();
|
|
13
|
-
|
|
13
|
+
const randomSessionProvider = new MockSessionProvider();
|
|
14
14
|
const connectedPeers = cojsonInternals.connectedPeers;
|
|
15
15
|
|
|
16
16
|
describe("CoPlainText", () => {
|