@hookform/resolvers 2.3.0 → 2.5.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.
Files changed (82) hide show
  1. package/README.md +86 -11
  2. package/computed-types/dist/computed-types.d.ts +2 -0
  3. package/computed-types/dist/computed-types.js +2 -0
  4. package/computed-types/dist/computed-types.js.map +1 -0
  5. package/computed-types/dist/computed-types.mjs +2 -0
  6. package/computed-types/dist/computed-types.modern.js +2 -0
  7. package/computed-types/dist/computed-types.modern.js.map +1 -0
  8. package/computed-types/dist/computed-types.module.js +2 -0
  9. package/computed-types/dist/computed-types.module.js.map +1 -0
  10. package/computed-types/dist/computed-types.umd.js +2 -0
  11. package/computed-types/dist/computed-types.umd.js.map +1 -0
  12. package/computed-types/dist/index.d.ts +2 -0
  13. package/computed-types/dist/types.d.ts +2 -0
  14. package/computed-types/package.json +17 -0
  15. package/computed-types/src/__tests__/Form.tsx +54 -0
  16. package/computed-types/src/__tests__/__fixtures__/data.ts +72 -0
  17. package/computed-types/src/__tests__/__snapshots__/computed-types.ts.snap +65 -0
  18. package/computed-types/src/__tests__/computed-types.ts +20 -0
  19. package/computed-types/src/computed-types.ts +42 -0
  20. package/computed-types/src/index.ts +2 -0
  21. package/computed-types/src/types.ts +14 -0
  22. package/io-ts/src/__tests__/Form.tsx +65 -0
  23. package/io-ts/src/__tests__/__fixtures__/data.ts +129 -0
  24. package/io-ts/src/__tests__/__snapshots__/io-ts.ts.snap +89 -0
  25. package/io-ts/src/__tests__/io-ts.ts +32 -0
  26. package/joi/dist/joi.js +1 -1
  27. package/joi/dist/joi.js.map +1 -1
  28. package/joi/dist/joi.mjs +1 -1
  29. package/joi/dist/joi.modern.js +1 -1
  30. package/joi/dist/joi.modern.js.map +1 -1
  31. package/joi/dist/joi.module.js +1 -1
  32. package/joi/dist/joi.module.js.map +1 -1
  33. package/joi/dist/joi.umd.js +1 -1
  34. package/joi/dist/joi.umd.js.map +1 -1
  35. package/joi/src/__tests__/__fixtures__/data.ts +12 -3
  36. package/joi/src/__tests__/__snapshots__/joi.ts.snap +20 -10
  37. package/joi/src/joi.ts +6 -1
  38. package/nope/dist/index.d.ts +2 -0
  39. package/nope/dist/nope.d.ts +2 -0
  40. package/nope/dist/nope.js +2 -0
  41. package/nope/dist/nope.js.map +1 -0
  42. package/nope/dist/nope.mjs +2 -0
  43. package/nope/dist/nope.modern.js +2 -0
  44. package/nope/dist/nope.modern.js.map +1 -0
  45. package/nope/dist/nope.module.js +2 -0
  46. package/nope/dist/nope.module.js.map +1 -0
  47. package/nope/dist/nope.umd.js +2 -0
  48. package/nope/dist/nope.umd.js.map +1 -0
  49. package/nope/dist/types.d.ts +6 -0
  50. package/nope/package.json +18 -0
  51. package/nope/src/__tests__/Form.tsx +57 -0
  52. package/nope/src/__tests__/__fixtures__/data.ts +70 -0
  53. package/nope/src/__tests__/__snapshots__/nope.ts.snap +43 -0
  54. package/nope/src/__tests__/nope.ts +24 -0
  55. package/nope/src/index.ts +2 -0
  56. package/nope/src/nope.ts +40 -0
  57. package/nope/src/types.ts +19 -0
  58. package/package.json +51 -32
  59. package/yup/dist/yup.js +1 -1
  60. package/yup/dist/yup.js.map +1 -1
  61. package/yup/dist/yup.mjs +1 -1
  62. package/yup/dist/yup.modern.js +1 -1
  63. package/yup/dist/yup.modern.js.map +1 -1
  64. package/yup/dist/yup.module.js +1 -1
  65. package/yup/dist/yup.module.js.map +1 -1
  66. package/yup/dist/yup.umd.js +1 -1
  67. package/yup/dist/yup.umd.js.map +1 -1
  68. package/yup/src/__tests__/__fixtures__/data.ts +11 -4
  69. package/yup/src/__tests__/__snapshots__/yup.ts.snap +16 -6
  70. package/yup/src/yup.ts +6 -1
  71. package/zod/dist/zod.js +1 -1
  72. package/zod/dist/zod.js.map +1 -1
  73. package/zod/dist/zod.mjs +1 -1
  74. package/zod/dist/zod.modern.js +1 -1
  75. package/zod/dist/zod.modern.js.map +1 -1
  76. package/zod/dist/zod.module.js +1 -1
  77. package/zod/dist/zod.module.js.map +1 -1
  78. package/zod/dist/zod.umd.js +1 -1
  79. package/zod/dist/zod.umd.js.map +1 -1
  80. package/zod/src/__tests__/__fixtures__/data.ts +12 -3
  81. package/zod/src/__tests__/__snapshots__/zod.ts.snap +24 -8
  82. package/zod/src/zod.ts +6 -1
@@ -0,0 +1,57 @@
1
+ import React from 'react';
2
+ import { render, screen, act } from '@testing-library/react';
3
+ import user from '@testing-library/user-event';
4
+ import { useForm } from 'react-hook-form';
5
+ import Nope from 'nope-validator';
6
+ import { nopeResolver } from '..';
7
+
8
+ const schema = Nope.object().shape({
9
+ username: Nope.string().required(),
10
+ password: Nope.string().required(),
11
+ });
12
+
13
+ interface FormData {
14
+ unusedProperty: string;
15
+ username: string;
16
+ password: string;
17
+ }
18
+
19
+ interface Props {
20
+ onSubmit: (data: FormData) => void;
21
+ }
22
+
23
+ function TestComponent({ onSubmit }: Props) {
24
+ const {
25
+ register,
26
+ formState: { errors },
27
+ handleSubmit,
28
+ } = useForm<FormData>({
29
+ resolver: nopeResolver(schema), // Useful to check TypeScript regressions
30
+ });
31
+
32
+ return (
33
+ <form onSubmit={handleSubmit(onSubmit)}>
34
+ <input {...register('username')} />
35
+ {errors.username && <span role="alert">{errors.username.message}</span>}
36
+
37
+ <input {...register('password')} />
38
+ {errors.password && <span role="alert">{errors.password.message}</span>}
39
+
40
+ <button type="submit">submit</button>
41
+ </form>
42
+ );
43
+ }
44
+
45
+ test("form's validation with Yup and TypeScript's integration", async () => {
46
+ const handleSubmit = jest.fn();
47
+ render(<TestComponent onSubmit={handleSubmit} />);
48
+
49
+ expect(screen.queryAllByRole(/alert/i)).toHaveLength(0);
50
+
51
+ await act(async () => {
52
+ user.click(screen.getByText(/submit/i));
53
+ });
54
+
55
+ expect(screen.getAllByText(/This field is required/i)).toHaveLength(2);
56
+ expect(handleSubmit).not.toHaveBeenCalled();
57
+ });
@@ -0,0 +1,70 @@
1
+ import { Field, InternalFieldName } from 'react-hook-form';
2
+ import Nope from 'nope-validator';
3
+
4
+ export const schema = Nope.object().shape({
5
+ username: Nope.string().regex(/^\w+$/).min(2).max(30).required(),
6
+ password: Nope.string()
7
+ .regex(new RegExp('.*[A-Z].*'), 'One uppercase character')
8
+ .regex(new RegExp('.*[a-z].*'), 'One lowercase character')
9
+ .regex(new RegExp('.*\\d.*'), 'One number')
10
+ .regex(
11
+ new RegExp('.*[`~<>?,./!@#$%^&*()\\-_+="\'|{}\\[\\];:\\\\].*'),
12
+ 'One special character',
13
+ )
14
+ .min(8, 'Must be at least 8 characters in length')
15
+ .required('New Password is required'),
16
+ repeatPassword: Nope.string()
17
+ .oneOf([Nope.ref('password')], "Passwords don't match")
18
+ .required(),
19
+ accessToken: Nope.string(),
20
+ birthYear: Nope.number().min(1900).max(2013),
21
+ email: Nope.string().email(),
22
+ tags: Nope.array().of(Nope.string()).required(),
23
+ enabled: Nope.boolean(),
24
+ like: Nope.object().shape({
25
+ id: Nope.number().required(),
26
+ name: Nope.string().atLeast(4).required(),
27
+ }),
28
+ });
29
+
30
+ export const validData = {
31
+ username: 'Doe',
32
+ password: 'Password123_',
33
+ repeatPassword: 'Password123_',
34
+ birthYear: 2000,
35
+ email: 'john@doe.com',
36
+ tags: ['tag1', 'tag2'],
37
+ enabled: true,
38
+ accessToken: 'accessToken',
39
+ like: {
40
+ id: 1,
41
+ name: 'name',
42
+ },
43
+ };
44
+
45
+ export const invalidData = {
46
+ password: '___',
47
+ email: '',
48
+ birthYear: 'birthYear',
49
+ like: { id: 'z' },
50
+ tags: [1, 2, 3],
51
+ };
52
+
53
+ export const fields: Record<InternalFieldName, Field['_f']> = {
54
+ username: {
55
+ ref: { name: 'username' },
56
+ name: 'username',
57
+ },
58
+ password: {
59
+ ref: { name: 'password' },
60
+ name: 'password',
61
+ },
62
+ email: {
63
+ ref: { name: 'email' },
64
+ name: 'email',
65
+ },
66
+ birthday: {
67
+ ref: { name: 'birthday' },
68
+ name: 'birthday',
69
+ },
70
+ };
@@ -0,0 +1,43 @@
1
+ // Jest Snapshot v1, https://goo.gl/fbAQLP
2
+
3
+ exports[`nopeResolver should return a single error from nopeResolver when validation fails 1`] = `
4
+ Object {
5
+ "errors": Object {
6
+ "birthYear": Object {
7
+ "message": "The field is not a valid number",
8
+ "ref": undefined,
9
+ },
10
+ "like": Object {
11
+ "id": Object {
12
+ "message": "The field is not a valid number",
13
+ "ref": undefined,
14
+ },
15
+ "name": Object {
16
+ "message": "This field is required",
17
+ "ref": undefined,
18
+ },
19
+ },
20
+ "password": Object {
21
+ "message": "One uppercase character",
22
+ "ref": Object {
23
+ "name": "password",
24
+ },
25
+ },
26
+ "repeatPassword": Object {
27
+ "message": "This field is required",
28
+ "ref": undefined,
29
+ },
30
+ "tags": Object {
31
+ "message": "One or more elements are of invalid type",
32
+ "ref": undefined,
33
+ },
34
+ "username": Object {
35
+ "message": "This field is required",
36
+ "ref": Object {
37
+ "name": "username",
38
+ },
39
+ },
40
+ },
41
+ "values": Object {},
42
+ }
43
+ `;
@@ -0,0 +1,24 @@
1
+ /* eslint-disable no-console, @typescript-eslint/ban-ts-comment */
2
+ import { nopeResolver } from '..';
3
+ import { schema, validData, fields, invalidData } from './__fixtures__/data';
4
+
5
+ describe('nopeResolver', () => {
6
+ it('should return values from nopeResolver when validation pass', async () => {
7
+ const schemaSpy = jest.spyOn(schema, 'validate');
8
+
9
+ const result = await nopeResolver(schema)(validData, undefined, {
10
+ fields,
11
+ });
12
+
13
+ expect(schemaSpy).toHaveBeenCalledTimes(1);
14
+ expect(result).toEqual({ errors: {}, values: validData });
15
+ });
16
+
17
+ it('should return a single error from nopeResolver when validation fails', async () => {
18
+ const result = await nopeResolver(schema)(invalidData, undefined, {
19
+ fields,
20
+ });
21
+
22
+ expect(result).toMatchSnapshot();
23
+ });
24
+ });
@@ -0,0 +1,2 @@
1
+ export * from './nope';
2
+ export * from './types';
@@ -0,0 +1,40 @@
1
+ import type { FieldErrors } from 'react-hook-form';
2
+ import { toNestError } from '@hookform/resolvers';
3
+ import type { ShapeErrors } from 'nope-validator/lib/cjs/types';
4
+ import type { Resolver } from './types';
5
+
6
+ const parseErrors = (
7
+ errors: ShapeErrors,
8
+ parsedErrors: FieldErrors = {},
9
+ path = '',
10
+ ) => {
11
+ return Object.keys(errors).reduce((acc, key) => {
12
+ const _path = path ? `${path}.${key}` : key;
13
+ const error = errors[key];
14
+
15
+ if (typeof error === 'string') {
16
+ acc[_path] = {
17
+ message: error,
18
+ };
19
+ } else {
20
+ parseErrors(error, acc, _path);
21
+ }
22
+
23
+ return acc;
24
+ }, parsedErrors);
25
+ };
26
+
27
+ export const nopeResolver: Resolver = (
28
+ schema,
29
+ schemaOptions = {
30
+ abortEarly: false,
31
+ },
32
+ ) => (values, context, options) => {
33
+ const result = schema.validate(values, context, schemaOptions) as
34
+ | ShapeErrors
35
+ | undefined;
36
+
37
+ return result
38
+ ? { values: {}, errors: toNestError(parseErrors(result), options.fields) }
39
+ : { values, errors: {} };
40
+ };
@@ -0,0 +1,19 @@
1
+ import type {
2
+ FieldValues,
3
+ ResolverOptions,
4
+ ResolverResult,
5
+ UnpackNestedValue,
6
+ } from 'react-hook-form';
7
+ import type { NopeObject } from 'nope-validator/lib/cjs/NopeObject';
8
+
9
+ type ValidateOptions = Parameters<NopeObject['validate']>[2];
10
+ type Context = Parameters<NopeObject['validate']>[1];
11
+
12
+ export type Resolver = <T extends NopeObject>(
13
+ schema: T,
14
+ schemaOptions?: ValidateOptions,
15
+ ) => <TFieldValues extends FieldValues, TContext extends Context>(
16
+ values: UnpackNestedValue<TFieldValues>,
17
+ context: TContext | undefined,
18
+ options: ResolverOptions<TFieldValues>,
19
+ ) => ResolverResult<TFieldValues>;
package/package.json CHANGED
@@ -1,8 +1,8 @@
1
1
  {
2
2
  "name": "@hookform/resolvers",
3
3
  "amdName": "hookformResolvers",
4
- "version": "2.3.0",
5
- "description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator and etc.",
4
+ "version": "2.5.0",
5
+ "description": "React Hook Form validation resolvers: Yup, Joi, Superstruct, Zod, Vest, Class Validator, io-ts, Nope and computed-types",
6
6
  "main": "dist/resolvers.js",
7
7
  "module": "dist/resolvers.module.js",
8
8
  "umd:main": "dist/resolvers.umd.js",
@@ -57,6 +57,18 @@
57
57
  "import": "./io-ts/dist/io-ts.mjs",
58
58
  "require": "./io-ts/dist/io-ts.js"
59
59
  },
60
+ "./nope": {
61
+ "browser": "./nope/dist/nope.module.js",
62
+ "umd": "./nope/dist/nope.umd.js",
63
+ "import": "./nope/dist/nope.mjs",
64
+ "require": "./nope/dist/nope.js"
65
+ },
66
+ "./computed-types": {
67
+ "browser": "./computed-types/dist/computed-types.module.js",
68
+ "umd": "./computed-types/dist/computed-types.umd.js",
69
+ "import": "./computed-types/dist/computed-types.mjs",
70
+ "require": "./computed-types/dist/computed-types.js"
71
+ },
60
72
  "./package.json": "./package.json",
61
73
  "./": "./"
62
74
  },
@@ -82,13 +94,19 @@
82
94
  "class-validator/dist",
83
95
  "io-ts/package.json",
84
96
  "io-ts/src",
85
- "io-ts/dist"
97
+ "io-ts/dist",
98
+ "nope/package.json",
99
+ "nope/src",
100
+ "nope/dist",
101
+ "computed-types/package.json",
102
+ "computed-types/src",
103
+ "computed-types/dist"
86
104
  ],
87
105
  "publishConfig": {
88
106
  "access": "public"
89
107
  },
90
108
  "scripts": {
91
- "prepare": "run-s build:src build && check-export-map",
109
+ "prepare": "run-s build:src build && check-export-map && husky install",
92
110
  "build": "npm-run-all --parallel build:*",
93
111
  "build:src": "microbundle build",
94
112
  "build:zod": "microbundle --cwd zod --globals '@hookform/resolvers=hookformResolvers'",
@@ -98,6 +116,8 @@
98
116
  "build:io-ts": "microbundle --cwd io-ts --globals '@hookform/resolvers=hookformResolvers'",
99
117
  "build:vest": "microbundle --cwd vest --globals '@hookform/resolvers=hookformResolvers'",
100
118
  "build:class-validator": "microbundle --cwd class-validator --globals '@hookform/resolvers=hookformResolvers'",
119
+ "build:nope": "microbundle --cwd nope --globals '@hookform/resolvers=hookformResolvers'",
120
+ "build:computed-types": "microbundle --cwd computed-types --globals '@hookform/resolvers=hookformResolvers'",
101
121
  "postbuild": "node ./config/node-13-exports.js",
102
122
  "lint": "eslint . --ext .ts,.js --ignore-path .gitignore",
103
123
  "lint:types": "tsc",
@@ -118,7 +138,9 @@
118
138
  "zod",
119
139
  "vest",
120
140
  "class-validator",
121
- "io-ts"
141
+ "io-ts",
142
+ "nope",
143
+ "computed-types"
122
144
  ],
123
145
  "repository": {
124
146
  "type": "git",
@@ -131,50 +153,47 @@
131
153
  },
132
154
  "homepage": "https://react-hook-form.com",
133
155
  "devDependencies": {
134
- "@testing-library/jest-dom": "^5.11.9",
135
- "@testing-library/react": "^11.2.3",
136
- "@testing-library/user-event": "^12.6.3",
137
- "@types/jest": "^26.0.20",
138
- "@types/react": "^17.0.0",
139
- "@typescript-eslint/eslint-plugin": "^4.14.2",
140
- "@typescript-eslint/parser": "^4.14.2",
156
+ "@testing-library/jest-dom": "^5.12.0",
157
+ "@testing-library/react": "^11.2.6",
158
+ "@testing-library/user-event": "^13.1.8",
159
+ "@types/jest": "^26.0.23",
160
+ "@types/react": "^17.0.5",
161
+ "@typescript-eslint/eslint-plugin": "^4.22.1",
162
+ "@typescript-eslint/parser": "^4.22.1",
141
163
  "check-export-map": "^1.0.1",
142
164
  "class-transformer": "^0.4.0",
143
165
  "class-validator": "^0.13.1",
144
- "eslint": "^7.19.0",
145
- "eslint-config-prettier": "^7.2.0",
146
- "eslint-plugin-prettier": "^3.3.1",
147
- "fp-ts": "^2.7.0",
148
- "husky": "^4.3.8",
166
+ "computed-types": "^1.6.0",
167
+ "eslint": "^7.26.0",
168
+ "eslint-config-prettier": "^8.3.0",
169
+ "eslint-plugin-prettier": "^3.4.0",
170
+ "fp-ts": "^2.10.5",
171
+ "husky": "^6.0.0",
149
172
  "io-ts": "^2.0.0",
150
173
  "io-ts-types": "^0.5.16",
151
174
  "jest": "^26.6.3",
152
- "joi": "^17.3.0",
153
- "lint-staged": "^10.5.3",
175
+ "joi": "^17.4.0",
176
+ "lint-staged": "^11.0.0",
154
177
  "microbundle": "^0.13.0",
155
178
  "monocle-ts": "^2.3.9",
156
179
  "newtype-ts": "^0.3.4",
180
+ "nope-validator": "^1.0.0",
157
181
  "npm-run-all": "^4.1.5",
158
182
  "prettier": "^2.2.1",
159
- "react": "^17.0.1",
160
- "react-dom": "^17.0.1",
161
- "react-hook-form": "^7.0.0-alpha.2",
183
+ "react": "^17.0.2",
184
+ "react-dom": "^17.0.2",
185
+ "react-hook-form": "7.0.0",
162
186
  "reflect-metadata": "^0.1.13",
163
- "superstruct": "^0.14.0",
164
- "ts-jest": "^26.5.0",
165
- "typescript": "^4.1.3",
187
+ "superstruct": "^0.15.2",
188
+ "ts-jest": "^26.5.6",
189
+ "typescript": "^4.2.4",
166
190
  "vest": "^3.1.2",
167
- "yup": "^0.32.8",
168
- "zod": "^1.11.11"
191
+ "yup": "^0.32.9",
192
+ "zod": "^1.11.17"
169
193
  },
170
194
  "peerDependencies": {
171
195
  "react-hook-form": "^7.0.0"
172
196
  },
173
- "husky": {
174
- "hooks": {
175
- "pre-commit": "yarn lint:types && lint-staged"
176
- }
177
- },
178
197
  "lint-staged": {
179
198
  "*.{js,ts}": [
180
199
  "yarn lint --fix"
package/yup/dist/yup.js CHANGED
@@ -1,2 +1,2 @@
1
- var e=require("@hookform/resolvers"),r=require("react-hook-form");exports.yupResolver=function(t,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,u){try{return Promise.resolve(function(e,r){try{var u=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(t["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},o,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(t){return{values:{},errors:e.toNestError((o=t,n="all"===u.criteriaMode,o.inner.reduce(function(e,t){return e[t.path]||(e[t.path]={message:t.message,type:t.type}),n&&(e[t.path]=r.appendErrors(t.path,n,e,t.type,t.message)),e},{})),u.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};
1
+ var e=require("@hookform/resolvers"),r=require("react-hook-form");exports.yupResolver=function(t,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,c){try{return Promise.resolve(function(e,r){try{var c=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(t["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},o,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return r(e)}return c&&c.then?c.then(void 0,r):c}(0,function(t){return{values:{},errors:e.toNestError((o=t,n="all"===c.criteriaMode,o.inner.reduce(function(e,t){if(e[t.path]||(e[t.path]={message:t.message,type:t.type}),n){var o=e[t.path].types,s=o&&o[t.type];e[t.path]=r.appendErrors(t.path,n,e,t.type,s?[].concat(s,t.message):t.message)}return e},{})),c.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};
2
2
  //# sourceMappingURL=yup.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","result","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","appendErrors","fields"],"mappings":"sFAgCqC,SACnCA,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,uDAErBL,EAAcI,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAIb,EAAe,CAAEI,QAAAA,oBAFvCU,GAIN,MAAO,CACLX,OAAQW,EACRC,OAAQ,4EAEHC,GACP,MAAO,CACLb,OAAQ,GACRY,OAAQE,eAhDZC,EAiDuBF,EAhDvBG,EAgDmD,QAAzBd,EAAQe,aA9C3BF,EAAMG,MAAMC,OAAmC,SAACC,EAAUL,GAe/D,OAdKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,IACFI,EAASL,EAAMM,MAASG,eACtBT,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNR,EAAMO,UAIHF,GACN,KA+BGlB,EAAQuB,SAnDS,IACvBV,EACAC,KAqBmC"}
1
+ {"version":3,"file":"yup.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","result","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","types","messages","appendErrors","concat","fields"],"mappings":"sFAqCqC,SACnCA,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,uDAErBL,EAAcI,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAIb,EAAe,CAAEI,QAAAA,oBAFvCU,GAIN,MAAO,CACLX,OAAQW,EACRC,OAAQ,4EAEHC,GACP,MAAO,CACLb,OAAQ,GACRY,OAAQE,eArDZC,EAsDuBF,EArDvBG,EAqDmD,QAAzBd,EAAQe,aAnD3BF,EAAMG,MAAMC,OAAmC,SAACC,EAAUL,GAK/D,GAJKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,EAA0B,CAC5B,IAAMQ,EAAQJ,EAASL,EAAMM,MAAOG,MAC9BC,EAAWD,GAASA,EAAMT,EAAMQ,MAEtCH,EAASL,EAAMM,MAASK,eACtBX,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNE,EACK,GAAgBE,OAAOF,EAAsBV,EAAMO,SACpDP,EAAMO,SAId,OAAOF,GACN,KA+BGlB,EAAQ0B,SAxDS,IACvBb,EACAC,KA0BmC"}
package/yup/dist/yup.mjs CHANGED
@@ -1,2 +1,2 @@
1
- import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";var r=function(r,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,c){try{return Promise.resolve(function(e,t){try{var c=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(r["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},o,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return t(e)}return c&&c.then?c.then(void 0,t):c}(0,function(r){return{values:{},errors:e((o=r,n="all"===c.criteriaMode,o.inner.reduce(function(e,r){return e[r.path]||(e[r.path]={message:r.message,type:r.type}),n&&(e[r.path]=t(r.path,n,e,r.type,r.message)),e},{})),c.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};export{r as yupResolver};
1
+ import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";var r=function(r,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,c){try{return Promise.resolve(function(e,t){try{var c=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(r["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},o,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return t(e)}return c&&c.then?c.then(void 0,t):c}(0,function(r){return{values:{},errors:e((o=r,n="all"===c.criteriaMode,o.inner.reduce(function(e,r){if(e[r.path]||(e[r.path]={message:r.message,type:r.type}),n){var o=e[r.path].types,s=o&&o[r.type];e[r.path]=t(r.path,n,e,r.type,s?[].concat(s,r.message):r.message)}return e},{})),c.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};export{r as yupResolver};
2
2
  //# sourceMappingURL=yup.module.js.map
@@ -1,2 +1,2 @@
1
- import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";const o=(o,r={abortEarly:!1},s={})=>async(a,n,c)=>{try{return r.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),{values:await o["sync"===s.mode?"validateSync":"validate"](a,Object.assign({},r,{context:n})),errors:{}}}catch(o){return{values:{},errors:e((p=o,l="all"===c.criteriaMode,p.inner.reduce((e,o)=>(e[o.path]||(e[o.path]={message:o.message,type:o.type}),l&&(e[o.path]=t(o.path,l,e,o.type,o.message)),e),{})),c.fields)}}var p,l};export{o as yupResolver};
1
+ import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";const o=(o,r={abortEarly:!1},s={})=>async(a,n,c)=>{try{return r.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),{values:await o["sync"===s.mode?"validateSync":"validate"](a,Object.assign({},r,{context:n})),errors:{}}}catch(o){return{values:{},errors:e((p=o,i="all"===c.criteriaMode,p.inner.reduce((e,o)=>{if(e[o.path]||(e[o.path]={message:o.message,type:o.type}),i){const r=e[o.path].types,s=r&&r[o.type];e[o.path]=t(o.path,i,e,o.type,s?[].concat(s,o.message):o.message)}return e},{})),c.fields)}}var p,i};export{o as yupResolver};
2
2
  //# sourceMappingURL=yup.modern.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"yup.modern.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["yupResolver","schema","schemaOptions","abortEarly","resolverOptions","async","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","appendErrors","fields"],"mappings":"iGASA,MAuBaA,EAAwB,CACnCC,EACAC,EAAgB,CACdC,YAAY,GAEdC,EAAkB,KACfC,MAAOC,EAAQC,EAASC,KAC3B,IAYE,OAXIN,EAAcK,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iGAQG,CACLP,aALmBL,EACM,SAAzBG,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAId,EAAe,CAAEK,QAAAA,KAI3CU,OAAQ,IAEV,MAAOC,GACP,MAAO,CACLZ,OAAQ,GACRW,OAAQE,GAhDZC,EAiDuBF,EAhDvBG,EAgDmD,QAAzBb,EAAQc,aA9C3BF,EAAMG,MAAMC,OAAmC,CAACC,EAAUL,KAC1DK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,IACFI,EAASL,EAAMM,MAASG,EACtBT,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNR,EAAMO,UAIHF,GACN,KA+BGjB,EAAQsB,SAnDS,IACvBV,EACAC"}
1
+ {"version":3,"file":"yup.modern.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["yupResolver","schema","schemaOptions","abortEarly","resolverOptions","async","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","types","messages","appendErrors","concat","fields"],"mappings":"iGASA,MA4BaA,EAAwB,CACnCC,EACAC,EAAgB,CACdC,YAAY,GAEdC,EAAkB,KACfC,MAAOC,EAAQC,EAASC,KAC3B,IAYE,OAXIN,EAAcK,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iGAQG,CACLP,aALmBL,EACM,SAAzBG,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAId,EAAe,CAAEK,QAAAA,KAI3CU,OAAQ,IAEV,MAAOC,GACP,MAAO,CACLZ,OAAQ,GACRW,OAAQE,GArDZC,EAsDuBF,EArDvBG,EAqDmD,QAAzBb,EAAQc,aAnD3BF,EAAMG,MAAMC,OAAmC,CAACC,EAAUL,KAK/D,GAJKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,EAA0B,CAC5B,MAAMQ,EAAQJ,EAASL,EAAMM,MAAOG,MAC9BC,EAAWD,GAASA,EAAMT,EAAMQ,MAEtCH,EAASL,EAAMM,MAASK,EACtBX,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNE,EACK,GAAgBE,OAAOF,EAAsBV,EAAMO,SACpDP,EAAMO,SAId,OAAOF,GACN,KA+BGjB,EAAQyB,SAxDS,IACvBb,EACAC"}
@@ -1,2 +1,2 @@
1
- import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";var r=function(r,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,c){try{return Promise.resolve(function(e,t){try{var c=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(r["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},o,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return t(e)}return c&&c.then?c.then(void 0,t):c}(0,function(r){return{values:{},errors:e((o=r,n="all"===c.criteriaMode,o.inner.reduce(function(e,r){return e[r.path]||(e[r.path]={message:r.message,type:r.type}),n&&(e[r.path]=t(r.path,n,e,r.type,r.message)),e},{})),c.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};export{r as yupResolver};
1
+ import{toNestError as e}from"@hookform/resolvers";import{appendErrors as t}from"react-hook-form";var r=function(r,o,n){return void 0===o&&(o={abortEarly:!1}),void 0===n&&(n={}),function(s,a,c){try{return Promise.resolve(function(e,t){try{var c=(o.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(r["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},o,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return t(e)}return c&&c.then?c.then(void 0,t):c}(0,function(r){return{values:{},errors:e((o=r,n="all"===c.criteriaMode,o.inner.reduce(function(e,r){if(e[r.path]||(e[r.path]={message:r.message,type:r.type}),n){var o=e[r.path].types,s=o&&o[r.type];e[r.path]=t(r.path,n,e,r.type,s?[].concat(s,r.message):r.message)}return e},{})),c.fields)};var o,n}))}catch(e){return Promise.reject(e)}}};export{r as yupResolver};
2
2
  //# sourceMappingURL=yup.module.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"yup.module.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["yupResolver","schema","schemaOptions","resolverOptions","abortEarly","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","result","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","appendErrors","fields"],"mappings":"iGASA,IAuBaA,EAAwB,SACnCC,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,uDAErBL,EAAcI,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAIb,EAAe,CAAEI,QAAAA,oBAFvCU,GAIN,MAAO,CACLX,OAAQW,EACRC,OAAQ,4EAEHC,GACP,MAAO,CACLb,OAAQ,GACRY,OAAQE,GAhDZC,EAiDuBF,EAhDvBG,EAgDmD,QAAzBd,EAAQe,aA9C3BF,EAAMG,MAAMC,OAAmC,SAACC,EAAUL,GAe/D,OAdKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,IACFI,EAASL,EAAMM,MAASG,EACtBT,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNR,EAAMO,UAIHF,GACN,KA+BGlB,EAAQuB,SAnDS,IACvBV,EACAC,KAqBmC"}
1
+ {"version":3,"file":"yup.module.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["yupResolver","schema","schemaOptions","resolverOptions","abortEarly","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","result","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","types","messages","appendErrors","concat","fields"],"mappings":"iGASA,IA4BaA,EAAwB,SACnCC,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,uDAErBL,EAAcI,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAIb,EAAe,CAAEI,QAAAA,oBAFvCU,GAIN,MAAO,CACLX,OAAQW,EACRC,OAAQ,4EAEHC,GACP,MAAO,CACLb,OAAQ,GACRY,OAAQE,GArDZC,EAsDuBF,EArDvBG,EAqDmD,QAAzBd,EAAQe,aAnD3BF,EAAMG,MAAMC,OAAmC,SAACC,EAAUL,GAK/D,GAJKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,EAA0B,CAC5B,IAAMQ,EAAQJ,EAASL,EAAMM,MAAOG,MAC9BC,EAAWD,GAASA,EAAMT,EAAMQ,MAEtCH,EAASL,EAAMM,MAASK,EACtBX,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNE,EACK,GAAgBE,OAAOF,EAAsBV,EAAMO,SACpDP,EAAMO,SAId,OAAOF,GACN,KA+BGlB,EAAQ0B,SAxDS,IACvBb,EACAC,KA0BmC"}
@@ -1,2 +1,2 @@
1
- !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@hookform/resolvers"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","react-hook-form"],o):o((e||self).hookformResolversYup={},e.hookformResolvers,e.reactHookForm)}(this,function(e,o,r){e.yupResolver=function(e,t,n){return void 0===t&&(t={abortEarly:!1}),void 0===n&&(n={}),function(s,i,u){try{return Promise.resolve(function(o,r){try{var u=(t.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(e["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},t,{context:i}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return r(e)}return u&&u.then?u.then(void 0,r):u}(0,function(e){return{values:{},errors:o.toNestError((t=e,n="all"===u.criteriaMode,t.inner.reduce(function(e,o){return e[o.path]||(e[o.path]={message:o.message,type:o.type}),n&&(e[o.path]=r.appendErrors(o.path,n,e,o.type,o.message)),e},{})),u.fields)};var t,n}))}catch(e){return Promise.reject(e)}}}});
1
+ !function(e,o){"object"==typeof exports&&"undefined"!=typeof module?o(exports,require("@hookform/resolvers"),require("react-hook-form")):"function"==typeof define&&define.amd?define(["exports","@hookform/resolvers","react-hook-form"],o):o((e||self).hookformResolversYup={},e.hookformResolvers,e.reactHookForm)}(this,function(e,o,r){e.yupResolver=function(e,t,n){return void 0===t&&(t={abortEarly:!1}),void 0===n&&(n={}),function(s,a,i){try{return Promise.resolve(function(o,r){try{var i=(t.context&&"development"===process.env.NODE_ENV&&console.warn("You should not used the yup options context. Please, use the 'useForm' context object instead"),Promise.resolve(e["sync"===n.mode?"validateSync":"validate"](s,Object.assign({},t,{context:a}))).then(function(e){return{values:e,errors:{}}}))}catch(e){return r(e)}return i&&i.then?i.then(void 0,r):i}(0,function(e){return{values:{},errors:o.toNestError((t=e,n="all"===i.criteriaMode,t.inner.reduce(function(e,o){if(e[o.path]||(e[o.path]={message:o.message,type:o.type}),n){var t=e[o.path].types,s=t&&t[o.type];e[o.path]=r.appendErrors(o.path,n,e,o.type,s?[].concat(s,o.message):o.message)}return e},{})),i.fields)};var t,n}))}catch(e){return Promise.reject(e)}}}});
2
2
  //# sourceMappingURL=yup.umd.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"yup.umd.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","result","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","appendErrors","fields"],"mappings":"sYAgCqC,SACnCA,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,uDAErBL,EAAcI,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAIb,EAAe,CAAEI,QAAAA,oBAFvCU,GAIN,MAAO,CACLX,OAAQW,EACRC,OAAQ,4EAEHC,GACP,MAAO,CACLb,OAAQ,GACRY,OAAQE,eAhDZC,EAiDuBF,EAhDvBG,EAgDmD,QAAzBd,EAAQe,aA9C3BF,EAAMG,MAAMC,OAAmC,SAACC,EAAUL,GAe/D,OAdKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,IACFI,EAASL,EAAMM,MAASG,eACtBT,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNR,EAAMO,UAIHF,GACN,KA+BGlB,EAAQuB,SAnDS,IACvBV,EACAC,KAqBmC"}
1
+ {"version":3,"file":"yup.umd.js","sources":["../src/yup.ts"],"sourcesContent":["import Yup from 'yup';\nimport { toNestError } from '@hookform/resolvers';\nimport { appendErrors, FieldError } from 'react-hook-form';\nimport { Resolver } from './types';\n\n/**\n * Why `path!` ? because it could be `undefined` in some case\n * https://github.com/jquense/yup#validationerrorerrors-string--arraystring-value-any-path-string\n */\nconst parseErrorSchema = (\n error: Yup.ValidationError,\n validateAllFieldCriteria: boolean,\n) => {\n return error.inner.reduce<Record<string, FieldError>>((previous, error) => {\n if (!previous[error.path!]) {\n previous[error.path!] = { message: error.message, type: error.type! };\n }\n\n if (validateAllFieldCriteria) {\n const types = previous[error.path!].types;\n const messages = types && types[error.type!];\n\n previous[error.path!] = appendErrors(\n error.path!,\n validateAllFieldCriteria,\n previous,\n error.type!,\n messages\n ? ([] as string[]).concat(messages as string[], error.message)\n : error.message,\n ) as FieldError;\n }\n\n return previous;\n }, {});\n};\n\nexport const yupResolver: Resolver = (\n schema,\n schemaOptions = {\n abortEarly: false,\n },\n resolverOptions = {},\n) => async (values, context, options) => {\n try {\n if (schemaOptions.context && process.env.NODE_ENV === 'development') {\n // eslint-disable-next-line no-console\n console.warn(\n \"You should not used the yup options context. Please, use the 'useForm' context object instead\",\n );\n }\n\n const result = await schema[\n resolverOptions.mode === 'sync' ? 'validateSync' : 'validate'\n ](values, Object.assign({}, schemaOptions, { context }));\n\n return {\n values: result,\n errors: {},\n };\n } catch (e) {\n return {\n values: {},\n errors: toNestError(\n parseErrorSchema(e, options.criteriaMode === 'all'),\n options.fields,\n ),\n };\n }\n};\n"],"names":["schema","schemaOptions","resolverOptions","abortEarly","values","context","options","process","env","NODE_ENV","console","warn","mode","Object","assign","result","errors","e","toNestError","error","validateAllFieldCriteria","criteriaMode","inner","reduce","previous","path","message","type","types","messages","appendErrors","concat","fields"],"mappings":"sYAqCqC,SACnCA,EACAC,EAGAC,mBAHAD,IAAAA,EAAgB,CACdE,YAAY,aAEdD,IAAAA,EAAkB,aACRE,EAAQC,EAASC,uDAErBL,EAAcI,SAAoC,gBAAzBE,QAAQC,IAAIC,UAEvCC,QAAQC,KACN,iHAIiBX,EACM,SAAzBE,EAAgBU,KAAkB,eAAiB,YACnDR,EAAQS,OAAOC,OAAO,GAAIb,EAAe,CAAEI,QAAAA,oBAFvCU,GAIN,MAAO,CACLX,OAAQW,EACRC,OAAQ,4EAEHC,GACP,MAAO,CACLb,OAAQ,GACRY,OAAQE,eArDZC,EAsDuBF,EArDvBG,EAqDmD,QAAzBd,EAAQe,aAnD3BF,EAAMG,MAAMC,OAAmC,SAACC,EAAUL,GAK/D,GAJKK,EAASL,EAAMM,QAClBD,EAASL,EAAMM,MAAS,CAAEC,QAASP,EAAMO,QAASC,KAAMR,EAAMQ,OAG5DP,EAA0B,CAC5B,IAAMQ,EAAQJ,EAASL,EAAMM,MAAOG,MAC9BC,EAAWD,GAASA,EAAMT,EAAMQ,MAEtCH,EAASL,EAAMM,MAASK,eACtBX,EAAMM,KACNL,EACAI,EACAL,EAAMQ,KACNE,EACK,GAAgBE,OAAOF,EAAsBV,EAAMO,SACpDP,EAAMO,SAId,OAAOF,GACN,KA+BGlB,EAAQ0B,SAxDS,IACvBb,EACAC,KA0BmC"}
@@ -5,8 +5,15 @@ export const schema = yup.object({
5
5
  username: yup.string().matches(/^\w+$/).min(3).max(30).required(),
6
6
  password: yup
7
7
  .string()
8
- .matches(/^[a-zA-Z0-9]{3,30}/)
9
- .required(),
8
+ .matches(new RegExp('.*[A-Z].*'), 'One uppercase character')
9
+ .matches(new RegExp('.*[a-z].*'), 'One lowercase character')
10
+ .matches(new RegExp('.*\\d.*'), 'One number')
11
+ .matches(
12
+ new RegExp('.*[`~<>?,./!@#$%^&*()\\-_+="\'|{}\\[\\];:\\\\].*'),
13
+ 'One special character',
14
+ )
15
+ .min(8, 'Must be at least 8 characters in length')
16
+ .required('New Password is required'),
10
17
  repeatPassword: yup.ref('password'),
11
18
  accessToken: yup.string(),
12
19
  birthYear: yup.number().min(1900).max(2013),
@@ -23,8 +30,8 @@ export const schema = yup.object({
23
30
 
24
31
  export const validData: yup.InferType<typeof schema> = {
25
32
  username: 'Doe',
26
- password: 'Password123',
27
- repeatPassword: 'Password123',
33
+ password: 'Password123_',
34
+ repeatPassword: 'Password123_',
28
35
  birthYear: 2000,
29
36
  email: 'john@doe.com',
30
37
  tags: ['tag1', 'tag2'],
@@ -23,7 +23,7 @@ Object {
23
23
  },
24
24
  ],
25
25
  "password": Object {
26
- "message": "password must match the following: \\"/^[a-zA-Z0-9]{3,30}/\\"",
26
+ "message": "One uppercase character",
27
27
  "ref": Object {
28
28
  "name": "password",
29
29
  },
@@ -64,7 +64,7 @@ Object {
64
64
  },
65
65
  ],
66
66
  "password": Object {
67
- "message": "password must match the following: \\"/^[a-zA-Z0-9]{3,30}/\\"",
67
+ "message": "One uppercase character",
68
68
  "ref": Object {
69
69
  "name": "password",
70
70
  },
@@ -114,13 +114,18 @@ Object {
114
114
  },
115
115
  ],
116
116
  "password": Object {
117
- "message": "password must match the following: \\"/^[a-zA-Z0-9]{3,30}/\\"",
117
+ "message": "One uppercase character",
118
118
  "ref": Object {
119
119
  "name": "password",
120
120
  },
121
121
  "type": "matches",
122
122
  "types": Object {
123
- "matches": "password must match the following: \\"/^[a-zA-Z0-9]{3,30}/\\"",
123
+ "matches": Array [
124
+ "One uppercase character",
125
+ "One lowercase character",
126
+ "One number",
127
+ ],
128
+ "min": "Must be at least 8 characters in length",
124
129
  },
125
130
  },
126
131
  "username": Object {
@@ -170,13 +175,18 @@ Object {
170
175
  },
171
176
  ],
172
177
  "password": Object {
173
- "message": "password must match the following: \\"/^[a-zA-Z0-9]{3,30}/\\"",
178
+ "message": "One uppercase character",
174
179
  "ref": Object {
175
180
  "name": "password",
176
181
  },
177
182
  "type": "matches",
178
183
  "types": Object {
179
- "matches": "password must match the following: \\"/^[a-zA-Z0-9]{3,30}/\\"",
184
+ "matches": Array [
185
+ "One uppercase character",
186
+ "One lowercase character",
187
+ "One number",
188
+ ],
189
+ "min": "Must be at least 8 characters in length",
180
190
  },
181
191
  },
182
192
  "username": Object {