{"_id":"@dudeofawesome/hookform-resolvers","_rev":"2-eeb2d1cd5b5b3ce87d21c1d97418cf0a","name":"@dudeofawesome/hookform-resolvers","dist-tags":{"latest":"4.0.0-effect-upgrade-2"},"versions":{"4.0.0-effect-upgrade-0":{"name":"@dudeofawesome/hookform-resolvers","version":"4.0.0-effect-upgrade-0","keywords":["scheme","validation","scheme-validation","hookform","react-hook-form","yup","joi","superstruct","typescript","zod","vest","class-validator","io-ts","effect-ts","nope","computed-types","typanion","ajv","TypeBox","arktype","typeschema","vine","fluentvalidation-ts"],"author":{"name":"bluebill1049","email":"bluebill1049@hotmail.com"},"license":"MIT","_id":"@dudeofawesome/hookform-resolvers@4.0.0-effect-upgrade-0","maintainers":[{"name":"dudeofawesome","email":"louis@orleans.io"}],"homepage":"https://react-hook-form.com","bugs":{"url":"https://github.com/react-hook-form/resolvers/issues"},"dist":{"shasum":"58fc68e429f11b1f9011126e0989355ca191286f","tarball":"https://registry.npmjs.org/@dudeofawesome/hookform-resolvers/-/hookform-resolvers-4.0.0-effect-upgrade-0.tgz","fileCount":397,"integrity":"sha512-pyjX7xq2vW52eunQ3zKTRN6+oaghOOVm22iuhTc3FKrfKZkd8NagsHBlf+KRyDDZ9tVg7iK69lSQbQN0+e0YYw==","signatures":[{"sig":"MEUCIQD/BUZJl8uhpQKZfmjIiiA1RscddS4YHSXSjXQ6c61IfgIgBTgNxf3QwHV5zsoeeAdFYe//RCx+D4ChXNZkn9vDYjs=","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":712225},"main":"dist/resolvers.js","types":"dist/index.d.ts","module":"dist/resolvers.module.js","source":"src/index.ts","amdName":"hookformResolvers","exports":{".":{"umd":"./dist/resolvers.umd.js","types":"./dist/index.d.ts","import":"./dist/resolvers.mjs","require":"./dist/resolvers.js"},"./*":"./*","./ajv":{"umd":"./ajv/dist/ajv.umd.js","types":"./ajv/dist/index.d.ts","import":"./ajv/dist/ajv.mjs","require":"./ajv/dist/ajv.js"},"./joi":{"umd":"./joi/dist/joi.umd.js","types":"./joi/dist/index.d.ts","import":"./joi/dist/joi.mjs","require":"./joi/dist/joi.js"},"./yup":{"umd":"./yup/dist/yup.umd.js","types":"./yup/dist/index.d.ts","import":"./yup/dist/yup.mjs","require":"./yup/dist/yup.js"},"./zod":{"umd":"./zod/dist/zod.umd.js","types":"./zod/dist/index.d.ts","import":"./zod/dist/zod.mjs","require":"./zod/dist/zod.js"},"./nope":{"umd":"./nope/dist/nope.umd.js","types":"./nope/dist/index.d.ts","import":"./nope/dist/nope.mjs","require":"./nope/dist/nope.js"},"./vest":{"umd":"./vest/dist/vest.umd.js","types":"./vest/dist/index.d.ts","import":"./vest/dist/vest.mjs","require":"./vest/dist/vest.js"},"./vine":{"umd":"./vine/dist/vine.umd.js","types":"./vine/dist/index.d.ts","import":"./vine/dist/vine.mjs","require":"./vine/dist/vine.js"},"./io-ts":{"umd":"./io-ts/dist/io-ts.umd.js","types":"./io-ts/dist/index.d.ts","import":"./io-ts/dist/io-ts.mjs","require":"./io-ts/dist/io-ts.js"},"./arktype":{"umd":"./arktype/dist/arktype.umd.js","types":"./arktype/dist/index.d.ts","import":"./arktype/dist/arktype.mjs","require":"./arktype/dist/arktype.js"},"./typebox":{"umd":"./typebox/dist/typebox.umd.js","types":"./typebox/dist/index.d.ts","import":"./typebox/dist/typebox.mjs","require":"./typebox/dist/typebox.js"},"./valibot":{"umd":"./valibot/dist/valibot.umd.js","types":"./valibot/dist/index.d.ts","import":"./valibot/dist/valibot.mjs","require":"./valibot/dist/valibot.js"},"./typanion":{"umd":"./typanion/dist/typanion.umd.js","types":"./typanion/dist/index.d.ts","import":"./typanion/dist/typanion.mjs","require":"./typanion/dist/typanion.js"},"./effect-ts":{"umd":"./effect-ts/dist/effect-ts.umd.js","types":"./effect-ts/dist/index.d.ts","import":"./effect-ts/dist/effect-ts.mjs","require":"./effect-ts/dist/effect-ts.js"},"./typeschema":{"umd":"./typeschema/dist/typeschema.umd.js","types":"./typeschema/dist/index.d.ts","import":"./typeschema/dist/typeschema.mjs","require":"./typeschema/dist/typeschema.js"},"./superstruct":{"umd":"./superstruct/dist/superstruct.umd.js","types":"./superstruct/dist/index.d.ts","import":"./superstruct/dist/superstruct.mjs","require":"./superstruct/dist/superstruct.js"},"./package.json":"./package.json","./computed-types":{"umd":"./computed-types/dist/computed-types.umd.js","types":"./computed-types/dist/index.d.ts","import":"./computed-types/dist/computed-types.mjs","require":"./computed-types/dist/computed-types.js"},"./class-validator":{"umd":"./class-validator/dist/class-validator.umd.js","types":"./class-validator/dist/index.d.ts","import":"./class-validator/dist/class-validator.mjs","require":"./class-validator/dist/class-validator.js"},"./fluentvalidation-ts":{"umd":"./fluentvalidation-ts/dist/fluentvalidation-ts.umd.js","types":"./fluentvalidation-ts/dist/index.d.ts","import":"./fluentvalidation-ts/dist/fluentvalidation-ts.mjs","require":"./fluentvalidation-ts/dist/fluentvalidation-ts.js"}},"gitHead":"30f4f88b3405152498d14683fbac99769d4e7816","scripts":{"lint":"bunx @biomejs/biome check --write --vcs-use-ignore-file=true .","test":"vitest run","build":"cross-env npm-run-all --parallel 'build:*'","prepare":"run-s build:src","build:ajv":"microbundle --cwd ajv --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:joi":"microbundle --cwd joi --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:src":"microbundle build --globals react-hook-form=ReactHookForm","build:yup":"microbundle --cwd yup --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:zod":"microbundle --cwd zod --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","check:all":"npm-run-all --parallel lint:* test","csb:build":"cross-env npm-run-all --sequential 'build:*'","postbuild":"node ./config/node-13-exports.js && check-export-map","build:nope":"microbundle --cwd nope --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:vest":"microbundle --cwd vest --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,vest/promisify=promisify","build:vine":"microbundle --cwd vine --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@vinejs/vine=vine","lint:types":"tsc","test:watch":"vitest watch","build:io-ts":"microbundle --cwd io-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,fp-ts/Either=Either,fp-ts/function=_function,fp-ts/Option=Option,fp-ts/ReadonlyArray=ReadonlyArray,fp-ts/Semigroup=Semigroup,fp-ts/ReadonlyRecord=ReadonlyRecord","csb:install":"pnpx replace-json-property@1.9.0 package.json prepare \"node -e 'process.exit(0)'\" && pnpm i --no-frozen-lockfile","build:arktype":"microbundle --cwd arktype --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typebox":"microbundle --cwd typebox --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@sinclair/typebox/value=value,@sinclair/typebox/compiler=compiler","build:valibot":"microbundle --cwd valibot --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typanion":"microbundle --cwd typanion --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:effect-ts":"microbundle --cwd effect-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@effect/schema=EffectSchema,@effect/schema/AST=EffectSchemaAST,@effect/schema/ArrayFormatter=EffectSchemaArrayFormatter,@effect/schema/ParseResult=EffectSchemaArrayFormatter,effect/Effect=Effect","build:typeschema":"microbundle --cwd typeschema --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@typeschema/main=main","build:superstruct":"microbundle --cwd superstruct --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:computed-types":"microbundle --cwd computed-types --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:class-validator":"microbundle --cwd class-validator --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:fluentvalidation-ts":"microbundle --cwd fluentvalidation-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm"},"_npmUser":{"name":"dudeofawesome","email":"louis@orleans.io"},"umd:main":"dist/resolvers.umd.js","repository":{"url":"git+https://github.com/react-hook-form/resolvers.git","type":"git"},"_npmVersion":"10.2.4","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","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.16.0","joi":"^17.13.3","yup":"^1.4.0","zod":"^3.23.8","vest":"^5.3.0","vite":"^5.3.3","fp-ts":"^2.16.7","io-ts":"^2.2.21","jsdom":"^24.1.0","react":"^18.3.1","effect":"^3.4.7","vitest":"^1.6.0","arktype":"2.0.0-dev.26","valibot":"0.35.0","lefthook":"^1.6.18","typanion":"^3.14.0","cross-env":"^7.0.3","react-dom":"^18.3.1","ajv-errors":"^3.0.0","monocle-ts":"^2.3.13","newtype-ts":"^0.3.5","typescript":"^5.5.3","@types/node":"^20.14.9","io-ts-types":"^0.5.19","microbundle":"^0.15.1","npm-run-all":"^4.1.5","superstruct":"^1.0.4","@types/react":"^18.3.3","@vinejs/vine":"^2.1.0","@effect/schema":"^0.68.17","computed-types":"^1.11.2","nope-validator":"^1.0.4","@typeschema/zod":"^0.13.3","class-validator":"^0.14.1","react-hook-form":"^7.52.1","@typeschema/core":"^0.13.2","@typeschema/main":"^0.13.10","check-export-map":"^1.3.1","reflect-metadata":"^0.2.2","@sinclair/typebox":"^0.32.34","class-transformer":"^0.5.1","fluentvalidation-ts":"^3.2.0","vite-tsconfig-paths":"^4.3.2","@testing-library/dom":"^10.3.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.4.6","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react-hook-form":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hookform-resolvers_4.0.0-effect-upgrade-0_1722453995451_0.762420013510781","host":"s3://npm-registry-packages"}},"4.0.0-effect-upgrade-1":{"name":"@dudeofawesome/hookform-resolvers","version":"4.0.0-effect-upgrade-1","keywords":["scheme","validation","scheme-validation","hookform","react-hook-form","yup","joi","superstruct","typescript","zod","vest","class-validator","io-ts","effect-ts","nope","computed-types","typanion","ajv","TypeBox","arktype","typeschema","vine","fluentvalidation-ts"],"author":{"name":"bluebill1049","email":"bluebill1049@hotmail.com"},"license":"MIT","_id":"@dudeofawesome/hookform-resolvers@4.0.0-effect-upgrade-1","maintainers":[{"name":"dudeofawesome","email":"louis@orleans.io"}],"homepage":"https://react-hook-form.com","bugs":{"url":"https://github.com/react-hook-form/resolvers/issues"},"dist":{"shasum":"dc244bc48c02e297bf416e176475fb7415c9cd65","tarball":"https://registry.npmjs.org/@dudeofawesome/hookform-resolvers/-/hookform-resolvers-4.0.0-effect-upgrade-1.tgz","fileCount":397,"integrity":"sha512-kugg/wVku0F0kYqDdXydnPxXPhR0VsbUzwYc8leN+2JRayg6hMWOJOW0Tn3TKblVR7Qezg4dszYTr5TMgAcw/g==","signatures":[{"sig":"MEYCIQDPhSj1oE+z7fC0qlMVp/drwjcB3qtXwYuui0G1W7V/jAIhAKGGHXSHFGdAmO+yZs4SjoZnQdpq0Y4zadS5+MKRhWGB","keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA"}],"unpackedSize":712224},"main":"dist/resolvers.js","types":"dist/index.d.ts","module":"dist/resolvers.module.js","source":"src/index.ts","amdName":"hookformResolvers","exports":{".":{"umd":"./dist/resolvers.umd.js","types":"./dist/index.d.ts","import":"./dist/resolvers.mjs","require":"./dist/resolvers.js"},"./*":"./*","./ajv":{"umd":"./ajv/dist/ajv.umd.js","types":"./ajv/dist/index.d.ts","import":"./ajv/dist/ajv.mjs","require":"./ajv/dist/ajv.js"},"./joi":{"umd":"./joi/dist/joi.umd.js","types":"./joi/dist/index.d.ts","import":"./joi/dist/joi.mjs","require":"./joi/dist/joi.js"},"./yup":{"umd":"./yup/dist/yup.umd.js","types":"./yup/dist/index.d.ts","import":"./yup/dist/yup.mjs","require":"./yup/dist/yup.js"},"./zod":{"umd":"./zod/dist/zod.umd.js","types":"./zod/dist/index.d.ts","import":"./zod/dist/zod.mjs","require":"./zod/dist/zod.js"},"./nope":{"umd":"./nope/dist/nope.umd.js","types":"./nope/dist/index.d.ts","import":"./nope/dist/nope.mjs","require":"./nope/dist/nope.js"},"./vest":{"umd":"./vest/dist/vest.umd.js","types":"./vest/dist/index.d.ts","import":"./vest/dist/vest.mjs","require":"./vest/dist/vest.js"},"./vine":{"umd":"./vine/dist/vine.umd.js","types":"./vine/dist/index.d.ts","import":"./vine/dist/vine.mjs","require":"./vine/dist/vine.js"},"./io-ts":{"umd":"./io-ts/dist/io-ts.umd.js","types":"./io-ts/dist/index.d.ts","import":"./io-ts/dist/io-ts.mjs","require":"./io-ts/dist/io-ts.js"},"./arktype":{"umd":"./arktype/dist/arktype.umd.js","types":"./arktype/dist/index.d.ts","import":"./arktype/dist/arktype.mjs","require":"./arktype/dist/arktype.js"},"./typebox":{"umd":"./typebox/dist/typebox.umd.js","types":"./typebox/dist/index.d.ts","import":"./typebox/dist/typebox.mjs","require":"./typebox/dist/typebox.js"},"./valibot":{"umd":"./valibot/dist/valibot.umd.js","types":"./valibot/dist/index.d.ts","import":"./valibot/dist/valibot.mjs","require":"./valibot/dist/valibot.js"},"./typanion":{"umd":"./typanion/dist/typanion.umd.js","types":"./typanion/dist/index.d.ts","import":"./typanion/dist/typanion.mjs","require":"./typanion/dist/typanion.js"},"./effect-ts":{"umd":"./effect-ts/dist/effect-ts.umd.js","types":"./effect-ts/dist/index.d.ts","import":"./effect-ts/dist/effect-ts.mjs","require":"./effect-ts/dist/effect-ts.js"},"./typeschema":{"umd":"./typeschema/dist/typeschema.umd.js","types":"./typeschema/dist/index.d.ts","import":"./typeschema/dist/typeschema.mjs","require":"./typeschema/dist/typeschema.js"},"./superstruct":{"umd":"./superstruct/dist/superstruct.umd.js","types":"./superstruct/dist/index.d.ts","import":"./superstruct/dist/superstruct.mjs","require":"./superstruct/dist/superstruct.js"},"./package.json":"./package.json","./computed-types":{"umd":"./computed-types/dist/computed-types.umd.js","types":"./computed-types/dist/index.d.ts","import":"./computed-types/dist/computed-types.mjs","require":"./computed-types/dist/computed-types.js"},"./class-validator":{"umd":"./class-validator/dist/class-validator.umd.js","types":"./class-validator/dist/index.d.ts","import":"./class-validator/dist/class-validator.mjs","require":"./class-validator/dist/class-validator.js"},"./fluentvalidation-ts":{"umd":"./fluentvalidation-ts/dist/fluentvalidation-ts.umd.js","types":"./fluentvalidation-ts/dist/index.d.ts","import":"./fluentvalidation-ts/dist/fluentvalidation-ts.mjs","require":"./fluentvalidation-ts/dist/fluentvalidation-ts.js"}},"gitHead":"7ed879b09a18d90c5cb93cc30b40131a52ed87c3","scripts":{"lint":"bunx @biomejs/biome check --write --vcs-use-ignore-file=true .","test":"vitest run","build":"cross-env npm-run-all --parallel 'build:*'","prepare":"run-s build:src","build:ajv":"microbundle --cwd ajv --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:joi":"microbundle --cwd joi --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:src":"microbundle build --globals react-hook-form=ReactHookForm","build:yup":"microbundle --cwd yup --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:zod":"microbundle --cwd zod --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","check:all":"npm-run-all --parallel lint:* test","csb:build":"cross-env npm-run-all --sequential 'build:*'","postbuild":"node ./config/node-13-exports.js && check-export-map","build:nope":"microbundle --cwd nope --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:vest":"microbundle --cwd vest --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,vest/promisify=promisify","build:vine":"microbundle --cwd vine --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@vinejs/vine=vine","lint:types":"tsc","test:watch":"vitest watch","build:io-ts":"microbundle --cwd io-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,fp-ts/Either=Either,fp-ts/function=_function,fp-ts/Option=Option,fp-ts/ReadonlyArray=ReadonlyArray,fp-ts/Semigroup=Semigroup,fp-ts/ReadonlyRecord=ReadonlyRecord","csb:install":"pnpx replace-json-property@1.9.0 package.json prepare \"node -e 'process.exit(0)'\" && pnpm i --no-frozen-lockfile","build:arktype":"microbundle --cwd arktype --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typebox":"microbundle --cwd typebox --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@sinclair/typebox/value=value,@sinclair/typebox/compiler=compiler","build:valibot":"microbundle --cwd valibot --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typanion":"microbundle --cwd typanion --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:effect-ts":"microbundle --cwd effect-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@effect/schema=EffectSchema,@effect/schema/AST=EffectSchemaAST,@effect/schema/ArrayFormatter=EffectSchemaArrayFormatter,@effect/schema/ParseResult=EffectSchemaArrayFormatter,effect/Effect=Effect","build:typeschema":"microbundle --cwd typeschema --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@typeschema/main=main","build:superstruct":"microbundle --cwd superstruct --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:computed-types":"microbundle --cwd computed-types --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:class-validator":"microbundle --cwd class-validator --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:fluentvalidation-ts":"microbundle --cwd fluentvalidation-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm"},"_npmUser":{"name":"dudeofawesome","email":"louis@orleans.io"},"umd:main":"dist/resolvers.umd.js","repository":{"url":"git+https://github.com/react-hook-form/resolvers.git","type":"git"},"_npmVersion":"10.2.4","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","directories":{},"_nodeVersion":"20.11.1","publishConfig":{"access":"public"},"_hasShrinkwrap":false,"devDependencies":{"ajv":"^8.16.0","joi":"^17.13.3","yup":"^1.4.0","zod":"^3.23.8","vest":"^5.3.0","vite":"^5.3.3","fp-ts":"^2.16.7","io-ts":"^2.2.21","jsdom":"^24.1.0","react":"^18.3.1","effect":"^3.4.7","vitest":"^1.6.0","arktype":"2.0.0-dev.26","valibot":"0.35.0","lefthook":"^1.6.18","typanion":"^3.14.0","cross-env":"^7.0.3","react-dom":"^18.3.1","ajv-errors":"^3.0.0","monocle-ts":"^2.3.13","newtype-ts":"^0.3.5","typescript":"^5.5.3","@types/node":"^20.14.9","io-ts-types":"^0.5.19","microbundle":"^0.15.1","npm-run-all":"^4.1.5","superstruct":"^1.0.4","@types/react":"^18.3.3","@vinejs/vine":"^2.1.0","@effect/schema":"^0.70.0","computed-types":"^1.11.2","nope-validator":"^1.0.4","@typeschema/zod":"^0.13.3","class-validator":"^0.14.1","react-hook-form":"^7.52.1","@typeschema/core":"^0.13.2","@typeschema/main":"^0.13.10","check-export-map":"^1.3.1","reflect-metadata":"^0.2.2","@sinclair/typebox":"^0.32.34","class-transformer":"^0.5.1","fluentvalidation-ts":"^3.2.0","vite-tsconfig-paths":"^4.3.2","@testing-library/dom":"^10.3.1","@vitejs/plugin-react":"^4.3.1","@testing-library/react":"^16.0.0","@testing-library/jest-dom":"^6.4.6","@testing-library/user-event":"^14.5.2"},"peerDependencies":{"react-hook-form":"^7.0.0"},"_npmOperationalInternal":{"tmp":"tmp/hookform-resolvers_4.0.0-effect-upgrade-1_1725140053099_0.06148932512993022","host":"s3://npm-registry-packages"}},"4.0.0-effect-upgrade-2":{"name":"@dudeofawesome/hookform-resolvers","amdName":"hookformResolvers","version":"4.0.0-effect-upgrade-2","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","main":"dist/resolvers.js","module":"dist/resolvers.module.js","umd:main":"dist/resolvers.umd.js","source":"src/index.ts","types":"dist/index.d.ts","exports":{".":{"types":"./dist/index.d.ts","umd":"./dist/resolvers.umd.js","import":"./dist/resolvers.mjs","require":"./dist/resolvers.js"},"./zod":{"types":"./zod/dist/index.d.ts","umd":"./zod/dist/zod.umd.js","import":"./zod/dist/zod.mjs","require":"./zod/dist/zod.js"},"./typebox":{"types":"./typebox/dist/index.d.ts","umd":"./typebox/dist/typebox.umd.js","import":"./typebox/dist/typebox.mjs","require":"./typebox/dist/typebox.js"},"./yup":{"types":"./yup/dist/index.d.ts","umd":"./yup/dist/yup.umd.js","import":"./yup/dist/yup.mjs","require":"./yup/dist/yup.js"},"./joi":{"types":"./joi/dist/index.d.ts","umd":"./joi/dist/joi.umd.js","import":"./joi/dist/joi.mjs","require":"./joi/dist/joi.js"},"./vest":{"types":"./vest/dist/index.d.ts","umd":"./vest/dist/vest.umd.js","import":"./vest/dist/vest.mjs","require":"./vest/dist/vest.js"},"./superstruct":{"types":"./superstruct/dist/index.d.ts","umd":"./superstruct/dist/superstruct.umd.js","import":"./superstruct/dist/superstruct.mjs","require":"./superstruct/dist/superstruct.js"},"./class-validator":{"types":"./class-validator/dist/index.d.ts","umd":"./class-validator/dist/class-validator.umd.js","import":"./class-validator/dist/class-validator.mjs","require":"./class-validator/dist/class-validator.js"},"./io-ts":{"types":"./io-ts/dist/index.d.ts","umd":"./io-ts/dist/io-ts.umd.js","import":"./io-ts/dist/io-ts.mjs","require":"./io-ts/dist/io-ts.js"},"./nope":{"types":"./nope/dist/index.d.ts","umd":"./nope/dist/nope.umd.js","import":"./nope/dist/nope.mjs","require":"./nope/dist/nope.js"},"./computed-types":{"types":"./computed-types/dist/index.d.ts","umd":"./computed-types/dist/computed-types.umd.js","import":"./computed-types/dist/computed-types.mjs","require":"./computed-types/dist/computed-types.js"},"./typanion":{"types":"./typanion/dist/index.d.ts","umd":"./typanion/dist/typanion.umd.js","import":"./typanion/dist/typanion.mjs","require":"./typanion/dist/typanion.js"},"./ajv":{"types":"./ajv/dist/index.d.ts","umd":"./ajv/dist/ajv.umd.js","import":"./ajv/dist/ajv.mjs","require":"./ajv/dist/ajv.js"},"./arktype":{"types":"./arktype/dist/index.d.ts","umd":"./arktype/dist/arktype.umd.js","import":"./arktype/dist/arktype.mjs","require":"./arktype/dist/arktype.js"},"./valibot":{"types":"./valibot/dist/index.d.ts","umd":"./valibot/dist/valibot.umd.js","import":"./valibot/dist/valibot.mjs","require":"./valibot/dist/valibot.js"},"./typeschema":{"types":"./typeschema/dist/index.d.ts","umd":"./typeschema/dist/typeschema.umd.js","import":"./typeschema/dist/typeschema.mjs","require":"./typeschema/dist/typeschema.js"},"./effect-ts":{"types":"./effect-ts/dist/index.d.ts","umd":"./effect-ts/dist/effect-ts.umd.js","import":"./effect-ts/dist/effect-ts.mjs","require":"./effect-ts/dist/effect-ts.js"},"./vine":{"types":"./vine/dist/index.d.ts","umd":"./vine/dist/vine.umd.js","import":"./vine/dist/vine.mjs","require":"./vine/dist/vine.js"},"./fluentvalidation-ts":{"types":"./fluentvalidation-ts/dist/index.d.ts","umd":"./fluentvalidation-ts/dist/fluentvalidation-ts.umd.js","import":"./fluentvalidation-ts/dist/fluentvalidation-ts.mjs","require":"./fluentvalidation-ts/dist/fluentvalidation-ts.js"},"./package.json":"./package.json","./*":"./*"},"publishConfig":{"access":"public"},"scripts":{"prepare":"run-s build:src","build":"cross-env npm-run-all --parallel 'build:*'","build:src":"microbundle build --globals react-hook-form=ReactHookForm","build:zod":"microbundle --cwd zod --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:yup":"microbundle --cwd yup --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:joi":"microbundle --cwd joi --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:superstruct":"microbundle --cwd superstruct --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:io-ts":"microbundle --cwd io-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,fp-ts/Either=Either,fp-ts/function=_function,fp-ts/Option=Option,fp-ts/ReadonlyArray=ReadonlyArray,fp-ts/Semigroup=Semigroup,fp-ts/ReadonlyRecord=ReadonlyRecord","build:vest":"microbundle --cwd vest --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,vest/promisify=promisify","build:class-validator":"microbundle --cwd class-validator --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:nope":"microbundle --cwd nope --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:computed-types":"microbundle --cwd computed-types --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typanion":"microbundle --cwd typanion --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:ajv":"microbundle --cwd ajv --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typebox":"microbundle --cwd typebox --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@sinclair/typebox/value=value,@sinclair/typebox/compiler=compiler","build:arktype":"microbundle --cwd arktype --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:valibot":"microbundle --cwd valibot --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","build:typeschema":"microbundle --cwd typeschema --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@typeschema/main=main","build:effect-ts":"microbundle --cwd effect-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@effect/schema=EffectSchema,@effect/schema/AST=EffectSchemaAST,@effect/schema/ArrayFormatter=EffectSchemaArrayFormatter,@effect/schema/ParseResult=EffectSchemaArrayFormatter,effect/Effect=Effect","build:vine":"microbundle --cwd vine --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm,@vinejs/vine=vine","build:fluentvalidation-ts":"microbundle --cwd fluentvalidation-ts --globals @hookform/resolvers=hookformResolvers,react-hook-form=ReactHookForm","postbuild":"node ./config/node-13-exports.js && check-export-map","lint":"bunx @biomejs/biome check --write --vcs-use-ignore-file=true .","lint:types":"tsc","test":"vitest run","test:watch":"vitest watch","check:all":"npm-run-all --parallel lint:* test","csb:install":"pnpx replace-json-property@1.9.0 package.json prepare \"node -e 'process.exit(0)'\" && pnpm i --no-frozen-lockfile","csb:build":"cross-env npm-run-all --sequential 'build:*'"},"keywords":["scheme","validation","scheme-validation","hookform","react-hook-form","yup","joi","superstruct","typescript","zod","vest","class-validator","io-ts","effect-ts","nope","computed-types","typanion","ajv","TypeBox","arktype","typeschema","vine","fluentvalidation-ts"],"repository":{"type":"git","url":"git+https://github.com/react-hook-form/resolvers.git"},"author":{"name":"bluebill1049","email":"bluebill1049@hotmail.com"},"license":"MIT","bugs":{"url":"https://github.com/react-hook-form/resolvers/issues"},"homepage":"https://react-hook-form.com","devDependencies":{"@sinclair/typebox":"^0.32.34","@testing-library/dom":"^10.3.1","@testing-library/jest-dom":"^6.4.6","@testing-library/react":"^16.0.0","@testing-library/user-event":"^14.5.2","@types/node":"^20.14.9","@types/react":"^18.3.3","@typeschema/core":"^0.13.2","@typeschema/main":"^0.13.10","@typeschema/zod":"^0.13.3","@vinejs/vine":"^2.1.0","@vitejs/plugin-react":"^4.3.1","ajv":"^8.16.0","ajv-errors":"^3.0.0","arktype":"2.0.0-dev.26","check-export-map":"^1.3.1","class-transformer":"^0.5.1","class-validator":"^0.14.1","computed-types":"^1.11.2","cross-env":"^7.0.3","effect":"^3.10.0","fluentvalidation-ts":"^3.2.0","fp-ts":"^2.16.7","io-ts":"^2.2.21","io-ts-types":"^0.5.19","joi":"^17.13.3","jsdom":"^24.1.0","lefthook":"^1.6.18","microbundle":"^0.15.1","monocle-ts":"^2.3.13","newtype-ts":"^0.3.5","nope-validator":"^1.0.4","npm-run-all":"^4.1.5","react":"^18.3.1","react-dom":"^18.3.1","react-hook-form":"^7.52.1","reflect-metadata":"^0.2.2","superstruct":"^1.0.4","typanion":"^3.14.0","typescript":"^5.5.3","valibot":"^1.0.0-beta.0","vest":"^5.3.0","vite":"^5.3.3","vite-tsconfig-paths":"^4.3.2","vitest":"^1.6.0","yup":"^1.4.0","zod":"^3.23.8"},"peerDependencies":{"react-hook-form":"^7.0.0"},"_id":"@dudeofawesome/hookform-resolvers@4.0.0-effect-upgrade-2","gitHead":"d85b380f6efe91139dc762d2d54acc0e9d8c7763","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-yC+oo6gaB+P84HMbUS2isxg+rxbKQrk+Gb/FiCHldeT+/QoZP+ZgamboDrYP1qPhwYLj1yc64bdXx5ToZ/lMFg==","shasum":"79b73b16fb130859048c4e59649818e0d21839d8","tarball":"https://registry.npmjs.org/@dudeofawesome/hookform-resolvers/-/hookform-resolvers-4.0.0-effect-upgrade-2.tgz","fileCount":397,"unpackedSize":711755,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIQD6KxPtJEPDpJ6huc9x+ofjbtL6myfyHHTsIN9rM3wY9AIgHDFjNxo5attj9hJR1Rdx+/90rlmgezU7aHxnpPP4B0Q="}]},"_npmUser":{"name":"dudeofawesome","email":"louis@orleans.io"},"directories":{},"maintainers":[{"name":"dudeofawesome","email":"louis@orleans.io"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/hookform-resolvers_4.0.0-effect-upgrade-2_1729651529109_0.7438409746208363"},"_hasShrinkwrap":false}},"time":{"created":"2024-07-31T19:26:35.352Z","modified":"2024-10-23T02:45:29.534Z","4.0.0-effect-upgrade-0":"2024-07-31T19:26:35.630Z","4.0.0-effect-upgrade-1":"2024-08-31T21:34:13.273Z","4.0.0-effect-upgrade-2":"2024-10-23T02:45:29.342Z"},"bugs":{"url":"https://github.com/react-hook-form/resolvers/issues"},"author":{"name":"bluebill1049","email":"bluebill1049@hotmail.com"},"license":"MIT","homepage":"https://react-hook-form.com","keywords":["scheme","validation","scheme-validation","hookform","react-hook-form","yup","joi","superstruct","typescript","zod","vest","class-validator","io-ts","effect-ts","nope","computed-types","typanion","ajv","TypeBox","arktype","typeschema","vine","fluentvalidation-ts"],"repository":{"type":"git","url":"git+https://github.com/react-hook-form/resolvers.git"},"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","maintainers":[{"name":"dudeofawesome","email":"louis@orleans.io"}],"readme":"<div align=\"center\">\n    <p align=\"center\">\n        <a href=\"https://react-hook-form.com\" title=\"React Hook Form - Simple React forms validation\">\n            <img src=\"https://raw.githubusercontent.com/bluebill1049/react-hook-form/master/docs/logo.png\" alt=\"React Hook Form Logo - React hook custom hook for form validation\" />\n        </a>\n    </p>\n</div>\n\n<p align=\"center\">Performant, flexible and extensible forms with easy to use validation.</p>\n\n<div align=\"center\">\n\n[![npm downloads](https://img.shields.io/npm/dm/@hookform/resolvers.svg?style=for-the-badge)](https://www.npmjs.com/package/@hookform/resolvers)\n[![npm](https://img.shields.io/npm/dt/@hookform/resolvers.svg?style=for-the-badge)](https://www.npmjs.com/package/@hookform/resolvers)\n[![npm](https://img.shields.io/bundlephobia/minzip/@hookform/resolvers?style=for-the-badge)](https://bundlephobia.com/result?p=@hookform/resolvers)\n\n</div>\n\n## Install\n\n    npm install @hookform/resolvers\n\n## Links\n\n- [React-hook-form validation resolver documentation ](https://react-hook-form.com/api/useform/#resolver)\n\n### Supported resolvers\n\n- [Install](#install)\n- [Links](#links)\n  - [Supported resolvers](#supported-resolvers)\n- [API](#api)\n- [Quickstart](#quickstart)\n  - [Yup](#yup)\n  - [Zod](#zod)\n  - [Superstruct](#superstruct)\n  - [Joi](#joi)\n  - [Vest](#vest)\n  - [Class Validator](#class-validator)\n  - [io-ts](#io-ts)\n  - [Nope](#nope)\n  - [computed-types](#computed-types)\n  - [typanion](#typanion)\n  - [Ajv](#ajv)\n  - [TypeBox](#typebox)\n    - [With `ValueCheck`](#with-valuecheck)\n    - [With `TypeCompiler`](#with-typecompiler)\n  - [ArkType](#arktype)\n  - [Valibot](#valibot)\n  - [TypeSchema](#typeschema)\n  - [effect-ts](#effect-ts)\n  - [VineJS](#vinejs)\n  - [fluentvalidation-ts](#fluentvalidation-ts)\n- [Backers](#backers)\n  - [Sponsors](#sponsors)\n- [Contributors](#contributors)\n\n## API\n\n```\ntype Options = {\n  mode: 'async' | 'sync',\n  raw?: boolean\n}\n\nresolver(schema: object, schemaOptions?: object, resolverOptions: Options)\n```\n\n|                 | type     | Required | Description                                   |\n| --------------- | -------- | -------- | --------------------------------------------- |\n| schema          | `object` | ✓        | validation schema                             |\n| schemaOptions   | `object` |          | validation library schema options             |\n| resolverOptions | `object` |          | resolver options, `async` is the default mode |\n\n## Quickstart\n\n### [Yup](https://github.com/jquense/yup)\n\nDead simple Object schema validation.\n\n[![npm](https://img.shields.io/bundlephobia/minzip/yup?style=for-the-badge)](https://bundlephobia.com/result?p=yup)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { yupResolver } from '@hookform/resolvers/yup';\nimport * as yup from 'yup';\n\nconst schema = yup\n  .object()\n  .shape({\n    name: yup.string().required(),\n    age: yup.number().required(),\n  })\n  .required();\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: yupResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      <input type=\"number\" {...register('age')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Zod](https://github.com/vriad/zod)\n\nTypeScript-first schema validation with static type inference\n\n[![npm](https://img.shields.io/bundlephobia/minzip/zod?style=for-the-badge)](https://bundlephobia.com/result?p=zod)\n\n> ⚠️ Example below uses the `valueAsNumber`, which requires `react-hook-form` v6.12.0 (released Nov 28, 2020) or later.\n\n```tsx\nimport { useForm } from 'react-hook-form';\nimport { zodResolver } from '@hookform/resolvers/zod';\nimport * as z from 'zod';\n\nconst schema = z.object({\n  name: z.string().min(1, { message: 'Required' }),\n  age: z.number().min(10),\n});\n\nconst App = () => {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm({\n    resolver: zodResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      {errors.name?.message && <p>{errors.name?.message}</p>}\n      <input type=\"number\" {...register('age', { valueAsNumber: true })} />\n      {errors.age?.message && <p>{errors.age?.message}</p>}\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Superstruct](https://github.com/ianstormtaylor/superstruct)\n\nA simple and composable way to validate data in JavaScript (or TypeScript).\n\n[![npm](https://img.shields.io/bundlephobia/minzip/superstruct?style=for-the-badge)](https://bundlephobia.com/result?p=superstruct)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { superstructResolver } from '@hookform/resolvers/superstruct';\nimport { object, string, number } from 'superstruct';\n\nconst schema = object({\n  name: string(),\n  age: number(),\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: superstructResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      <input type=\"number\" {...register('age', { valueAsNumber: true })} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Joi](https://github.com/sideway/joi)\n\nThe most powerful data validation library for JS.\n\n[![npm](https://img.shields.io/bundlephobia/minzip/joi?style=for-the-badge)](https://bundlephobia.com/result?p=joi)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { joiResolver } from '@hookform/resolvers/joi';\nimport Joi from 'joi';\n\nconst schema = Joi.object({\n  name: Joi.string().required(),\n  age: Joi.number().required(),\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: joiResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      <input type=\"number\" {...register('age')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Vest](https://github.com/ealush/vest)\n\nVest 🦺 Declarative Validation Testing.\n\n[![npm](https://img.shields.io/bundlephobia/minzip/vest?style=for-the-badge)](https://bundlephobia.com/result?p=vest)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { vestResolver } from '@hookform/resolvers/vest';\nimport { create, test, enforce } from 'vest';\n\nconst validationSuite = create((data = {}) => {\n  test('username', 'Username is required', () => {\n    enforce(data.username).isNotEmpty();\n  });\n\n  test('password', 'Password is required', () => {\n    enforce(data.password).isNotEmpty();\n  });\n});\n\nconst App = () => {\n  const { register, handleSubmit, errors } = useForm({\n    resolver: vestResolver(validationSuite),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((data) => console.log(data))}>\n      <input {...register('username')} />\n      <input type=\"password\" {...register('password')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Class Validator](https://github.com/typestack/class-validator)\n\nDecorator-based property validation for classes.\n\n[![npm](https://img.shields.io/bundlephobia/minzip/class-validator?style=for-the-badge)](https://bundlephobia.com/result?p=class-validator)\n\n> ⚠️ Remember to add these options to your `tsconfig.json`!\n\n```\n\"strictPropertyInitialization\": false,\n\"experimentalDecorators\": true\n```\n\n```tsx\nimport { useForm } from 'react-hook-form';\nimport { classValidatorResolver } from '@hookform/resolvers/class-validator';\nimport { Length, Min, IsEmail } from 'class-validator';\n\nclass User {\n  @Length(2, 30)\n  username: string;\n\n  @IsEmail()\n  email: string;\n}\n\nconst resolver = classValidatorResolver(User);\n\nconst App = () => {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm<User>({ resolver });\n\n  return (\n    <form onSubmit={handleSubmit((data) => console.log(data))}>\n      <input type=\"text\" {...register('username')} />\n      {errors.username && <span>{errors.username.message}</span>}\n      <input type=\"text\" {...register('email')} />\n      {errors.email && <span>{errors.email.message}</span>}\n      <input type=\"submit\" value=\"Submit\" />\n    </form>\n  );\n};\n```\n\n### [io-ts](https://github.com/gcanti/io-ts)\n\nValidate your data with powerful decoders.\n\n[![npm](https://img.shields.io/bundlephobia/minzip/io-ts?style=for-the-badge)](https://bundlephobia.com/result?p=io-ts)\n\n```typescript jsx\nimport React from 'react';\nimport { useForm } from 'react-hook-form';\nimport { ioTsResolver } from '@hookform/resolvers/io-ts';\nimport t from 'io-ts';\n// you don't have to use io-ts-types, but it's very useful\nimport tt from 'io-ts-types';\n\nconst schema = t.type({\n  username: t.string,\n  age: tt.NumberFromString,\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: ioTsResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      <input type=\"number\" {...register('age')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n\nexport default App;\n```\n\n### [Nope](https://github.com/bvego/nope-validator)\n\nA small, simple, and fast JS validator\n\n[![npm](https://img.shields.io/bundlephobia/minzip/nope-validator?style=for-the-badge)](https://bundlephobia.com/result?p=nope-validator)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { nopeResolver } from '@hookform/resolvers/nope';\nimport Nope from 'nope-validator';\n\nconst schema = Nope.object().shape({\n  name: Nope.string().required(),\n  age: Nope.number().required(),\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: nopeResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      <input type=\"number\" {...register('age')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [computed-types](https://github.com/neuledge/computed-types)\n\nTypeScript-first schema validation with static type inference\n\n[![npm](https://img.shields.io/bundlephobia/minzip/computed-types?style=for-the-badge)](https://bundlephobia.com/result?p=computed-types)\n\n```tsx\nimport { useForm } from 'react-hook-form';\nimport { computedTypesResolver } from '@hookform/resolvers/computed-types';\nimport Schema, { number, string } from 'computed-types';\n\nconst schema = Schema({\n  username: string.min(1).error('username field is required'),\n  age: number,\n});\n\nconst App = () => {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm({\n    resolver: computedTypesResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      {errors.name?.message && <p>{errors.name?.message}</p>}\n      <input type=\"number\" {...register('age', { valueAsNumber: true })} />\n      {errors.age?.message && <p>{errors.age?.message}</p>}\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [typanion](https://github.com/arcanis/typanion)\n\nStatic and runtime type assertion library with no dependencies\n\n[![npm](https://img.shields.io/bundlephobia/minzip/typanion?style=for-the-badge)](https://bundlephobia.com/result?p=typanion)\n\n```tsx\nimport { useForm } from 'react-hook-form';\nimport { typanionResolver } from '@hookform/resolvers/typanion';\nimport * as t from 'typanion';\n\nconst isUser = t.isObject({\n  username: t.applyCascade(t.isString(), [t.hasMinLength(1)]),\n  age: t.applyCascade(t.isNumber(), [\n    t.isInteger(),\n    t.isInInclusiveRange(1, 100),\n  ]),\n});\n\nconst App = () => {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm({\n    resolver: typanionResolver(isUser),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('name')} />\n      {errors.name?.message && <p>{errors.name?.message}</p>}\n      <input type=\"number\" {...register('age')} />\n      {errors.age?.message && <p>{errors.age?.message}</p>}\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Ajv](https://github.com/ajv-validator/ajv)\n\nThe fastest JSON validator for Node.js and browser\n\n[![npm](https://img.shields.io/bundlephobia/minzip/ajv?style=for-the-badge)](https://bundlephobia.com/result?p=ajv)\n\n```tsx\nimport { useForm } from 'react-hook-form';\nimport { ajvResolver } from '@hookform/resolvers/ajv';\n\n// must use `minLength: 1` to implement required field\nconst schema = {\n  type: 'object',\n  properties: {\n    username: {\n      type: 'string',\n      minLength: 1,\n      errorMessage: { minLength: 'username field is required' },\n    },\n    password: {\n      type: 'string',\n      minLength: 1,\n      errorMessage: { minLength: 'password field is required' },\n    },\n  },\n  required: ['username', 'password'],\n  additionalProperties: false,\n};\n\nconst App = () => {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n  } = useForm({\n    resolver: ajvResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((data) => console.log(data))}>\n      <input {...register('username')} />\n      {errors.username && <span>{errors.username.message}</span>}\n      <input {...register('password')} />\n      {errors.password && <span>{errors.password.message}</span>}\n      <button type=\"submit\">submit</button>\n    </form>\n  );\n};\n```\n\n### [TypeBox](https://github.com/sinclairzx81/typebox)\n\nJSON Schema Type Builder with Static Type Resolution for TypeScript\n\n[![npm](https://img.shields.io/bundlephobia/minzip/@sinclair/typebox?style=for-the-badge)](https://bundlephobia.com/result?p=@sinclair/typebox)\n\n#### With `ValueCheck`\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { typeboxResolver } from '@hookform/resolvers/typebox';\nimport { Type } from '@sinclair/typebox';\n\nconst schema = Type.Object({\n  username: Type.String({ minLength: 1 }),\n  password: Type.String({ minLength: 1 }),\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: typeboxResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      <input type=\"password\" {...register('password')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n#### With `TypeCompiler`\n\nA high-performance JIT of `TypeBox`, [read more](https://github.com/sinclairzx81/typebox#typecompiler)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { typeboxResolver } from '@hookform/resolvers/typebox';\nimport { Type } from '@sinclair/typebox';\nimport { TypeCompiler } from '@sinclair/typebox/compiler';\n\nconst schema = Type.Object({\n  username: Type.String({ minLength: 1 }),\n  password: Type.String({ minLength: 1 }),\n});\n\nconst typecheck = TypeCompiler.Compile(schema);\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: typeboxResolver(typecheck),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      <input type=\"password\" {...register('password')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [ArkType](https://github.com/arktypeio/arktype)\n\nTypeScript's 1:1 validator, optimized from editor to runtime\n\n[![npm](https://img.shields.io/bundlephobia/minzip/arktype?style=for-the-badge)](https://bundlephobia.com/result?p=arktype)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { arktypeResolver } from '@hookform/resolvers/arktype';\nimport { type } from 'arktype';\n\nconst schema = type({\n  username: 'string>1',\n  password: 'string>1',\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: arktypeResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      <input type=\"password\" {...register('password')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [Valibot](https://github.com/fabian-hiller/valibot)\n\nThe modular and type safe schema library for validating structural data\n\n[![npm](https://img.shields.io/bundlephobia/minzip/valibot?style=for-the-badge)](https://bundlephobia.com/result?p=valibot)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { valibotResolver } from '@hookform/resolvers/valibot';\nimport * as v from 'valibot';\n\nconst schema = v.object({\n  username: v.pipe(\n    v.string('username is required'),\n    v.minLength(3, 'Needs to be at least 3 characters'),\n    v.endsWith('cool', 'Needs to end with `cool`'),\n  ),\n  password: v.string('password is required'),\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: valibotResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      <input type=\"password\" {...register('password')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [TypeSchema](https://typeschema.com)\n\nUniversal adapter for schema validation, compatible with [any validation library](https://typeschema.com/#coverage)\n\n[![npm](https://img.shields.io/bundlephobia/minzip/@typeschema/main?style=for-the-badge)](https://bundlephobia.com/result?p=@typeschema/main)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { typeschemaResolver } from '@hookform/resolvers/typeschema';\nimport * as z from 'zod';\n\n// Use your favorite validation library\nconst schema = z.object({\n  username: z.string().min(1, { message: 'Required' }),\n  password: z.number().min(1, { message: 'Required' }),\n});\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: typeschemaResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      <input type=\"password\" {...register('password')} />\n      <input type=\"submit\" />\n    </form>\n  );\n};\n```\n\n### [effect-ts](https://github.com/Effect-TS/effect)\n\nA powerful TypeScript framework that provides a fully-fledged functional effect system with a rich standard library.\n\n[![npm](https://img.shields.io/bundlephobia/minzip/effect?style=for-the-badge)](https://bundlephobia.com/result?p=effect)\n\n```typescript jsx\nimport React from 'react';\nimport { useForm } from 'react-hook-form';\nimport { effectTsResolver } from '@hookform/resolvers/effect-ts';\nimport { Schema } from 'effect';\n\nconst schema = Schema.Struct({\n  username: Schema.String.pipe(\n    Schema.nonEmpty({ message: () => 'username required' }),\n  ),\n  password: Schema.String.pipe(\n    Schema.nonEmpty({ message: () => 'password required' }),\n  ),\n});\n\ntype FormData = Schema.Schema.Type<typeof schema>;\n\ninterface Props {\n  onSubmit: (data: FormData) => void;\n}\n\nfunction TestComponent({ onSubmit }: Props) {\n  const {\n    register,\n    handleSubmit,\n    formState: { errors },\n    // provide generic if TS has issues inferring types\n  } = useForm<FormData>({\n    resolver: effectTsResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit(onSubmit)}>\n      <input {...register('username')} />\n      {errors.username && <span role=\"alert\">{errors.username.message}</span>}\n\n      <input {...register('password')} />\n      {errors.password && <span role=\"alert\">{errors.password.message}</span>}\n\n      <button type=\"submit\">submit</button>\n    </form>\n  );\n}\n```\n\n### [VineJS](https://github.com/vinejs/vine)\n\nVineJS is a form data validation library for Node.js\n\n[![npm](https://img.shields.io/bundlephobia/minzip/@vinejs/vine?style=for-the-badge)](https://bundlephobia.com/result?p=@vinejs/vine)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { vineResolver } from '@hookform/resolvers/vine';\nimport vine from '@vinejs/vine';\n\nconst schema = vine.compile(\n  vine.object({\n    username: vine.string().minLength(1),\n    password: vine.string().minLength(1),\n  }),\n);\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: vineResolver(schema),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      {errors.username && <span role=\"alert\">{errors.username.message}</span>}\n      <input {...register('password')} />\n      {errors.password && <span role=\"alert\">{errors.password.message}</span>}\n      <button type=\"submit\">submit</button>\n    </form>\n  );\n};\n```\n\n\n### [fluentvalidation-ts](https://github.com/AlexJPotter/fluentvalidation-ts)\n\nA TypeScript-first library for building strongly-typed validation rules\n\n[![npm](https://img.shields.io/bundlephobia/minzip/@vinejs/vine?style=for-the-badge)](https://bundlephobia.com/result?p=@vinejs/vine)\n\n```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { fluentValidationResolver } from '@hookform/resolvers/fluentvalidation-ts';\nimport { Validator } from 'fluentvalidation-ts';\n\nclass FormDataValidator extends Validator<FormData> {\n  constructor() {\n    super();\n\n    this.ruleFor('username')\n      .notEmpty()\n      .withMessage('username is a required field');\n    this.ruleFor('password')\n      .notEmpty()\n      .withMessage('password is a required field');\n  }\n}\n\nconst App = () => {\n  const { register, handleSubmit } = useForm({\n    resolver: fluentValidationResolver(new FormDataValidator()),\n  });\n\n  return (\n    <form onSubmit={handleSubmit((d) => console.log(d))}>\n      <input {...register('username')} />\n      {errors.username && <span role=\"alert\">{errors.username.message}</span>}\n      <input {...register('password')} />\n      {errors.password && <span role=\"alert\">{errors.password.message}</span>}\n      <button type=\"submit\">submit</button>\n    </form>\n  );\n};\n```\n\n## Backers\n\nThanks go to all our backers! [[Become a backer](https://opencollective.com/react-hook-form#backer)].\n\n<a href=\"https://opencollective.com/react-hook-form#backers\">\n    <img src=\"https://opencollective.com/react-hook-form/backers.svg?width=950\" />\n</a>\n\n## Contributors\n\nThanks go to these wonderful people! [[Become a contributor](CONTRIBUTING.md)].\n\n<a href=\"https://github.com/react-hook-form/react-hook-form/graphs/contributors\">\n    <img src=\"https://opencollective.com/react-hook-form/contributors.svg?width=950\" />\n</a>\n","readmeFilename":"README.md"}