@hookform/resolvers 5.6.0 → 5.7.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 CHANGED
@@ -842,12 +842,10 @@ import { useForm } from 'react-hook-form';
842
842
  import { vineResolver } from '@hookform/resolvers/vine';
843
843
  import vine from '@vinejs/vine';
844
844
 
845
- const schema = vine.compile(
846
- vine.object({
847
- username: vine.string().minLength(1),
848
- password: vine.string().minLength(1),
849
- }),
850
- );
845
+ const schema = vine.create({
846
+ username: vine.string().minLength(1),
847
+ password: vine.string().minLength(1),
848
+ });
851
849
 
852
850
  const App = () => {
853
851
  const {
@@ -1038,7 +1036,3 @@ Thanks go to all our backers! [[Become a backer](https://opencollective.com/reac
1038
1036
  ## Contributors
1039
1037
 
1040
1038
  Thanks go to these wonderful people! [[Become a contributor](CONTRIBUTING.md)].
1041
-
1042
- <a href="https://github.com/react-hook-form/react-hook-form/graphs/contributors">
1043
- <img src="https://opencollective.com/react-hook-form/contributors.svg?width=950" alt="React Hook Form contributors" />
1044
- </a>
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@hookform/resolvers",
3
3
  "amdName": "hookformResolvers",
4
- "version": "5.6.0",
4
+ "version": "5.7.0",
5
5
  "description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope, computed-types, TypeBox, arktype, Typanion, Effect-TS and VineJS",
6
6
  "main": "dist/resolvers.js",
7
7
  "module": "dist/resolvers.module.js",
@@ -288,13 +288,13 @@
288
288
  "@typeschema/core": "^0.14.0",
289
289
  "@typeschema/main": "^0.14.1",
290
290
  "@typeschema/zod": "^0.14.0",
291
- "@vinejs/vine": "^3.0.1",
291
+ "@vinejs/vine": "^4.4.0",
292
292
  "@vitejs/plugin-react": "^4.7.0",
293
293
  "ajv": "^8.20.0",
294
- "ata-validator": "^0.7.3",
295
294
  "ajv-errors": "^3.0.0",
296
295
  "ajv-formats": "^2.1.1",
297
296
  "arktype": "2.0.4",
297
+ "ata-validator": "^0.7.3",
298
298
  "check-export-map": "^1.3.1",
299
299
  "class-transformer": "^0.5.1",
300
300
  "class-validator": "^0.14.4",
@@ -332,7 +332,7 @@
332
332
  "@sinclair/typebox": ">=0.25.24",
333
333
  "@standard-schema/spec": "^1.0.0",
334
334
  "@typeschema/main": ">=0.13.7",
335
- "@vinejs/vine": "^2.0.0 || ^3.0.0",
335
+ "@vinejs/vine": "^2.0.0 || ^3.0.0 || ^4.0.0",
336
336
  "ajv": "^8.12.0",
337
337
  "ajv-errors": "^3.0.0",
338
338
  "ajv-formats": "^2.1.1",
@@ -1 +1 @@
1
- {"version":3,"file":"vine.js","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.compile(\n * vine.object({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * })\n * );\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","concat","shift","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","validate","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","_catch","E_VALIDATION_ERROR","toNestErrors","criteriaMode","e","reject"],"mappings":"4FAaA,SAASA,EACPC,EACAC,GAQA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAExDJ,EAAWK,QAAU,CAC1B,IAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,IAAQW,EAAUV,EAAaK,GAAvBK,MACFC,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EAAAA,aACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,KAAQE,OAAQF,EAAuBP,CAAAA,EAAMG,UAAWH,EAAMG,QAElE,CAEAT,EAAWgB,OACb,CAEA,OAAOd,CACT,sBAuCM,SACJe,EACAC,EACAC,GAEA,gBAFAA,IAAAA,EAAqC,CAAA,YAEvBC,EAAQC,EAAGC,OAAWC,OAAAA,QAAAC,gCAC9BD,QAAAC,QACiBP,EAAOQ,SAASL,EAAQF,IAAcQ,KAAA,SAAnDC,GAIN,OAFAL,EAAQM,2BAA6BC,EAAsBA,uBAAC,GAAIP,GAEzD,CACLQ,OAAQ,CAAE,EACVV,OAAQD,EAAgBY,IAAM5B,OAAO6B,OAAO,CAAA,EAAIZ,GAAUO,EAC1D,4DAT8BM,CAC9B,EASK3B,SAAAA,GACP,GAAIA,aAAiBwB,EAAMA,OAACI,mBAC1B,MAAO,CACLd,OAAQ,CAAE,EACVU,OAAQK,EAAAA,aACNpC,EACEO,EAAMO,UACLS,EAAQM,2BACkB,QAAzBN,EAAQc,cAEZd,IAKN,MAAMhB,CACR,GACF,CAAC,MAAA+B,GAAAd,OAAAA,QAAAe,OAAAD,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"vine.js","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.create({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * });\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","concat","shift","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","validate","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","_catch","E_VALIDATION_ERROR","toNestErrors","criteriaMode","e","reject"],"mappings":"4FAaA,SAASA,EACPC,EACAC,GAQA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAExDJ,EAAWK,QAAU,CAC1B,IAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,IAAQW,EAAUV,EAAaK,GAAvBK,MACFC,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EAAAA,aACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,KAAQE,OAAQF,EAAuBP,CAAAA,EAAMG,UAAWH,EAAMG,QAElE,CAEAT,EAAWgB,OACb,CAEA,OAAOd,CACT,sBAqCM,SACJe,EACAC,EACAC,GAEA,gBAFAA,IAAAA,EAAqC,CAAA,YAEvBC,EAAQC,EAAGC,OAAWC,OAAAA,QAAAC,gCAC9BD,QAAAC,QACiBP,EAAOQ,SAASL,EAAQF,IAAcQ,KAAA,SAAnDC,GAIN,OAFAL,EAAQM,2BAA6BC,EAAsBA,uBAAC,GAAIP,GAEzD,CACLQ,OAAQ,CAAE,EACVV,OAAQD,EAAgBY,IAAM5B,OAAO6B,OAAO,CAAA,EAAIZ,GAAUO,EAC1D,4DAT8BM,CAC9B,EASK3B,SAAAA,GACP,GAAIA,aAAiBwB,EAAMA,OAACI,mBAC1B,MAAO,CACLd,OAAQ,CAAE,EACVU,OAAQK,EAAAA,aACNpC,EACEO,EAAMO,UACLS,EAAQM,2BACkB,QAAzBN,EAAQc,cAEZd,IAKN,MAAMhB,CACR,GACF,CAAC,MAAA+B,GAAAd,OAAAA,QAAAe,OAAAD,EACH,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"vine.modern.mjs","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.compile(\n * vine.object({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * })\n * );\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","shift","vineResolver","schema","schemaOptions","resolverOptions","values","_","options","data","validate","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","E_VALIDATION_ERROR","toNestErrors","criteriaMode"],"mappings":"oKAaA,SAASA,EACPC,EACAC,GAMA,MAAMC,EAA2CC,OAAOC,OAAO,MAE/D,KAAOJ,EAAWK,QAAU,CAC1B,MAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,MAAMW,MAAEA,GAAUV,EAAaK,GACzBM,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,EAAW,IAAKA,EAAuBP,EAAMG,SAAWH,EAAMG,QAElE,CAEAT,EAAWe,OACb,CAEA,OAAOb,CACT,UAuCgBc,EACdC,EACAC,EACAC,EAAqC,CAAE,GAEvC,OAAcC,MAAAA,EAAQC,EAAGC,KACvB,IACE,MAAMC,QAAaN,EAAOO,SAASJ,EAAQF,GAI3C,OAFAI,EAAQG,2BAA6BC,EAAuB,CAAA,EAAIJ,GAEzD,CACLK,OAAQ,CAAE,EACVP,OAAQD,EAAgBS,IAAMzB,OAAO0B,OAAO,CAAA,EAAIT,GAAUG,EAE9D,CAAE,MAAOjB,GACP,GAAIA,aAAiBqB,EAAOG,mBAC1B,MAAO,CACLV,OAAQ,GACRO,OAAQI,EACNhC,EACEO,EAAMO,UACLS,EAAQG,2BACkB,QAAzBH,EAAQU,cAEZV,IAKN,MAAMhB,CACR,EAEJ"}
1
+ {"version":3,"file":"vine.modern.mjs","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.create({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * });\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","shift","vineResolver","schema","schemaOptions","resolverOptions","values","_","options","data","validate","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","E_VALIDATION_ERROR","toNestErrors","criteriaMode"],"mappings":"oKAaA,SAASA,EACPC,EACAC,GAMA,MAAMC,EAA2CC,OAAOC,OAAO,MAE/D,KAAOJ,EAAWK,QAAU,CAC1B,MAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,MAAMW,MAAEA,GAAUV,EAAaK,GACzBM,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,EAAW,IAAKA,EAAuBP,EAAMG,SAAWH,EAAMG,QAElE,CAEAT,EAAWe,OACb,CAEA,OAAOb,CACT,UAqCgBc,EACdC,EACAC,EACAC,EAAqC,CAAE,GAEvC,OAAcC,MAAAA,EAAQC,EAAGC,KACvB,IACE,MAAMC,QAAaN,EAAOO,SAASJ,EAAQF,GAI3C,OAFAI,EAAQG,2BAA6BC,EAAuB,CAAA,EAAIJ,GAEzD,CACLK,OAAQ,CAAE,EACVP,OAAQD,EAAgBS,IAAMzB,OAAO0B,OAAO,CAAA,EAAIT,GAAUG,EAE9D,CAAE,MAAOjB,GACP,GAAIA,aAAiBqB,EAAOG,mBAC1B,MAAO,CACLV,OAAQ,GACRO,OAAQI,EACNhC,EACEO,EAAMO,UACLS,EAAQG,2BACkB,QAAzBH,EAAQU,cAEZV,IAKN,MAAMhB,CACR,EAEJ"}
@@ -1 +1 @@
1
- {"version":3,"file":"vine.module.js","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.compile(\n * vine.object({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * })\n * );\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","concat","shift","vineResolver","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","validate","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","_catch","E_VALIDATION_ERROR","toNestErrors","criteriaMode","e","reject"],"mappings":"oKAaA,SAASA,EACPC,EACAC,GAQA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAExDJ,EAAWK,QAAU,CAC1B,IAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,IAAQW,EAAUV,EAAaK,GAAvBK,MACFC,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,KAAQE,OAAQF,EAAuBP,CAAAA,EAAMG,UAAWH,EAAMG,QAElE,CAEAT,EAAWgB,OACb,CAEA,OAAOd,CACT,CAuCM,SAAUe,EACdC,EACAC,EACAC,GAEA,gBAFAA,IAAAA,EAAqC,CAAA,YAEvBC,EAAQC,EAAGC,OAAWC,OAAAA,QAAAC,gCAC9BD,QAAAC,QACiBP,EAAOQ,SAASL,EAAQF,IAAcQ,KAAA,SAAnDC,GAIN,OAFAL,EAAQM,2BAA6BC,EAAuB,GAAIP,GAEzD,CACLQ,OAAQ,CAAE,EACVV,OAAQD,EAAgBY,IAAM7B,OAAO8B,OAAO,CAAA,EAAIZ,GAAUO,EAC1D,4DAT8BM,CAC9B,EASK5B,SAAAA,GACP,GAAIA,aAAiByB,EAAOI,mBAC1B,MAAO,CACLd,OAAQ,CAAE,EACVU,OAAQK,EACNrC,EACEO,EAAMO,UACLU,EAAQM,2BACkB,QAAzBN,EAAQc,cAEZd,IAKN,MAAMjB,CACR,GACF,CAAC,MAAAgC,GAAAd,OAAAA,QAAAe,OAAAD,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"vine.module.js","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.create({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * });\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","concat","shift","vineResolver","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","validate","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","_catch","E_VALIDATION_ERROR","toNestErrors","criteriaMode","e","reject"],"mappings":"oKAaA,SAASA,EACPC,EACAC,GAQA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAExDJ,EAAWK,QAAU,CAC1B,IAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,IAAQW,EAAUV,EAAaK,GAAvBK,MACFC,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,KAAQE,OAAQF,EAAuBP,CAAAA,EAAMG,UAAWH,EAAMG,QAElE,CAEAT,EAAWgB,OACb,CAEA,OAAOd,CACT,CAqCM,SAAUe,EACdC,EACAC,EACAC,GAEA,gBAFAA,IAAAA,EAAqC,CAAA,YAEvBC,EAAQC,EAAGC,OAAWC,OAAAA,QAAAC,gCAC9BD,QAAAC,QACiBP,EAAOQ,SAASL,EAAQF,IAAcQ,KAAA,SAAnDC,GAIN,OAFAL,EAAQM,2BAA6BC,EAAuB,GAAIP,GAEzD,CACLQ,OAAQ,CAAE,EACVV,OAAQD,EAAgBY,IAAM7B,OAAO8B,OAAO,CAAA,EAAIZ,GAAUO,EAC1D,4DAT8BM,CAC9B,EASK5B,SAAAA,GACP,GAAIA,aAAiByB,EAAOI,mBAC1B,MAAO,CACLd,OAAQ,CAAE,EACVU,OAAQK,EACNrC,EACEO,EAAMO,UACLU,EAAQM,2BACkB,QAAzBN,EAAQc,cAEZd,IAKN,MAAMjB,CACR,GACF,CAAC,MAAAgC,GAAAd,OAAAA,QAAAe,OAAAD,EACH,CAAA,CAAA"}
@@ -1 +1 @@
1
- {"version":3,"file":"vine.umd.js","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.compile(\n * vine.object({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * })\n * );\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","concat","shift","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","validate","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","_catch","E_VALIDATION_ERROR","toNestErrors","criteriaMode","e","reject"],"mappings":"yaAaA,SAASA,EACPC,EACAC,GAQA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAExDJ,EAAWK,QAAU,CAC1B,IAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,IAAQW,EAAUV,EAAaK,GAAvBK,MACFC,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EAAAA,aACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,KAAQE,OAAQF,EAAuBP,CAAAA,EAAMG,UAAWH,EAAMG,QAElE,CAEAT,EAAWgB,OACb,CAEA,OAAOd,CACT,gBAuCM,SACJe,EACAC,EACAC,GAEA,gBAFAA,IAAAA,EAAqC,CAAA,YAEvBC,EAAQC,EAAGC,OAAWC,OAAAA,QAAAC,gCAC9BD,QAAAC,QACiBP,EAAOQ,SAASL,EAAQF,IAAcQ,KAAA,SAAnDC,GAIN,OAFAL,EAAQM,2BAA6BC,EAAsBA,uBAAC,GAAIP,GAEzD,CACLQ,OAAQ,CAAE,EACVV,OAAQD,EAAgBY,IAAM5B,OAAO6B,OAAO,CAAA,EAAIZ,GAAUO,EAC1D,4DAT8BM,CAC9B,EASK3B,SAAAA,GACP,GAAIA,aAAiBwB,EAAMA,OAACI,mBAC1B,MAAO,CACLd,OAAQ,CAAE,EACVU,OAAQK,EAAAA,aACNpC,EACEO,EAAMO,UACLS,EAAQM,2BACkB,QAAzBN,EAAQc,cAEZd,IAKN,MAAMhB,CACR,GACF,CAAC,MAAA+B,GAAAd,OAAAA,QAAAe,OAAAD,EACH,CAAA,CAAA"}
1
+ {"version":3,"file":"vine.umd.js","sources":["../src/vine.ts"],"sourcesContent":["import { toNestErrors, validateFieldsNatively } from '@hookform/resolvers';\nimport { SimpleErrorReporter, VineValidator, errors } from '@vinejs/vine';\nimport {\n ConstructableSchema,\n ValidationOptions,\n} from '@vinejs/vine/build/src/types';\nimport {\n FieldError,\n FieldValues,\n Resolver,\n appendErrors,\n} from 'react-hook-form';\n\nfunction parseErrorSchema(\n vineErrors: SimpleErrorReporter['errors'],\n validateAllFieldCriteria: boolean,\n) {\n // A null-prototype object avoids false-positive hits from inherited\n // members (e.g. `toString`, `constructor`) when a field is named after\n // one of them — a plain `{}` would make `path in schemaErrors` true for\n // those paths and silently drop their errors.\n const schemaErrors: Record<string, FieldError> = Object.create(null);\n\n for (; vineErrors.length; ) {\n const error = vineErrors[0];\n const path = error.field;\n\n if (!(path in schemaErrors)) {\n schemaErrors[path] = { message: error.message, type: error.rule };\n }\n\n if (validateAllFieldCriteria) {\n const { types } = schemaErrors[path];\n const messages = types && types[error.rule];\n\n schemaErrors[path] = appendErrors(\n path,\n validateAllFieldCriteria,\n schemaErrors,\n error.rule,\n messages ? [...(messages as string[]), error.message] : error.message,\n ) as FieldError;\n }\n\n vineErrors.shift();\n }\n\n return schemaErrors;\n}\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions?: {\n mode?: 'async' | 'sync';\n raw?: false;\n },\n): Resolver<Input, Context, Output>;\n\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions: ValidationOptions<any> | undefined,\n resolverOptions: {\n mode?: 'async' | 'sync';\n raw: true;\n },\n): Resolver<Input, Context, Input>;\n\n/**\n * Creates a resolver for react-hook-form using VineJS schema validation\n * @param {T} schema - The VineJS schema to validate against\n * @param {ValidationOptions<any>} [schemaOptions] - Optional VineJS validation options\n * @param {Object} [resolverOptions] - Optional resolver configuration\n * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results\n * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form\n * @example\n * const schema = vine.create({\n * name: vine.string().minLength(2),\n * age: vine.number().min(18)\n * });\n *\n * useForm({\n * resolver: vineResolver(schema)\n * });\n */\nexport function vineResolver<Input extends FieldValues, Context, Output>(\n schema: VineValidator<ConstructableSchema<Input, Output, Output>, any>,\n schemaOptions?: ValidationOptions<any>,\n resolverOptions: { raw?: boolean } = {},\n): Resolver<Input, Context, Output | Input> {\n return async (values, _, options) => {\n try {\n const data = await schema.validate(values, schemaOptions);\n\n options.shouldUseNativeValidation && validateFieldsNatively({}, options);\n\n return {\n errors: {},\n values: resolverOptions.raw ? Object.assign({}, values) : data,\n };\n } catch (error: any) {\n if (error instanceof errors.E_VALIDATION_ERROR) {\n return {\n values: {},\n errors: toNestErrors(\n parseErrorSchema(\n error.messages,\n !options.shouldUseNativeValidation &&\n options.criteriaMode === 'all',\n ),\n options,\n ),\n };\n }\n\n throw error;\n }\n };\n}\n"],"names":["parseErrorSchema","vineErrors","validateAllFieldCriteria","schemaErrors","Object","create","length","error","path","field","message","type","rule","types","messages","appendErrors","concat","shift","schema","schemaOptions","resolverOptions","values","_","options","Promise","resolve","validate","then","data","shouldUseNativeValidation","validateFieldsNatively","errors","raw","assign","_catch","E_VALIDATION_ERROR","toNestErrors","criteriaMode","e","reject"],"mappings":"yaAaA,SAASA,EACPC,EACAC,GAQA,IAFA,IAAMC,EAA2CC,OAAOC,OAAO,MAExDJ,EAAWK,QAAU,CAC1B,IAAMC,EAAQN,EAAW,GACnBO,EAAOD,EAAME,MAMnB,GAJMD,KAAQL,IACZA,EAAaK,GAAQ,CAAEE,QAASH,EAAMG,QAASC,KAAMJ,EAAMK,OAGzDV,EAA0B,CAC5B,IAAQW,EAAUV,EAAaK,GAAvBK,MACFC,EAAWD,GAASA,EAAMN,EAAMK,MAEtCT,EAAaK,GAAQO,EAAAA,aACnBP,EACAN,EACAC,EACAI,EAAMK,KACNE,KAAQE,OAAQF,EAAuBP,CAAAA,EAAMG,UAAWH,EAAMG,QAElE,CAEAT,EAAWgB,OACb,CAEA,OAAOd,CACT,gBAqCM,SACJe,EACAC,EACAC,GAEA,gBAFAA,IAAAA,EAAqC,CAAA,YAEvBC,EAAQC,EAAGC,OAAWC,OAAAA,QAAAC,gCAC9BD,QAAAC,QACiBP,EAAOQ,SAASL,EAAQF,IAAcQ,KAAA,SAAnDC,GAIN,OAFAL,EAAQM,2BAA6BC,EAAsBA,uBAAC,GAAIP,GAEzD,CACLQ,OAAQ,CAAE,EACVV,OAAQD,EAAgBY,IAAM5B,OAAO6B,OAAO,CAAA,EAAIZ,GAAUO,EAC1D,4DAT8BM,CAC9B,EASK3B,SAAAA,GACP,GAAIA,aAAiBwB,EAAMA,OAACI,mBAC1B,MAAO,CACLd,OAAQ,CAAE,EACVU,OAAQK,EAAAA,aACNpC,EACEO,EAAMO,UACLS,EAAQM,2BACkB,QAAzBN,EAAQc,cAEZd,IAKN,MAAMhB,CACR,GACF,CAAC,MAAA+B,GAAAd,OAAAA,QAAAe,OAAAD,EACH,CAAA,CAAA"}
package/vine/package.json CHANGED
@@ -13,6 +13,6 @@
13
13
  "peerDependencies": {
14
14
  "react-hook-form": "^7.55.0",
15
15
  "@hookform/resolvers": "^2.0.0",
16
- "@vinejs/vine": "^2.0.0"
16
+ "@vinejs/vine": "^2.0.0 || ^3.0.0 || ^4.0.0"
17
17
  }
18
18
  }
@@ -6,12 +6,10 @@ import React from 'react';
6
6
  import { useForm } from 'react-hook-form';
7
7
  import { vineResolver } from '..';
8
8
 
9
- const schema = vine.compile(
10
- vine.object({
11
- username: vine.string().minLength(1),
12
- password: vine.string().minLength(1),
13
- }),
14
- );
9
+ const schema = vine.create({
10
+ username: vine.string().minLength(1),
11
+ password: vine.string().minLength(1),
12
+ });
15
13
 
16
14
  interface Props {
17
15
  onSubmit: (data: Infer<typeof schema>) => void;
@@ -6,12 +6,10 @@ import React from 'react';
6
6
  import { useForm } from 'react-hook-form';
7
7
  import { vineResolver } from '..';
8
8
 
9
- const schema = vine.compile(
10
- vine.object({
11
- username: vine.string().minLength(1),
12
- password: vine.string().minLength(1),
13
- }),
14
- );
9
+ const schema = vine.create({
10
+ username: vine.string().minLength(1),
11
+ password: vine.string().minLength(1),
12
+ });
15
13
 
16
14
  function TestComponent({
17
15
  onSubmit,
@@ -2,34 +2,32 @@ import vine from '@vinejs/vine';
2
2
  import { InferInput } from '@vinejs/vine/build/src/types';
3
3
  import { Field, InternalFieldName } from 'react-hook-form';
4
4
 
5
- export const schema = vine.compile(
6
- vine.object({
7
- username: vine.string().regex(/^\w+$/).minLength(3).maxLength(30),
8
- password: vine
9
- .string()
10
- .regex(new RegExp('.*[A-Z].*'))
11
- .regex(new RegExp('.*[a-z].*'))
12
- .regex(new RegExp('.*\\d.*'))
13
- .regex(new RegExp('.*[`~<>?,./!@#$%^&*()\\-_+="\'|{}\\[\\];:\\\\].*'))
14
- .minLength(8)
15
- .confirmed({ confirmationField: 'repeatPassword' }),
16
- repeatPassword: vine.string().sameAs('password'),
17
- accessToken: vine.unionOfTypes([vine.string(), vine.number()]),
18
- birthYear: vine.number().min(1900).max(2013),
19
- email: vine.string().email().optional(),
20
- tags: vine.array(vine.string()),
21
- enabled: vine.boolean(),
22
- like: vine.array(
23
- vine.object({
24
- id: vine.number(),
25
- name: vine.string().fixedLength(4),
26
- }),
27
- ),
28
- dateStr: vine
29
- .string()
30
- .transform((value: string) => new Date(value).toISOString()),
31
- }),
32
- );
5
+ export const schema = vine.create({
6
+ username: vine.string().regex(/^\w+$/).minLength(3).maxLength(30),
7
+ password: vine
8
+ .string()
9
+ .regex(new RegExp('.*[A-Z].*'))
10
+ .regex(new RegExp('.*[a-z].*'))
11
+ .regex(new RegExp('.*\\d.*'))
12
+ .regex(new RegExp('.*[`~<>?,./!@#$%^&*()\\-_+="\'|{}\\[\\];:\\\\].*'))
13
+ .minLength(8)
14
+ .confirmed({ as: 'repeatPassword' }),
15
+ repeatPassword: vine.string().sameAs('password'),
16
+ accessToken: vine.unionOfTypes([vine.string(), vine.number()]),
17
+ birthYear: vine.number().min(1900).max(2013),
18
+ email: vine.string().email().optional(),
19
+ tags: vine.array(vine.string()),
20
+ enabled: vine.boolean(),
21
+ like: vine.array(
22
+ vine.object({
23
+ id: vine.number(),
24
+ name: vine.string().fixedLength(4),
25
+ }),
26
+ ),
27
+ dateStr: vine
28
+ .string()
29
+ .transform((value: string) => new Date(value).toISOString()),
30
+ });
33
31
 
34
32
  export const validData = {
35
33
  username: 'Doe',
@@ -59,9 +59,8 @@ describe('vineResolver', () => {
59
59
  * Type inference tests
60
60
  */
61
61
  it('should correctly infer the output type from a vine schema', () => {
62
- const resolver = vineResolver(
63
- vine.compile(vine.object({ id: vine.number() })),
64
- );
62
+ const schema = vine.create({ id: vine.number() });
63
+ const resolver = vineResolver(schema);
65
64
 
66
65
  expectTypeOf(resolver).toEqualTypeOf<
67
66
  Resolver<{ id: number | string }, unknown, { id: number }>
@@ -69,16 +68,13 @@ describe('vineResolver', () => {
69
68
  });
70
69
 
71
70
  it('should correctly infer the output type from a vine schema using a transform', () => {
72
- const resolver = vineResolver(
73
- vine.compile(
74
- vine.object({
75
- id: vine
76
- .number()
77
- .decimal([2, 4])
78
- .transform<string>((val: unknown) => String(val)),
79
- }),
80
- ),
81
- );
71
+ const schema = vine.create({
72
+ id: vine
73
+ .number()
74
+ .decimal([2, 4])
75
+ .transform<string>((val: unknown) => String(val)),
76
+ });
77
+ const resolver = vineResolver(schema);
82
78
 
83
79
  expectTypeOf(resolver).toEqualTypeOf<
84
80
  Resolver<{ id: number | string }, unknown, { id: string }>
@@ -86,7 +82,7 @@ describe('vineResolver', () => {
86
82
  });
87
83
 
88
84
  it('should correctly infer the output type from a vine schema for the handleSubmit function in useForm', () => {
89
- const schema = vine.compile(vine.object({ id: vine.number() }));
85
+ const schema = vine.create({ id: vine.number() });
90
86
 
91
87
  const {
92
88
  result: { current: form },
@@ -106,11 +102,9 @@ describe('vineResolver', () => {
106
102
  });
107
103
 
108
104
  it('should correctly infer the output type from a vine schema with a transform for the handleSubmit function in useForm', () => {
109
- const schema = vine.compile(
110
- vine.object({
111
- id: vine.number().transform<string>((val: unknown) => String(val)),
112
- }),
113
- );
105
+ const schema = vine.create({
106
+ id: vine.number().transform<string>((val: unknown) => String(val)),
107
+ });
114
108
 
115
109
  const {
116
110
  result: { current: form },
package/vine/src/vine.ts CHANGED
@@ -74,12 +74,10 @@ export function vineResolver<Input extends FieldValues, Context, Output>(
74
74
  * @param {boolean} [resolverOptions.raw=false] - If true, returns raw values instead of validated results
75
75
  * @returns {Resolver<Infer<typeof schema>>} A resolver function compatible with react-hook-form
76
76
  * @example
77
- * const schema = vine.compile(
78
- * vine.object({
79
- * name: vine.string().minLength(2),
80
- * age: vine.number().min(18)
81
- * })
82
- * );
77
+ * const schema = vine.create({
78
+ * name: vine.string().minLength(2),
79
+ * age: vine.number().min(18)
80
+ * });
83
81
  *
84
82
  * useForm({
85
83
  * resolver: vineResolver(schema)