@zod-utils/react-hook-form 0.1.0

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 ADDED
@@ -0,0 +1,282 @@
1
+ # @zod-utils/react-hook-form
2
+
3
+
4
+ [![npm version](https://img.shields.io/npm/v/@zod-utils/react-hook-form.svg)](https://www.npmjs.com/package/@zod-utils/react-hook-form)
5
+ [![npm downloads](https://img.shields.io/npm/dm/@zod-utils/react-hook-form.svg)](https://www.npmjs.com/package/@zod-utils/react-hook-form)
6
+ [![License: MIT](https://img.shields.io/badge/License-MIT-yellow.svg)](https://opensource.org/licenses/MIT)
7
+ [![TypeScript](https://img.shields.io/badge/TypeScript-5.0-blue.svg)](https://www.typescriptlang.org/)
8
+ [![CI](https://github.com/thu-san/zod-utils/workflows/CI/badge.svg)](https://github.com/thu-san/zod-utils/actions)
9
+ React Hook Form integration and utilities for Zod schemas.
10
+
11
+ ## Installation
12
+
13
+ ```bash
14
+ npm install @zod-utils/react-hook-form zod react react-hook-form @hookform/resolvers
15
+ ```
16
+
17
+ ## Features
18
+
19
+ - 🎣 **useZodForm** - Type-safe React Hook Form integration
20
+ - 🌐 **Custom error messages** - Japanese error resolver (customizable)
21
+ - 📦 **All core utilities** - Re-exports everything from `@zod-utils/core`
22
+ - ⚛️ **React-optimized** - Built specifically for React applications
23
+
24
+ ## Quick Start
25
+
26
+ ```typescript
27
+ import { useZodForm, getSchemaDefaults } from '@zod-utils/react-hook-form';
28
+ import { z } from 'zod';
29
+
30
+ const schema = z.object({
31
+ name: z.string().default('John Doe'),
32
+ email: z.string().email(),
33
+ age: z.number().min(18),
34
+ });
35
+
36
+ function MyForm() {
37
+ const form = useZodForm({
38
+ schema,
39
+ defaultValues: getSchemaDefaults(schema),
40
+ });
41
+
42
+ const onSubmit = form.handleSubmit((data) => {
43
+ console.log(data);
44
+ });
45
+
46
+ return (
47
+ <form onSubmit={onSubmit}>
48
+ <input {...form.register('name')} />
49
+ <input {...form.register('email')} type="email" />
50
+ <input {...form.register('age')} type="number" />
51
+ <button type="submit">Submit</button>
52
+ </form>
53
+ );
54
+ }
55
+ ```
56
+
57
+ ## API Reference
58
+
59
+ ### `useZodForm(config)`
60
+
61
+ Type-safe wrapper around React Hook Form's `useForm` with automatic Zod schema integration.
62
+
63
+ ```typescript
64
+ import { useZodForm } from '@zod-utils/react-hook-form';
65
+ import { z } from 'zod';
66
+
67
+ const schema = z.object({
68
+ username: z.string().min(3),
69
+ password: z.string().min(8),
70
+ });
71
+
72
+ const form = useZodForm({
73
+ schema, // Zod schema (required)
74
+ defaultValues: { /* ... */ }, // Optional default values
75
+ zodResolverOptions: { /* ... */ }, // Optional zodResolver options
76
+ // ... all other useForm options
77
+ });
78
+ ```
79
+
80
+ **Automatically sets up:**
81
+ - Zod schema validation via `zodResolver`
82
+ - Proper TypeScript typing
83
+ - Form state management
84
+
85
+ ---
86
+
87
+ ### `customErrorResolver(config)`
88
+
89
+ Custom error message resolver with Japanese translations. Easily customizable for other languages.
90
+
91
+ ```typescript
92
+ import { customErrorResolver, FieldNamespaceMapping } from '@zod-utils/react-hook-form';
93
+ import { z } from 'zod';
94
+
95
+ // Extend the field namespace mapping
96
+ const MyFieldNamespaceMapping = {
97
+ ...FieldNamespaceMapping,
98
+ myForm: {
99
+ username: 'ユーザー名',
100
+ email: 'メールアドレス',
101
+ },
102
+ };
103
+
104
+ const errorMap = customErrorResolver({
105
+ fieldNamespace: 'myForm',
106
+ });
107
+
108
+ const schema = z.object({
109
+ username: z.string(),
110
+ email: z.string().email(),
111
+ });
112
+
113
+ // Use with Zod
114
+ schema.parse({ username: '', email: 'invalid' }, { errorMap });
115
+ ```
116
+
117
+ **Supported error types:**
118
+ - `too_small` / `too_big` - With field-specific messages
119
+ - `invalid_type` - Type mismatch errors
120
+ - `invalid_format` - Email, URL, UUID, etc.
121
+ - `invalid_value` - Enum/literal errors
122
+ - And more...
123
+
124
+ ---
125
+
126
+ ### `FieldNamespaceMapping`
127
+
128
+ Mapping object for custom field names in error messages.
129
+
130
+ ```typescript
131
+ export const FieldNamespaceMapping = {
132
+ department: {
133
+ groupName: '部署・店舗名',
134
+ },
135
+ // Add your own namespaces
136
+ };
137
+
138
+ export type FIELD_NAMESPACE = keyof typeof FieldNamespaceMapping;
139
+ ```
140
+
141
+ **Extend it:**
142
+ ```typescript
143
+ import { FieldNamespaceMapping } from '@zod-utils/react-hook-form';
144
+
145
+ const CustomMapping = {
146
+ ...FieldNamespaceMapping,
147
+ userForm: {
148
+ firstName: '名',
149
+ lastName: '姓',
150
+ },
151
+ };
152
+ ```
153
+
154
+ ---
155
+
156
+ ## Core Utilities (Re-exported)
157
+
158
+ All utilities from `@zod-utils/core` are re-exported for convenience:
159
+
160
+ ```typescript
161
+ import {
162
+ // Schema utilities
163
+ getSchemaDefaults,
164
+ checkIfFieldIsRequired,
165
+ getPrimitiveType,
166
+ removeDefault,
167
+ extractDefault,
168
+ getUnwrappedType,
169
+
170
+ // Type utilities
171
+ type MakeOptionalAndNullable,
172
+ type Simplify,
173
+ type PickArrayObject,
174
+ } from '@zod-utils/react-hook-form';
175
+ ```
176
+
177
+ See [@zod-utils/core documentation](../core/README.md) for details.
178
+
179
+ ---
180
+
181
+ ## Complete Example
182
+
183
+ ```typescript
184
+ import { useZodForm, getSchemaDefaults } from '@zod-utils/react-hook-form';
185
+ import { z } from 'zod';
186
+
187
+ const userSchema = z.object({
188
+ profile: z.object({
189
+ firstName: z.string().min(1, 'First name is required'),
190
+ lastName: z.string().min(1, 'Last name is required'),
191
+ age: z.number().min(18).max(120),
192
+ }),
193
+ contact: z.object({
194
+ email: z.string().email(),
195
+ phone: z.string().optional(),
196
+ }),
197
+ preferences: z.object({
198
+ theme: z.enum(['light', 'dark']).default('light'),
199
+ notifications: z.boolean().default(true),
200
+ }),
201
+ });
202
+
203
+ function UserForm() {
204
+ const form = useZodForm({
205
+ schema: userSchema,
206
+ defaultValues: getSchemaDefaults(userSchema),
207
+ });
208
+
209
+ const onSubmit = form.handleSubmit((data) => {
210
+ console.log('Valid data:', data);
211
+ });
212
+
213
+ return (
214
+ <form onSubmit={onSubmit}>
215
+ {/* Profile */}
216
+ <input {...form.register('profile.firstName')} />
217
+ {form.formState.errors.profile?.firstName && (
218
+ <span>{form.formState.errors.profile.firstName.message}</span>
219
+ )}
220
+
221
+ <input {...form.register('profile.lastName')} />
222
+ {form.formState.errors.profile?.lastName && (
223
+ <span>{form.formState.errors.profile.lastName.message}</span>
224
+ )}
225
+
226
+ <input {...form.register('profile.age', { valueAsNumber: true })} type="number" />
227
+ {form.formState.errors.profile?.age && (
228
+ <span>{form.formState.errors.profile.age.message}</span>
229
+ )}
230
+
231
+ {/* Contact */}
232
+ <input {...form.register('contact.email')} type="email" />
233
+ {form.formState.errors.contact?.email && (
234
+ <span>{form.formState.errors.contact.email.message}</span>
235
+ )}
236
+
237
+ <input {...form.register('contact.phone')} type="tel" />
238
+
239
+ {/* Preferences - pre-filled with defaults */}
240
+ <select {...form.register('preferences.theme')}>
241
+ <option value="light">Light</option>
242
+ <option value="dark">Dark</option>
243
+ </select>
244
+
245
+ <label>
246
+ <input
247
+ {...form.register('preferences.notifications')}
248
+ type="checkbox"
249
+ />
250
+ Enable notifications
251
+ </label>
252
+
253
+ <button type="submit">Submit</button>
254
+ </form>
255
+ );
256
+ }
257
+ ```
258
+
259
+ ---
260
+
261
+ ## TypeScript Support
262
+
263
+ Fully typed with TypeScript for the best developer experience:
264
+
265
+ ```typescript
266
+ const form = useZodForm({
267
+ schema: userSchema,
268
+ defaultValues: getSchemaDefaults(userSchema),
269
+ });
270
+
271
+ // ✅ Fully typed
272
+ form.register('profile.firstName');
273
+
274
+ // ❌ TypeScript error
275
+ form.register('nonexistent.field');
276
+ ```
277
+
278
+ ---
279
+
280
+ ## License
281
+
282
+ MIT
@@ -0,0 +1,66 @@
1
+ import * as react_hook_form from 'react-hook-form';
2
+ import { FieldValues, DefaultValues, UseFormProps } from 'react-hook-form';
3
+ import { zodResolver } from '@hookform/resolvers/zod';
4
+ import { MakeOptionalAndNullable } from '@zod-utils/core';
5
+ export * from '@zod-utils/core';
6
+ import { ZodTypeAny, ZodErrorMap } from 'zod';
7
+
8
+ /**
9
+ * Type-safe wrapper around useForm with Zod v4 schema integration
10
+ * Automatically sets up zodResolver and provides better type inference
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const schema = z.object({
15
+ * name: z.string(),
16
+ * age: z.number()
17
+ * });
18
+ *
19
+ * const form = useZodForm({
20
+ * schema,
21
+ * defaultValues: { name: '', age: 0 }
22
+ * });
23
+ * ```
24
+ */
25
+ declare const useZodForm: <T extends FieldValues>({ schema, zodResolverOptions, ...formOptions }: {
26
+ schema: ZodTypeAny;
27
+ defaultValues?: DefaultValues<MakeOptionalAndNullable<T>>;
28
+ zodResolverOptions?: Parameters<typeof zodResolver>[1];
29
+ } & Omit<UseFormProps<MakeOptionalAndNullable<T>, unknown, T>, "resolver" | "defaultValues">) => react_hook_form.UseFormReturn<any, unknown, any>;
30
+
31
+ /**
32
+ * Japanese error map for Zod validation errors
33
+ * @param fieldName - Optional custom field name to use in error messages
34
+ * @returns Zod error map function
35
+ */
36
+ declare function createJapaneseErrorMap(fieldName?: string): (issue: Parameters<ZodErrorMap>[0]) => string;
37
+
38
+ /**
39
+ * English error map for Zod validation errors
40
+ * @param fieldName - Optional custom field name to use in error messages
41
+ * @returns Zod error map function
42
+ */
43
+ declare function createEnglishErrorMap(fieldName?: string): (issue: Parameters<ZodErrorMap>[0]) => string;
44
+
45
+ /**
46
+ * Field namespace mapping for custom error messages
47
+ * You can extend this mapping to customize field names in error messages
48
+ */
49
+ declare const FieldNamespaceMapping: {
50
+ department: {
51
+ groupName: string;
52
+ };
53
+ };
54
+ type FIELD_NAMESPACE = keyof typeof FieldNamespaceMapping;
55
+ /**
56
+ * Custom error resolver with field namespace support (Japanese locale)
57
+ * @deprecated Use createJapaneseErrorMap or createEnglishErrorMap instead
58
+ * @param options - Configuration options
59
+ * @param options.fieldNamespace - Namespace for field name mappings
60
+ * @returns Error resolver function
61
+ */
62
+ declare const customErrorResolver: ({ fieldNamespace, }: {
63
+ fieldNamespace: FIELD_NAMESPACE;
64
+ }) => (issue: Parameters<ZodErrorMap>[0]) => string;
65
+
66
+ export { type FIELD_NAMESPACE, FieldNamespaceMapping, createEnglishErrorMap, createJapaneseErrorMap, customErrorResolver, useZodForm };
@@ -0,0 +1,66 @@
1
+ import * as react_hook_form from 'react-hook-form';
2
+ import { FieldValues, DefaultValues, UseFormProps } from 'react-hook-form';
3
+ import { zodResolver } from '@hookform/resolvers/zod';
4
+ import { MakeOptionalAndNullable } from '@zod-utils/core';
5
+ export * from '@zod-utils/core';
6
+ import { ZodTypeAny, ZodErrorMap } from 'zod';
7
+
8
+ /**
9
+ * Type-safe wrapper around useForm with Zod v4 schema integration
10
+ * Automatically sets up zodResolver and provides better type inference
11
+ *
12
+ * @example
13
+ * ```ts
14
+ * const schema = z.object({
15
+ * name: z.string(),
16
+ * age: z.number()
17
+ * });
18
+ *
19
+ * const form = useZodForm({
20
+ * schema,
21
+ * defaultValues: { name: '', age: 0 }
22
+ * });
23
+ * ```
24
+ */
25
+ declare const useZodForm: <T extends FieldValues>({ schema, zodResolverOptions, ...formOptions }: {
26
+ schema: ZodTypeAny;
27
+ defaultValues?: DefaultValues<MakeOptionalAndNullable<T>>;
28
+ zodResolverOptions?: Parameters<typeof zodResolver>[1];
29
+ } & Omit<UseFormProps<MakeOptionalAndNullable<T>, unknown, T>, "resolver" | "defaultValues">) => react_hook_form.UseFormReturn<any, unknown, any>;
30
+
31
+ /**
32
+ * Japanese error map for Zod validation errors
33
+ * @param fieldName - Optional custom field name to use in error messages
34
+ * @returns Zod error map function
35
+ */
36
+ declare function createJapaneseErrorMap(fieldName?: string): (issue: Parameters<ZodErrorMap>[0]) => string;
37
+
38
+ /**
39
+ * English error map for Zod validation errors
40
+ * @param fieldName - Optional custom field name to use in error messages
41
+ * @returns Zod error map function
42
+ */
43
+ declare function createEnglishErrorMap(fieldName?: string): (issue: Parameters<ZodErrorMap>[0]) => string;
44
+
45
+ /**
46
+ * Field namespace mapping for custom error messages
47
+ * You can extend this mapping to customize field names in error messages
48
+ */
49
+ declare const FieldNamespaceMapping: {
50
+ department: {
51
+ groupName: string;
52
+ };
53
+ };
54
+ type FIELD_NAMESPACE = keyof typeof FieldNamespaceMapping;
55
+ /**
56
+ * Custom error resolver with field namespace support (Japanese locale)
57
+ * @deprecated Use createJapaneseErrorMap or createEnglishErrorMap instead
58
+ * @param options - Configuration options
59
+ * @param options.fieldNamespace - Namespace for field name mappings
60
+ * @returns Error resolver function
61
+ */
62
+ declare const customErrorResolver: ({ fieldNamespace, }: {
63
+ fieldNamespace: FIELD_NAMESPACE;
64
+ }) => (issue: Parameters<ZodErrorMap>[0]) => string;
65
+
66
+ export { type FIELD_NAMESPACE, FieldNamespaceMapping, createEnglishErrorMap, createJapaneseErrorMap, customErrorResolver, useZodForm };
package/dist/index.js ADDED
@@ -0,0 +1,337 @@
1
+ 'use strict';
2
+
3
+ var zod = require('@hookform/resolvers/zod');
4
+ var reactHookForm = require('react-hook-form');
5
+ var core = require('@zod-utils/core');
6
+
7
+ var __defProp = Object.defineProperty;
8
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
9
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
10
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
11
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
12
+ var __spreadValues = (a, b) => {
13
+ for (var prop in b || (b = {}))
14
+ if (__hasOwnProp.call(b, prop))
15
+ __defNormalProp(a, prop, b[prop]);
16
+ if (__getOwnPropSymbols)
17
+ for (var prop of __getOwnPropSymbols(b)) {
18
+ if (__propIsEnum.call(b, prop))
19
+ __defNormalProp(a, prop, b[prop]);
20
+ }
21
+ return a;
22
+ };
23
+ var __objRest = (source, exclude) => {
24
+ var target = {};
25
+ for (var prop in source)
26
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
27
+ target[prop] = source[prop];
28
+ if (source != null && __getOwnPropSymbols)
29
+ for (var prop of __getOwnPropSymbols(source)) {
30
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
31
+ target[prop] = source[prop];
32
+ }
33
+ return target;
34
+ };
35
+ var useZodForm = (_a) => {
36
+ var _b = _a, {
37
+ schema,
38
+ zodResolverOptions
39
+ } = _b, formOptions = __objRest(_b, [
40
+ "schema",
41
+ "zodResolverOptions"
42
+ ]);
43
+ const resolver = zod.zodResolver(schema, zodResolverOptions);
44
+ return reactHookForm.useForm(__spreadValues({
45
+ resolver
46
+ }, formOptions));
47
+ };
48
+
49
+ // src/locales/ja.ts
50
+ var Nouns = {
51
+ regex: "\u5165\u529B\u5024",
52
+ email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",
53
+ url: "URL",
54
+ emoji: "\u7D75\u6587\u5B57",
55
+ uuid: "UUID",
56
+ uuidv4: "UUIDv4",
57
+ uuidv6: "UUIDv6",
58
+ nanoid: "nanoid",
59
+ guid: "GUID",
60
+ cuid: "cuid",
61
+ cuid2: "cuid2",
62
+ ulid: "ULID",
63
+ xid: "XID",
64
+ ksuid: "KSUID",
65
+ datetime: "ISO\u65E5\u6642",
66
+ date: "ISO\u65E5\u4ED8",
67
+ time: "ISO\u6642\u523B",
68
+ duration: "ISO\u671F\u9593",
69
+ ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9",
70
+ ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9",
71
+ cidrv4: "IPv4\u7BC4\u56F2",
72
+ cidrv6: "IPv6\u7BC4\u56F2",
73
+ base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217",
74
+ base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217",
75
+ json_string: "JSON\u6587\u5B57\u5217",
76
+ e164: "E.164\u756A\u53F7",
77
+ jwt: "JWT",
78
+ template_literal: "\u5165\u529B\u5024"
79
+ };
80
+ function stringifyPrimitive(value) {
81
+ if (typeof value === "bigint") return `${value.toString()}n`;
82
+ if (typeof value === "string") return `"${value}"`;
83
+ return `${value}`;
84
+ }
85
+ function joinValues(array, separator = "\u3001") {
86
+ return array.map((val) => stringifyPrimitive(val)).join(separator);
87
+ }
88
+ var Sizable = {
89
+ string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
90
+ file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" },
91
+ array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" },
92
+ set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }
93
+ };
94
+ function getSizing(origin) {
95
+ var _a;
96
+ return (_a = Sizable[origin]) != null ? _a : null;
97
+ }
98
+ function parsedType(data) {
99
+ const t = typeof data;
100
+ switch (t) {
101
+ case "number": {
102
+ return Number.isNaN(data) ? "NaN" : "\u6570\u5024";
103
+ }
104
+ case "object": {
105
+ if (Array.isArray(data)) {
106
+ return "\u914D\u5217";
107
+ }
108
+ if (data === null) {
109
+ return "null";
110
+ }
111
+ if (Object.getPrototypeOf(data) !== Object.prototype && data && data.constructor) {
112
+ return data.constructor.name;
113
+ }
114
+ }
115
+ }
116
+ return t;
117
+ }
118
+ function createJapaneseErrorMap(fieldName) {
119
+ return (issue) => {
120
+ var _a;
121
+ const field = fieldName || "\u3053\u306E\u9805\u76EE";
122
+ switch (issue.code) {
123
+ case "custom": {
124
+ return "\u7121\u52B9\u306A\u5165\u529B";
125
+ }
126
+ case "invalid_type":
127
+ return `\u7121\u52B9\u306A\u5165\u529B: ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${parsedType(issue.input)}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;
128
+ case "invalid_value":
129
+ if (issue.values.length === 1)
130
+ return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;
131
+ return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue.values)}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
132
+ case "too_big": {
133
+ const adj = issue.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044";
134
+ const sizing = getSizing(issue.origin);
135
+ if (sizing)
136
+ return `\u5927\u304D\u3059\u304E\u308B\u5024: ${field}\u306F${issue.maximum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
137
+ return `\u5927\u304D\u3059\u304E\u308B\u5024: ${field}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
138
+ }
139
+ case "too_small": {
140
+ const adj = issue.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044";
141
+ const sizing = getSizing(issue.origin);
142
+ if (issue.minimum === 1) {
143
+ return "\u5FC5\u9808\u9805\u76EE\u3067\u3059";
144
+ }
145
+ if (sizing)
146
+ return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${field}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
147
+ return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${field}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
148
+ }
149
+ case "invalid_format": {
150
+ const _issue = issue;
151
+ if (_issue.format === "starts_with")
152
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
153
+ if (_issue.format === "ends_with")
154
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
155
+ if (_issue.format === "includes")
156
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
157
+ if (_issue.format === "regex")
158
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
159
+ return `\u7121\u52B9\u306A${(_a = Nouns[_issue.format]) != null ? _a : issue.format}`;
160
+ }
161
+ case "not_multiple_of":
162
+ return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
163
+ case "unrecognized_keys":
164
+ return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue.keys)}`;
165
+ case "invalid_key":
166
+ return `${field}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;
167
+ case "invalid_union":
168
+ return "\u7121\u52B9\u306A\u5165\u529B";
169
+ case "invalid_element":
170
+ return `${field}\u5185\u306E\u7121\u52B9\u306A\u5024`;
171
+ default:
172
+ return "\u7121\u52B9\u306A\u5165\u529B";
173
+ }
174
+ };
175
+ }
176
+
177
+ // src/locales/en.ts
178
+ var Nouns2 = {
179
+ regex: "input",
180
+ email: "email address",
181
+ url: "URL",
182
+ emoji: "emoji",
183
+ uuid: "UUID",
184
+ uuidv4: "UUIDv4",
185
+ uuidv6: "UUIDv6",
186
+ nanoid: "nanoid",
187
+ guid: "GUID",
188
+ cuid: "cuid",
189
+ cuid2: "cuid2",
190
+ ulid: "ULID",
191
+ xid: "XID",
192
+ ksuid: "KSUID",
193
+ datetime: "ISO datetime",
194
+ date: "ISO date",
195
+ time: "ISO time",
196
+ duration: "ISO duration",
197
+ ipv4: "IPv4 address",
198
+ ipv6: "IPv6 address",
199
+ cidrv4: "IPv4 CIDR",
200
+ cidrv6: "IPv6 CIDR",
201
+ base64: "base64 encoded string",
202
+ base64url: "base64url encoded string",
203
+ json_string: "JSON string",
204
+ e164: "E.164 phone number",
205
+ jwt: "JWT",
206
+ template_literal: "input"
207
+ };
208
+ function stringifyPrimitive2(value) {
209
+ if (typeof value === "bigint") return `${value.toString()}n`;
210
+ if (typeof value === "string") return `"${value}"`;
211
+ return `${value}`;
212
+ }
213
+ function joinValues2(array, separator = " | ") {
214
+ return array.map((val) => stringifyPrimitive2(val)).join(separator);
215
+ }
216
+ var Sizable2 = {
217
+ string: "character",
218
+ file: "byte",
219
+ array: "item",
220
+ set: "item"
221
+ };
222
+ function getSizing2(origin) {
223
+ var _a;
224
+ return (_a = Sizable2[origin]) != null ? _a : null;
225
+ }
226
+ function parsedType2(data) {
227
+ const t = typeof data;
228
+ switch (t) {
229
+ case "number": {
230
+ return Number.isNaN(data) ? "NaN" : "number";
231
+ }
232
+ case "object": {
233
+ if (Array.isArray(data)) {
234
+ return "array";
235
+ }
236
+ if (data === null) {
237
+ return "null";
238
+ }
239
+ if (Object.getPrototypeOf(data) !== Object.prototype && data && data.constructor) {
240
+ return data.constructor.name;
241
+ }
242
+ }
243
+ }
244
+ return t;
245
+ }
246
+ function createEnglishErrorMap(fieldName) {
247
+ return (issue) => {
248
+ var _a;
249
+ const field = fieldName || "This field";
250
+ switch (issue.code) {
251
+ case "custom": {
252
+ return "Invalid input";
253
+ }
254
+ case "invalid_type":
255
+ return `Invalid type: expected ${issue.expected}, received ${parsedType2(issue.input)}`;
256
+ case "invalid_value":
257
+ if (issue.values.length === 1)
258
+ return `Invalid input: expected ${stringifyPrimitive2(issue.values[0])}`;
259
+ return `Invalid option: must be one of ${joinValues2(issue.values)}`;
260
+ case "too_big": {
261
+ const unit = getSizing2(issue.origin);
262
+ const plural = issue.maximum !== 1 ? "s" : "";
263
+ if (unit) {
264
+ return issue.inclusive ? `${field} must be at most ${issue.maximum} ${unit}${plural}` : `${field} must be less than ${issue.maximum} ${unit}${plural}`;
265
+ }
266
+ return issue.inclusive ? `${field} must be at most ${issue.maximum}` : `${field} must be less than ${issue.maximum}`;
267
+ }
268
+ case "too_small": {
269
+ const unit = getSizing2(issue.origin);
270
+ const plural = issue.minimum !== 1 ? "s" : "";
271
+ if (issue.minimum === 1 && !unit) {
272
+ return `${field} is required`;
273
+ }
274
+ if (unit) {
275
+ return issue.inclusive ? `${field} must be at least ${issue.minimum} ${unit}${plural}` : `${field} must be greater than ${issue.minimum} ${unit}${plural}`;
276
+ }
277
+ return issue.inclusive ? `${field} must be at least ${issue.minimum}` : `${field} must be greater than ${issue.minimum}`;
278
+ }
279
+ case "invalid_format": {
280
+ const _issue = issue;
281
+ if (_issue.format === "starts_with")
282
+ return `Invalid string: must start with "${_issue.prefix}"`;
283
+ if (_issue.format === "ends_with")
284
+ return `Invalid string: must end with "${_issue.suffix}"`;
285
+ if (_issue.format === "includes")
286
+ return `Invalid string: must include "${_issue.includes}"`;
287
+ if (_issue.format === "regex")
288
+ return `Invalid string: must match pattern ${_issue.pattern}`;
289
+ return `Invalid ${(_a = Nouns2[_issue.format]) != null ? _a : _issue.format}`;
290
+ }
291
+ case "not_multiple_of":
292
+ return `Invalid number: must be a multiple of ${issue.divisor}`;
293
+ case "unrecognized_keys":
294
+ return `Unrecognized key${issue.keys.length > 1 ? "s" : ""}: ${joinValues2(issue.keys)}`;
295
+ case "invalid_key":
296
+ return `Invalid key in ${field}`;
297
+ case "invalid_union":
298
+ return "Invalid input";
299
+ case "invalid_element":
300
+ return `Invalid value in ${field}`;
301
+ default:
302
+ return "Invalid input";
303
+ }
304
+ };
305
+ }
306
+
307
+ // src/error-map.ts
308
+ var FieldNamespaceMapping = {
309
+ department: {
310
+ groupName: "\u90E8\u7F72\u30FB\u5E97\u8217\u540D"
311
+ }
312
+ };
313
+ var customErrorResolver = ({
314
+ fieldNamespace
315
+ }) => {
316
+ return (issue) => {
317
+ var _a;
318
+ const fieldName = FieldNamespaceMapping[fieldNamespace][String(
319
+ (_a = issue.path) == null ? void 0 : _a[0]
320
+ )] || void 0;
321
+ return createJapaneseErrorMap(fieldName)(issue);
322
+ };
323
+ };
324
+
325
+ exports.FieldNamespaceMapping = FieldNamespaceMapping;
326
+ exports.createEnglishErrorMap = createEnglishErrorMap;
327
+ exports.createJapaneseErrorMap = createJapaneseErrorMap;
328
+ exports.customErrorResolver = customErrorResolver;
329
+ exports.useZodForm = useZodForm;
330
+ Object.keys(core).forEach(function (k) {
331
+ if (k !== 'default' && !Object.prototype.hasOwnProperty.call(exports, k)) Object.defineProperty(exports, k, {
332
+ enumerable: true,
333
+ get: function () { return core[k]; }
334
+ });
335
+ });
336
+ //# sourceMappingURL=index.js.map
337
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/use-zod-form.ts","../src/locales/ja.ts","../src/locales/en.ts","../src/error-map.ts"],"names":["zodResolver","useForm","Nouns","stringifyPrimitive","joinValues","Sizable","getSizing","parsedType"],"mappings":"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","file":"index.js","sourcesContent":["import { zodResolver } from '@hookform/resolvers/zod';\nimport type { MakeOptionalAndNullable } from '@zod-utils/core';\nimport {\n type DefaultValues,\n type FieldValues,\n type UseFormProps,\n useForm,\n} from 'react-hook-form';\nimport type { ZodTypeAny } from 'zod';\n\n/**\n * Type-safe wrapper around useForm with Zod v4 schema integration\n * Automatically sets up zodResolver and provides better type inference\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string(),\n * age: z.number()\n * });\n *\n * const form = useZodForm({\n * schema,\n * defaultValues: { name: '', age: 0 }\n * });\n * ```\n */\nexport const useZodForm = <T extends FieldValues>({\n schema,\n zodResolverOptions,\n ...formOptions\n}: {\n schema: ZodTypeAny;\n defaultValues?: DefaultValues<MakeOptionalAndNullable<T>>;\n zodResolverOptions?: Parameters<typeof zodResolver>[1];\n} & Omit<\n UseFormProps<MakeOptionalAndNullable<T>, unknown, T>,\n 'resolver' | 'defaultValues'\n>) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const resolver = zodResolver(schema as any, zodResolverOptions);\n\n return useForm({\n resolver,\n ...formOptions,\n });\n};\n","import type { ZodErrorMap } from 'zod';\n\nconst Nouns: Record<string, string> = {\n regex: '入力値',\n email: 'メールアドレス',\n url: 'URL',\n emoji: '絵文字',\n uuid: 'UUID',\n uuidv4: 'UUIDv4',\n uuidv6: 'UUIDv6',\n nanoid: 'nanoid',\n guid: 'GUID',\n cuid: 'cuid',\n cuid2: 'cuid2',\n ulid: 'ULID',\n xid: 'XID',\n ksuid: 'KSUID',\n datetime: 'ISO日時',\n date: 'ISO日付',\n time: 'ISO時刻',\n duration: 'ISO期間',\n ipv4: 'IPv4アドレス',\n ipv6: 'IPv6アドレス',\n cidrv4: 'IPv4範囲',\n cidrv6: 'IPv6範囲',\n base64: 'base64エンコード文字列',\n base64url: 'base64urlエンコード文字列',\n json_string: 'JSON文字列',\n e164: 'E.164番号',\n jwt: 'JWT',\n template_literal: '入力値',\n};\n\nfunction stringifyPrimitive(value: unknown): string {\n if (typeof value === 'bigint') return `${value.toString()}n`;\n if (typeof value === 'string') return `\"${value}\"`;\n return `${value}`;\n}\n\ntype Primitive = string | number | symbol | bigint | boolean | null | undefined;\nfunction joinValues<T extends Primitive[]>(array: T, separator = '、'): string {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\n\nconst Sizable: Record<string, { unit: string; verb: string }> = {\n string: { unit: '文字', verb: 'である' },\n file: { unit: 'バイト', verb: 'である' },\n array: { unit: '要素', verb: 'である' },\n set: { unit: '要素', verb: 'である' },\n};\n\nfunction getSizing(origin: string): { unit: string; verb: string } | null {\n return Sizable[origin] ?? null;\n}\n\nfunction parsedType(data: unknown): string {\n const t = typeof data;\n\n switch (t) {\n case 'number': {\n return Number.isNaN(data) ? 'NaN' : '数値';\n }\n case 'object': {\n if (Array.isArray(data)) {\n return '配列';\n }\n if (data === null) {\n return 'null';\n }\n\n if (\n Object.getPrototypeOf(data) !== Object.prototype &&\n data &&\n data.constructor\n ) {\n return data.constructor.name;\n }\n }\n }\n return t;\n}\n\n/**\n * Japanese error map for Zod validation errors\n * @param fieldName - Optional custom field name to use in error messages\n * @returns Zod error map function\n */\nexport function createJapaneseErrorMap(\n fieldName?: string,\n): (issue: Parameters<ZodErrorMap>[0]) => string {\n return (issue: Parameters<ZodErrorMap>[0]) => {\n const field = fieldName || 'この項目';\n\n switch (issue.code) {\n case 'custom': {\n return '無効な入力';\n }\n case 'invalid_type':\n return `無効な入力: ${issue.expected}が期待されましたが、${parsedType(issue.input)}が入力されました`;\n case 'invalid_value':\n if (issue.values.length === 1)\n return `無効な入力: ${stringifyPrimitive(issue.values[0])}が期待されました`;\n return `無効な選択: ${joinValues(issue.values)}のいずれかである必要があります`;\n case 'too_big': {\n const adj = issue.inclusive ? '以下である' : 'より小さい';\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `大きすぎる値: ${field}は${issue.maximum.toString()}${sizing.unit}${adj}必要があります`;\n return `大きすぎる値: ${field}は${issue.maximum.toString()}${adj}必要があります`;\n }\n case 'too_small': {\n const adj = issue.inclusive ? '以上である' : 'より大きい';\n const sizing = getSizing(issue.origin);\n if (issue.minimum === 1) {\n return '必須項目です';\n }\n if (sizing)\n return `小さすぎる値: ${field}は${issue.minimum.toString()}${sizing.unit}${adj}必要があります`;\n return `小さすぎる値: ${field}は${issue.minimum.toString()}${adj}必要があります`;\n }\n case 'invalid_format': {\n const _issue = issue as Extract<\n Parameters<ZodErrorMap>[0],\n { code: 'invalid_format' }\n >;\n if (_issue.format === 'starts_with')\n return `無効な文字列: \"${_issue.prefix}\"で始まる必要があります`;\n if (_issue.format === 'ends_with')\n return `無効な文字列: \"${_issue.suffix}\"で終わる必要があります`;\n if (_issue.format === 'includes')\n return `無効な文字列: \"${_issue.includes}\"を含む必要があります`;\n if (_issue.format === 'regex')\n return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;\n return `無効な${Nouns[_issue.format] ?? issue.format}`;\n }\n case 'not_multiple_of':\n return `無効な数値: ${issue.divisor}の倍数である必要があります`;\n case 'unrecognized_keys':\n return `認識されていないキー${issue.keys.length > 1 ? '群' : ''}: ${joinValues(issue.keys)}`;\n case 'invalid_key':\n return `${field}内の無効なキー`;\n case 'invalid_union':\n return '無効な入力';\n case 'invalid_element':\n return `${field}内の無効な値`;\n default:\n return '無効な入力';\n }\n };\n}\n","import type { ZodErrorMap } from 'zod';\n\nconst Nouns: Record<string, string> = {\n regex: 'input',\n email: 'email address',\n url: 'URL',\n emoji: 'emoji',\n uuid: 'UUID',\n uuidv4: 'UUIDv4',\n uuidv6: 'UUIDv6',\n nanoid: 'nanoid',\n guid: 'GUID',\n cuid: 'cuid',\n cuid2: 'cuid2',\n ulid: 'ULID',\n xid: 'XID',\n ksuid: 'KSUID',\n datetime: 'ISO datetime',\n date: 'ISO date',\n time: 'ISO time',\n duration: 'ISO duration',\n ipv4: 'IPv4 address',\n ipv6: 'IPv6 address',\n cidrv4: 'IPv4 CIDR',\n cidrv6: 'IPv6 CIDR',\n base64: 'base64 encoded string',\n base64url: 'base64url encoded string',\n json_string: 'JSON string',\n e164: 'E.164 phone number',\n jwt: 'JWT',\n template_literal: 'input',\n};\n\nfunction stringifyPrimitive(value: unknown): string {\n if (typeof value === 'bigint') return `${value.toString()}n`;\n if (typeof value === 'string') return `\"${value}\"`;\n return `${value}`;\n}\n\ntype Primitive = string | number | symbol | bigint | boolean | null | undefined;\nfunction joinValues<T extends Primitive[]>(\n array: T,\n separator = ' | ',\n): string {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\n\nconst Sizable: Record<string, string> = {\n string: 'character',\n file: 'byte',\n array: 'item',\n set: 'item',\n};\n\nfunction getSizing(origin: string): string | null {\n return Sizable[origin] ?? null;\n}\n\nfunction parsedType(data: unknown): string {\n const t = typeof data;\n\n switch (t) {\n case 'number': {\n return Number.isNaN(data) ? 'NaN' : 'number';\n }\n case 'object': {\n if (Array.isArray(data)) {\n return 'array';\n }\n if (data === null) {\n return 'null';\n }\n\n if (\n Object.getPrototypeOf(data) !== Object.prototype &&\n data &&\n data.constructor\n ) {\n return data.constructor.name;\n }\n }\n }\n return t;\n}\n\n/**\n * English error map for Zod validation errors\n * @param fieldName - Optional custom field name to use in error messages\n * @returns Zod error map function\n */\nexport function createEnglishErrorMap(\n fieldName?: string,\n): (issue: Parameters<ZodErrorMap>[0]) => string {\n return (issue: Parameters<ZodErrorMap>[0]) => {\n const field = fieldName || 'This field';\n\n switch (issue.code) {\n case 'custom': {\n return 'Invalid input';\n }\n case 'invalid_type':\n return `Invalid type: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n case 'invalid_value':\n if (issue.values.length === 1)\n return `Invalid input: expected ${stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: must be one of ${joinValues(issue.values)}`;\n case 'too_big': {\n const unit = getSizing(issue.origin);\n const plural = issue.maximum !== 1 ? 's' : '';\n if (unit) {\n return issue.inclusive\n ? `${field} must be at most ${issue.maximum} ${unit}${plural}`\n : `${field} must be less than ${issue.maximum} ${unit}${plural}`;\n }\n return issue.inclusive\n ? `${field} must be at most ${issue.maximum}`\n : `${field} must be less than ${issue.maximum}`;\n }\n case 'too_small': {\n const unit = getSizing(issue.origin);\n const plural = issue.minimum !== 1 ? 's' : '';\n if (issue.minimum === 1 && !unit) {\n return `${field} is required`;\n }\n if (unit) {\n return issue.inclusive\n ? `${field} must be at least ${issue.minimum} ${unit}${plural}`\n : `${field} must be greater than ${issue.minimum} ${unit}${plural}`;\n }\n return issue.inclusive\n ? `${field} must be at least ${issue.minimum}`\n : `${field} must be greater than ${issue.minimum}`;\n }\n case 'invalid_format': {\n const _issue = issue as Extract<\n Parameters<ZodErrorMap>[0],\n { code: 'invalid_format' }\n >;\n if (_issue.format === 'starts_with')\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n if (_issue.format === 'ends_with')\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === 'includes')\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === 'regex')\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${Nouns[_issue.format] ?? _issue.format}`;\n }\n case 'not_multiple_of':\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case 'unrecognized_keys':\n return `Unrecognized key${issue.keys.length > 1 ? 's' : ''}: ${joinValues(issue.keys)}`;\n case 'invalid_key':\n return `Invalid key in ${field}`;\n case 'invalid_union':\n return 'Invalid input';\n case 'invalid_element':\n return `Invalid value in ${field}`;\n default:\n return 'Invalid input';\n }\n };\n}\n","import type { ZodErrorMap } from 'zod';\nimport { createEnglishErrorMap } from './locales/en';\nimport { createJapaneseErrorMap } from './locales/ja';\n\n/**\n * Field namespace mapping for custom error messages\n * You can extend this mapping to customize field names in error messages\n */\nexport const FieldNamespaceMapping = {\n department: {\n groupName: '部署・店舗名',\n },\n};\n\nexport type FIELD_NAMESPACE = keyof typeof FieldNamespaceMapping;\n\n/**\n * Custom error resolver with field namespace support (Japanese locale)\n * @deprecated Use createJapaneseErrorMap or createEnglishErrorMap instead\n * @param options - Configuration options\n * @param options.fieldNamespace - Namespace for field name mappings\n * @returns Error resolver function\n */\nexport const customErrorResolver = ({\n fieldNamespace,\n}: {\n fieldNamespace: FIELD_NAMESPACE;\n}) => {\n return (issue: Parameters<ZodErrorMap>[0]) => {\n const fieldName =\n FieldNamespaceMapping[fieldNamespace][\n String(\n issue.path?.[0],\n ) as keyof (typeof FieldNamespaceMapping)[typeof fieldNamespace]\n ] || undefined;\n\n return createJapaneseErrorMap(fieldName)(issue);\n };\n};\n\n// Re-export locale-specific error maps\nexport { createJapaneseErrorMap } from './locales/ja';\nexport { createEnglishErrorMap } from './locales/en';\n"]}
package/dist/index.mjs ADDED
@@ -0,0 +1,325 @@
1
+ import { zodResolver } from '@hookform/resolvers/zod';
2
+ import { useForm } from 'react-hook-form';
3
+ export * from '@zod-utils/core';
4
+
5
+ var __defProp = Object.defineProperty;
6
+ var __getOwnPropSymbols = Object.getOwnPropertySymbols;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __propIsEnum = Object.prototype.propertyIsEnumerable;
9
+ var __defNormalProp = (obj, key, value) => key in obj ? __defProp(obj, key, { enumerable: true, configurable: true, writable: true, value }) : obj[key] = value;
10
+ var __spreadValues = (a, b) => {
11
+ for (var prop in b || (b = {}))
12
+ if (__hasOwnProp.call(b, prop))
13
+ __defNormalProp(a, prop, b[prop]);
14
+ if (__getOwnPropSymbols)
15
+ for (var prop of __getOwnPropSymbols(b)) {
16
+ if (__propIsEnum.call(b, prop))
17
+ __defNormalProp(a, prop, b[prop]);
18
+ }
19
+ return a;
20
+ };
21
+ var __objRest = (source, exclude) => {
22
+ var target = {};
23
+ for (var prop in source)
24
+ if (__hasOwnProp.call(source, prop) && exclude.indexOf(prop) < 0)
25
+ target[prop] = source[prop];
26
+ if (source != null && __getOwnPropSymbols)
27
+ for (var prop of __getOwnPropSymbols(source)) {
28
+ if (exclude.indexOf(prop) < 0 && __propIsEnum.call(source, prop))
29
+ target[prop] = source[prop];
30
+ }
31
+ return target;
32
+ };
33
+ var useZodForm = (_a) => {
34
+ var _b = _a, {
35
+ schema,
36
+ zodResolverOptions
37
+ } = _b, formOptions = __objRest(_b, [
38
+ "schema",
39
+ "zodResolverOptions"
40
+ ]);
41
+ const resolver = zodResolver(schema, zodResolverOptions);
42
+ return useForm(__spreadValues({
43
+ resolver
44
+ }, formOptions));
45
+ };
46
+
47
+ // src/locales/ja.ts
48
+ var Nouns = {
49
+ regex: "\u5165\u529B\u5024",
50
+ email: "\u30E1\u30FC\u30EB\u30A2\u30C9\u30EC\u30B9",
51
+ url: "URL",
52
+ emoji: "\u7D75\u6587\u5B57",
53
+ uuid: "UUID",
54
+ uuidv4: "UUIDv4",
55
+ uuidv6: "UUIDv6",
56
+ nanoid: "nanoid",
57
+ guid: "GUID",
58
+ cuid: "cuid",
59
+ cuid2: "cuid2",
60
+ ulid: "ULID",
61
+ xid: "XID",
62
+ ksuid: "KSUID",
63
+ datetime: "ISO\u65E5\u6642",
64
+ date: "ISO\u65E5\u4ED8",
65
+ time: "ISO\u6642\u523B",
66
+ duration: "ISO\u671F\u9593",
67
+ ipv4: "IPv4\u30A2\u30C9\u30EC\u30B9",
68
+ ipv6: "IPv6\u30A2\u30C9\u30EC\u30B9",
69
+ cidrv4: "IPv4\u7BC4\u56F2",
70
+ cidrv6: "IPv6\u7BC4\u56F2",
71
+ base64: "base64\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217",
72
+ base64url: "base64url\u30A8\u30F3\u30B3\u30FC\u30C9\u6587\u5B57\u5217",
73
+ json_string: "JSON\u6587\u5B57\u5217",
74
+ e164: "E.164\u756A\u53F7",
75
+ jwt: "JWT",
76
+ template_literal: "\u5165\u529B\u5024"
77
+ };
78
+ function stringifyPrimitive(value) {
79
+ if (typeof value === "bigint") return `${value.toString()}n`;
80
+ if (typeof value === "string") return `"${value}"`;
81
+ return `${value}`;
82
+ }
83
+ function joinValues(array, separator = "\u3001") {
84
+ return array.map((val) => stringifyPrimitive(val)).join(separator);
85
+ }
86
+ var Sizable = {
87
+ string: { unit: "\u6587\u5B57", verb: "\u3067\u3042\u308B" },
88
+ file: { unit: "\u30D0\u30A4\u30C8", verb: "\u3067\u3042\u308B" },
89
+ array: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" },
90
+ set: { unit: "\u8981\u7D20", verb: "\u3067\u3042\u308B" }
91
+ };
92
+ function getSizing(origin) {
93
+ var _a;
94
+ return (_a = Sizable[origin]) != null ? _a : null;
95
+ }
96
+ function parsedType(data) {
97
+ const t = typeof data;
98
+ switch (t) {
99
+ case "number": {
100
+ return Number.isNaN(data) ? "NaN" : "\u6570\u5024";
101
+ }
102
+ case "object": {
103
+ if (Array.isArray(data)) {
104
+ return "\u914D\u5217";
105
+ }
106
+ if (data === null) {
107
+ return "null";
108
+ }
109
+ if (Object.getPrototypeOf(data) !== Object.prototype && data && data.constructor) {
110
+ return data.constructor.name;
111
+ }
112
+ }
113
+ }
114
+ return t;
115
+ }
116
+ function createJapaneseErrorMap(fieldName) {
117
+ return (issue) => {
118
+ var _a;
119
+ const field = fieldName || "\u3053\u306E\u9805\u76EE";
120
+ switch (issue.code) {
121
+ case "custom": {
122
+ return "\u7121\u52B9\u306A\u5165\u529B";
123
+ }
124
+ case "invalid_type":
125
+ return `\u7121\u52B9\u306A\u5165\u529B: ${issue.expected}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F\u304C\u3001${parsedType(issue.input)}\u304C\u5165\u529B\u3055\u308C\u307E\u3057\u305F`;
126
+ case "invalid_value":
127
+ if (issue.values.length === 1)
128
+ return `\u7121\u52B9\u306A\u5165\u529B: ${stringifyPrimitive(issue.values[0])}\u304C\u671F\u5F85\u3055\u308C\u307E\u3057\u305F`;
129
+ return `\u7121\u52B9\u306A\u9078\u629E: ${joinValues(issue.values)}\u306E\u3044\u305A\u308C\u304B\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
130
+ case "too_big": {
131
+ const adj = issue.inclusive ? "\u4EE5\u4E0B\u3067\u3042\u308B" : "\u3088\u308A\u5C0F\u3055\u3044";
132
+ const sizing = getSizing(issue.origin);
133
+ if (sizing)
134
+ return `\u5927\u304D\u3059\u304E\u308B\u5024: ${field}\u306F${issue.maximum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
135
+ return `\u5927\u304D\u3059\u304E\u308B\u5024: ${field}\u306F${issue.maximum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
136
+ }
137
+ case "too_small": {
138
+ const adj = issue.inclusive ? "\u4EE5\u4E0A\u3067\u3042\u308B" : "\u3088\u308A\u5927\u304D\u3044";
139
+ const sizing = getSizing(issue.origin);
140
+ if (issue.minimum === 1) {
141
+ return "\u5FC5\u9808\u9805\u76EE\u3067\u3059";
142
+ }
143
+ if (sizing)
144
+ return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${field}\u306F${issue.minimum.toString()}${sizing.unit}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
145
+ return `\u5C0F\u3055\u3059\u304E\u308B\u5024: ${field}\u306F${issue.minimum.toString()}${adj}\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
146
+ }
147
+ case "invalid_format": {
148
+ const _issue = issue;
149
+ if (_issue.format === "starts_with")
150
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.prefix}"\u3067\u59CB\u307E\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
151
+ if (_issue.format === "ends_with")
152
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.suffix}"\u3067\u7D42\u308F\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
153
+ if (_issue.format === "includes")
154
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: "${_issue.includes}"\u3092\u542B\u3080\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
155
+ if (_issue.format === "regex")
156
+ return `\u7121\u52B9\u306A\u6587\u5B57\u5217: \u30D1\u30BF\u30FC\u30F3${_issue.pattern}\u306B\u4E00\u81F4\u3059\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
157
+ return `\u7121\u52B9\u306A${(_a = Nouns[_issue.format]) != null ? _a : issue.format}`;
158
+ }
159
+ case "not_multiple_of":
160
+ return `\u7121\u52B9\u306A\u6570\u5024: ${issue.divisor}\u306E\u500D\u6570\u3067\u3042\u308B\u5FC5\u8981\u304C\u3042\u308A\u307E\u3059`;
161
+ case "unrecognized_keys":
162
+ return `\u8A8D\u8B58\u3055\u308C\u3066\u3044\u306A\u3044\u30AD\u30FC${issue.keys.length > 1 ? "\u7FA4" : ""}: ${joinValues(issue.keys)}`;
163
+ case "invalid_key":
164
+ return `${field}\u5185\u306E\u7121\u52B9\u306A\u30AD\u30FC`;
165
+ case "invalid_union":
166
+ return "\u7121\u52B9\u306A\u5165\u529B";
167
+ case "invalid_element":
168
+ return `${field}\u5185\u306E\u7121\u52B9\u306A\u5024`;
169
+ default:
170
+ return "\u7121\u52B9\u306A\u5165\u529B";
171
+ }
172
+ };
173
+ }
174
+
175
+ // src/locales/en.ts
176
+ var Nouns2 = {
177
+ regex: "input",
178
+ email: "email address",
179
+ url: "URL",
180
+ emoji: "emoji",
181
+ uuid: "UUID",
182
+ uuidv4: "UUIDv4",
183
+ uuidv6: "UUIDv6",
184
+ nanoid: "nanoid",
185
+ guid: "GUID",
186
+ cuid: "cuid",
187
+ cuid2: "cuid2",
188
+ ulid: "ULID",
189
+ xid: "XID",
190
+ ksuid: "KSUID",
191
+ datetime: "ISO datetime",
192
+ date: "ISO date",
193
+ time: "ISO time",
194
+ duration: "ISO duration",
195
+ ipv4: "IPv4 address",
196
+ ipv6: "IPv6 address",
197
+ cidrv4: "IPv4 CIDR",
198
+ cidrv6: "IPv6 CIDR",
199
+ base64: "base64 encoded string",
200
+ base64url: "base64url encoded string",
201
+ json_string: "JSON string",
202
+ e164: "E.164 phone number",
203
+ jwt: "JWT",
204
+ template_literal: "input"
205
+ };
206
+ function stringifyPrimitive2(value) {
207
+ if (typeof value === "bigint") return `${value.toString()}n`;
208
+ if (typeof value === "string") return `"${value}"`;
209
+ return `${value}`;
210
+ }
211
+ function joinValues2(array, separator = " | ") {
212
+ return array.map((val) => stringifyPrimitive2(val)).join(separator);
213
+ }
214
+ var Sizable2 = {
215
+ string: "character",
216
+ file: "byte",
217
+ array: "item",
218
+ set: "item"
219
+ };
220
+ function getSizing2(origin) {
221
+ var _a;
222
+ return (_a = Sizable2[origin]) != null ? _a : null;
223
+ }
224
+ function parsedType2(data) {
225
+ const t = typeof data;
226
+ switch (t) {
227
+ case "number": {
228
+ return Number.isNaN(data) ? "NaN" : "number";
229
+ }
230
+ case "object": {
231
+ if (Array.isArray(data)) {
232
+ return "array";
233
+ }
234
+ if (data === null) {
235
+ return "null";
236
+ }
237
+ if (Object.getPrototypeOf(data) !== Object.prototype && data && data.constructor) {
238
+ return data.constructor.name;
239
+ }
240
+ }
241
+ }
242
+ return t;
243
+ }
244
+ function createEnglishErrorMap(fieldName) {
245
+ return (issue) => {
246
+ var _a;
247
+ const field = fieldName || "This field";
248
+ switch (issue.code) {
249
+ case "custom": {
250
+ return "Invalid input";
251
+ }
252
+ case "invalid_type":
253
+ return `Invalid type: expected ${issue.expected}, received ${parsedType2(issue.input)}`;
254
+ case "invalid_value":
255
+ if (issue.values.length === 1)
256
+ return `Invalid input: expected ${stringifyPrimitive2(issue.values[0])}`;
257
+ return `Invalid option: must be one of ${joinValues2(issue.values)}`;
258
+ case "too_big": {
259
+ const unit = getSizing2(issue.origin);
260
+ const plural = issue.maximum !== 1 ? "s" : "";
261
+ if (unit) {
262
+ return issue.inclusive ? `${field} must be at most ${issue.maximum} ${unit}${plural}` : `${field} must be less than ${issue.maximum} ${unit}${plural}`;
263
+ }
264
+ return issue.inclusive ? `${field} must be at most ${issue.maximum}` : `${field} must be less than ${issue.maximum}`;
265
+ }
266
+ case "too_small": {
267
+ const unit = getSizing2(issue.origin);
268
+ const plural = issue.minimum !== 1 ? "s" : "";
269
+ if (issue.minimum === 1 && !unit) {
270
+ return `${field} is required`;
271
+ }
272
+ if (unit) {
273
+ return issue.inclusive ? `${field} must be at least ${issue.minimum} ${unit}${plural}` : `${field} must be greater than ${issue.minimum} ${unit}${plural}`;
274
+ }
275
+ return issue.inclusive ? `${field} must be at least ${issue.minimum}` : `${field} must be greater than ${issue.minimum}`;
276
+ }
277
+ case "invalid_format": {
278
+ const _issue = issue;
279
+ if (_issue.format === "starts_with")
280
+ return `Invalid string: must start with "${_issue.prefix}"`;
281
+ if (_issue.format === "ends_with")
282
+ return `Invalid string: must end with "${_issue.suffix}"`;
283
+ if (_issue.format === "includes")
284
+ return `Invalid string: must include "${_issue.includes}"`;
285
+ if (_issue.format === "regex")
286
+ return `Invalid string: must match pattern ${_issue.pattern}`;
287
+ return `Invalid ${(_a = Nouns2[_issue.format]) != null ? _a : _issue.format}`;
288
+ }
289
+ case "not_multiple_of":
290
+ return `Invalid number: must be a multiple of ${issue.divisor}`;
291
+ case "unrecognized_keys":
292
+ return `Unrecognized key${issue.keys.length > 1 ? "s" : ""}: ${joinValues2(issue.keys)}`;
293
+ case "invalid_key":
294
+ return `Invalid key in ${field}`;
295
+ case "invalid_union":
296
+ return "Invalid input";
297
+ case "invalid_element":
298
+ return `Invalid value in ${field}`;
299
+ default:
300
+ return "Invalid input";
301
+ }
302
+ };
303
+ }
304
+
305
+ // src/error-map.ts
306
+ var FieldNamespaceMapping = {
307
+ department: {
308
+ groupName: "\u90E8\u7F72\u30FB\u5E97\u8217\u540D"
309
+ }
310
+ };
311
+ var customErrorResolver = ({
312
+ fieldNamespace
313
+ }) => {
314
+ return (issue) => {
315
+ var _a;
316
+ const fieldName = FieldNamespaceMapping[fieldNamespace][String(
317
+ (_a = issue.path) == null ? void 0 : _a[0]
318
+ )] || void 0;
319
+ return createJapaneseErrorMap(fieldName)(issue);
320
+ };
321
+ };
322
+
323
+ export { FieldNamespaceMapping, createEnglishErrorMap, createJapaneseErrorMap, customErrorResolver, useZodForm };
324
+ //# sourceMappingURL=index.mjs.map
325
+ //# sourceMappingURL=index.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/use-zod-form.ts","../src/locales/ja.ts","../src/locales/en.ts","../src/error-map.ts"],"names":["Nouns","stringifyPrimitive","joinValues","Sizable","getSizing","parsedType"],"mappings":"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","file":"index.mjs","sourcesContent":["import { zodResolver } from '@hookform/resolvers/zod';\nimport type { MakeOptionalAndNullable } from '@zod-utils/core';\nimport {\n type DefaultValues,\n type FieldValues,\n type UseFormProps,\n useForm,\n} from 'react-hook-form';\nimport type { ZodTypeAny } from 'zod';\n\n/**\n * Type-safe wrapper around useForm with Zod v4 schema integration\n * Automatically sets up zodResolver and provides better type inference\n *\n * @example\n * ```ts\n * const schema = z.object({\n * name: z.string(),\n * age: z.number()\n * });\n *\n * const form = useZodForm({\n * schema,\n * defaultValues: { name: '', age: 0 }\n * });\n * ```\n */\nexport const useZodForm = <T extends FieldValues>({\n schema,\n zodResolverOptions,\n ...formOptions\n}: {\n schema: ZodTypeAny;\n defaultValues?: DefaultValues<MakeOptionalAndNullable<T>>;\n zodResolverOptions?: Parameters<typeof zodResolver>[1];\n} & Omit<\n UseFormProps<MakeOptionalAndNullable<T>, unknown, T>,\n 'resolver' | 'defaultValues'\n>) => {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n const resolver = zodResolver(schema as any, zodResolverOptions);\n\n return useForm({\n resolver,\n ...formOptions,\n });\n};\n","import type { ZodErrorMap } from 'zod';\n\nconst Nouns: Record<string, string> = {\n regex: '入力値',\n email: 'メールアドレス',\n url: 'URL',\n emoji: '絵文字',\n uuid: 'UUID',\n uuidv4: 'UUIDv4',\n uuidv6: 'UUIDv6',\n nanoid: 'nanoid',\n guid: 'GUID',\n cuid: 'cuid',\n cuid2: 'cuid2',\n ulid: 'ULID',\n xid: 'XID',\n ksuid: 'KSUID',\n datetime: 'ISO日時',\n date: 'ISO日付',\n time: 'ISO時刻',\n duration: 'ISO期間',\n ipv4: 'IPv4アドレス',\n ipv6: 'IPv6アドレス',\n cidrv4: 'IPv4範囲',\n cidrv6: 'IPv6範囲',\n base64: 'base64エンコード文字列',\n base64url: 'base64urlエンコード文字列',\n json_string: 'JSON文字列',\n e164: 'E.164番号',\n jwt: 'JWT',\n template_literal: '入力値',\n};\n\nfunction stringifyPrimitive(value: unknown): string {\n if (typeof value === 'bigint') return `${value.toString()}n`;\n if (typeof value === 'string') return `\"${value}\"`;\n return `${value}`;\n}\n\ntype Primitive = string | number | symbol | bigint | boolean | null | undefined;\nfunction joinValues<T extends Primitive[]>(array: T, separator = '、'): string {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\n\nconst Sizable: Record<string, { unit: string; verb: string }> = {\n string: { unit: '文字', verb: 'である' },\n file: { unit: 'バイト', verb: 'である' },\n array: { unit: '要素', verb: 'である' },\n set: { unit: '要素', verb: 'である' },\n};\n\nfunction getSizing(origin: string): { unit: string; verb: string } | null {\n return Sizable[origin] ?? null;\n}\n\nfunction parsedType(data: unknown): string {\n const t = typeof data;\n\n switch (t) {\n case 'number': {\n return Number.isNaN(data) ? 'NaN' : '数値';\n }\n case 'object': {\n if (Array.isArray(data)) {\n return '配列';\n }\n if (data === null) {\n return 'null';\n }\n\n if (\n Object.getPrototypeOf(data) !== Object.prototype &&\n data &&\n data.constructor\n ) {\n return data.constructor.name;\n }\n }\n }\n return t;\n}\n\n/**\n * Japanese error map for Zod validation errors\n * @param fieldName - Optional custom field name to use in error messages\n * @returns Zod error map function\n */\nexport function createJapaneseErrorMap(\n fieldName?: string,\n): (issue: Parameters<ZodErrorMap>[0]) => string {\n return (issue: Parameters<ZodErrorMap>[0]) => {\n const field = fieldName || 'この項目';\n\n switch (issue.code) {\n case 'custom': {\n return '無効な入力';\n }\n case 'invalid_type':\n return `無効な入力: ${issue.expected}が期待されましたが、${parsedType(issue.input)}が入力されました`;\n case 'invalid_value':\n if (issue.values.length === 1)\n return `無効な入力: ${stringifyPrimitive(issue.values[0])}が期待されました`;\n return `無効な選択: ${joinValues(issue.values)}のいずれかである必要があります`;\n case 'too_big': {\n const adj = issue.inclusive ? '以下である' : 'より小さい';\n const sizing = getSizing(issue.origin);\n if (sizing)\n return `大きすぎる値: ${field}は${issue.maximum.toString()}${sizing.unit}${adj}必要があります`;\n return `大きすぎる値: ${field}は${issue.maximum.toString()}${adj}必要があります`;\n }\n case 'too_small': {\n const adj = issue.inclusive ? '以上である' : 'より大きい';\n const sizing = getSizing(issue.origin);\n if (issue.minimum === 1) {\n return '必須項目です';\n }\n if (sizing)\n return `小さすぎる値: ${field}は${issue.minimum.toString()}${sizing.unit}${adj}必要があります`;\n return `小さすぎる値: ${field}は${issue.minimum.toString()}${adj}必要があります`;\n }\n case 'invalid_format': {\n const _issue = issue as Extract<\n Parameters<ZodErrorMap>[0],\n { code: 'invalid_format' }\n >;\n if (_issue.format === 'starts_with')\n return `無効な文字列: \"${_issue.prefix}\"で始まる必要があります`;\n if (_issue.format === 'ends_with')\n return `無効な文字列: \"${_issue.suffix}\"で終わる必要があります`;\n if (_issue.format === 'includes')\n return `無効な文字列: \"${_issue.includes}\"を含む必要があります`;\n if (_issue.format === 'regex')\n return `無効な文字列: パターン${_issue.pattern}に一致する必要があります`;\n return `無効な${Nouns[_issue.format] ?? issue.format}`;\n }\n case 'not_multiple_of':\n return `無効な数値: ${issue.divisor}の倍数である必要があります`;\n case 'unrecognized_keys':\n return `認識されていないキー${issue.keys.length > 1 ? '群' : ''}: ${joinValues(issue.keys)}`;\n case 'invalid_key':\n return `${field}内の無効なキー`;\n case 'invalid_union':\n return '無効な入力';\n case 'invalid_element':\n return `${field}内の無効な値`;\n default:\n return '無効な入力';\n }\n };\n}\n","import type { ZodErrorMap } from 'zod';\n\nconst Nouns: Record<string, string> = {\n regex: 'input',\n email: 'email address',\n url: 'URL',\n emoji: 'emoji',\n uuid: 'UUID',\n uuidv4: 'UUIDv4',\n uuidv6: 'UUIDv6',\n nanoid: 'nanoid',\n guid: 'GUID',\n cuid: 'cuid',\n cuid2: 'cuid2',\n ulid: 'ULID',\n xid: 'XID',\n ksuid: 'KSUID',\n datetime: 'ISO datetime',\n date: 'ISO date',\n time: 'ISO time',\n duration: 'ISO duration',\n ipv4: 'IPv4 address',\n ipv6: 'IPv6 address',\n cidrv4: 'IPv4 CIDR',\n cidrv6: 'IPv6 CIDR',\n base64: 'base64 encoded string',\n base64url: 'base64url encoded string',\n json_string: 'JSON string',\n e164: 'E.164 phone number',\n jwt: 'JWT',\n template_literal: 'input',\n};\n\nfunction stringifyPrimitive(value: unknown): string {\n if (typeof value === 'bigint') return `${value.toString()}n`;\n if (typeof value === 'string') return `\"${value}\"`;\n return `${value}`;\n}\n\ntype Primitive = string | number | symbol | bigint | boolean | null | undefined;\nfunction joinValues<T extends Primitive[]>(\n array: T,\n separator = ' | ',\n): string {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\n\nconst Sizable: Record<string, string> = {\n string: 'character',\n file: 'byte',\n array: 'item',\n set: 'item',\n};\n\nfunction getSizing(origin: string): string | null {\n return Sizable[origin] ?? null;\n}\n\nfunction parsedType(data: unknown): string {\n const t = typeof data;\n\n switch (t) {\n case 'number': {\n return Number.isNaN(data) ? 'NaN' : 'number';\n }\n case 'object': {\n if (Array.isArray(data)) {\n return 'array';\n }\n if (data === null) {\n return 'null';\n }\n\n if (\n Object.getPrototypeOf(data) !== Object.prototype &&\n data &&\n data.constructor\n ) {\n return data.constructor.name;\n }\n }\n }\n return t;\n}\n\n/**\n * English error map for Zod validation errors\n * @param fieldName - Optional custom field name to use in error messages\n * @returns Zod error map function\n */\nexport function createEnglishErrorMap(\n fieldName?: string,\n): (issue: Parameters<ZodErrorMap>[0]) => string {\n return (issue: Parameters<ZodErrorMap>[0]) => {\n const field = fieldName || 'This field';\n\n switch (issue.code) {\n case 'custom': {\n return 'Invalid input';\n }\n case 'invalid_type':\n return `Invalid type: expected ${issue.expected}, received ${parsedType(issue.input)}`;\n case 'invalid_value':\n if (issue.values.length === 1)\n return `Invalid input: expected ${stringifyPrimitive(issue.values[0])}`;\n return `Invalid option: must be one of ${joinValues(issue.values)}`;\n case 'too_big': {\n const unit = getSizing(issue.origin);\n const plural = issue.maximum !== 1 ? 's' : '';\n if (unit) {\n return issue.inclusive\n ? `${field} must be at most ${issue.maximum} ${unit}${plural}`\n : `${field} must be less than ${issue.maximum} ${unit}${plural}`;\n }\n return issue.inclusive\n ? `${field} must be at most ${issue.maximum}`\n : `${field} must be less than ${issue.maximum}`;\n }\n case 'too_small': {\n const unit = getSizing(issue.origin);\n const plural = issue.minimum !== 1 ? 's' : '';\n if (issue.minimum === 1 && !unit) {\n return `${field} is required`;\n }\n if (unit) {\n return issue.inclusive\n ? `${field} must be at least ${issue.minimum} ${unit}${plural}`\n : `${field} must be greater than ${issue.minimum} ${unit}${plural}`;\n }\n return issue.inclusive\n ? `${field} must be at least ${issue.minimum}`\n : `${field} must be greater than ${issue.minimum}`;\n }\n case 'invalid_format': {\n const _issue = issue as Extract<\n Parameters<ZodErrorMap>[0],\n { code: 'invalid_format' }\n >;\n if (_issue.format === 'starts_with')\n return `Invalid string: must start with \"${_issue.prefix}\"`;\n if (_issue.format === 'ends_with')\n return `Invalid string: must end with \"${_issue.suffix}\"`;\n if (_issue.format === 'includes')\n return `Invalid string: must include \"${_issue.includes}\"`;\n if (_issue.format === 'regex')\n return `Invalid string: must match pattern ${_issue.pattern}`;\n return `Invalid ${Nouns[_issue.format] ?? _issue.format}`;\n }\n case 'not_multiple_of':\n return `Invalid number: must be a multiple of ${issue.divisor}`;\n case 'unrecognized_keys':\n return `Unrecognized key${issue.keys.length > 1 ? 's' : ''}: ${joinValues(issue.keys)}`;\n case 'invalid_key':\n return `Invalid key in ${field}`;\n case 'invalid_union':\n return 'Invalid input';\n case 'invalid_element':\n return `Invalid value in ${field}`;\n default:\n return 'Invalid input';\n }\n };\n}\n","import type { ZodErrorMap } from 'zod';\nimport { createEnglishErrorMap } from './locales/en';\nimport { createJapaneseErrorMap } from './locales/ja';\n\n/**\n * Field namespace mapping for custom error messages\n * You can extend this mapping to customize field names in error messages\n */\nexport const FieldNamespaceMapping = {\n department: {\n groupName: '部署・店舗名',\n },\n};\n\nexport type FIELD_NAMESPACE = keyof typeof FieldNamespaceMapping;\n\n/**\n * Custom error resolver with field namespace support (Japanese locale)\n * @deprecated Use createJapaneseErrorMap or createEnglishErrorMap instead\n * @param options - Configuration options\n * @param options.fieldNamespace - Namespace for field name mappings\n * @returns Error resolver function\n */\nexport const customErrorResolver = ({\n fieldNamespace,\n}: {\n fieldNamespace: FIELD_NAMESPACE;\n}) => {\n return (issue: Parameters<ZodErrorMap>[0]) => {\n const fieldName =\n FieldNamespaceMapping[fieldNamespace][\n String(\n issue.path?.[0],\n ) as keyof (typeof FieldNamespaceMapping)[typeof fieldNamespace]\n ] || undefined;\n\n return createJapaneseErrorMap(fieldName)(issue);\n };\n};\n\n// Re-export locale-specific error maps\nexport { createJapaneseErrorMap } from './locales/ja';\nexport { createEnglishErrorMap } from './locales/en';\n"]}
package/package.json ADDED
@@ -0,0 +1,69 @@
1
+ {
2
+ "name": "@zod-utils/react-hook-form",
3
+ "version": "0.1.0",
4
+ "description": "React Hook Form integration and utilities for Zod schemas",
5
+ "main": "./dist/index.js",
6
+ "module": "./dist/index.mjs",
7
+ "types": "./dist/index.d.ts",
8
+ "exports": {
9
+ ".": {
10
+ "types": "./dist/index.d.ts",
11
+ "import": "./dist/index.mjs",
12
+ "require": "./dist/index.js"
13
+ }
14
+ },
15
+ "files": ["dist", "README.md"],
16
+ "scripts": {
17
+ "build": "tsup",
18
+ "dev": "tsup --watch",
19
+ "type-check": "tsc --noEmit",
20
+ "test": "vitest run",
21
+ "test:watch": "vitest",
22
+ "test:coverage": "vitest run --coverage",
23
+ "prepublishOnly": "npm run build"
24
+ },
25
+ "keywords": [
26
+ "zod",
27
+ "react-hook-form",
28
+ "form",
29
+ "validation",
30
+ "react",
31
+ "typescript"
32
+ ],
33
+ "author": "thu-san",
34
+ "license": "MIT",
35
+ "repository": {
36
+ "type": "git",
37
+ "url": "https://github.com/thu-san/zod-utils.git",
38
+ "directory": "packages/react-hook-form"
39
+ },
40
+ "bugs": {
41
+ "url": "https://github.com/thu-san/zod-utils/issues"
42
+ },
43
+ "homepage": "https://github.com/thu-san/zod-utils/tree/main/packages/react-hook-form#readme",
44
+ "publishConfig": {
45
+ "access": "public"
46
+ },
47
+ "peerDependencies": {
48
+ "react": "^18.0.0 || ^19.0.0",
49
+ "react-hook-form": "^7.0.0",
50
+ "zod": "^4.0.0"
51
+ },
52
+ "dependencies": {
53
+ "@hookform/resolvers": "^5.2.2",
54
+ "@zod-utils/core": "*"
55
+ },
56
+ "devDependencies": {
57
+ "@testing-library/react": "^16.1.0",
58
+ "@types/react": "^19",
59
+ "@vitest/coverage-v8": "^2.1.0",
60
+ "jsdom": "^25.0.1",
61
+ "react": "^19.2.0",
62
+ "react-dom": "^19.2.0",
63
+ "react-hook-form": "^7.66.0",
64
+ "tsup": "^8.3.5",
65
+ "typescript": "^5",
66
+ "vitest": "^2.1.0",
67
+ "zod": "^4.1.12"
68
+ }
69
+ }