@hy_ong/zod-kit 0.2.3 → 0.2.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.
|
@@ -44,14 +44,14 @@ type ManyOfMessages = {
|
|
|
44
44
|
* @property {Function} [transform] - Custom transformation function applied to each value
|
|
45
45
|
* @property {Record<Locale, ManyOfMessages>} [i18n] - Custom error messages for different locales
|
|
46
46
|
*/
|
|
47
|
-
type ManyOfOptions<IsRequired extends boolean = true,
|
|
48
|
-
values:
|
|
49
|
-
defaultValue?: IsRequired extends true ?
|
|
47
|
+
type ManyOfOptions<IsRequired extends boolean = true, V extends readonly (string | number)[] = readonly (string | number)[]> = {
|
|
48
|
+
values: V;
|
|
49
|
+
defaultValue?: IsRequired extends true ? V[number][] : V[number][] | null;
|
|
50
50
|
min?: number;
|
|
51
51
|
max?: number;
|
|
52
52
|
allowDuplicates?: boolean;
|
|
53
53
|
caseSensitive?: boolean;
|
|
54
|
-
transform?: (value:
|
|
54
|
+
transform?: (value: V[number][]) => V[number][];
|
|
55
55
|
i18n?: Partial<Record<Locale, Partial<ManyOfMessages>>>;
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
@@ -60,7 +60,7 @@ type ManyOfOptions<IsRequired extends boolean = true, T extends string | number
|
|
|
60
60
|
* @template IsRequired - Whether the field is required
|
|
61
61
|
* @template T - The type of allowed values
|
|
62
62
|
*/
|
|
63
|
-
type ManyOfSchema<IsRequired extends boolean,
|
|
63
|
+
type ManyOfSchema<IsRequired extends boolean, V extends readonly (string | number)[]> = IsRequired extends true ? ZodType<V[number][]> : ZodType<V[number][] | null>;
|
|
64
64
|
/**
|
|
65
65
|
* Creates a Zod schema for multi-select validation that restricts values to a predefined set
|
|
66
66
|
*
|
|
@@ -106,6 +106,6 @@ type ManyOfSchema<IsRequired extends boolean, T> = IsRequired extends true ? Zod
|
|
|
106
106
|
* itemsSchema.parse([1, 1, 2]) // ✓ [1, 1, 2]
|
|
107
107
|
* ```
|
|
108
108
|
*/
|
|
109
|
-
declare function manyOf<IsRequired extends boolean = false,
|
|
109
|
+
declare function manyOf<IsRequired extends boolean = false, const V extends readonly (string | number)[] = readonly (string | number)[]>(required?: IsRequired, options?: Omit<ManyOfOptions<IsRequired, V>, "required">): ManyOfSchema<IsRequired, V>;
|
|
110
110
|
|
|
111
111
|
export { type ManyOfMessages, type ManyOfOptions, type ManyOfSchema, manyOf };
|
package/dist/common/many-of.d.ts
CHANGED
|
@@ -44,14 +44,14 @@ type ManyOfMessages = {
|
|
|
44
44
|
* @property {Function} [transform] - Custom transformation function applied to each value
|
|
45
45
|
* @property {Record<Locale, ManyOfMessages>} [i18n] - Custom error messages for different locales
|
|
46
46
|
*/
|
|
47
|
-
type ManyOfOptions<IsRequired extends boolean = true,
|
|
48
|
-
values:
|
|
49
|
-
defaultValue?: IsRequired extends true ?
|
|
47
|
+
type ManyOfOptions<IsRequired extends boolean = true, V extends readonly (string | number)[] = readonly (string | number)[]> = {
|
|
48
|
+
values: V;
|
|
49
|
+
defaultValue?: IsRequired extends true ? V[number][] : V[number][] | null;
|
|
50
50
|
min?: number;
|
|
51
51
|
max?: number;
|
|
52
52
|
allowDuplicates?: boolean;
|
|
53
53
|
caseSensitive?: boolean;
|
|
54
|
-
transform?: (value:
|
|
54
|
+
transform?: (value: V[number][]) => V[number][];
|
|
55
55
|
i18n?: Partial<Record<Locale, Partial<ManyOfMessages>>>;
|
|
56
56
|
};
|
|
57
57
|
/**
|
|
@@ -60,7 +60,7 @@ type ManyOfOptions<IsRequired extends boolean = true, T extends string | number
|
|
|
60
60
|
* @template IsRequired - Whether the field is required
|
|
61
61
|
* @template T - The type of allowed values
|
|
62
62
|
*/
|
|
63
|
-
type ManyOfSchema<IsRequired extends boolean,
|
|
63
|
+
type ManyOfSchema<IsRequired extends boolean, V extends readonly (string | number)[]> = IsRequired extends true ? ZodType<V[number][]> : ZodType<V[number][] | null>;
|
|
64
64
|
/**
|
|
65
65
|
* Creates a Zod schema for multi-select validation that restricts values to a predefined set
|
|
66
66
|
*
|
|
@@ -106,6 +106,6 @@ type ManyOfSchema<IsRequired extends boolean, T> = IsRequired extends true ? Zod
|
|
|
106
106
|
* itemsSchema.parse([1, 1, 2]) // ✓ [1, 1, 2]
|
|
107
107
|
* ```
|
|
108
108
|
*/
|
|
109
|
-
declare function manyOf<IsRequired extends boolean = false,
|
|
109
|
+
declare function manyOf<IsRequired extends boolean = false, const V extends readonly (string | number)[] = readonly (string | number)[]>(required?: IsRequired, options?: Omit<ManyOfOptions<IsRequired, V>, "required">): ManyOfSchema<IsRequired, V>;
|
|
110
110
|
|
|
111
111
|
export { type ManyOfMessages, type ManyOfOptions, type ManyOfSchema, manyOf };
|
package/dist/common/one-of.d.cts
CHANGED
|
@@ -35,11 +35,11 @@ type OneOfMessages = {
|
|
|
35
35
|
* @property {Function} [transform] - Custom transformation function applied after validation
|
|
36
36
|
* @property {Record<Locale, OneOfMessages>} [i18n] - Custom error messages for different locales
|
|
37
37
|
*/
|
|
38
|
-
type OneOfOptions<IsRequired extends boolean = true,
|
|
39
|
-
values:
|
|
40
|
-
defaultValue?: IsRequired extends true ?
|
|
38
|
+
type OneOfOptions<IsRequired extends boolean = true, V extends readonly (string | number)[] = readonly (string | number)[]> = {
|
|
39
|
+
values: V;
|
|
40
|
+
defaultValue?: IsRequired extends true ? V[number] : V[number] | null;
|
|
41
41
|
caseSensitive?: boolean;
|
|
42
|
-
transform?: (value:
|
|
42
|
+
transform?: (value: V[number]) => V[number];
|
|
43
43
|
i18n?: Partial<Record<Locale, Partial<OneOfMessages>>>;
|
|
44
44
|
};
|
|
45
45
|
/**
|
|
@@ -48,7 +48,7 @@ type OneOfOptions<IsRequired extends boolean = true, T extends string | number =
|
|
|
48
48
|
* @template IsRequired - Whether the field is required
|
|
49
49
|
* @template T - The type of allowed values
|
|
50
50
|
*/
|
|
51
|
-
type OneOfSchema<IsRequired extends boolean,
|
|
51
|
+
type OneOfSchema<IsRequired extends boolean, V extends readonly (string | number)[]> = IsRequired extends true ? ZodType<V[number]> : ZodType<V[number] | null>;
|
|
52
52
|
/**
|
|
53
53
|
* Creates a Zod schema for single-select validation that restricts values to a predefined set
|
|
54
54
|
*
|
|
@@ -99,6 +99,6 @@ type OneOfSchema<IsRequired extends boolean, T> = IsRequired extends true ? ZodT
|
|
|
99
99
|
* sizeSchema.parse("m") // ✓ "M"
|
|
100
100
|
* ```
|
|
101
101
|
*/
|
|
102
|
-
declare function oneOf<IsRequired extends boolean = false,
|
|
102
|
+
declare function oneOf<IsRequired extends boolean = false, const V extends readonly (string | number)[] = readonly (string | number)[]>(required?: IsRequired, options?: Omit<OneOfOptions<IsRequired, V>, "required">): OneOfSchema<IsRequired, V>;
|
|
103
103
|
|
|
104
104
|
export { type OneOfMessages, type OneOfOptions, type OneOfSchema, oneOf };
|
package/dist/common/one-of.d.ts
CHANGED
|
@@ -35,11 +35,11 @@ type OneOfMessages = {
|
|
|
35
35
|
* @property {Function} [transform] - Custom transformation function applied after validation
|
|
36
36
|
* @property {Record<Locale, OneOfMessages>} [i18n] - Custom error messages for different locales
|
|
37
37
|
*/
|
|
38
|
-
type OneOfOptions<IsRequired extends boolean = true,
|
|
39
|
-
values:
|
|
40
|
-
defaultValue?: IsRequired extends true ?
|
|
38
|
+
type OneOfOptions<IsRequired extends boolean = true, V extends readonly (string | number)[] = readonly (string | number)[]> = {
|
|
39
|
+
values: V;
|
|
40
|
+
defaultValue?: IsRequired extends true ? V[number] : V[number] | null;
|
|
41
41
|
caseSensitive?: boolean;
|
|
42
|
-
transform?: (value:
|
|
42
|
+
transform?: (value: V[number]) => V[number];
|
|
43
43
|
i18n?: Partial<Record<Locale, Partial<OneOfMessages>>>;
|
|
44
44
|
};
|
|
45
45
|
/**
|
|
@@ -48,7 +48,7 @@ type OneOfOptions<IsRequired extends boolean = true, T extends string | number =
|
|
|
48
48
|
* @template IsRequired - Whether the field is required
|
|
49
49
|
* @template T - The type of allowed values
|
|
50
50
|
*/
|
|
51
|
-
type OneOfSchema<IsRequired extends boolean,
|
|
51
|
+
type OneOfSchema<IsRequired extends boolean, V extends readonly (string | number)[]> = IsRequired extends true ? ZodType<V[number]> : ZodType<V[number] | null>;
|
|
52
52
|
/**
|
|
53
53
|
* Creates a Zod schema for single-select validation that restricts values to a predefined set
|
|
54
54
|
*
|
|
@@ -99,6 +99,6 @@ type OneOfSchema<IsRequired extends boolean, T> = IsRequired extends true ? ZodT
|
|
|
99
99
|
* sizeSchema.parse("m") // ✓ "M"
|
|
100
100
|
* ```
|
|
101
101
|
*/
|
|
102
|
-
declare function oneOf<IsRequired extends boolean = false,
|
|
102
|
+
declare function oneOf<IsRequired extends boolean = false, const V extends readonly (string | number)[] = readonly (string | number)[]>(required?: IsRequired, options?: Omit<OneOfOptions<IsRequired, V>, "required">): OneOfSchema<IsRequired, V>;
|
|
103
103
|
|
|
104
104
|
export { type OneOfMessages, type OneOfOptions, type OneOfSchema, oneOf };
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@hy_ong/zod-kit",
|
|
3
|
-
"version": "0.2.
|
|
3
|
+
"version": "0.2.4",
|
|
4
4
|
"description": "A comprehensive TypeScript library providing pre-built Zod validation schemas with full internationalization support for common data types and Taiwan-specific formats",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"zod",
|
|
@@ -46,14 +46,14 @@ export type ManyOfMessages = {
|
|
|
46
46
|
* @property {Function} [transform] - Custom transformation function applied to each value
|
|
47
47
|
* @property {Record<Locale, ManyOfMessages>} [i18n] - Custom error messages for different locales
|
|
48
48
|
*/
|
|
49
|
-
export type ManyOfOptions<IsRequired extends boolean = true,
|
|
50
|
-
values:
|
|
51
|
-
defaultValue?: IsRequired extends true ?
|
|
49
|
+
export type ManyOfOptions<IsRequired extends boolean = true, V extends readonly (string | number)[] = readonly (string | number)[]> = {
|
|
50
|
+
values: V
|
|
51
|
+
defaultValue?: IsRequired extends true ? V[number][] : V[number][] | null
|
|
52
52
|
min?: number
|
|
53
53
|
max?: number
|
|
54
54
|
allowDuplicates?: boolean
|
|
55
55
|
caseSensitive?: boolean
|
|
56
|
-
transform?: (value:
|
|
56
|
+
transform?: (value: V[number][]) => V[number][]
|
|
57
57
|
i18n?: Partial<Record<Locale, Partial<ManyOfMessages>>>
|
|
58
58
|
}
|
|
59
59
|
|
|
@@ -63,7 +63,7 @@ export type ManyOfOptions<IsRequired extends boolean = true, T extends string |
|
|
|
63
63
|
* @template IsRequired - Whether the field is required
|
|
64
64
|
* @template T - The type of allowed values
|
|
65
65
|
*/
|
|
66
|
-
export type ManyOfSchema<IsRequired extends boolean,
|
|
66
|
+
export type ManyOfSchema<IsRequired extends boolean, V extends readonly (string | number)[]> = IsRequired extends true ? ZodType<V[number][]> : ZodType<V[number][] | null>
|
|
67
67
|
|
|
68
68
|
/**
|
|
69
69
|
* Creates a Zod schema for multi-select validation that restricts values to a predefined set
|
|
@@ -110,11 +110,11 @@ export type ManyOfSchema<IsRequired extends boolean, T> = IsRequired extends tru
|
|
|
110
110
|
* itemsSchema.parse([1, 1, 2]) // ✓ [1, 1, 2]
|
|
111
111
|
* ```
|
|
112
112
|
*/
|
|
113
|
-
export function manyOf<IsRequired extends boolean = false,
|
|
113
|
+
export function manyOf<IsRequired extends boolean = false, const V extends readonly (string | number)[] = readonly (string | number)[]>(
|
|
114
114
|
required?: IsRequired,
|
|
115
|
-
options?: Omit<ManyOfOptions<IsRequired,
|
|
116
|
-
): ManyOfSchema<IsRequired,
|
|
117
|
-
const { values = [] as unknown as
|
|
115
|
+
options?: Omit<ManyOfOptions<IsRequired, V>, "required">,
|
|
116
|
+
): ManyOfSchema<IsRequired, V> {
|
|
117
|
+
const { values = [] as unknown as V, defaultValue = null, min, max, allowDuplicates = false, caseSensitive = true, transform, i18n } = options ?? {}
|
|
118
118
|
|
|
119
119
|
const isRequired = required ?? (false as IsRequired)
|
|
120
120
|
|
|
@@ -135,7 +135,7 @@ export function manyOf<IsRequired extends boolean = false, T extends string | nu
|
|
|
135
135
|
const hasNumbers = values.some((v) => typeof v === "number")
|
|
136
136
|
if (hasNumbers && typeof item === "string" && !isNaN(Number(item)) && item.trim() !== "") {
|
|
137
137
|
const numVal = Number(item)
|
|
138
|
-
if ((values as number[]).includes(numVal)) return numVal
|
|
138
|
+
if ((values as readonly number[]).includes(numVal)) return numVal
|
|
139
139
|
}
|
|
140
140
|
|
|
141
141
|
// Case-insensitive normalization
|
|
@@ -178,7 +178,7 @@ export function manyOf<IsRequired extends boolean = false, T extends string | nu
|
|
|
178
178
|
|
|
179
179
|
// Check each item is in the allowed values
|
|
180
180
|
for (const item of val) {
|
|
181
|
-
if (!values.includes(item as
|
|
181
|
+
if (!(values as readonly (string | number)[]).includes(item as V[number])) {
|
|
182
182
|
ctx.addIssue({
|
|
183
183
|
code: "custom",
|
|
184
184
|
message: getMessage("invalid", { values: values.join(", ") }),
|
|
@@ -212,8 +212,8 @@ export function manyOf<IsRequired extends boolean = false, T extends string | nu
|
|
|
212
212
|
})
|
|
213
213
|
.transform((val) => {
|
|
214
214
|
if (val === null || !Array.isArray(val) || !transform) return val
|
|
215
|
-
return transform(val as
|
|
215
|
+
return transform(val as V[number][])
|
|
216
216
|
})
|
|
217
217
|
|
|
218
|
-
return schema as unknown as ManyOfSchema<IsRequired,
|
|
218
|
+
return schema as unknown as ManyOfSchema<IsRequired, V>
|
|
219
219
|
}
|
|
@@ -37,11 +37,11 @@ export type OneOfMessages = {
|
|
|
37
37
|
* @property {Function} [transform] - Custom transformation function applied after validation
|
|
38
38
|
* @property {Record<Locale, OneOfMessages>} [i18n] - Custom error messages for different locales
|
|
39
39
|
*/
|
|
40
|
-
export type OneOfOptions<IsRequired extends boolean = true,
|
|
41
|
-
values:
|
|
42
|
-
defaultValue?: IsRequired extends true ?
|
|
40
|
+
export type OneOfOptions<IsRequired extends boolean = true, V extends readonly (string | number)[] = readonly (string | number)[]> = {
|
|
41
|
+
values: V
|
|
42
|
+
defaultValue?: IsRequired extends true ? V[number] : V[number] | null
|
|
43
43
|
caseSensitive?: boolean
|
|
44
|
-
transform?: (value:
|
|
44
|
+
transform?: (value: V[number]) => V[number]
|
|
45
45
|
i18n?: Partial<Record<Locale, Partial<OneOfMessages>>>
|
|
46
46
|
}
|
|
47
47
|
|
|
@@ -51,7 +51,7 @@ export type OneOfOptions<IsRequired extends boolean = true, T extends string | n
|
|
|
51
51
|
* @template IsRequired - Whether the field is required
|
|
52
52
|
* @template T - The type of allowed values
|
|
53
53
|
*/
|
|
54
|
-
export type OneOfSchema<IsRequired extends boolean,
|
|
54
|
+
export type OneOfSchema<IsRequired extends boolean, V extends readonly (string | number)[]> = IsRequired extends true ? ZodType<V[number]> : ZodType<V[number] | null>
|
|
55
55
|
|
|
56
56
|
/**
|
|
57
57
|
* Creates a Zod schema for single-select validation that restricts values to a predefined set
|
|
@@ -103,11 +103,11 @@ export type OneOfSchema<IsRequired extends boolean, T> = IsRequired extends true
|
|
|
103
103
|
* sizeSchema.parse("m") // ✓ "M"
|
|
104
104
|
* ```
|
|
105
105
|
*/
|
|
106
|
-
export function oneOf<IsRequired extends boolean = false,
|
|
106
|
+
export function oneOf<IsRequired extends boolean = false, const V extends readonly (string | number)[] = readonly (string | number)[]>(
|
|
107
107
|
required?: IsRequired,
|
|
108
|
-
options?: Omit<OneOfOptions<IsRequired,
|
|
109
|
-
): OneOfSchema<IsRequired,
|
|
110
|
-
const { values = [] as unknown as
|
|
108
|
+
options?: Omit<OneOfOptions<IsRequired, V>, "required">,
|
|
109
|
+
): OneOfSchema<IsRequired, V> {
|
|
110
|
+
const { values = [] as unknown as V, defaultValue = null, caseSensitive = true, transform, i18n } = options ?? {}
|
|
111
111
|
|
|
112
112
|
const isRequired = required ?? (false as IsRequired)
|
|
113
113
|
|
|
@@ -132,7 +132,7 @@ export function oneOf<IsRequired extends boolean = false, T extends string | num
|
|
|
132
132
|
const hasNumbers = values.some((v) => typeof v === "number")
|
|
133
133
|
if (hasNumbers && typeof val === "string" && !isNaN(Number(val)) && val.trim() !== "") {
|
|
134
134
|
const numVal = Number(val)
|
|
135
|
-
if ((values as number[]).includes(numVal)) return numVal
|
|
135
|
+
if ((values as readonly number[]).includes(numVal)) return numVal
|
|
136
136
|
}
|
|
137
137
|
|
|
138
138
|
// Case-insensitive normalization for string values
|
|
@@ -156,7 +156,7 @@ export function oneOf<IsRequired extends boolean = false, T extends string | num
|
|
|
156
156
|
return
|
|
157
157
|
}
|
|
158
158
|
|
|
159
|
-
if (!values.includes(val as
|
|
159
|
+
if (!(values as readonly (string | number)[]).includes(val as V[number])) {
|
|
160
160
|
ctx.addIssue({
|
|
161
161
|
code: "custom",
|
|
162
162
|
message: getMessage("invalid", { values: values.join(", ") }),
|
|
@@ -165,8 +165,8 @@ export function oneOf<IsRequired extends boolean = false, T extends string | num
|
|
|
165
165
|
})
|
|
166
166
|
.transform((val) => {
|
|
167
167
|
if (val === null || !transform) return val
|
|
168
|
-
return transform(val as
|
|
168
|
+
return transform(val as V[number])
|
|
169
169
|
})
|
|
170
170
|
|
|
171
|
-
return schema as unknown as OneOfSchema<IsRequired,
|
|
171
|
+
return schema as unknown as OneOfSchema<IsRequired, V>
|
|
172
172
|
}
|