jazz-tools 0.14.1 → 0.14.4

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (32) hide show
  1. package/.turbo/turbo-build.log +7 -7
  2. package/CHANGELOG.md +13 -0
  3. package/dist/{chunk-WLOZKDOH.js → chunk-6QMAFVZO.js} +3 -1
  4. package/dist/{chunk-WLOZKDOH.js.map → chunk-6QMAFVZO.js.map} +1 -1
  5. package/dist/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts.map +1 -1
  6. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts +1 -1
  7. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +1 -1
  8. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts +1 -1
  9. package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +1 -1
  10. package/dist/index.js +1 -1
  11. package/dist/testing.d.ts +4 -4
  12. package/dist/testing.d.ts.map +1 -1
  13. package/dist/testing.js +5 -6
  14. package/dist/testing.js.map +1 -1
  15. package/dist/tests/coMap.record.test-d.d.ts +2 -0
  16. package/dist/tests/coMap.record.test-d.d.ts.map +1 -0
  17. package/dist/tests/coMap.test-d.d.ts +2 -0
  18. package/dist/tests/coMap.test-d.d.ts.map +1 -0
  19. package/dist/tests/patterns/notifications.test.d.ts +2 -0
  20. package/dist/tests/patterns/notifications.test.d.ts.map +1 -0
  21. package/package.json +1 -1
  22. package/src/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.ts +3 -0
  23. package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts +3 -1
  24. package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts +3 -1
  25. package/src/testing.ts +17 -10
  26. package/src/tests/coList.test.ts +9 -0
  27. package/src/tests/coMap.record.test-d.ts +149 -0
  28. package/src/tests/coMap.record.test.ts +11 -0
  29. package/src/tests/coMap.test-d.ts +348 -0
  30. package/src/tests/coMap.test.ts +8 -0
  31. package/src/tests/patterns/notifications.test.ts +89 -0
  32. package/src/tests/patterns/requestToJoin.test.ts +8 -5
@@ -1 +1 @@
1
- {"version":3,"file":"zodFieldToCoFieldDef.d.ts","sourceRoot":"","sources":["../../../../src/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAkB,MAAM,sBAAsB,CAAC;AAO3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,KAAK,WAAW,GACZ,YAAY,GACZ,kBAAkB,GAClB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GACnC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GACnC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAAC;AAErD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,wGA+EvD"}
1
+ {"version":3,"file":"zodFieldToCoFieldDef.d.ts","sourceRoot":"","sources":["../../../../src/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EAAE,KAAK,EAAE,YAAY,EAAkB,MAAM,sBAAsB,CAAC;AAO3E,OAAO,EAAE,kBAAkB,EAAE,MAAM,iBAAiB,CAAC;AAGrD,KAAK,WAAW,GACZ,YAAY,GACZ,kBAAkB,GAClB,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GACpC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GACnC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,GACxC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,GACjC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,IAAI,CAAC,QAAQ,EAAE,CAAC,GACnC,CAAC,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,GAAG,EAAE,GAAG,CAAC,GAAG;IAAE,OAAO,EAAE,GAAG,CAAA;CAAE,CAAC,CAAC;AAErD,wBAAgB,oBAAoB,CAAC,MAAM,EAAE,WAAW,wGAkFvD"}
@@ -25,5 +25,5 @@ export type InstanceOrPrimitiveOfSchema<S extends CoValueClass | z.core.$ZodType
25
25
  -readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchema<Shape[key]>;
26
26
  } : S extends z.core.$ZodArray<infer Item> ? InstanceOrPrimitiveOfSchema<Item>[] : S extends z.core.$ZodTuple<infer Items> ? {
27
27
  [key in keyof Items]: InstanceOrPrimitiveOfSchema<Items[key]>;
28
- } : S extends z.core.$ZodString ? string : S extends z.core.$ZodNumber ? number : S extends z.core.$ZodBoolean ? boolean : S extends z.core.$ZodLiteral<infer Literal> ? Literal : S extends z.core.$ZodDate ? Date : never : S extends CoValueClass ? InstanceType<S> : never;
28
+ } : S extends z.core.$ZodString ? string : S extends z.core.$ZodNumber ? number : S extends z.core.$ZodBoolean ? boolean : S extends z.core.$ZodLiteral<infer Literal> ? Literal : S extends z.core.$ZodDate ? Date : S extends z.core.$ZodEnum<infer Enum> ? Enum[keyof Enum] : never : S extends CoValueClass ? InstanceType<S> : never;
29
29
  //# sourceMappingURL=InstanceOrPrimitiveOfSchema.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceOrPrimitiveOfSchema.d.ts","sourceRoot":"","sources":["../../../../src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InstanceOrPrimitiveOfSchema.d.ts","sourceRoot":"","sources":["../../../../src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts"],"names":[],"mappings":"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"}
@@ -25,5 +25,5 @@ export type InstanceOrPrimitiveOfSchemaCoValuesNullable<S extends CoValueClass |
25
25
  -readonly [key in keyof Shape]: InstanceOrPrimitiveOfSchema<Shape[key]>;
26
26
  } : S extends z.core.$ZodArray<infer Item> ? InstanceOrPrimitiveOfSchema<Item>[] : S extends z.core.$ZodTuple<infer Items> ? {
27
27
  [key in keyof Items]: InstanceOrPrimitiveOfSchema<Items[key]>;
28
- } : S extends z.core.$ZodString ? string : S extends z.core.$ZodNumber ? number : S extends z.core.$ZodBoolean ? boolean : S extends z.core.$ZodLiteral<infer Literal> ? Literal : S extends z.core.$ZodDate ? Date : never : S extends CoValueClass ? InstanceType<S> | null : never;
28
+ } : S extends z.core.$ZodString ? string : S extends z.core.$ZodNumber ? number : S extends z.core.$ZodBoolean ? boolean : S extends z.core.$ZodLiteral<infer Literal> ? Literal : S extends z.core.$ZodDate ? Date : S extends z.core.$ZodEnum<infer Enum> ? Enum[keyof Enum] : never : S extends CoValueClass ? InstanceType<S> | null : never;
29
29
  //# sourceMappingURL=InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts","sourceRoot":"","sources":["../../../../src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts","sourceRoot":"","sources":["../../../../src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts"],"names":[],"mappings":"AAAA,OAAO,CAAC,MAAM,QAAQ,CAAC;AACvB,OAAO,EACL,OAAO,EACP,MAAM,EACN,MAAM,EACN,KAAK,EACL,WAAW,EACX,UAAU,EACV,YAAY,EACZ,UAAU,EACV,2BAA2B,EAC3B,OAAO,EACR,MAAM,sBAAsB,CAAC;AAC9B,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,eAAe,EAAE,MAAM,gCAAgC,CAAC;AACjE,OAAO,EAAE,cAAc,EAAE,MAAM,+BAA+B,CAAC;AAC/D,OAAO,EAAE,gBAAgB,EAAE,MAAM,oCAAoC,CAAC;AACtE,OAAO,EAAE,eAAe,EAAE,MAAM,mCAAmC,CAAC;AACpE,OAAO,EAAE,cAAc,EAAE,MAAM,kCAAkC,CAAC;AAElE,MAAM,MAAM,2CAA2C,CACrD,CAAC,SAAS,YAAY,GAAG,CAAC,CAAC,IAAI,CAAC,QAAQ,IACtC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,GACzB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GAAG;IACzC,aAAa,EAAE,IAAI,CAAC;IACpB,OAAO,EAAE,SAAS,CAAC;CACpB,GAEK,CAAC;IACC,CAAC,UAAU,GAAG,IAAI,MAAM,KAAK,GAAG,2CAA2C,CACzE,KAAK,CAAC,GAAG,CAAC,CACX;CACF,GAAG;IAAE,OAAO,EAAE,OAAO,GAAG,IAAI,CAAA;CAAE,GAAG,OAAO,CAAC,GAC1C,IAAI,GACR,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;IAC5C,aAAa,EAAE,IAAI,CAAC;CACrB,GAEG,CAAC;IACC,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAC3B,MAAM,GAAG,2CAA2C,CAAC,CAAC,CAAC;CAC1D,GAAG,KAAK,CAAC,GACV,IAAI,GACR,CAAC,SAAS,cAAc,CAAC,MAAM,KAAK,EAAE,MAAM,MAAM,CAAC,GAE7C,CAAC;IACC,CAAC,UAAU,GAAG,IAAI,MAAM,KAAK,GAAG,2CAA2C,CACzE,KAAK,CAAC,GAAG,CAAC,CACX;CACF,GAAG,CAAC,OAAO,SAAS,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,GACtC,EAAE,GACF;IACE,CAAC,GAAG,EAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,CAAC,MAAM,CAAC,CAAC;CACtC,CAAC,GACJ,KAAK,CAAC,GACR,IAAI,GACR,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,CAAC,GAChC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAC7D,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,CAAC,GAChC,MAAM,CAAC,2CAA2C,CAAC,CAAC,CAAC,CAAC,GAAG,IAAI,GAC7D,CAAC,SAAS,eAAe,GACvB,WAAW,GAAG,IAAI,GAClB,CAAC,SAAS,cAAc,GACtB,UAAU,GAAG,IAAI,GACjB,CAAC,SAAS,gBAAgB,GACxB,UAAU,GAAG,IAAI,GACjB,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,GAEpC,2CAA2C,CAAC,KAAK,CAAC,GAClD,SAAS,GACb,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,GACvC,2CAA2C,CACzC,OAAO,CAAC,MAAM,CAAC,CAChB,GAED,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,KAAK,CAAC,GACtC;IACE,CAAC,UAAU,GAAG,IAAI,MAAM,KAAK,GAAG,2BAA2B,CACzD,KAAK,CAAC,GAAG,CAAC,CACX;CACF,GACD,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,IAAI,CAAC,GACpC,2BAA2B,CAAC,IAAI,CAAC,EAAE,GACnC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,KAAK,CAAC,GACrC;KACG,GAAG,IAAI,MAAM,KAAK,GAAG,2BAA2B,CAC/C,KAAK,CAAC,GAAG,CAAC,CACX;CACF,GACD,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,GACzB,MAAM,GACN,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,GACzB,MAAM,GACN,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,GAC1B,OAAO,GACP,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,MAAM,OAAO,CAAC,GACzC,OAAO,GACP,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,GACvB,IAAI,GACJ,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,IAAI,CAAC,GACnC,IAAI,CAAC,MAAM,IAAI,CAAC,GAChB,KAAK,GAC3C,CAAC,SAAS,YAAY,GACpB,YAAY,CAAC,CAAC,CAAC,GAAG,IAAI,GACtB,KAAK,CAAC"}
package/dist/index.js CHANGED
@@ -32,7 +32,7 @@ import {
32
32
  randomSessionProvider,
33
33
  subscribeToCoValue,
34
34
  zodSchemaToCoSchema
35
- } from "./chunk-WLOZKDOH.js";
35
+ } from "./chunk-6QMAFVZO.js";
36
36
 
37
37
  // src/exports.ts
38
38
  import { z } from "zod/v4";
package/dist/testing.d.ts CHANGED
@@ -1,15 +1,15 @@
1
1
  import { LocalNode, Peer } from "cojson";
2
2
  import { PureJSCrypto } from "cojson/dist/crypto/PureJSCrypto";
3
- import { Account, AccountClass, type AnonymousJazzAgent, type CoValueClass, CoValueFromRaw, JazzContextManager, JazzContextManagerAuthProps, JazzContextManagerBaseProps } from "./internal.js";
3
+ import { Account, AccountClass, type AnonymousJazzAgent, AnyAccountSchema, type CoValueClass, CoValueFromRaw, InstanceOfSchema, JazzContextManager, JazzContextManagerAuthProps, JazzContextManagerBaseProps } from "./internal.js";
4
4
  export declare class TestJSCrypto extends PureJSCrypto {
5
5
  static create(): Promise<PureJSCrypto>;
6
6
  }
7
7
  export declare function getPeerConnectedToTestSyncServer(): Peer;
8
- export declare function createJazzTestAccount<A extends Account>(options?: {
8
+ export declare function createJazzTestAccount<S extends (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema>(options?: {
9
9
  isCurrentActiveAccount?: boolean;
10
- AccountSchema?: CoValueClass<A>;
10
+ AccountSchema?: S;
11
11
  creationProps?: Record<string, unknown>;
12
- }): Promise<A>;
12
+ }): Promise<InstanceOfSchema<S>>;
13
13
  export declare function setActiveAccount(account: Account): void;
14
14
  export declare function createJazzTestGuest(): Promise<{
15
15
  guest: AnonymousJazzAgent;
@@ -1 +1 @@
1
- {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,kBAAkB,EAEvB,KAAK,YAAY,EACjB,cAAc,EACd,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAK5B,MAAM,eAAe,CAAC;AAcvB,qBAAa,YAAa,SAAQ,YAAY;WAC/B,MAAM;CAoBpB;AAED,wBAAgB,gCAAgC,SAgB/C;AAKD,wBAAsB,qBAAqB,CAAC,CAAC,SAAS,OAAO,EAAE,OAAO,CAAC,EAAE;IACvE,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,YAAY,CAAC,CAAC,CAAC,CAAC;IAChC,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,CAAC,CAAC,CAuDb;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAEhD;AAED,wBAAsB,mBAAmB;;GASxC;AAED,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IACzD,2BAA2B,CAAC,GAAG,CAAC,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,GAAG,SAAS,OAAO,CACnB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,OAAO,EAC3C,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EAC7C,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IAS1C,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,OAAO,EACpC,OAAO,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IA0C1C,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,OAAO,EAClC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EACxC,KAAK,GAAE,2BAA2B,CAAC,GAAG,CAAM;IAmBxC,aAAa,CACjB,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,EACvC,SAAS,CAAC,EAAE,2BAA2B;;uBAkEmuL,cAAc;;;;;;;;CApC3xL;AAED,wBAAsB,YAAY,CAChC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,KAAK,GAAE,QAAQ,GAAG,QAAmB,EACrC,KAAK,GAAE,QAAQ,GAAG,QAAmB,iBAYtC;AAED,wBAAsB,iBAAiB,qBAetC"}
1
+ {"version":3,"file":"testing.d.ts","sourceRoot":"","sources":["../src/testing.ts"],"names":[],"mappings":"AAAA,OAAO,EAA+B,SAAS,EAAE,IAAI,EAAE,MAAM,QAAQ,CAAC;AAEtE,OAAO,EAAE,YAAY,EAAE,MAAM,iCAAiC,CAAC;AAC/D,OAAO,EACL,OAAO,EACP,YAAY,EACZ,KAAK,kBAAkB,EACvB,gBAAgB,EAEhB,KAAK,YAAY,EACjB,cAAc,EACd,gBAAgB,EAChB,kBAAkB,EAClB,2BAA2B,EAC3B,2BAA2B,EAM5B,MAAM,eAAe,CAAC;AAcvB,qBAAa,YAAa,SAAQ,YAAY;WAC/B,MAAM;CAoBpB;AAED,wBAAgB,gCAAgC,SAgB/C;AAKD,wBAAsB,qBAAqB,CACzC,CAAC,SACG,CAAC,YAAY,CAAC,OAAO,CAAC,GAAG,cAAc,CAAC,OAAO,CAAC,CAAC,GACjD,gBAAgB,EACpB,OAAO,CAAC,EAAE;IACV,sBAAsB,CAAC,EAAE,OAAO,CAAC;IACjC,aAAa,CAAC,EAAE,CAAC,CAAC;IAClB,aAAa,CAAC,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;CACzC,GAAG,OAAO,CAAC,gBAAgB,CAAC,CAAC,CAAC,CAAC,CAuD/B;AAED,wBAAgB,gBAAgB,CAAC,OAAO,EAAE,OAAO,QAEhD;AAED,wBAAsB,mBAAmB;;GASxC;AAED,MAAM,MAAM,2BAA2B,CAAC,GAAG,SAAS,OAAO,IACzD,2BAA2B,CAAC,GAAG,CAAC,GAAG;IACjC,kBAAkB,CAAC,EAAE,MAAM,CAAC;IAC5B,aAAa,CAAC,EAAE,YAAY,CAAC,GAAG,CAAC,GAAG,cAAc,CAAC,GAAG,CAAC,CAAC;IACxD,eAAe,CAAC,EAAE,OAAO,CAAC;CAC3B,CAAC;AAEJ,qBAAa,sBAAsB,CACjC,GAAG,SAAS,OAAO,CACnB,SAAQ,kBAAkB,CAAC,GAAG,EAAE,2BAA2B,CAAC,GAAG,CAAC,CAAC;IACjE,MAAM,CAAC,kBAAkB,CAAC,GAAG,SAAS,OAAO,EAC3C,OAAO,CAAC,EAAE,GAAG,GAAG;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EAC7C,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IAS1C,MAAM,CAAC,WAAW,CAAC,GAAG,SAAS,OAAO,EACpC,OAAO,EAAE,GAAG,EACZ,KAAK,CAAC,EAAE,2BAA2B,CAAC,GAAG,CAAC;IA0C1C,MAAM,CAAC,SAAS,CAAC,GAAG,SAAS,OAAO,EAClC,EAAE,KAAK,EAAE,EAAE;QAAE,KAAK,EAAE,kBAAkB,CAAA;KAAE,EACxC,KAAK,GAAE,2BAA2B,CAAC,GAAG,CAAM;IAmBxC,aAAa,CACjB,KAAK,EAAE,2BAA2B,CAAC,GAAG,CAAC,EACvC,SAAS,CAAC,EAAE,2BAA2B;;uBAkEg/K,cAAc;;;;;;;;CApCxiL;AAED,wBAAsB,YAAY,CAChC,CAAC,EAAE,OAAO,EACV,CAAC,EAAE,OAAO,EACV,KAAK,GAAE,QAAQ,GAAG,QAAmB,EACrC,KAAK,GAAE,QAAQ,GAAG,QAAmB,iBAYtC;AAED,wBAAsB,iBAAiB,qBAetC"}
package/dist/testing.js CHANGED
@@ -2,10 +2,11 @@ import {
2
2
  Account,
3
3
  JazzContextManager,
4
4
  activeAccountContext,
5
+ anySchemaToCoSchema,
5
6
  createAnonymousJazzContext,
6
7
  createJazzContext,
7
8
  randomSessionProvider
8
- } from "./chunk-WLOZKDOH.js";
9
+ } from "./chunk-6QMAFVZO.js";
9
10
 
10
11
  // src/testing.ts
11
12
  import { LocalNode } from "cojson";
@@ -43,7 +44,7 @@ function getPeerConnectedToTestSyncServer() {
43
44
  var SecretSeedMap = /* @__PURE__ */ new Map();
44
45
  var isMigrationActive = false;
45
46
  async function createJazzTestAccount(options) {
46
- const AccountSchema = options?.AccountSchema ?? Account;
47
+ const AccountClass2 = options?.AccountSchema ? anySchemaToCoSchema(options.AccountSchema) : Account;
47
48
  const peers = [];
48
49
  if (syncServer.current) {
49
50
  peers.push(getPeerConnectedToTestSyncServer());
@@ -65,9 +66,7 @@ async function createJazzTestAccount(options) {
65
66
  );
66
67
  }
67
68
  isMigrationActive = true;
68
- const account2 = new AccountSchema({
69
- fromRaw: rawAccount
70
- });
69
+ const account2 = AccountClass2.fromRaw(rawAccount);
71
70
  const prevActiveAccount = activeAccountContext.maybeGet();
72
71
  activeAccountContext.set(account2);
73
72
  await account2.applyMigration?.(creationProps);
@@ -77,7 +76,7 @@ async function createJazzTestAccount(options) {
77
76
  isMigrationActive = false;
78
77
  }
79
78
  });
80
- const account = AccountSchema.fromNode(node);
79
+ const account = AccountClass2.fromNode(node);
81
80
  SecretSeedMap.set(account.id, secretSeed);
82
81
  if (options?.isCurrentActiveAccount) {
83
82
  activeAccountContext.set(account);
@@ -1 +1 @@
1
- {"version":3,"sources":["../src/testing.ts"],"sourcesContent":["import { AgentSecret, CryptoProvider, LocalNode, Peer } from \"cojson\";\nimport { cojsonInternals } from \"cojson\";\nimport { PureJSCrypto } from \"cojson/dist/crypto/PureJSCrypto\";\nimport {\n Account,\n AccountClass,\n type AnonymousJazzAgent,\n AuthCredentials,\n type CoValueClass,\n CoValueFromRaw,\n JazzContextManager,\n JazzContextManagerAuthProps,\n JazzContextManagerBaseProps,\n activeAccountContext,\n createAnonymousJazzContext,\n createJazzContext,\n randomSessionProvider,\n} from \"./internal.js\";\n\nconst syncServer: { current: LocalNode | null } = { current: null };\n\ntype TestAccountSchema<Acc extends Account> = CoValueClass<Acc> & {\n fromNode: (typeof Account)[\"fromNode\"];\n create: (options: {\n creationProps: { name: string };\n initialAgentSecret?: AgentSecret;\n peersToLoadFrom?: Peer[];\n crypto: CryptoProvider;\n }) => Promise<Acc>;\n};\n\nexport class TestJSCrypto extends PureJSCrypto {\n static async create() {\n if (\"navigator\" in globalThis && navigator.userAgent?.includes(\"jsdom\")) {\n // Mocking crypto seal & encrypt to make it work with JSDom. Getting \"Error: Uint8Array expected\" there\n const crypto = new PureJSCrypto();\n\n crypto.seal = (options) =>\n `sealed_U${cojsonInternals.stableStringify(options.message)}` as any;\n crypto.unseal = (sealed) =>\n JSON.parse(sealed.substring(\"sealed_U\".length));\n crypto.encrypt = (message) =>\n `encrypted_U${cojsonInternals.stableStringify(message)}` as any;\n crypto.decryptRaw = (encrypted) =>\n encrypted.substring(\"encrypted_U\".length) as any;\n\n return crypto;\n }\n\n // For non-jsdom environments, we use the real crypto\n return new PureJSCrypto();\n }\n}\n\nexport function getPeerConnectedToTestSyncServer() {\n if (!syncServer.current) {\n throw new Error(\"Sync server not initialized\");\n }\n\n const [aPeer, bPeer] = cojsonInternals.connectedPeers(\n Math.random().toString(),\n Math.random().toString(),\n {\n peer1role: \"server\",\n peer2role: \"server\",\n },\n );\n syncServer.current.syncManager.addPeer(aPeer);\n\n return bPeer;\n}\n\nconst SecretSeedMap = new Map<string, Uint8Array>();\nlet isMigrationActive = false;\n\nexport async function createJazzTestAccount<A extends Account>(options?: {\n isCurrentActiveAccount?: boolean;\n AccountSchema?: CoValueClass<A>;\n creationProps?: Record<string, unknown>;\n}): Promise<A> {\n const AccountSchema = (options?.AccountSchema ??\n Account) as unknown as TestAccountSchema<Account>;\n const peers = [];\n if (syncServer.current) {\n peers.push(getPeerConnectedToTestSyncServer());\n }\n\n const crypto = await TestJSCrypto.create();\n const secretSeed = crypto.newRandomSecretSeed();\n\n const { node } = await LocalNode.withNewlyCreatedAccount({\n creationProps: {\n name: \"Test Account\",\n ...options?.creationProps,\n },\n initialAgentSecret: crypto.agentSecretFromSecretSeed(secretSeed),\n crypto,\n peersToLoadFrom: peers,\n migration: async (rawAccount, _node, creationProps) => {\n if (isMigrationActive) {\n throw new Error(\n \"It is not possible to create multiple accounts in parallel inside the test environment.\",\n );\n }\n\n isMigrationActive = true;\n\n const account = new AccountSchema({\n fromRaw: rawAccount,\n });\n\n // We need to set the account as current because the migration\n // will probably rely on the global me\n const prevActiveAccount = activeAccountContext.maybeGet();\n activeAccountContext.set(account);\n\n await account.applyMigration?.(creationProps);\n\n if (!options?.isCurrentActiveAccount) {\n activeAccountContext.set(prevActiveAccount);\n }\n\n isMigrationActive = false;\n },\n });\n\n const account = AccountSchema.fromNode(node);\n SecretSeedMap.set(account.id, secretSeed);\n\n if (options?.isCurrentActiveAccount) {\n activeAccountContext.set(account);\n }\n\n return account as A;\n}\n\nexport function setActiveAccount(account: Account) {\n activeAccountContext.set(account);\n}\n\nexport async function createJazzTestGuest() {\n const ctx = await createAnonymousJazzContext({\n crypto: await PureJSCrypto.create(),\n peersToLoadFrom: [],\n });\n\n return {\n guest: ctx.agent,\n };\n}\n\nexport type TestJazzContextManagerProps<Acc extends Account> =\n JazzContextManagerBaseProps<Acc> & {\n defaultProfileName?: string;\n AccountSchema?: AccountClass<Acc> & CoValueFromRaw<Acc>;\n isAuthenticated?: boolean;\n };\n\nexport class TestJazzContextManager<\n Acc extends Account,\n> extends JazzContextManager<Acc, TestJazzContextManagerProps<Acc>> {\n static fromAccountOrGuest<Acc extends Account>(\n account?: Acc | { guest: AnonymousJazzAgent },\n props?: TestJazzContextManagerProps<Acc>,\n ) {\n if (account && \"guest\" in account) {\n return this.fromGuest<Acc>(account, props);\n }\n\n return this.fromAccount<Acc>(account ?? (Account.getMe() as Acc), props);\n }\n\n static fromAccount<Acc extends Account>(\n account: Acc,\n props?: TestJazzContextManagerProps<Acc>,\n ) {\n const context = new TestJazzContextManager<Acc>();\n\n const provider = props?.isAuthenticated ? \"testProvider\" : \"anonymous\";\n const storage = context.getAuthSecretStorage();\n const node = account._raw.core.node;\n\n const credentials = {\n accountID: account.id,\n accountSecret: node.getCurrentAgent().agentSecret,\n secretSeed: SecretSeedMap.get(account.id),\n provider,\n } satisfies AuthCredentials;\n\n storage.set(credentials);\n\n context.updateContext(\n {\n AccountSchema: account.constructor as AccountClass<Acc> &\n CoValueFromRaw<Acc>,\n ...props,\n },\n {\n me: account,\n node,\n done: () => {\n node.gracefulShutdown();\n },\n logOut: async () => {\n await storage.clear();\n node.gracefulShutdown();\n },\n },\n {\n credentials,\n },\n );\n\n return context;\n }\n\n static fromGuest<Acc extends Account>(\n { guest }: { guest: AnonymousJazzAgent },\n props: TestJazzContextManagerProps<Acc> = {},\n ) {\n const context = new TestJazzContextManager<Acc>();\n const node = guest.node;\n\n context.updateContext(props, {\n guest,\n node,\n done: () => {\n node.gracefulShutdown();\n },\n logOut: async () => {\n node.gracefulShutdown();\n },\n });\n\n return context;\n }\n\n async getNewContext(\n props: TestJazzContextManagerProps<Acc>,\n authProps?: JazzContextManagerAuthProps,\n ) {\n if (!syncServer.current) {\n throw new Error(\n \"You need to setup a test sync server with setupJazzTestSync to use the Auth functions\",\n );\n }\n\n const context = await createJazzContext({\n credentials: authProps?.credentials,\n defaultProfileName: props.defaultProfileName,\n newAccountProps: authProps?.newAccountProps,\n peersToLoadFrom: [getPeerConnectedToTestSyncServer()],\n crypto: await TestJSCrypto.create(),\n sessionProvider: randomSessionProvider,\n authSecretStorage: this.getAuthSecretStorage(),\n AccountSchema: props.AccountSchema,\n });\n\n return {\n me: context.account,\n node: context.node,\n done: () => {\n context.done();\n },\n logOut: () => {\n return context.logOut();\n },\n };\n }\n}\n\nexport async function linkAccounts(\n a: Account,\n b: Account,\n aRole: \"server\" | \"client\" = \"server\",\n bRole: \"server\" | \"client\" = \"server\",\n) {\n const [aPeer, bPeer] = cojsonInternals.connectedPeers(b.id, a.id, {\n peer1role: aRole,\n peer2role: bRole,\n });\n\n a._raw.core.node.syncManager.addPeer(aPeer);\n b._raw.core.node.syncManager.addPeer(bPeer);\n\n await a.waitForAllCoValuesSync();\n await b.waitForAllCoValuesSync();\n}\n\nexport async function setupJazzTestSync() {\n if (syncServer.current) {\n syncServer.current.gracefulShutdown();\n }\n\n const account = await Account.create({\n creationProps: {\n name: \"Test Account\",\n },\n crypto: await TestJSCrypto.create(),\n });\n\n syncServer.current = account._raw.core.node;\n\n return account;\n}\n"],"mappings":"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","names":["account"]}
1
+ {"version":3,"sources":["../src/testing.ts"],"sourcesContent":["import { AgentSecret, CryptoProvider, LocalNode, Peer } from \"cojson\";\nimport { cojsonInternals } from \"cojson\";\nimport { PureJSCrypto } from \"cojson/dist/crypto/PureJSCrypto\";\nimport {\n Account,\n AccountClass,\n type AnonymousJazzAgent,\n AnyAccountSchema,\n AuthCredentials,\n type CoValueClass,\n CoValueFromRaw,\n InstanceOfSchema,\n JazzContextManager,\n JazzContextManagerAuthProps,\n JazzContextManagerBaseProps,\n activeAccountContext,\n anySchemaToCoSchema,\n createAnonymousJazzContext,\n createJazzContext,\n randomSessionProvider,\n} from \"./internal.js\";\n\nconst syncServer: { current: LocalNode | null } = { current: null };\n\ntype TestAccountSchema<Acc extends Account> = CoValueClass<Acc> & {\n fromNode: (typeof Account)[\"fromNode\"];\n create: (options: {\n creationProps: { name: string };\n initialAgentSecret?: AgentSecret;\n peersToLoadFrom?: Peer[];\n crypto: CryptoProvider;\n }) => Promise<Acc>;\n};\n\nexport class TestJSCrypto extends PureJSCrypto {\n static async create() {\n if (\"navigator\" in globalThis && navigator.userAgent?.includes(\"jsdom\")) {\n // Mocking crypto seal & encrypt to make it work with JSDom. Getting \"Error: Uint8Array expected\" there\n const crypto = new PureJSCrypto();\n\n crypto.seal = (options) =>\n `sealed_U${cojsonInternals.stableStringify(options.message)}` as any;\n crypto.unseal = (sealed) =>\n JSON.parse(sealed.substring(\"sealed_U\".length));\n crypto.encrypt = (message) =>\n `encrypted_U${cojsonInternals.stableStringify(message)}` as any;\n crypto.decryptRaw = (encrypted) =>\n encrypted.substring(\"encrypted_U\".length) as any;\n\n return crypto;\n }\n\n // For non-jsdom environments, we use the real crypto\n return new PureJSCrypto();\n }\n}\n\nexport function getPeerConnectedToTestSyncServer() {\n if (!syncServer.current) {\n throw new Error(\"Sync server not initialized\");\n }\n\n const [aPeer, bPeer] = cojsonInternals.connectedPeers(\n Math.random().toString(),\n Math.random().toString(),\n {\n peer1role: \"server\",\n peer2role: \"server\",\n },\n );\n syncServer.current.syncManager.addPeer(aPeer);\n\n return bPeer;\n}\n\nconst SecretSeedMap = new Map<string, Uint8Array>();\nlet isMigrationActive = false;\n\nexport async function createJazzTestAccount<\n S extends\n | (AccountClass<Account> & CoValueFromRaw<Account>)\n | AnyAccountSchema,\n>(options?: {\n isCurrentActiveAccount?: boolean;\n AccountSchema?: S;\n creationProps?: Record<string, unknown>;\n}): Promise<InstanceOfSchema<S>> {\n const AccountClass = options?.AccountSchema\n ? anySchemaToCoSchema(options.AccountSchema)\n : Account;\n const peers = [];\n if (syncServer.current) {\n peers.push(getPeerConnectedToTestSyncServer());\n }\n\n const crypto = await TestJSCrypto.create();\n const secretSeed = crypto.newRandomSecretSeed();\n\n const { node } = await LocalNode.withNewlyCreatedAccount({\n creationProps: {\n name: \"Test Account\",\n ...options?.creationProps,\n },\n initialAgentSecret: crypto.agentSecretFromSecretSeed(secretSeed),\n crypto,\n peersToLoadFrom: peers,\n migration: async (rawAccount, _node, creationProps) => {\n if (isMigrationActive) {\n throw new Error(\n \"It is not possible to create multiple accounts in parallel inside the test environment.\",\n );\n }\n\n isMigrationActive = true;\n\n // @ts-expect-error - AccountClass doesn't infer the fromRaw static method\n const account = AccountClass.fromRaw(rawAccount) as InstanceOfSchema<S>;\n\n // We need to set the account as current because the migration\n // will probably rely on the global me\n const prevActiveAccount = activeAccountContext.maybeGet();\n activeAccountContext.set(account);\n\n await account.applyMigration?.(creationProps);\n\n if (!options?.isCurrentActiveAccount) {\n activeAccountContext.set(prevActiveAccount);\n }\n\n isMigrationActive = false;\n },\n });\n\n const account = AccountClass.fromNode(node);\n SecretSeedMap.set(account.id, secretSeed);\n\n if (options?.isCurrentActiveAccount) {\n activeAccountContext.set(account);\n }\n\n return account as InstanceOfSchema<S>;\n}\n\nexport function setActiveAccount(account: Account) {\n activeAccountContext.set(account);\n}\n\nexport async function createJazzTestGuest() {\n const ctx = await createAnonymousJazzContext({\n crypto: await PureJSCrypto.create(),\n peersToLoadFrom: [],\n });\n\n return {\n guest: ctx.agent,\n };\n}\n\nexport type TestJazzContextManagerProps<Acc extends Account> =\n JazzContextManagerBaseProps<Acc> & {\n defaultProfileName?: string;\n AccountSchema?: AccountClass<Acc> & CoValueFromRaw<Acc>;\n isAuthenticated?: boolean;\n };\n\nexport class TestJazzContextManager<\n Acc extends Account,\n> extends JazzContextManager<Acc, TestJazzContextManagerProps<Acc>> {\n static fromAccountOrGuest<Acc extends Account>(\n account?: Acc | { guest: AnonymousJazzAgent },\n props?: TestJazzContextManagerProps<Acc>,\n ) {\n if (account && \"guest\" in account) {\n return this.fromGuest<Acc>(account, props);\n }\n\n return this.fromAccount<Acc>(account ?? (Account.getMe() as Acc), props);\n }\n\n static fromAccount<Acc extends Account>(\n account: Acc,\n props?: TestJazzContextManagerProps<Acc>,\n ) {\n const context = new TestJazzContextManager<Acc>();\n\n const provider = props?.isAuthenticated ? \"testProvider\" : \"anonymous\";\n const storage = context.getAuthSecretStorage();\n const node = account._raw.core.node;\n\n const credentials = {\n accountID: account.id,\n accountSecret: node.getCurrentAgent().agentSecret,\n secretSeed: SecretSeedMap.get(account.id),\n provider,\n } satisfies AuthCredentials;\n\n storage.set(credentials);\n\n context.updateContext(\n {\n AccountSchema: account.constructor as AccountClass<Acc> &\n CoValueFromRaw<Acc>,\n ...props,\n },\n {\n me: account,\n node,\n done: () => {\n node.gracefulShutdown();\n },\n logOut: async () => {\n await storage.clear();\n node.gracefulShutdown();\n },\n },\n {\n credentials,\n },\n );\n\n return context;\n }\n\n static fromGuest<Acc extends Account>(\n { guest }: { guest: AnonymousJazzAgent },\n props: TestJazzContextManagerProps<Acc> = {},\n ) {\n const context = new TestJazzContextManager<Acc>();\n const node = guest.node;\n\n context.updateContext(props, {\n guest,\n node,\n done: () => {\n node.gracefulShutdown();\n },\n logOut: async () => {\n node.gracefulShutdown();\n },\n });\n\n return context;\n }\n\n async getNewContext(\n props: TestJazzContextManagerProps<Acc>,\n authProps?: JazzContextManagerAuthProps,\n ) {\n if (!syncServer.current) {\n throw new Error(\n \"You need to setup a test sync server with setupJazzTestSync to use the Auth functions\",\n );\n }\n\n const context = await createJazzContext({\n credentials: authProps?.credentials,\n defaultProfileName: props.defaultProfileName,\n newAccountProps: authProps?.newAccountProps,\n peersToLoadFrom: [getPeerConnectedToTestSyncServer()],\n crypto: await TestJSCrypto.create(),\n sessionProvider: randomSessionProvider,\n authSecretStorage: this.getAuthSecretStorage(),\n AccountSchema: props.AccountSchema,\n });\n\n return {\n me: context.account,\n node: context.node,\n done: () => {\n context.done();\n },\n logOut: () => {\n return context.logOut();\n },\n };\n }\n}\n\nexport async function linkAccounts(\n a: Account,\n b: Account,\n aRole: \"server\" | \"client\" = \"server\",\n bRole: \"server\" | \"client\" = \"server\",\n) {\n const [aPeer, bPeer] = cojsonInternals.connectedPeers(b.id, a.id, {\n peer1role: aRole,\n peer2role: bRole,\n });\n\n a._raw.core.node.syncManager.addPeer(aPeer);\n b._raw.core.node.syncManager.addPeer(bPeer);\n\n await a.waitForAllCoValuesSync();\n await b.waitForAllCoValuesSync();\n}\n\nexport async function setupJazzTestSync() {\n if (syncServer.current) {\n syncServer.current.gracefulShutdown();\n }\n\n const account = await Account.create({\n creationProps: {\n name: \"Test Account\",\n },\n crypto: await TestJSCrypto.create(),\n });\n\n syncServer.current = account._raw.core.node;\n\n return account;\n}\n"],"mappings":"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","names":["AccountClass","account"]}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coMap.record.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coMap.record.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/coMap.record.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=coMap.test-d.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"coMap.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/coMap.test-d.ts"],"names":[],"mappings":""}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=notifications.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"notifications.test.d.ts","sourceRoot":"","sources":["../../../src/tests/patterns/notifications.test.ts"],"names":[],"mappings":""}
package/package.json CHANGED
@@ -17,7 +17,7 @@
17
17
  },
18
18
  "type": "module",
19
19
  "license": "MIT",
20
- "version": "0.14.1",
20
+ "version": "0.14.4",
21
21
  "dependencies": {
22
22
  "@scure/bip39": "^1.3.0",
23
23
  "fast-myers-diff": "^3.2.0",
@@ -41,6 +41,9 @@ export function zodFieldToCoFieldDef(schema: FieldSchema) {
41
41
  return coField.boolean;
42
42
  } else if (schema._zod.def.type === "null") {
43
43
  return coField.null;
44
+ // @ts-expect-error enum is not declared as def.type
45
+ } else if (schema._zod.def.type === "enum") {
46
+ return coField.string;
44
47
  } else if (schema._zod.def.type === "date") {
45
48
  return coField.Date;
46
49
  } else if (schema._zod.def.type === "literal") {
@@ -84,7 +84,9 @@ export type InstanceOrPrimitiveOfSchema<
84
84
  ? Literal
85
85
  : S extends z.core.$ZodDate
86
86
  ? Date
87
- : never
87
+ : S extends z.core.$ZodEnum<infer Enum>
88
+ ? Enum[keyof Enum]
89
+ : never
88
90
  : S extends CoValueClass
89
91
  ? InstanceType<S>
90
92
  : never;
@@ -97,7 +97,9 @@ export type InstanceOrPrimitiveOfSchemaCoValuesNullable<
97
97
  ? Literal
98
98
  : S extends z.core.$ZodDate
99
99
  ? Date
100
- : never
100
+ : S extends z.core.$ZodEnum<infer Enum>
101
+ ? Enum[keyof Enum]
102
+ : never
101
103
  : S extends CoValueClass
102
104
  ? InstanceType<S> | null
103
105
  : never;
package/src/testing.ts CHANGED
@@ -5,13 +5,16 @@ import {
5
5
  Account,
6
6
  AccountClass,
7
7
  type AnonymousJazzAgent,
8
+ AnyAccountSchema,
8
9
  AuthCredentials,
9
10
  type CoValueClass,
10
11
  CoValueFromRaw,
12
+ InstanceOfSchema,
11
13
  JazzContextManager,
12
14
  JazzContextManagerAuthProps,
13
15
  JazzContextManagerBaseProps,
14
16
  activeAccountContext,
17
+ anySchemaToCoSchema,
15
18
  createAnonymousJazzContext,
16
19
  createJazzContext,
17
20
  randomSessionProvider,
@@ -73,13 +76,18 @@ export function getPeerConnectedToTestSyncServer() {
73
76
  const SecretSeedMap = new Map<string, Uint8Array>();
74
77
  let isMigrationActive = false;
75
78
 
76
- export async function createJazzTestAccount<A extends Account>(options?: {
79
+ export async function createJazzTestAccount<
80
+ S extends
81
+ | (AccountClass<Account> & CoValueFromRaw<Account>)
82
+ | AnyAccountSchema,
83
+ >(options?: {
77
84
  isCurrentActiveAccount?: boolean;
78
- AccountSchema?: CoValueClass<A>;
85
+ AccountSchema?: S;
79
86
  creationProps?: Record<string, unknown>;
80
- }): Promise<A> {
81
- const AccountSchema = (options?.AccountSchema ??
82
- Account) as unknown as TestAccountSchema<Account>;
87
+ }): Promise<InstanceOfSchema<S>> {
88
+ const AccountClass = options?.AccountSchema
89
+ ? anySchemaToCoSchema(options.AccountSchema)
90
+ : Account;
83
91
  const peers = [];
84
92
  if (syncServer.current) {
85
93
  peers.push(getPeerConnectedToTestSyncServer());
@@ -105,9 +113,8 @@ export async function createJazzTestAccount<A extends Account>(options?: {
105
113
 
106
114
  isMigrationActive = true;
107
115
 
108
- const account = new AccountSchema({
109
- fromRaw: rawAccount,
110
- });
116
+ // @ts-expect-error - AccountClass doesn't infer the fromRaw static method
117
+ const account = AccountClass.fromRaw(rawAccount) as InstanceOfSchema<S>;
111
118
 
112
119
  // We need to set the account as current because the migration
113
120
  // will probably rely on the global me
@@ -124,14 +131,14 @@ export async function createJazzTestAccount<A extends Account>(options?: {
124
131
  },
125
132
  });
126
133
 
127
- const account = AccountSchema.fromNode(node);
134
+ const account = AccountClass.fromNode(node);
128
135
  SecretSeedMap.set(account.id, secretSeed);
129
136
 
130
137
  if (options?.isCurrentActiveAccount) {
131
138
  activeAccountContext.set(account);
132
139
  }
133
140
 
134
- return account as A;
141
+ return account as InstanceOfSchema<S>;
135
142
  }
136
143
 
137
144
  export function setActiveAccount(account: Account) {
@@ -47,6 +47,15 @@ describe("Simple CoList operations", async () => {
47
47
  ]);
48
48
  });
49
49
 
50
+ test("list with enum type", () => {
51
+ const List = co.list(z.enum(["a", "b", "c"]));
52
+ const list = List.create(["a", "b", "c"]);
53
+ expect(list.length).toBe(3);
54
+ expect(list[0]).toBe("a");
55
+ expect(list[1]).toBe("b");
56
+ expect(list[2]).toBe("c");
57
+ });
58
+
50
59
  test("Construction with an Account", () => {
51
60
  const list = TestList.create(["milk"], me);
52
61
 
@@ -0,0 +1,149 @@
1
+ import { assert, describe, expectTypeOf, test } from "vitest";
2
+ import { Group, co, z } from "../exports.js";
3
+ import { Account } from "../index.js";
4
+ import { Loaded } from "../internal.js";
5
+
6
+ describe("CoMap.Record", () => {
7
+ describe("init", () => {
8
+ test("create a Record with basic property access", () => {
9
+ const Person = co.record(z.string(), z.string());
10
+
11
+ const person = Person.create({
12
+ name: "John",
13
+ age: "20",
14
+ });
15
+
16
+ type ExpectedType = {
17
+ [key: string]: string;
18
+ };
19
+
20
+ function matches(value: ExpectedType) {
21
+ return value;
22
+ }
23
+
24
+ matches(person);
25
+ });
26
+
27
+ test("has the _owner property", () => {
28
+ const Person = co.record(z.string(), z.string());
29
+
30
+ const person = Person.create({ name: "John" }, Account.getMe());
31
+
32
+ expectTypeOf(person._owner).toEqualTypeOf<Account | Group>();
33
+ });
34
+
35
+ test("Record with reference", () => {
36
+ const Dog = co.map({
37
+ name: z.string(),
38
+ breed: z.string(),
39
+ });
40
+
41
+ const Person = co.record(z.string(), Dog);
42
+
43
+ const person = Person.create({
44
+ pet1: Dog.create({ name: "Rex", breed: "Labrador" }),
45
+ pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
46
+ });
47
+
48
+ type ExpectedType = {
49
+ [key: string]: Loaded<typeof Dog>;
50
+ };
51
+
52
+ function matches(value: ExpectedType) {
53
+ return value;
54
+ }
55
+
56
+ matches(person);
57
+ });
58
+
59
+ test("Record with optional reference", () => {
60
+ const Dog = co.map({
61
+ name: z.string(),
62
+ breed: z.string(),
63
+ });
64
+
65
+ const Person = co.record(z.string(), Dog.optional());
66
+
67
+ const person = Person.create({
68
+ pet1: Dog.create({ name: "Rex", breed: "Labrador" }),
69
+ pet2: undefined,
70
+ });
71
+
72
+ type ExpectedType = {
73
+ [key: string]: Loaded<typeof Dog> | undefined;
74
+ };
75
+
76
+ function matches(value: ExpectedType) {
77
+ return value;
78
+ }
79
+
80
+ matches(person);
81
+ });
82
+ });
83
+
84
+ describe("Record resolution", () => {
85
+ test("loading a record with deep resolve", async () => {
86
+ const Dog = co.map({
87
+ name: z.string(),
88
+ breed: z.string(),
89
+ });
90
+
91
+ const Person = co.record(z.string(), Dog);
92
+
93
+ const person = Person.create({
94
+ pet1: Dog.create({ name: "Rex", breed: "Labrador" }),
95
+ pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
96
+ });
97
+
98
+ const loadedPerson = await Person.load(person.id, {
99
+ resolve: {
100
+ $each: true,
101
+ },
102
+ });
103
+
104
+ type ExpectedType = {
105
+ [key: string]: Loaded<typeof Dog>;
106
+ } | null;
107
+
108
+ function matches(value: ExpectedType) {
109
+ return value;
110
+ }
111
+
112
+ matches(loadedPerson);
113
+ });
114
+
115
+ test("loading a record with $onError", async () => {
116
+ const Dog = co.map({
117
+ name: z.string(),
118
+ breed: z.string(),
119
+ });
120
+
121
+ const Person = co.record(z.string(), Dog);
122
+
123
+ const person = Person.create({
124
+ pet1: Dog.create({ name: "Rex", breed: "Labrador" }),
125
+ pet2: Dog.create({ name: "Fido", breed: "Poodle" }),
126
+ });
127
+
128
+ const loadedPerson = await Person.load(person.id, {
129
+ resolve: {
130
+ $each: { $onError: null },
131
+ },
132
+ });
133
+
134
+ type ExpectedType = {
135
+ [key: string]:
136
+ | (Loaded<typeof Dog> & {
137
+ $onError: never;
138
+ })
139
+ | null;
140
+ } | null;
141
+
142
+ function matches(value: ExpectedType) {
143
+ return value;
144
+ }
145
+
146
+ matches(loadedPerson);
147
+ });
148
+ });
149
+ });
@@ -41,6 +41,17 @@ describe("CoMap.Record", async () => {
41
41
  expect(Object.keys(person)).toEqual(["name", "age"]);
42
42
  });
43
43
 
44
+ test("create a Record with enum value", () => {
45
+ const Person = co.record(z.string(), z.enum(["a", "b", "c"]));
46
+
47
+ const person = Person.create({
48
+ age: "a",
49
+ });
50
+
51
+ expect(person.age).toEqual("a");
52
+ expect(Object.keys(person)).toEqual(["age"]);
53
+ });
54
+
44
55
  test("property existence", () => {
45
56
  const Person = co.record(z.string(), z.string());
46
57