zodvex 0.3.2 → 0.4.1
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/README.md +75 -0
- package/dist/__type-tests__/infer-returns.d.ts +2 -0
- package/dist/__type-tests__/infer-returns.d.ts.map +1 -0
- package/dist/__type-tests__/zodTable-inference.d.ts +2 -0
- package/dist/__type-tests__/zodTable-inference.d.ts.map +1 -0
- package/dist/builders.d.ts +173 -0
- package/dist/builders.d.ts.map +1 -0
- package/dist/codec.d.ts +11 -0
- package/dist/codec.d.ts.map +1 -0
- package/dist/custom.d.ts +147 -0
- package/dist/custom.d.ts.map +1 -0
- package/dist/ids.d.ts +23 -0
- package/dist/ids.d.ts.map +1 -0
- package/dist/index.d.ts +11 -599
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +203 -58
- package/dist/index.js.map +1 -1
- package/dist/mapping/core.d.ts +5 -0
- package/dist/mapping/core.d.ts.map +1 -0
- package/dist/mapping/handlers/enum.d.ts +4 -0
- package/dist/mapping/handlers/enum.d.ts.map +1 -0
- package/dist/mapping/handlers/index.d.ts +5 -0
- package/dist/mapping/handlers/index.d.ts.map +1 -0
- package/dist/mapping/handlers/nullable.d.ts +7 -0
- package/dist/mapping/handlers/nullable.d.ts.map +1 -0
- package/dist/mapping/handlers/record.d.ts +4 -0
- package/dist/mapping/handlers/record.d.ts.map +1 -0
- package/dist/mapping/handlers/union.d.ts +5 -0
- package/dist/mapping/handlers/union.d.ts.map +1 -0
- package/dist/mapping/index.d.ts +4 -0
- package/dist/mapping/index.d.ts.map +1 -0
- package/dist/mapping/types.d.ts +43 -0
- package/dist/mapping/types.d.ts.map +1 -0
- package/dist/mapping/utils.d.ts +6 -0
- package/dist/mapping/utils.d.ts.map +1 -0
- package/dist/registry.d.ts +110 -0
- package/dist/registry.d.ts.map +1 -0
- package/dist/results.d.ts +126 -0
- package/dist/results.d.ts.map +1 -0
- package/dist/tables.d.ts +214 -0
- package/dist/tables.d.ts.map +1 -0
- package/dist/transform/index.d.ts +26 -0
- package/dist/transform/index.d.ts.map +1 -0
- package/dist/transform/index.js +442 -0
- package/dist/transform/index.js.map +1 -0
- package/dist/transform/transform.d.ts +47 -0
- package/dist/transform/transform.d.ts.map +1 -0
- package/dist/transform/traverse.d.ts +62 -0
- package/dist/transform/traverse.d.ts.map +1 -0
- package/dist/transform/types.d.ts +115 -0
- package/dist/transform/types.d.ts.map +1 -0
- package/dist/types.d.ts +29 -0
- package/dist/types.d.ts.map +1 -0
- package/dist/utils.d.ts +55 -0
- package/dist/utils.d.ts.map +1 -0
- package/dist/wrappers.d.ts +22 -0
- package/dist/wrappers.d.ts.map +1 -0
- package/package.json +13 -6
- package/src/__type-tests__/infer-returns.ts +24 -0
- package/src/__type-tests__/zodTable-inference.ts +5 -5
- package/src/custom.ts +205 -28
- package/src/index.ts +1 -0
- package/src/mapping/core.ts +23 -11
- package/src/mapping/types.ts +6 -2
- package/src/results.ts +110 -0
- package/src/tables.ts +306 -28
- package/src/transform/index.ts +38 -0
- package/src/transform/transform.ts +409 -0
- package/src/transform/traverse.ts +320 -0
- package/src/transform/types.ts +128 -0
- package/src/types.ts +3 -2
- package/src/utils.ts +35 -0
- package/src/wrappers.ts +10 -19
|
@@ -0,0 +1,115 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Transform layer type definitions.
|
|
3
|
+
*
|
|
4
|
+
* General-purpose types for schema traversal and value transformation.
|
|
5
|
+
*/
|
|
6
|
+
import type { z } from 'zod';
|
|
7
|
+
/**
|
|
8
|
+
* Information about a field during schema traversal.
|
|
9
|
+
*/
|
|
10
|
+
export type FieldInfo = {
|
|
11
|
+
/** Dot-notation path (e.g., 'profile.email', 'contacts[].email') */
|
|
12
|
+
path: string;
|
|
13
|
+
/** The Zod schema for this field */
|
|
14
|
+
schema: z.ZodTypeAny;
|
|
15
|
+
/** Metadata from schema.meta() if present */
|
|
16
|
+
meta: Record<string, unknown> | undefined;
|
|
17
|
+
/** Whether the field is wrapped in optional/nullable */
|
|
18
|
+
isOptional: boolean;
|
|
19
|
+
};
|
|
20
|
+
/**
|
|
21
|
+
* Visitor functions for walkSchema().
|
|
22
|
+
*/
|
|
23
|
+
export type SchemaVisitor = {
|
|
24
|
+
/** Called for every field. Return 'skip' to skip children. */
|
|
25
|
+
onField?: (info: FieldInfo) => void | 'skip';
|
|
26
|
+
/** Called when entering an object schema */
|
|
27
|
+
onObject?: (info: FieldInfo) => void;
|
|
28
|
+
/** Called when entering an array schema */
|
|
29
|
+
onArray?: (info: FieldInfo) => void;
|
|
30
|
+
/** Called when entering a union schema */
|
|
31
|
+
onUnion?: (info: FieldInfo, variants: z.ZodTypeAny[]) => void;
|
|
32
|
+
};
|
|
33
|
+
/**
|
|
34
|
+
* Options for walkSchema().
|
|
35
|
+
*/
|
|
36
|
+
export type WalkSchemaOptions = {
|
|
37
|
+
/** Starting path prefix */
|
|
38
|
+
path?: string;
|
|
39
|
+
};
|
|
40
|
+
/**
|
|
41
|
+
* Context passed to transform functions.
|
|
42
|
+
*/
|
|
43
|
+
export type TransformContext<TCtx = unknown> = {
|
|
44
|
+
/** Current field path */
|
|
45
|
+
path: string;
|
|
46
|
+
/** The Zod schema for this field */
|
|
47
|
+
schema: z.ZodTypeAny;
|
|
48
|
+
/** Metadata from schema.meta() if present */
|
|
49
|
+
meta: Record<string, unknown> | undefined;
|
|
50
|
+
/** User-provided context */
|
|
51
|
+
ctx: TCtx;
|
|
52
|
+
};
|
|
53
|
+
/**
|
|
54
|
+
* Synchronous transform function signature.
|
|
55
|
+
*/
|
|
56
|
+
export type TransformFn<TCtx = unknown> = (value: unknown, context: TransformContext<TCtx>) => unknown;
|
|
57
|
+
/**
|
|
58
|
+
* Async transform function signature.
|
|
59
|
+
*/
|
|
60
|
+
export type AsyncTransformFn<TCtx = unknown> = (value: unknown, context: TransformContext<TCtx>) => unknown | Promise<unknown>;
|
|
61
|
+
/**
|
|
62
|
+
* Options for transformBySchema().
|
|
63
|
+
*/
|
|
64
|
+
export type TransformOptions = {
|
|
65
|
+
/** Starting path prefix */
|
|
66
|
+
path?: string;
|
|
67
|
+
/**
|
|
68
|
+
* How to handle values that don't match any union variant.
|
|
69
|
+
* - 'passthrough': Return value unchanged (default)
|
|
70
|
+
* - 'error': Throw an error
|
|
71
|
+
* - 'null': Replace with null (fail-closed for security)
|
|
72
|
+
*/
|
|
73
|
+
unmatchedUnion?: 'passthrough' | 'error' | 'null';
|
|
74
|
+
/** Callback when a union doesn't match */
|
|
75
|
+
onUnmatchedUnion?: (path: string) => void;
|
|
76
|
+
/**
|
|
77
|
+
* Fast predicate to check if a schema needs transformation.
|
|
78
|
+
*
|
|
79
|
+
* When provided, this predicate is called before the transform callback.
|
|
80
|
+
* If it returns false, the transform callback is skipped for this schema
|
|
81
|
+
* (but recursion into children continues).
|
|
82
|
+
*
|
|
83
|
+
* This optimization avoids callback overhead for schemas that don't need
|
|
84
|
+
* transformation, which is useful when only a small subset of fields
|
|
85
|
+
* require processing (e.g., only sensitive fields).
|
|
86
|
+
*
|
|
87
|
+
* @example
|
|
88
|
+
* ```ts
|
|
89
|
+
* // Only call transform for schemas with sensitive metadata
|
|
90
|
+
* transformBySchema(value, schema, ctx, transform, {
|
|
91
|
+
* shouldTransform: (sch) => getSensitiveMetadata(sch) !== undefined
|
|
92
|
+
* })
|
|
93
|
+
* ```
|
|
94
|
+
*/
|
|
95
|
+
shouldTransform?: (schema: z.ZodTypeAny) => boolean;
|
|
96
|
+
/**
|
|
97
|
+
* Process array elements in parallel (async only).
|
|
98
|
+
*
|
|
99
|
+
* When true, array elements are processed with Promise.all() instead of
|
|
100
|
+
* sequentially. This can significantly improve performance for large arrays
|
|
101
|
+
* when transforms involve async operations like entitlement checks.
|
|
102
|
+
*
|
|
103
|
+
* Default: false (sequential processing for backwards compatibility)
|
|
104
|
+
*
|
|
105
|
+
* @example
|
|
106
|
+
* ```ts
|
|
107
|
+
* // Process user entitlements for all items in parallel
|
|
108
|
+
* const result = await transformBySchemaAsync(docs, schema, ctx, transform, {
|
|
109
|
+
* parallel: true
|
|
110
|
+
* })
|
|
111
|
+
* ```
|
|
112
|
+
*/
|
|
113
|
+
parallel?: boolean;
|
|
114
|
+
};
|
|
115
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../src/transform/types.ts"],"names":[],"mappings":"AAAA;;;;GAIG;AAEH,OAAO,KAAK,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAE5B;;GAEG;AACH,MAAM,MAAM,SAAS,GAAG;IACtB,oEAAoE;IACpE,IAAI,EAAE,MAAM,CAAA;IACZ,oCAAoC;IACpC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAA;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACzC,wDAAwD;IACxD,UAAU,EAAE,OAAO,CAAA;CACpB,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,aAAa,GAAG;IAC1B,8DAA8D;IAC9D,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,GAAG,MAAM,CAAA;IAC5C,4CAA4C;IAC5C,QAAQ,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACpC,2CAA2C;IAC3C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,KAAK,IAAI,CAAA;IACnC,0CAA0C;IAC1C,OAAO,CAAC,EAAE,CAAC,IAAI,EAAE,SAAS,EAAE,QAAQ,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,IAAI,CAAA;CAC9D,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,iBAAiB,GAAG;IAC9B,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;CACd,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,IAAI,GAAG,OAAO,IAAI;IAC7C,yBAAyB;IACzB,IAAI,EAAE,MAAM,CAAA;IACZ,oCAAoC;IACpC,MAAM,EAAE,CAAC,CAAC,UAAU,CAAA;IACpB,6CAA6C;IAC7C,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,OAAO,CAAC,GAAG,SAAS,CAAA;IACzC,4BAA4B;IAC5B,GAAG,EAAE,IAAI,CAAA;CACV,CAAA;AAED;;GAEG;AACH,MAAM,MAAM,WAAW,CAAC,IAAI,GAAG,OAAO,IAAI,CACxC,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAC5B,OAAO,CAAA;AAEZ;;GAEG;AACH,MAAM,MAAM,gBAAgB,CAAC,IAAI,GAAG,OAAO,IAAI,CAC7C,KAAK,EAAE,OAAO,EACd,OAAO,EAAE,gBAAgB,CAAC,IAAI,CAAC,KAC5B,OAAO,GAAG,OAAO,CAAC,OAAO,CAAC,CAAA;AAE/B;;GAEG;AACH,MAAM,MAAM,gBAAgB,GAAG;IAC7B,2BAA2B;IAC3B,IAAI,CAAC,EAAE,MAAM,CAAA;IACb;;;;;OAKG;IACH,cAAc,CAAC,EAAE,aAAa,GAAG,OAAO,GAAG,MAAM,CAAA;IACjD,0CAA0C;IAC1C,gBAAgB,CAAC,EAAE,CAAC,IAAI,EAAE,MAAM,KAAK,IAAI,CAAA;IACzC;;;;;;;;;;;;;;;;;;OAkBG;IACH,eAAe,CAAC,EAAE,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,KAAK,OAAO,CAAA;IACnD;;;;;;;;;;;;;;;;OAgBG;IACH,QAAQ,CAAC,EAAE,OAAO,CAAA;CACnB,CAAA"}
|
package/dist/types.d.ts
ADDED
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
import { type DefaultFunctionArgs, type RegisteredAction, type RegisteredMutation, type RegisteredQuery } from 'convex/server';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
export type InferArgs<A> = A extends z.ZodObject<infer S> ? z.infer<z.ZodObject<S>> : A extends Record<string, z.ZodTypeAny> ? {
|
|
4
|
+
[K in keyof A]: z.infer<A[K]>;
|
|
5
|
+
} : A extends z.ZodTypeAny ? z.infer<A> : Record<string, never>;
|
|
6
|
+
export type InferReturns<R> = R extends z.ZodType<any, any, any> ? z.output<R> : R extends undefined ? any : R;
|
|
7
|
+
export type InferHandlerReturns<R> = R extends z.ZodType<any, any, any> ? z.output<R> : any;
|
|
8
|
+
/**
|
|
9
|
+
* Extract the visibility type from a Convex builder function
|
|
10
|
+
*/
|
|
11
|
+
export type ExtractVisibility<Builder extends (...args: any) => any> = ReturnType<Builder> extends RegisteredQuery<infer V, any, any> ? V : ReturnType<Builder> extends RegisteredMutation<infer V, any, any> ? V : ReturnType<Builder> extends RegisteredAction<infer V, any, any> ? V : 'public';
|
|
12
|
+
/**
|
|
13
|
+
* @deprecated Use GenericQueryCtx, GenericMutationCtx, or GenericActionCtx directly instead
|
|
14
|
+
*/
|
|
15
|
+
export type ExtractCtx<Builder> = Builder extends {
|
|
16
|
+
(fn: {
|
|
17
|
+
handler: (ctx: infer Ctx, ...args: any[]) => any;
|
|
18
|
+
}): any;
|
|
19
|
+
} ? Ctx : never;
|
|
20
|
+
/**
|
|
21
|
+
* @deprecated Return types are now specified explicitly using RegisteredQuery, RegisteredMutation, or RegisteredAction
|
|
22
|
+
*/
|
|
23
|
+
export type PreserveReturnType<Builder extends (...args: any) => any, ArgsType, ReturnsType> = ReturnType<Builder> extends RegisteredQuery<infer V, any, any> ? RegisteredQuery<V, ArgsType extends DefaultFunctionArgs ? ArgsType : DefaultFunctionArgs, Promise<ReturnsType>> : ReturnType<Builder> extends RegisteredMutation<infer V, any, any> ? RegisteredMutation<V, ArgsType extends DefaultFunctionArgs ? ArgsType : DefaultFunctionArgs, Promise<ReturnsType>> : ReturnType<Builder> extends RegisteredAction<infer V, any, any> ? RegisteredAction<V, ArgsType extends DefaultFunctionArgs ? ArgsType : DefaultFunctionArgs, Promise<ReturnsType>> : ReturnType<Builder>;
|
|
24
|
+
export type ZodToConvexArgs<A> = A extends z.ZodObject<any> ? z.infer<A> : A extends Record<string, z.ZodTypeAny> ? {
|
|
25
|
+
[K in keyof A]: z.infer<A[K]>;
|
|
26
|
+
} : A extends z.ZodTypeAny ? {
|
|
27
|
+
value: z.infer<A>;
|
|
28
|
+
} : Record<string, never>;
|
|
29
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../src/types.ts"],"names":[],"mappings":"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"}
|
package/dist/utils.d.ts
ADDED
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
import { z } from 'zod';
|
|
2
|
+
export declare function pick<T extends Record<string, any>, K extends keyof T>(obj: T, keys: K[]): Pick<T, K>;
|
|
3
|
+
export declare function returnsAs<R extends z.ZodTypeAny>(): <T extends z.input<R>>(v: T) => T;
|
|
4
|
+
export declare function formatZodIssues(error: z.ZodError, context?: 'args' | 'returns' | 'input' | 'output' | 'codec'): {
|
|
5
|
+
error: string;
|
|
6
|
+
context: "output" | "input" | "args" | "returns" | "codec" | undefined;
|
|
7
|
+
issues: {
|
|
8
|
+
path: string;
|
|
9
|
+
code: "custom" | "invalid_type" | "unrecognized_keys" | "invalid_union" | "invalid_value" | "invalid_key" | "too_big" | "too_small" | "invalid_format" | "not_multiple_of" | "invalid_element";
|
|
10
|
+
message: string;
|
|
11
|
+
}[];
|
|
12
|
+
flatten: any;
|
|
13
|
+
};
|
|
14
|
+
export declare function handleZodValidationError(e: unknown, context: 'args' | 'returns' | 'input' | 'output' | 'codec'): never;
|
|
15
|
+
/**
|
|
16
|
+
* Validates a return value against a Zod schema, supporting both codecs and regular schemas.
|
|
17
|
+
*
|
|
18
|
+
* Tries z.encode() first (for codec support), then falls back to .parse() if the schema
|
|
19
|
+
* contains unidirectional transforms (which don't support encoding).
|
|
20
|
+
*
|
|
21
|
+
* For codecs: returns the encoded wire format (z.input<T>)
|
|
22
|
+
* For transforms: returns the transformed output (z.output<T>)
|
|
23
|
+
* For plain schemas: returns the validated value
|
|
24
|
+
*
|
|
25
|
+
* @param schema - The Zod schema to validate against
|
|
26
|
+
* @param value - The value to validate
|
|
27
|
+
* @returns The validated/encoded value
|
|
28
|
+
* @throws Calls handleZodValidationError on validation failure
|
|
29
|
+
*/
|
|
30
|
+
export declare function validateReturns(schema: z.ZodTypeAny, value: unknown): unknown;
|
|
31
|
+
export declare function zPaginated<T extends z.ZodTypeAny>(item: T): z.ZodObject<{
|
|
32
|
+
page: z.ZodArray<T>;
|
|
33
|
+
isDone: z.ZodBoolean;
|
|
34
|
+
continueCursor: z.ZodOptional<z.ZodNullable<z.ZodString>>;
|
|
35
|
+
}, z.core.$strip>;
|
|
36
|
+
/**
|
|
37
|
+
* Maps Date fields to number fields for docSchema generation.
|
|
38
|
+
* Handles Date, Date.optional(), Date.nullable(), and Date.default() cases.
|
|
39
|
+
* Returns the original field for non-Date types.
|
|
40
|
+
*/
|
|
41
|
+
export declare function mapDateFieldToNumber(field: z.ZodTypeAny): z.ZodTypeAny;
|
|
42
|
+
type Mask = readonly string[] | Record<string, boolean | 1 | true>;
|
|
43
|
+
/**
|
|
44
|
+
* Returns a plain shape object containing only the selected fields.
|
|
45
|
+
* Accepts either a ZodObject or a raw shape object.
|
|
46
|
+
*/
|
|
47
|
+
export declare function pickShape(schemaOrShape: z.ZodObject<any> | Record<string, any>, mask: Mask): Record<string, any>;
|
|
48
|
+
export declare function safePick(schema: z.ZodObject<any>, mask: Mask): z.ZodObject<any>;
|
|
49
|
+
/**
|
|
50
|
+
* Convenience: omit a set of keys by building the complement.
|
|
51
|
+
* Avoids using Zod's .omit() which can cause type depth issues.
|
|
52
|
+
*/
|
|
53
|
+
export declare function safeOmit(schema: z.ZodObject<any>, mask: Mask): z.ZodObject<any>;
|
|
54
|
+
export {};
|
|
55
|
+
//# sourceMappingURL=utils.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"utils.d.ts","sourceRoot":"","sources":["../src/utils.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,CAAC,EAAE,MAAM,KAAK,CAAA;AAGvB,wBAAgB,IAAI,CAAC,CAAC,SAAS,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EAAE,CAAC,SAAS,MAAM,CAAC,EACnE,GAAG,EAAE,CAAC,EACN,IAAI,EAAE,CAAC,EAAE,GACR,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,CAMZ;AAGD,wBAAgB,SAAS,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,MACtC,CAAC,SAAS,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,OACnC;AAGD,wBAAgB,eAAe,CAC7B,KAAK,EAAE,CAAC,CAAC,QAAQ,EACjB,OAAO,CAAC,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO;;;;;;;;;EAa5D;AAID,wBAAgB,wBAAwB,CACtC,CAAC,EAAE,OAAO,EACV,OAAO,EAAE,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,QAAQ,GAAG,OAAO,GACzD,KAAK,CAKP;AAED;;;;;;;;;;;;;;GAcG;AACH,wBAAgB,eAAe,CAAC,MAAM,EAAE,CAAC,CAAC,UAAU,EAAE,KAAK,EAAE,OAAO,GAAG,OAAO,CAkB7E;AAGD,wBAAgB,UAAU,CAAC,CAAC,SAAS,CAAC,CAAC,UAAU,EAAE,IAAI,EAAE,CAAC;;;;kBAMzD;AAED;;;;GAIG;AACH,wBAAgB,oBAAoB,CAAC,KAAK,EAAE,CAAC,CAAC,UAAU,GAAG,CAAC,CAAC,UAAU,CA0BtE;AAGD,KAAK,IAAI,GAAG,SAAS,MAAM,EAAE,GAAG,MAAM,CAAC,MAAM,EAAE,OAAO,GAAG,CAAC,GAAG,IAAI,CAAC,CAAA;AAOlE;;;GAGG;AACH,wBAAgB,SAAS,CACvB,aAAa,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,EACrD,IAAI,EAAE,IAAI,GACT,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAUrB;AAGD,wBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAE/E;AAED;;;GAGG;AACH,wBAAgB,QAAQ,CAAC,MAAM,EAAE,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,EAAE,IAAI,EAAE,IAAI,GAAG,CAAC,CAAC,SAAS,CAAC,GAAG,CAAC,CAM/E"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import type { FunctionVisibility, RegisteredAction, RegisteredMutation, RegisteredQuery } from 'convex/server';
|
|
2
|
+
import { z } from 'zod';
|
|
3
|
+
import type { ExtractCtx, ExtractVisibility, InferHandlerReturns, InferReturns, ZodToConvexArgs } from './types';
|
|
4
|
+
export declare function zQuery<Builder extends (fn: any) => any, A extends z.ZodTypeAny | Record<string, z.ZodTypeAny>, R extends z.ZodTypeAny | undefined = undefined, Visibility extends FunctionVisibility = ExtractVisibility<Builder>>(query: Builder, input: A, handler: (ctx: ExtractCtx<Builder>, args: ZodToConvexArgs<A>) => InferHandlerReturns<R> | Promise<InferHandlerReturns<R>>, options?: {
|
|
5
|
+
returns?: R;
|
|
6
|
+
}): RegisteredQuery<Visibility, ZodToConvexArgs<A>, Promise<InferReturns<R>>>;
|
|
7
|
+
export declare function zInternalQuery<Builder extends (fn: any) => any, A extends z.ZodTypeAny | Record<string, z.ZodTypeAny>, R extends z.ZodTypeAny | undefined = undefined, Visibility extends FunctionVisibility = ExtractVisibility<Builder>>(internalQuery: Builder, input: A, handler: (ctx: ExtractCtx<Builder>, args: ZodToConvexArgs<A>) => InferHandlerReturns<R> | Promise<InferHandlerReturns<R>>, options?: {
|
|
8
|
+
returns?: R;
|
|
9
|
+
}): RegisteredQuery<Visibility, ZodToConvexArgs<A>, Promise<InferReturns<R>>>;
|
|
10
|
+
export declare function zMutation<Builder extends (fn: any) => any, A extends z.ZodTypeAny | Record<string, z.ZodTypeAny>, R extends z.ZodTypeAny | undefined = undefined, Visibility extends FunctionVisibility = ExtractVisibility<Builder>>(mutation: Builder, input: A, handler: (ctx: ExtractCtx<Builder>, args: ZodToConvexArgs<A>) => InferHandlerReturns<R> | Promise<InferHandlerReturns<R>>, options?: {
|
|
11
|
+
returns?: R;
|
|
12
|
+
}): RegisteredMutation<Visibility, ZodToConvexArgs<A>, Promise<InferReturns<R>>>;
|
|
13
|
+
export declare function zInternalMutation<Builder extends (fn: any) => any, A extends z.ZodTypeAny | Record<string, z.ZodTypeAny>, R extends z.ZodTypeAny | undefined = undefined, Visibility extends FunctionVisibility = ExtractVisibility<Builder>>(internalMutation: Builder, input: A, handler: (ctx: ExtractCtx<Builder>, args: ZodToConvexArgs<A>) => InferHandlerReturns<R> | Promise<InferHandlerReturns<R>>, options?: {
|
|
14
|
+
returns?: R;
|
|
15
|
+
}): RegisteredMutation<Visibility, ZodToConvexArgs<A>, Promise<InferReturns<R>>>;
|
|
16
|
+
export declare function zAction<Builder extends (fn: any) => any, A extends z.ZodTypeAny | Record<string, z.ZodTypeAny>, R extends z.ZodTypeAny | undefined = undefined, Visibility extends FunctionVisibility = ExtractVisibility<Builder>>(action: Builder, input: A, handler: (ctx: ExtractCtx<Builder>, args: ZodToConvexArgs<A>) => InferHandlerReturns<R> | Promise<InferHandlerReturns<R>>, options?: {
|
|
17
|
+
returns?: R;
|
|
18
|
+
}): RegisteredAction<Visibility, ZodToConvexArgs<A>, Promise<InferReturns<R>>>;
|
|
19
|
+
export declare function zInternalAction<Builder extends (fn: any) => any, A extends z.ZodTypeAny | Record<string, z.ZodTypeAny>, R extends z.ZodTypeAny | undefined = undefined, Visibility extends FunctionVisibility = ExtractVisibility<Builder>>(internalAction: Builder, input: A, handler: (ctx: ExtractCtx<Builder>, args: ZodToConvexArgs<A>) => InferHandlerReturns<R> | Promise<InferHandlerReturns<R>>, options?: {
|
|
20
|
+
returns?: R;
|
|
21
|
+
}): RegisteredAction<Visibility, ZodToConvexArgs<A>, Promise<InferReturns<R>>>;
|
|
22
|
+
//# sourceMappingURL=wrappers.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"wrappers.d.ts","sourceRoot":"","sources":["../src/wrappers.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "zodvex",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.4.1",
|
|
4
4
|
"description": "Zod <=> Convex integration, supporting Zod 4",
|
|
5
5
|
"keywords": ["zod", "convex", "validators", "codec", "mapping", "schema", "validation"],
|
|
6
6
|
"homepage": "https://github.com/panzacoder/zodvex#readme",
|
|
@@ -21,18 +21,23 @@
|
|
|
21
21
|
"types": "./dist/index.d.ts",
|
|
22
22
|
"import": "./dist/index.js",
|
|
23
23
|
"default": "./dist/index.js"
|
|
24
|
+
},
|
|
25
|
+
"./transform": {
|
|
26
|
+
"types": "./dist/transform/index.d.ts",
|
|
27
|
+
"import": "./dist/transform/index.js",
|
|
28
|
+
"default": "./dist/transform/index.js"
|
|
24
29
|
}
|
|
25
30
|
},
|
|
26
31
|
"files": ["dist", "src", "README.md", "LICENSE"],
|
|
27
32
|
"scripts": {
|
|
28
|
-
"build": "tsup",
|
|
33
|
+
"build": "tsup && tsc --emitDeclarationOnly",
|
|
29
34
|
"dev": "bun run tsup --watch",
|
|
30
35
|
"type-check": "bun run tsc --noEmit",
|
|
31
36
|
"test": "bun test",
|
|
32
37
|
"lint": "bun x biome check src __tests__",
|
|
33
38
|
"lint:fix": "bun x biome check --write src __tests__",
|
|
34
39
|
"format": "bun x biome format --write src __tests__",
|
|
35
|
-
"prepare": "tsup",
|
|
40
|
+
"prepare": "tsup && tsc --emitDeclarationOnly",
|
|
36
41
|
"prepublishOnly": "bun test && bun run type-check"
|
|
37
42
|
},
|
|
38
43
|
"peerDependencies": {
|
|
@@ -40,13 +45,15 @@
|
|
|
40
45
|
"convex-helpers": "^0.1.104",
|
|
41
46
|
"zod": "^4.1.12"
|
|
42
47
|
},
|
|
48
|
+
"dependencies": {
|
|
49
|
+
"tsup": "^8.5.0",
|
|
50
|
+
"typescript": "^5.9.3"
|
|
51
|
+
},
|
|
43
52
|
"devDependencies": {
|
|
44
53
|
"@biomejs/biome": "^2.2.6",
|
|
45
54
|
"@types/bun": "^1.3.0",
|
|
46
55
|
"@types/node": "^24.8.0",
|
|
47
|
-
"ai": "^6.0.6"
|
|
48
|
-
"tsup": "^8.5.0",
|
|
49
|
-
"typescript": "^5.9.3"
|
|
56
|
+
"ai": "^6.0.6"
|
|
50
57
|
},
|
|
51
58
|
"engines": {
|
|
52
59
|
"node": ">=20",
|
|
@@ -152,3 +152,27 @@ const treeNodeSchema = z.object({
|
|
|
152
152
|
})
|
|
153
153
|
declare const treeNodeResult: InferReturns<typeof treeNodeSchema>
|
|
154
154
|
expectNotAny(treeNodeResult)
|
|
155
|
+
|
|
156
|
+
// --- Codec/Transform schemas: handler returns z.output (internal type), not z.input (wire type) ---
|
|
157
|
+
// This tests the fix for Zod 4.1 codec support where input !== output
|
|
158
|
+
|
|
159
|
+
// Simulate a pipe/transform schema where input !== output
|
|
160
|
+
// z.input = string (wire format), z.output = Date (internal representation)
|
|
161
|
+
declare const codecSchema: z.ZodPipe<z.ZodString, z.ZodDate>
|
|
162
|
+
declare const codecResult: InferReturns<typeof codecSchema>
|
|
163
|
+
expectNotAny(codecResult)
|
|
164
|
+
// Handler should return Date (z.output), not string (z.input)
|
|
165
|
+
// @ts-expect-error - If this errors with "unused directive", Result is string (the bug)
|
|
166
|
+
const _codecInvalid: typeof codecResult = 'not a date'
|
|
167
|
+
|
|
168
|
+
// Test with transform (coerce pattern)
|
|
169
|
+
const coerceNumberSchema = z.coerce.number()
|
|
170
|
+
declare const coerceResult: InferReturns<typeof coerceNumberSchema>
|
|
171
|
+
expectNotAny(coerceResult)
|
|
172
|
+
// @ts-expect-error - Result should be number, not string/any
|
|
173
|
+
const _coerceInvalid: typeof coerceResult = 'not a number'
|
|
174
|
+
|
|
175
|
+
// Test with preprocess (another transform pattern)
|
|
176
|
+
const preprocessedSchema = z.preprocess(val => String(val), z.string())
|
|
177
|
+
declare const preprocessResult: InferReturns<typeof preprocessedSchema>
|
|
178
|
+
expectNotAny(preprocessResult)
|
|
@@ -358,10 +358,10 @@ type DocArrayElement = ShapeDocArray[number]
|
|
|
358
358
|
// BUG: DocArrayElement is `unknown`, should be the union type with system fields
|
|
359
359
|
expectNotUnknown({} as DocArrayElement)
|
|
360
360
|
|
|
361
|
-
// --- Test 22: Union table schema property preserves original schema type ---
|
|
362
|
-
// This should work - schema property is directly typed as Schema
|
|
361
|
+
// --- Test 22: Union table schema.insert property preserves original schema type ---
|
|
362
|
+
// This should work - schema.insert property is directly typed as Schema
|
|
363
363
|
|
|
364
|
-
type ShapesSchema = typeof ShapesTable.schema
|
|
364
|
+
type ShapesSchema = typeof ShapesTable.schema.insert
|
|
365
365
|
expectNotAny({} as ShapesSchema)
|
|
366
366
|
|
|
367
367
|
// The schema should be the original union, not any
|
|
@@ -382,8 +382,8 @@ const EventsTable = zodTable(
|
|
|
382
382
|
])
|
|
383
383
|
)
|
|
384
384
|
|
|
385
|
-
// The schema should preserve discriminated union type
|
|
386
|
-
type EventsSchema = typeof EventsTable.schema
|
|
385
|
+
// The schema.insert should preserve discriminated union type
|
|
386
|
+
type EventsSchema = typeof EventsTable.schema.insert
|
|
387
387
|
expectNotAny({} as EventsSchema)
|
|
388
388
|
|
|
389
389
|
type EventsOutput = z.infer<EventsSchema>
|