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.
- package/.turbo/turbo-build.log +7 -7
- package/CHANGELOG.md +13 -0
- package/dist/{chunk-WLOZKDOH.js → chunk-6QMAFVZO.js} +3 -1
- package/dist/{chunk-WLOZKDOH.js.map → chunk-6QMAFVZO.js.map} +1 -1
- package/dist/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.d.ts.map +1 -1
- package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts +1 -1
- package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.d.ts.map +1 -1
- package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts +1 -1
- package/dist/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.d.ts.map +1 -1
- package/dist/index.js +1 -1
- package/dist/testing.d.ts +4 -4
- package/dist/testing.d.ts.map +1 -1
- package/dist/testing.js +5 -6
- package/dist/testing.js.map +1 -1
- package/dist/tests/coMap.record.test-d.d.ts +2 -0
- package/dist/tests/coMap.record.test-d.d.ts.map +1 -0
- package/dist/tests/coMap.test-d.d.ts +2 -0
- package/dist/tests/coMap.test-d.d.ts.map +1 -0
- package/dist/tests/patterns/notifications.test.d.ts +2 -0
- package/dist/tests/patterns/notifications.test.d.ts.map +1 -0
- package/package.json +1 -1
- package/src/implementation/zodSchema/runtimeConverters/zodFieldToCoFieldDef.ts +3 -0
- package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchema.ts +3 -1
- package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts +3 -1
- package/src/testing.ts +17 -10
- package/src/tests/coList.test.ts +9 -0
- package/src/tests/coMap.record.test-d.ts +149 -0
- package/src/tests/coMap.record.test.ts +11 -0
- package/src/tests/coMap.test-d.ts +348 -0
- package/src/tests/coMap.test.ts +8 -0
- package/src/tests/patterns/notifications.test.ts +89 -0
- 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,
|
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":"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,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,2BAA2B,CACrC,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,GACC;IACE,CAAC,UAAU,GAAG,IAAI,MAAM,KAAK,GAAG,2BAA2B,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC;CACxE,GAAG;IAAE,OAAO,EAAE,OAAO,CAAA;CAAE,GAAG,OAAO,GAClC,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,UAAU,CAAC,MAAM,CAAC,EAAE,MAAM,CAAC,CAAC,GAAG;IAC5C,aAAa,EAAE,IAAI,CAAC;CACrB,GACD;IACE,CAAC,UAAU,GAAG,IAAI,CAAC,CAAC,MAAM,CAAC,CAAC,CAAC,GAC3B,MAAM,GAAG,2BAA2B,CAAC,CAAC,CAAC;CAC1C,GAAG,KAAK,GACT,CAAC,SAAS,cAAc,CAAC,MAAM,KAAK,EAAE,MAAM,MAAM,CAAC,GACjD;IACE,CAAC,UAAU,GAAG,IAAI,MAAM,KAAK,GAAG,2BAA2B,CACzD,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,GACP,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,CAAC,GAChC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,GACtC,CAAC,SAAS,eAAe,CAAC,MAAM,CAAC,CAAC,GAChC,MAAM,CAAC,2BAA2B,CAAC,CAAC,CAAC,CAAC,GACtC,CAAC,SAAS,eAAe,GACvB,WAAW,GACX,CAAC,SAAS,cAAc,GACtB,UAAU,GACV,CAAC,SAAS,gBAAgB,GACxB,UAAU,GACV,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,YAAY,CAAC,MAAM,KAAK,CAAC,GACxC,2BAA2B,CAAC,KAAK,CAAC,GAAG,SAAS,GAC9C,CAAC,SAAS,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,MAAM,OAAO,CAAC,GACvC,2BAA2B,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC,GAE5C,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,GACf,KAAK,CAAC"}
|
@@ -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":"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"}
|
package/dist/index.js
CHANGED
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<
|
8
|
+
export declare function createJazzTestAccount<S extends (AccountClass<Account> & CoValueFromRaw<Account>) | AnyAccountSchema>(options?: {
|
9
9
|
isCurrentActiveAccount?: boolean;
|
10
|
-
AccountSchema?:
|
10
|
+
AccountSchema?: S;
|
11
11
|
creationProps?: Record<string, unknown>;
|
12
|
-
}): Promise<
|
12
|
+
}): Promise<InstanceOfSchema<S>>;
|
13
13
|
export declare function setActiveAccount(account: Account): void;
|
14
14
|
export declare function createJazzTestGuest(): Promise<{
|
15
15
|
guest: AnonymousJazzAgent;
|
package/dist/testing.d.ts.map
CHANGED
@@ -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,
|
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-
|
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
|
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 =
|
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 =
|
79
|
+
const account = AccountClass2.fromNode(node);
|
81
80
|
SecretSeedMap.set(account.id, secretSeed);
|
82
81
|
if (options?.isCurrentActiveAccount) {
|
83
82
|
activeAccountContext.set(account);
|
package/dist/testing.js.map
CHANGED
@@ -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 @@
|
|
1
|
+
{"version":3,"file":"coMap.record.test-d.d.ts","sourceRoot":"","sources":["../../src/tests/coMap.record.test-d.ts"],"names":[],"mappings":""}
|
@@ -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 @@
|
|
1
|
+
{"version":3,"file":"notifications.test.d.ts","sourceRoot":"","sources":["../../../src/tests/patterns/notifications.test.ts"],"names":[],"mappings":""}
|
package/package.json
CHANGED
@@ -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") {
|
package/src/implementation/zodSchema/typeConverters/InstanceOrPrimitiveOfSchemaCoValuesNullable.ts
CHANGED
@@ -97,7 +97,9 @@ export type InstanceOrPrimitiveOfSchemaCoValuesNullable<
|
|
97
97
|
? Literal
|
98
98
|
: S extends z.core.$ZodDate
|
99
99
|
? Date
|
100
|
-
:
|
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<
|
79
|
+
export async function createJazzTestAccount<
|
80
|
+
S extends
|
81
|
+
| (AccountClass<Account> & CoValueFromRaw<Account>)
|
82
|
+
| AnyAccountSchema,
|
83
|
+
>(options?: {
|
77
84
|
isCurrentActiveAccount?: boolean;
|
78
|
-
AccountSchema?:
|
85
|
+
AccountSchema?: S;
|
79
86
|
creationProps?: Record<string, unknown>;
|
80
|
-
}): Promise<
|
81
|
-
const
|
82
|
-
|
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
|
-
|
109
|
-
|
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 =
|
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
|
141
|
+
return account as InstanceOfSchema<S>;
|
135
142
|
}
|
136
143
|
|
137
144
|
export function setActiveAccount(account: Account) {
|
package/src/tests/coList.test.ts
CHANGED
@@ -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
|
|