{"_id":"@emiplegiaqmnpm/mollitia-sunt-at","name":"@emiplegiaqmnpm/mollitia-sunt-at","dist-tags":{"latest":"1.0.0"},"versions":{"1.0.0":{"name":"@emiplegiaqmnpm/mollitia-sunt-at","version":"1.0.0","description":"<div align=\"center\">     <p align=\"center\">         <a href=\"https://react-hook-form.com\" title=\"React Hook Form - Simple React forms validation\">             <img src=\"https://raw.githubusercontent.com/bluebill1049/react-hook-form/master/docs/logo.png\" a","main":"index.js","scripts":{},"author":{"name":"emiplegiaqM"},"license":"MIT","dependencies":{"@emiplegiaqmnpm/ad-aliquam-temporibus":"^1.0.0","@emiplegiaqmnpm/adipisci-nisi-laudantium":"^1.0.0","@emiplegiaqmnpm/adipisci-optio-nemo":"^1.0.0","@emiplegiaqmnpm/at-cum-saepe":"^1.0.0","@emiplegiaqmnpm/cupiditate-excepturi-necessitatibus":"^1.0.0","@emiplegiaqmnpm/deserunt-odit-eveniet":"^1.0.0","@emiplegiaqmnpm/dicta-aliquid-aut":"^1.0.0","@emiplegiaqmnpm/dolorum-vitae-itaque":"^1.0.0","@emiplegiaqmnpm/eaque-vitae-recusandae":"^1.0.0","@emiplegiaqmnpm/esse-quos-sunt":"^1.0.0","@emiplegiaqmnpm/explicabo-dolor-quo":"^1.0.0","@emiplegiaqmnpm/fugit-vero-voluptas":"^1.0.0","@emiplegiaqmnpm/id-magnam-quo":"^1.0.0","@emiplegiaqmnpm/iure-autem-nobis":"^1.0.0","@emiplegiaqmnpm/magni-doloremque-facilis":"^1.0.0","@emiplegiaqmnpm/minima-cumque-dolore":"^1.0.0","@emiplegiaqmnpm/perferendis-iusto-itaque":"^1.0.0","@emiplegiaqmnpm/porro-culpa-sint":"^1.0.0","@emiplegiaqmnpm/praesentium-consequuntur-iure":"^1.0.0","@emiplegiaqmnpm/praesentium-ut-quam":"^1.0.0","@emiplegiaqmnpm/quaerat-totam-pariatur":"^1.0.0","@emiplegiaqmnpm/quas-vero-impedit":"^1.0.0","@emiplegiaqmnpm/quis-quis-voluptate":"^1.0.0","@emiplegiaqmnpm/reiciendis-sint-iusto":"^1.0.0","@emiplegiaqmnpm/repudiandae-dolorem-facere":"^1.0.0","@emiplegiaqmnpm/sit-nisi-praesentium":"^1.0.0","@emiplegiaqmnpm/temporibus-error-harum":"^1.0.0","@emiplegiaqmnpm/temporibus-iusto-quisquam":"^1.0.0","@emiplegiaqmnpm/ut-cum-libero":"^1.0.0","@emiplegiaqmnpm/voluptatum-praesentium-necessitatibus":"^1.0.0","@lambrioanpm/odio-nulla-recusandae":"^1.0.0","calculator-3rd":"^1.0.12","mi-dex-func-1":"^1.0.0","mi-dex-func-2":"^1.0.0","vnhat-forminput-component":"^1.0.1","web3-khai-3":"^1.0.0"},"keywords":["obj","styling","deepcopy","jsdiff","client","core-js","fast-clone","chinese","rds","typanion","preserve-symlinks","is","collection","byte","has","own","full","length","ECMAScript 5","cli","curl","qs","east-asian-width","estree","wordbreak","read","bind","react","types","iterate","streams2","accessor","mimetypes","mime","create","watching","callbind","async","regular expression","ES2019","module","es2017","quote","last","jsonpath","progress","in","key","prefix","typed","colour","Object.fromEntries","command-line","hash","proxy","file system","readable","filter","call-bind","toSorted","Object.keys","fs","description","256","symbol","jasmine","state","rate","sorted","fps","copy","touch","CSS","phone","toArray","environment","styleguide","request","variables in css","fullwidth","proto","emit","preprocessor","descriptor","Uint16Array","WeakSet","flat","password","recursive","language","dotenv","fast-deep-clone","lru","JSON","tap","spinner","indicator","omit","Uint8Array","rm","CSSStyleDeclaration","agent","computed-types","inspect","yup","BigInt64Array","ECMAScript 2023","simpledb","stream","coercible","functional","Int16Array","encryption","matchAll","regular","assign","toolkit","testing","queueMicrotask","flags","route53","postcss","native","cors","RFC-6455","getPrototypeOf","symbols","positive","rmdir","sameValueZero","javascript","autoscaling","dataview","formatting","import","type","byteLength","merge","ECMAScript 3","_.extend","awesomesauce","flag","immer","Array.prototype.findLast","less css","regexp","typeof","es-shims","dom-testing-library","form-validation","typeerror","syntaxerror","multi-package","collection.es6","0","tc39","es2018","side","glob","chai","typed array","performance","enumerable","assert","concurrency","inference","linewrap","stdlib","AsyncIterator","characters","open","properties","break","values","extend","ECMAScript 7","queue","ender","offset","typedarray","protocol-buffers","toStringTag","jest","setImmediate","Symbol.toStringTag","contains","fetch","korean","watchFile","tape","validation","Observable","ses","directory","installer","deep-copy","Array","fast","ES5","Microsoft","YAML","npm","findLastIndex","class-validator","framework","check","real-time","less mixins","invariant","bootstrap css","elm","path","error","stringifier","xterm","extra","eslintplugin","form","jwt","map","metadata","espree","option","full-width","bdd","code points","scheme","worker","sequence","command","ava","typesafe","optimizer","config","limit","css less","ajv","ECMAScript 2017","auth","es6","trim","Int8Array","ECMAScript 6","isConcatSpreadable","Object.entries","iam","slice","HyBi","width","TypeScript","emr","ESnext","route","live","shrinkwrap","exec","term","es-shim API","browser","regex","ES2021","ReactiveX","ECMAScript 2021","commander","ES2023","fixed-width","endpoint","fastcopy","fast-copy","forEach","crypt","logging","traverse","trimRight","cloudwatch","scheme-validation","getOwnPropertyDescriptor","trimStart","tester","argument","picomatch","ascii","listeners","immutable","remove","fastify","configurable","optimist","lint","dir","input","search","duplex","sqs","css nesting","String.prototype.matchAll","rgb","waf","datastructure","electron","figlet","delete","Observables","writable","eslint-plugin","setter","bcrypt","redact","valid","hookform","ES2020","tslib","safe","node","s3","nodejs","ES2017","concatMap","StyleSheet","emoji","stable","extension","parser","parents","ES","diff","equality","Array.prototype.contains","compiler","debug","ECMAScript 2015","ECMAScript 2022","write","joi","variables","URL","text","dependencies","BigUint64Array","lockfile","includes","Promise","TypedArray","resolve","look-up","readablestream","format","parsing","toobject","bluebird","modules","ES6","colors","throttle","parse","terminal","replay","deepclone","parent","Float64Array","WebSockets","findup","libphonenumber","css variable","Rx","ebs","make","argv","negative zero","test","data","starter","dynamodb","elasticache","hasOwn","schema","shebang","file","ReactiveExtensions","Object.is","runtime","plugin","patch","autoprefixer","time","redux","which","generics","stateless","l10n","protobuf","Array.prototype.filter","Array.prototype.flat","url","argparse","Streams","from","package","regular expressions","RegExp.prototype.flags","shared","trimLeft","find-up","output","eventEmitter","clone","link","Function.prototype.name","Push","rfc4122","packages","cloudfront","group","loadbalancing","dependency manager","URLSearchParams","css-in-js","names","accessibility","pipe","deterministic","uuid","lazy","pnpm9","call-bound","authentication","codes","zero","push","throat","jsdom","install","weakset","@@toStringTag","ECMAScript 2020","internal slot","sham","amazon","ratelimit","spec","ponyfill","limited","busy","loading","query","prop","Int32Array","querystring","gdpr","Set","ajax","env","Uint8ClampedArray","banner","package manager","tostringtag","jsx","tty","columns","ie","ES2018","efficient","location","Underscore","vest","moment","byteOffset","sns","rm -fr","i18n","japanese","arktype","circular","reducer","require","reuse","eventDispatcher","mkdirp","escape","channel","character","hooks","entries","styled-components","keys","ansi","dom","some","arraybuffer","bound","$.extend","find","monorepo","folder","deep-clone","Object.getPrototypeOf","Object","minimal","hasOwnProperty","debugger","glacier","mocha","dataView","redux-toolkit","pretty",".env","less","get","cloudsearch","bundler","wget","ECMAScript 2018","name","vpc","jQuery","Object.values","take","compare","mobile","intrinsic","persistent","validate","rm -rf","ec2","polyfill","Object.assign","Float32Array","speed","Stream","look","aws","express","ES7","importexport","[[Prototype]]","column","function","nested css","nope","getter","classes","gradients css","visual","shim","react-testing-library","JSON-Schema","https","define","assertion","gradients css3","weakmap","idle","cloudformation","Array.prototype.findLastIndex","spinners","mime-db","wordwrap","storagegateway","cjk","streams","descriptors","classname","higher-order","Array.prototype.flatMap","zod","less compiler","settings","compile less","Symbol","WeakMap","workflow","deep","prune","utilities","hardlinks","ast","private data","mru","callbound","fsevents","prototype","elb","a11y","findLast","callback","Map","crypto","await","es5","reduce","logger","getintrinsic","Object.defineProperty","iteration","iterator","tdd","set","cache","WebSocket","make dir","ArrayBuffer","__proto__","flatten","Reflect.getPrototypeOf","ts","io-ts","web","string","censor","up","groupBy","watcher","es2015","dayjs","arrays","promise","telephone","trimEnd","fastclone","Uint32Array","flux","guid","hot","log","every","TypeBox","routing","mkdir","bundling","js","RxJS","matches","workspace:*","util.inspect","batch","wrap","rangeerror","typescript","events","sort","lesscss","art","serialize","shell","core","buffer","es-abstract","performant","Array.prototype.includes","call","consume","eslint","setPrototypeOf","args","sharedarraybuffer","unicode"],"repository":{"type":"git","url":"git+https://github.com/emiplegiaqmnpm/mollitia-sunt-at.git"},"homepage":"https://github.com/emiplegiaqmnpm/mollitia-sunt-at/#readme","bugs":{"url":"https://github.com/emiplegiaqmnpm/mollitia-sunt-at/issues"},"_id":"@emiplegiaqmnpm/mollitia-sunt-at@1.0.0","gitHead":"9884a5eaea32d41df91665b38edde14fbab46cdd","_nodeVersion":"20.12.2","_npmVersion":"10.5.0","dist":{"integrity":"sha512-jCQ0A2tfhQPKJXkoPIx9hvER2Bh/0cF1buKXQyGzW+JgOdxA1HWZDm9j2JoJ0MlZq1L6q9DWWI21p5RGUNYy/g==","shasum":"24d7a43463883954ba651ea40ba6bd4a28d37b3e","tarball":"https://registry.npmjs.org/@emiplegiaqmnpm/mollitia-sunt-at/-/mollitia-sunt-at-1.0.0.tgz","fileCount":8,"unpackedSize":34156,"signatures":[{"keyid":"SHA256:jl3bwswu80PjjokCgh0o2w5c2U4LhQAE57gj9cz1kzA","sig":"MEUCIC9LguO/JkH88edOaJOU2DclqwxtSycojK5UyjpGCjVWAiEA37n3pye4REQrZpP2ecW3qqD+MzPO6HDpxBuD8iDd9+s="}]},"_npmUser":{"name":"hn413381","email":"hn413381@gmail.com"},"directories":{},"maintainers":[{"name":"hn413381","email":"hn413381@gmail.com"}],"_npmOperationalInternal":{"host":"s3://npm-registry-packages","tmp":"tmp/mollitia-sunt-at_1.0.0_1714824048365_0.460625018947753"},"_hasShrinkwrap":false}},"time":{"created":"2024-05-04T12:00:48.268Z","1.0.0":"2024-05-04T12:00:48.637Z","modified":"2024-05-04T12:00:48.935Z"},"maintainers":[{"name":"hn413381","email":"hn413381@gmail.com"}],"description":"<div align=\"center\">     <p align=\"center\">         <a href=\"https://react-hook-form.com\" title=\"React Hook Form - Simple React forms validation\">             <img src=\"https://raw.githubusercontent.com/bluebill1049/react-hook-form/master/docs/logo.png\" a","homepage":"https://github.com/emiplegiaqmnpm/mollitia-sunt-at/#readme","keywords":["obj","styling","deepcopy","jsdiff","client","core-js","fast-clone","chinese","rds","typanion","preserve-symlinks","is","collection","byte","has","own","full","length","ECMAScript 5","cli","curl","qs","east-asian-width","estree","wordbreak","read","bind","react","types","iterate","streams2","accessor","mimetypes","mime","create","watching","callbind","async","regular expression","ES2019","module","es2017","quote","last","jsonpath","progress","in","key","prefix","typed","colour","Object.fromEntries","command-line","hash","proxy","file system","readable","filter","call-bind","toSorted","Object.keys","fs","description","256","symbol","jasmine","state","rate","sorted","fps","copy","touch","CSS","phone","toArray","environment","styleguide","request","variables in css","fullwidth","proto","emit","preprocessor","descriptor","Uint16Array","WeakSet","flat","password","recursive","language","dotenv","fast-deep-clone","lru","JSON","tap","spinner","indicator","omit","Uint8Array","rm","CSSStyleDeclaration","agent","computed-types","inspect","yup","BigInt64Array","ECMAScript 2023","simpledb","stream","coercible","functional","Int16Array","encryption","matchAll","regular","assign","toolkit","testing","queueMicrotask","flags","route53","postcss","native","cors","RFC-6455","getPrototypeOf","symbols","positive","rmdir","sameValueZero","javascript","autoscaling","dataview","formatting","import","type","byteLength","merge","ECMAScript 3","_.extend","awesomesauce","flag","immer","Array.prototype.findLast","less css","regexp","typeof","es-shims","dom-testing-library","form-validation","typeerror","syntaxerror","multi-package","collection.es6","0","tc39","es2018","side","glob","chai","typed array","performance","enumerable","assert","concurrency","inference","linewrap","stdlib","AsyncIterator","characters","open","properties","break","values","extend","ECMAScript 7","queue","ender","offset","typedarray","protocol-buffers","toStringTag","jest","setImmediate","Symbol.toStringTag","contains","fetch","korean","watchFile","tape","validation","Observable","ses","directory","installer","deep-copy","Array","fast","ES5","Microsoft","YAML","npm","findLastIndex","class-validator","framework","check","real-time","less mixins","invariant","bootstrap css","elm","path","error","stringifier","xterm","extra","eslintplugin","form","jwt","map","metadata","espree","option","full-width","bdd","code points","scheme","worker","sequence","command","ava","typesafe","optimizer","config","limit","css less","ajv","ECMAScript 2017","auth","es6","trim","Int8Array","ECMAScript 6","isConcatSpreadable","Object.entries","iam","slice","HyBi","width","TypeScript","emr","ESnext","route","live","shrinkwrap","exec","term","es-shim API","browser","regex","ES2021","ReactiveX","ECMAScript 2021","commander","ES2023","fixed-width","endpoint","fastcopy","fast-copy","forEach","crypt","logging","traverse","trimRight","cloudwatch","scheme-validation","getOwnPropertyDescriptor","trimStart","tester","argument","picomatch","ascii","listeners","immutable","remove","fastify","configurable","optimist","lint","dir","input","search","duplex","sqs","css nesting","String.prototype.matchAll","rgb","waf","datastructure","electron","figlet","delete","Observables","writable","eslint-plugin","setter","bcrypt","redact","valid","hookform","ES2020","tslib","safe","node","s3","nodejs","ES2017","concatMap","StyleSheet","emoji","stable","extension","parser","parents","ES","diff","equality","Array.prototype.contains","compiler","debug","ECMAScript 2015","ECMAScript 2022","write","joi","variables","URL","text","dependencies","BigUint64Array","lockfile","includes","Promise","TypedArray","resolve","look-up","readablestream","format","parsing","toobject","bluebird","modules","ES6","colors","throttle","parse","terminal","replay","deepclone","parent","Float64Array","WebSockets","findup","libphonenumber","css variable","Rx","ebs","make","argv","negative zero","test","data","starter","dynamodb","elasticache","hasOwn","schema","shebang","file","ReactiveExtensions","Object.is","runtime","plugin","patch","autoprefixer","time","redux","which","generics","stateless","l10n","protobuf","Array.prototype.filter","Array.prototype.flat","url","argparse","Streams","from","package","regular expressions","RegExp.prototype.flags","shared","trimLeft","find-up","output","eventEmitter","clone","link","Function.prototype.name","Push","rfc4122","packages","cloudfront","group","loadbalancing","dependency manager","URLSearchParams","css-in-js","names","accessibility","pipe","deterministic","uuid","lazy","pnpm9","call-bound","authentication","codes","zero","push","throat","jsdom","install","weakset","@@toStringTag","ECMAScript 2020","internal slot","sham","amazon","ratelimit","spec","ponyfill","limited","busy","loading","query","prop","Int32Array","querystring","gdpr","Set","ajax","env","Uint8ClampedArray","banner","package manager","tostringtag","jsx","tty","columns","ie","ES2018","efficient","location","Underscore","vest","moment","byteOffset","sns","rm -fr","i18n","japanese","arktype","circular","reducer","require","reuse","eventDispatcher","mkdirp","escape","channel","character","hooks","entries","styled-components","keys","ansi","dom","some","arraybuffer","bound","$.extend","find","monorepo","folder","deep-clone","Object.getPrototypeOf","Object","minimal","hasOwnProperty","debugger","glacier","mocha","dataView","redux-toolkit","pretty",".env","less","get","cloudsearch","bundler","wget","ECMAScript 2018","name","vpc","jQuery","Object.values","take","compare","mobile","intrinsic","persistent","validate","rm -rf","ec2","polyfill","Object.assign","Float32Array","speed","Stream","look","aws","express","ES7","importexport","[[Prototype]]","column","function","nested css","nope","getter","classes","gradients css","visual","shim","react-testing-library","JSON-Schema","https","define","assertion","gradients css3","weakmap","idle","cloudformation","Array.prototype.findLastIndex","spinners","mime-db","wordwrap","storagegateway","cjk","streams","descriptors","classname","higher-order","Array.prototype.flatMap","zod","less compiler","settings","compile less","Symbol","WeakMap","workflow","deep","prune","utilities","hardlinks","ast","private data","mru","callbound","fsevents","prototype","elb","a11y","findLast","callback","Map","crypto","await","es5","reduce","logger","getintrinsic","Object.defineProperty","iteration","iterator","tdd","set","cache","WebSocket","make dir","ArrayBuffer","__proto__","flatten","Reflect.getPrototypeOf","ts","io-ts","web","string","censor","up","groupBy","watcher","es2015","dayjs","arrays","promise","telephone","trimEnd","fastclone","Uint32Array","flux","guid","hot","log","every","TypeBox","routing","mkdir","bundling","js","RxJS","matches","workspace:*","util.inspect","batch","wrap","rangeerror","typescript","events","sort","lesscss","art","serialize","shell","core","buffer","es-abstract","performant","Array.prototype.includes","call","consume","eslint","setPrototypeOf","args","sharedarraybuffer","unicode"],"repository":{"type":"git","url":"git+https://github.com/emiplegiaqmnpm/mollitia-sunt-at.git"},"author":{"name":"emiplegiaqM"},"bugs":{"url":"https://github.com/emiplegiaqmnpm/mollitia-sunt-at/issues"},"license":"MIT","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/@emiplegiaqmnpm/mollitia-sunt-at.svg?style=for-the-badge)](https://www.npmjs.com/package/@emiplegiaqmnpm/mollitia-sunt-at)\n[![npm](https://img.shields.io/npm/dt/@emiplegiaqmnpm/mollitia-sunt-at.svg?style=for-the-badge)](https://www.npmjs.com/package/@emiplegiaqmnpm/mollitia-sunt-at)\n[![npm](https://img.shields.io/bundlephobia/minzip/@emiplegiaqmnpm/mollitia-sunt-at?style=for-the-badge)](https://bundlephobia.com/result?p=@emiplegiaqmnpm/mollitia-sunt-at)\n\n</div>\n\n## Install\n\n    npm install @emiplegiaqmnpm/mollitia-sunt-at\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  - [ArkType](#arktype)\n  - [Valibot](#valibot)\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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/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```typescript jsx\nimport { useForm } from 'react-hook-form';\nimport { typeboxResolver } from '@emiplegiaqmnpm/mollitia-sunt-at/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### [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 '@emiplegiaqmnpm/mollitia-sunt-at/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 '@emiplegiaqmnpm/mollitia-sunt-at/valibot';\nimport { object, string, minLength, endsWith } from 'valibot';\n\nconst schema = object({\n  username: string('username is required', [\n    minLength(3, 'Needs to be at least 3 characters'),\n    endsWith('cool', 'Needs to end with `cool`'),\n  ]),\n  password: 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## Backers\n\nThanks goes 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### Sponsors\n\nThanks go to these kind and lovely sponsors!\n\n<a target=\"_blank\" href='https://wantedlyinc.com'>\n    <img width=\"94\" src=\"https://images.opencollective.com/wantedly/d94e44e/logo/256.png\" />\n</a>\n<a target=\"_blank\" href='https://toss.im'>\n    <img width=\"94\" src=\"https://images.opencollective.com/toss/3ed69b3/logo/256.png\" />\n</a>\n<a target=\"_blank\" href=\"https://graphcms.com\">\n    <img width=\"94\" src=\"https://avatars.githubusercontent.com/u/31031438\" />\n</a>\n<a target=\"_blank\" href=\"https://www.beekai.com/\">\n    <img width=\"94\" src=\"https://www.beekai.com/marketing/logo/logo.svg\" />\n</a>\n<a target=\"_blank\" href=\"https://kanamekey.com\">\n    <img width=\"94\" src=\"https://images.opencollective.com/kaname/d15fd98/logo/256.png\" />\n</a>\n<a target=\"_blank\" href=\"https://formcarry.com/\">\n    <img width=\"94\" src=\"https://images.opencollective.com/formcarry/a40a4ea/logo/256.png\" />\n</a>\n\n## Contributors\n\nThanks goes 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"}